mirror of
https://github.com/zadam/trilium.git
synced 2026-05-06 08:27:05 +02:00
Compare commits
1438 Commits
autocomple
...
renovate/w
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9d240c8afe | ||
|
|
ca52fabb8a | ||
|
|
cbeb539c69 | ||
|
|
a988543487 | ||
|
|
d625565830 | ||
|
|
ef7facc3f0 | ||
|
|
b20d2436fa | ||
|
|
516a177bfb | ||
|
|
26efc3a8ff | ||
|
|
91e989719b | ||
|
|
390877931b | ||
|
|
f794a34132 | ||
|
|
67f5fc3dbc | ||
|
|
753475ee46 | ||
|
|
90e4e73316 | ||
|
|
b5a4956188 | ||
|
|
f48509ea2f | ||
|
|
1d0bc138fd | ||
|
|
326c0234ff | ||
|
|
bbbacf7f78 | ||
|
|
fd428a81e0 | ||
|
|
ba0e9e2eaa | ||
|
|
286f412906 | ||
|
|
4708d55a99 | ||
|
|
5952d13498 | ||
|
|
6d39bd91d9 | ||
|
|
b97fd784ea | ||
|
|
e7bbdf8cc1 | ||
|
|
fe334ca8eb | ||
|
|
9e37a803f7 | ||
|
|
c4d832eebc | ||
|
|
5921d1f1a6 | ||
|
|
b04945e793 | ||
|
|
2c744122ca | ||
|
|
adc648d277 | ||
|
|
a403aca054 | ||
|
|
e7f85bb447 | ||
|
|
e6e6c1feff | ||
|
|
415d9364de | ||
|
|
8a2b649714 | ||
|
|
9c655baab9 | ||
|
|
ae6f5fad3b | ||
|
|
f9baac34cc | ||
|
|
9d1f831737 | ||
|
|
3839dad55d | ||
|
|
900f308349 | ||
|
|
4ae3a00464 | ||
|
|
bc21fd560f | ||
|
|
ab1d1f97c8 | ||
|
|
9a85d7ec26 | ||
|
|
f702930731 | ||
|
|
f449fffaf5 | ||
|
|
78777e69fc | ||
|
|
2d7df2d079 | ||
|
|
fbbdb6e6e6 | ||
|
|
797b5ffd80 | ||
|
|
04954a46d0 | ||
|
|
fafa080cfc | ||
|
|
62e30d76fb | ||
|
|
ca78285fea | ||
|
|
7a47928b82 | ||
|
|
63e2a33543 | ||
|
|
caf53877e3 | ||
|
|
e9b1b2de21 | ||
|
|
9d8d7bd496 | ||
|
|
4579e4d31b | ||
|
|
8d41ba85a8 | ||
|
|
4e55b29041 | ||
|
|
ac1bcefe80 | ||
|
|
1d8a8107af | ||
|
|
36270397c2 | ||
|
|
b349922add | ||
|
|
dbea88fa56 | ||
|
|
b2bcccb4c7 | ||
|
|
9d60bb804d | ||
|
|
189867ca03 | ||
|
|
23cb66bba9 | ||
|
|
10a2e21636 | ||
|
|
2fa0a4b35c | ||
|
|
8d20fec5b8 | ||
|
|
1d25d79a3f | ||
|
|
c61c6ae64c | ||
|
|
fb3c487c0d | ||
|
|
087fc5f2c4 | ||
|
|
e01d835709 | ||
|
|
662d6fa91c | ||
|
|
03a4e1d4c1 | ||
|
|
9d953ea700 | ||
|
|
da96d2bc88 | ||
|
|
dabbbbb874 | ||
|
|
ffe60580db | ||
|
|
a2cd75c2c4 | ||
|
|
f4cf8829f7 | ||
|
|
fb5520a3c5 | ||
|
|
bd30e9efc1 | ||
|
|
f9310c5cde | ||
|
|
01c57fc8db | ||
|
|
f22eaee4e2 | ||
|
|
2742df7cd1 | ||
|
|
c031a99fc0 | ||
|
|
83d08d890d | ||
|
|
e2c79ff047 | ||
|
|
e624c204ff | ||
|
|
62a8fb2228 | ||
|
|
7473d50711 | ||
|
|
41a90f1904 | ||
|
|
ae6803d711 | ||
|
|
81dfc59846 | ||
|
|
d1528a2f3a | ||
|
|
36f635b7d5 | ||
|
|
6278a376b7 | ||
|
|
20fca6c0df | ||
|
|
1ab04cf951 | ||
|
|
3ece5d6213 | ||
|
|
65aba291ca | ||
|
|
b3e877f5dd | ||
|
|
066be7fa33 | ||
|
|
6390f59fcf | ||
|
|
81ea86100f | ||
|
|
d086c8664b | ||
|
|
03d6c81659 | ||
|
|
270f135632 | ||
|
|
6436e56448 | ||
|
|
315a97701b | ||
|
|
927c359716 | ||
|
|
fc5252e6b8 | ||
|
|
69e757459f | ||
|
|
62189cfa04 | ||
|
|
4b35881889 | ||
|
|
1c508b830e | ||
|
|
e5f97b6fdd | ||
|
|
0bdebca2b6 | ||
|
|
7dfdc7f31a | ||
|
|
ec7b9e08e3 | ||
|
|
a915c60c38 | ||
|
|
676a988433 | ||
|
|
15951886bd | ||
|
|
8aaa4d7bde | ||
|
|
a439e7c29b | ||
|
|
85bd4790ac | ||
|
|
4876d4b8c6 | ||
|
|
81a54d8398 | ||
|
|
8e91a9eb0e | ||
|
|
2a7309477c | ||
|
|
837cb37642 | ||
|
|
c69e3b7e14 | ||
|
|
7c3bb8c589 | ||
|
|
2c6c7cb037 | ||
|
|
8446e98b21 | ||
|
|
96ddb79d06 | ||
|
|
4244b66cea | ||
|
|
15c121f950 | ||
|
|
683814c9d2 | ||
|
|
b01feed4a2 | ||
|
|
3ce2af9abe | ||
|
|
7219fc875d | ||
|
|
131e10f4fe | ||
|
|
8cc5e0282e | ||
|
|
426d5daf73 | ||
|
|
480da09bcc | ||
|
|
ae004c4334 | ||
|
|
4dcbd36b2d | ||
|
|
5539c901fe | ||
|
|
84fff30723 | ||
|
|
bdf4e40577 | ||
|
|
79d639108b | ||
|
|
5b957dd111 | ||
|
|
c0b1ff31e5 | ||
|
|
cc010e1568 | ||
|
|
d240fb32bb | ||
|
|
374eeaeb08 | ||
|
|
1674bf0a87 | ||
|
|
a617b59765 | ||
|
|
e5daa75cb4 | ||
|
|
a9e7cd7bfe | ||
|
|
84d46c0a29 | ||
|
|
036d09f99e | ||
|
|
6c2ce8f39c | ||
|
|
77b89c5a01 | ||
|
|
65d3224c1a | ||
|
|
7d6fd54562 | ||
|
|
1a07dff373 | ||
|
|
e99cf74988 | ||
|
|
1acbf5ba45 | ||
|
|
64bc1271e1 | ||
|
|
06f7818ee3 | ||
|
|
a0548e1627 | ||
|
|
2639c5a225 | ||
|
|
bfc22864f6 | ||
|
|
69763c8b14 | ||
|
|
75b4877c87 | ||
|
|
9ff466c9f5 | ||
|
|
5f32d83c79 | ||
|
|
eb3adfa733 | ||
|
|
80aac52066 | ||
|
|
0335ece20b | ||
|
|
e2d6fdb09a | ||
|
|
79ea95cb39 | ||
|
|
84bc385bab | ||
|
|
1af2a07a57 | ||
|
|
98b92b7220 | ||
|
|
9b94d232a8 | ||
|
|
fef8b6f58e | ||
|
|
7bb15029cf | ||
|
|
c328b858a4 | ||
|
|
c2d5ba8e52 | ||
|
|
aa7615e72e | ||
|
|
e0c951e758 | ||
|
|
9b1b0c5574 | ||
|
|
1b4400db03 | ||
|
|
9a3d160c34 | ||
|
|
8457c22be3 | ||
|
|
fb5f89108f | ||
|
|
b6144f3d09 | ||
|
|
5fe6611a91 | ||
|
|
8760d683a3 | ||
|
|
07a22722ae | ||
|
|
9565c398f8 | ||
|
|
d22b0079dc | ||
|
|
dee9959d5b | ||
|
|
3f39e6f7f1 | ||
|
|
f03e527cb0 | ||
|
|
66819cb73f | ||
|
|
9f4c3ed35a | ||
|
|
e33446c219 | ||
|
|
daf5740610 | ||
|
|
9464e2aff5 | ||
|
|
5ef74d5639 | ||
|
|
822e7ffbab | ||
|
|
11b0bec47d | ||
|
|
0c051327cf | ||
|
|
e943891e2f | ||
|
|
438442345e | ||
|
|
d2c51d5175 | ||
|
|
12e07dbfcd | ||
|
|
dbe37730c3 | ||
|
|
0dfbfaa61c | ||
|
|
f1d557645c | ||
|
|
08e3a4aefc | ||
|
|
ff215bd228 | ||
|
|
dc57d6131a | ||
|
|
3417f82e27 | ||
|
|
1ec270dba2 | ||
|
|
6d2496599f | ||
|
|
18d69f94d2 | ||
|
|
b84e50065c | ||
|
|
81c266f69b | ||
|
|
e9d8aa82f4 | ||
|
|
da76d4c50e | ||
|
|
ec7f6a9325 | ||
|
|
28e33e3c58 | ||
|
|
c6ee5fabee | ||
|
|
1048ecb7c0 | ||
|
|
b1af1510f4 | ||
|
|
944d0542b6 | ||
|
|
cee2338c1b | ||
|
|
93db35518a | ||
|
|
63dcdc4e83 | ||
|
|
5a073398ed | ||
|
|
6166a8df43 | ||
|
|
57c3f2df17 | ||
|
|
244d0f5568 | ||
|
|
eb426ca3a7 | ||
|
|
d17634aaa8 | ||
|
|
78efebaeea | ||
|
|
4357901c24 | ||
|
|
8b8a955782 | ||
|
|
5153306a68 | ||
|
|
fc2d171fcf | ||
|
|
ab10a19932 | ||
|
|
3f9b26d42c | ||
|
|
bf9ee98406 | ||
|
|
3dc93fde37 | ||
|
|
8ec6125ec4 | ||
|
|
999bfbc118 | ||
|
|
889e44363a | ||
|
|
53413be08c | ||
|
|
28b1eb71ba | ||
|
|
4bc1d93b75 | ||
|
|
f64b029009 | ||
|
|
d65d7dba3f | ||
|
|
12a83510ed | ||
|
|
b2f02962fc | ||
|
|
262c89d252 | ||
|
|
7f75ab0638 | ||
|
|
30a82f3cfc | ||
|
|
011cce05af | ||
|
|
735712123c | ||
|
|
603b232d1f | ||
|
|
ce836bccc2 | ||
|
|
d8db862c22 | ||
|
|
d2836ef84c | ||
|
|
09d1c85bd3 | ||
|
|
e88cb60711 | ||
|
|
6bc3176251 | ||
|
|
c888826192 | ||
|
|
cd6f63a908 | ||
|
|
c36264203f | ||
|
|
1044776218 | ||
|
|
093e671fb5 | ||
|
|
0e76f412ec | ||
|
|
1154a1f7bf | ||
|
|
062d0863a1 | ||
|
|
8b202b6760 | ||
|
|
2fc907e756 | ||
|
|
5218373f3e | ||
|
|
6221f17beb | ||
|
|
f96f64bd84 | ||
|
|
13cdba199a | ||
|
|
4aa4d4880d | ||
|
|
51f1559473 | ||
|
|
ff9f0ad676 | ||
|
|
7e3683b8c2 | ||
|
|
0df186ef7d | ||
|
|
ff3b6c4011 | ||
|
|
0b5332fbb3 | ||
|
|
f285f7e14f | ||
|
|
794ad9410b | ||
|
|
60f3ddd354 | ||
|
|
20235509ef | ||
|
|
0ece1270c7 | ||
|
|
a32eeb27e3 | ||
|
|
e50ef8552b | ||
|
|
c34df3a17a | ||
|
|
48e90396bd | ||
|
|
d147bbe63d | ||
|
|
a82d9dad1b | ||
|
|
5ad0cb2b4b | ||
|
|
a0e9082364 | ||
|
|
1442041cda | ||
|
|
4b9d253745 | ||
|
|
3c0d5b7614 | ||
|
|
f0293b7f07 | ||
|
|
2bf2d977ad | ||
|
|
7e1090c59d | ||
|
|
a4c419de6f | ||
|
|
263479adee | ||
|
|
c0c0cea376 | ||
|
|
1bf36574e2 | ||
|
|
3ed6297011 | ||
|
|
3bd98d6a1b | ||
|
|
ecc872828c | ||
|
|
9c5d6e0a19 | ||
|
|
98d718031b | ||
|
|
9bd78c5f83 | ||
|
|
598317ea6e | ||
|
|
99878a1d48 | ||
|
|
264021360a | ||
|
|
ae4dc53647 | ||
|
|
6dd51f66ab | ||
|
|
61262e899b | ||
|
|
0ebec2ce5d | ||
|
|
6225f92a7d | ||
|
|
6c9ffe1d80 | ||
|
|
9116cbcba4 | ||
|
|
d0e61e39d0 | ||
|
|
c691a9c6e6 | ||
|
|
94e70c0318 | ||
|
|
edb2ec2a6f | ||
|
|
f68a481edc | ||
|
|
3a1f0b2be1 | ||
|
|
bf5d6c4e01 | ||
|
|
ba13f86f5f | ||
|
|
e7c30927f7 | ||
|
|
634b2b3a84 | ||
|
|
83cb437133 | ||
|
|
37e8514400 | ||
|
|
341a5310e1 | ||
|
|
9e4a5c892e | ||
|
|
307536b70f | ||
|
|
f12d73a5c7 | ||
|
|
b20e2459c3 | ||
|
|
692a31772d | ||
|
|
6a05288be4 | ||
|
|
fc82b9374e | ||
|
|
457bba9337 | ||
|
|
249b08f1ce | ||
|
|
54a6e3d9a1 | ||
|
|
f7a36fc997 | ||
|
|
1952b44141 | ||
|
|
cd84e6ba08 | ||
|
|
454c18ff0e | ||
|
|
4d4e63998f | ||
|
|
2db1e2d750 | ||
|
|
cb03f3cec5 | ||
|
|
b2ec9a2f47 | ||
|
|
71b3ee143f | ||
|
|
22eb2697d5 | ||
|
|
59994a5877 | ||
|
|
c35bc6fbd2 | ||
|
|
2d6c2b2cd0 | ||
|
|
6b6573bf02 | ||
|
|
278da994ce | ||
|
|
ab00772559 | ||
|
|
49e432fb66 | ||
|
|
6f73ea5847 | ||
|
|
743db3a9cd | ||
|
|
b899a0b5f8 | ||
|
|
c6ea68c012 | ||
|
|
9fc750533c | ||
|
|
7d52c62155 | ||
|
|
27801a859a | ||
|
|
25a28abb2d | ||
|
|
591a9a6963 | ||
|
|
f2815de17e | ||
|
|
b61b5100f0 | ||
|
|
51f06f064e | ||
|
|
27ed4165dc | ||
|
|
24167c0691 | ||
|
|
203c725e0c | ||
|
|
9326751923 | ||
|
|
9ba1eeaf20 | ||
|
|
ae676f38d3 | ||
|
|
1765917393 | ||
|
|
02336f4e53 | ||
|
|
3ce508c5ee | ||
|
|
266f542028 | ||
|
|
0f605ba994 | ||
|
|
d4333400c4 | ||
|
|
7180569357 | ||
|
|
b88eaaeeec | ||
|
|
b9e8cd5697 | ||
|
|
92d011503d | ||
|
|
a62a7e351e | ||
|
|
19e07bc6fd | ||
|
|
f9b0a88a4e | ||
|
|
00b85bb7bd | ||
|
|
17fb3f576d | ||
|
|
49878d64aa | ||
|
|
368dd1adc4 | ||
|
|
2e8f6a495b | ||
|
|
2a23b8a868 | ||
|
|
8e56585575 | ||
|
|
80f40a439c | ||
|
|
9d49324557 | ||
|
|
85ebe59a3b | ||
|
|
692d33bedf | ||
|
|
cd0763e807 | ||
|
|
93920bdfb4 | ||
|
|
09fdcb3839 | ||
|
|
6ff7219300 | ||
|
|
7e246f599d | ||
|
|
f422155dee | ||
|
|
05d4d3a1a2 | ||
|
|
d716fec524 | ||
|
|
66347e4bad | ||
|
|
e740e729c3 | ||
|
|
4baa22a01a | ||
|
|
7c1f509eca | ||
|
|
0ead37fd5c | ||
|
|
a33de6454f | ||
|
|
4a9e7c843e | ||
|
|
1f6c88dcc1 | ||
|
|
43d9d726f8 | ||
|
|
c5667d9141 | ||
|
|
7455d235d1 | ||
|
|
3dc0d25c4d | ||
|
|
c352d46a5b | ||
|
|
c262187496 | ||
|
|
0c5a8a24da | ||
|
|
e5a9622720 | ||
|
|
ad864cfe48 | ||
|
|
f58dd12983 | ||
|
|
e40504b7f0 | ||
|
|
301f23cd2d | ||
|
|
885e94cf58 | ||
|
|
6763f4f403 | ||
|
|
ead70ad394 | ||
|
|
597c6eb15b | ||
|
|
47ce77e04c | ||
|
|
6e90a4168e | ||
|
|
9b2be57365 | ||
|
|
5ba7803ea9 | ||
|
|
88743f158b | ||
|
|
f360b1fb55 | ||
|
|
dda9e51a37 | ||
|
|
ef9002dede | ||
|
|
37df2dd9b2 | ||
|
|
7ec5945517 | ||
|
|
0150b5b61e | ||
|
|
d41d727950 | ||
|
|
224c31d16b | ||
|
|
b67bd01858 | ||
|
|
5459ec33df | ||
|
|
59999e5adc | ||
|
|
fc009923e5 | ||
|
|
9303f54026 | ||
|
|
7e30b8c029 | ||
|
|
c1596d2a25 | ||
|
|
2411d7bc76 | ||
|
|
a44ff4c78b | ||
|
|
f9aaccdfe2 | ||
|
|
4c02d70dae | ||
|
|
e6db4a51d1 | ||
|
|
d3c927ed88 | ||
|
|
3a8f0e0fcd | ||
|
|
9a427f4b9f | ||
|
|
3720851ff7 | ||
|
|
6a83356cf7 | ||
|
|
233c41acc0 | ||
|
|
3b0451da9e | ||
|
|
e217a3146f | ||
|
|
97c42ef1cb | ||
|
|
b12a524de8 | ||
|
|
ee37fee2c0 | ||
|
|
ef5d9f980e | ||
|
|
fadbc906e2 | ||
|
|
ba816fc132 | ||
|
|
5ea615da1e | ||
|
|
ceb955b72b | ||
|
|
43823bcb37 | ||
|
|
7984ada306 | ||
|
|
d3e0c8d894 | ||
|
|
cee1be11ab | ||
|
|
230b3207a5 | ||
|
|
62ff35c080 | ||
|
|
e2043c14f2 | ||
|
|
a7f9032347 | ||
|
|
f137868f92 | ||
|
|
175e200d88 | ||
|
|
74f951023b | ||
|
|
3e697338e1 | ||
|
|
bae77017a9 | ||
|
|
32a2834bf3 | ||
|
|
4bffc1c156 | ||
|
|
ac4c5f7d8c | ||
|
|
8f41e55b3c | ||
|
|
ad8aab7b15 | ||
|
|
7e779669ea | ||
|
|
5b01791021 | ||
|
|
14bb068626 | ||
|
|
1c93636538 | ||
|
|
b402a7a32b | ||
|
|
3a7167a65d | ||
|
|
6dd7e9cb38 | ||
|
|
4ffa016045 | ||
|
|
2d6f1ee9b7 | ||
|
|
a1f0615afe | ||
|
|
03ff9c4b27 | ||
|
|
67a48bbec7 | ||
|
|
2b63af82ec | ||
|
|
c5ee7083d8 | ||
|
|
0696f7724d | ||
|
|
b7231e3464 | ||
|
|
214c6c93fd | ||
|
|
7037ae4ba8 | ||
|
|
46d6d6fdee | ||
|
|
ae751bfb91 | ||
|
|
bd0117c52f | ||
|
|
1402695dbe | ||
|
|
72c42afb50 | ||
|
|
2752e0998e | ||
|
|
52114e08ba | ||
|
|
a98721c016 | ||
|
|
c3ab2d09d5 | ||
|
|
9ef7802651 | ||
|
|
a913d33a9e | ||
|
|
49dc7135a7 | ||
|
|
7e77560d70 | ||
|
|
35cb110151 | ||
|
|
4e49c2458d | ||
|
|
755e5fc416 | ||
|
|
5d4fd0269f | ||
|
|
461abf768c | ||
|
|
602bebe498 | ||
|
|
6c31b35f08 | ||
|
|
ccf95ad885 | ||
|
|
fb33921308 | ||
|
|
1121ee0133 | ||
|
|
77af4bd288 | ||
|
|
a1a2119e37 | ||
|
|
afd2806a67 | ||
|
|
3410f0f5bc | ||
|
|
4ed2226206 | ||
|
|
b8d7277d88 | ||
|
|
1becc18354 | ||
|
|
9366d351e0 | ||
|
|
e27f5cd419 | ||
|
|
b7c1116738 | ||
|
|
a6a3d743f7 | ||
|
|
dd3f3e9e5c | ||
|
|
ad2732b249 | ||
|
|
10c04bdda0 | ||
|
|
26d88afeb7 | ||
|
|
376d19563d | ||
|
|
d2895f0f42 | ||
|
|
30310ef2ba | ||
|
|
924a9747f1 | ||
|
|
f8ed48d2d2 | ||
|
|
9cdb2a73e3 | ||
|
|
ad3258b88e | ||
|
|
4461ab080a | ||
|
|
9b07f156b2 | ||
|
|
94c7967800 | ||
|
|
a5b248e663 | ||
|
|
1ec43722e8 | ||
|
|
88c548cc70 | ||
|
|
daafe251da | ||
|
|
147ecbccda | ||
|
|
be5d2d07bc | ||
|
|
adbe8f6c42 | ||
|
|
18aec84be5 | ||
|
|
5f68958aa7 | ||
|
|
4787f644a6 | ||
|
|
524f8df866 | ||
|
|
bb381c1349 | ||
|
|
36c31dac14 | ||
|
|
01b6926054 | ||
|
|
84cfa0a9f7 | ||
|
|
cb83c51632 | ||
|
|
97256ba291 | ||
|
|
d3c596aaa0 | ||
|
|
3d2fa57873 | ||
|
|
c435050018 | ||
|
|
14f761de36 | ||
|
|
626438d8f5 | ||
|
|
e29555a89b | ||
|
|
05da2d7a50 | ||
|
|
1124533557 | ||
|
|
878603c7b0 | ||
|
|
19583cd84a | ||
|
|
9f26d6efdc | ||
|
|
043e620231 | ||
|
|
d3dbdd4ceb | ||
|
|
0859165072 | ||
|
|
ca7ab6105d | ||
|
|
3af2b32783 | ||
|
|
8d5df7e888 | ||
|
|
126ee27505 | ||
|
|
fc2d8452b5 | ||
|
|
1b8c234f30 | ||
|
|
540b607459 | ||
|
|
ee229bd0d7 | ||
|
|
439d39d8fa | ||
|
|
8c379d03a9 | ||
|
|
ff31104b99 | ||
|
|
dfe6063929 | ||
|
|
a4b716f8c7 | ||
|
|
7efc36efef | ||
|
|
1554c9907e | ||
|
|
df46ddcf60 | ||
|
|
6fb19d0287 | ||
|
|
d702f69415 | ||
|
|
eb81e830a1 | ||
|
|
a24b9d7a38 | ||
|
|
efeaa1e895 | ||
|
|
a239eba6ce | ||
|
|
d009582252 | ||
|
|
fe710823c1 | ||
|
|
bfe593ae52 | ||
|
|
f653a22557 | ||
|
|
96e7f22520 | ||
|
|
e6d3d22db7 | ||
|
|
1258dedab3 | ||
|
|
ec15c7e63e | ||
|
|
5037eaf205 | ||
|
|
cb706453aa | ||
|
|
772ebbf929 | ||
|
|
60e1aca3b1 | ||
|
|
741ae4b070 | ||
|
|
49476d72fc | ||
|
|
31eaa4181d | ||
|
|
ca13a8accd | ||
|
|
78b1f119dc | ||
|
|
2908b29c0d | ||
|
|
91afa08cdc | ||
|
|
9e701645d5 | ||
|
|
d93b0442d2 | ||
|
|
ce4f9f5f01 | ||
|
|
353d638823 | ||
|
|
995a774140 | ||
|
|
c131b245bc | ||
|
|
42aabaf9b5 | ||
|
|
84cce151b8 | ||
|
|
e3e6316af7 | ||
|
|
96e64c4f17 | ||
|
|
3005917256 | ||
|
|
0fa121cdf2 | ||
|
|
3bf6215249 | ||
|
|
2ef045a66d | ||
|
|
2316f38978 | ||
|
|
b65bf12247 | ||
|
|
55291d43a6 | ||
|
|
01bee95833 | ||
|
|
5938fa6ffb | ||
|
|
743fe5a75d | ||
|
|
0c2fdba586 | ||
|
|
a2c5adec3d | ||
|
|
6089c8c7c6 | ||
|
|
f28f725519 | ||
|
|
22d853e0b0 | ||
|
|
0f1d395651 | ||
|
|
3a0bab217d | ||
|
|
f824cb5f15 | ||
|
|
40fd8d6d1a | ||
|
|
e37f73bce0 | ||
|
|
d1cd08972f | ||
|
|
5a13ca6409 | ||
|
|
eb3fd73415 | ||
|
|
1764fcbba2 | ||
|
|
19f3552bfc | ||
|
|
cedce6cf32 | ||
|
|
26cf215150 | ||
|
|
d21557069c | ||
|
|
28b2547229 | ||
|
|
d75f556074 | ||
|
|
eb66810e59 | ||
|
|
540b39206d | ||
|
|
5baea04c5d | ||
|
|
f5e65748a7 | ||
|
|
de84e09062 | ||
|
|
c81c88c930 | ||
|
|
2cb39ea7e3 | ||
|
|
6986963e45 | ||
|
|
dc9b0093d9 | ||
|
|
40f9927842 | ||
|
|
ff02f5f3ed | ||
|
|
dc40f6b530 | ||
|
|
22149b94a1 | ||
|
|
d771454aa5 | ||
|
|
372d25667f | ||
|
|
21f6cc00eb | ||
|
|
620a080128 | ||
|
|
6a972aaf3d | ||
|
|
d878d6b20b | ||
|
|
ec075311f4 | ||
|
|
237c9bb62a | ||
|
|
5aa9733bd7 | ||
|
|
a157a003c5 | ||
|
|
e40869d3f8 | ||
|
|
edaecfad4d | ||
|
|
983a98ae15 | ||
|
|
20ad902feb | ||
|
|
05de9c6e41 | ||
|
|
df281cbbaa | ||
|
|
a979d11b8c | ||
|
|
f7ff9c114f | ||
|
|
807dbdd133 | ||
|
|
4aa944237f | ||
|
|
48db55e3da | ||
|
|
bd1491e6e5 | ||
|
|
ac35730e3b | ||
|
|
00023adbc0 | ||
|
|
a70142a4dc | ||
|
|
7b056fe1af | ||
|
|
467be38bd1 | ||
|
|
933054a095 | ||
|
|
f56482157c | ||
|
|
5d0c91d91d | ||
|
|
03136611a1 | ||
|
|
3e7488e4f3 | ||
|
|
3ed7d48d42 | ||
|
|
ef72d89172 | ||
|
|
ad97071862 | ||
|
|
2291892946 | ||
|
|
bf8cfa1421 | ||
|
|
bdd806efff | ||
|
|
c912c4af7b | ||
|
|
fc7f359f28 | ||
|
|
21598f6189 | ||
|
|
a1987ea193 | ||
|
|
480d167131 | ||
|
|
d873accf3e | ||
|
|
94b448863c | ||
|
|
32acc8555d | ||
|
|
d68ad84155 | ||
|
|
45e82b7f33 | ||
|
|
55ad0fe9f0 | ||
|
|
559815273e | ||
|
|
af76740fd9 | ||
|
|
7dadd50bfe | ||
|
|
dd4cab22c1 | ||
|
|
c4d3e776a1 | ||
|
|
19bb7f5ddb | ||
|
|
d212120f9b | ||
|
|
42da1872e7 | ||
|
|
a080b50c45 | ||
|
|
6d31e9b028 | ||
|
|
b606afa858 | ||
|
|
f9446304b3 | ||
|
|
fbe312d580 | ||
|
|
8d383caaff | ||
|
|
6caf4fa7ce | ||
|
|
606d58b08c | ||
|
|
09258179f0 | ||
|
|
40e986b188 | ||
|
|
37e47041bf | ||
|
|
543438bca0 | ||
|
|
b31290c1fc | ||
|
|
d41111a209 | ||
|
|
828b523382 | ||
|
|
32409ecbee | ||
|
|
3ca2cec63a | ||
|
|
1ed2db0c82 | ||
|
|
2423b74dd0 | ||
|
|
3f781ea298 | ||
|
|
30c5c49aef | ||
|
|
9421e39c34 | ||
|
|
c46805cf4f | ||
|
|
f181343fca | ||
|
|
8a512e4f73 | ||
|
|
06a3750168 | ||
|
|
35c1a5642d | ||
|
|
f29df2ad28 | ||
|
|
75a5714451 | ||
|
|
2882863b5b | ||
|
|
773b6cca14 | ||
|
|
f97370c8f7 | ||
|
|
afad96a375 | ||
|
|
9e5ababfcb | ||
|
|
dc1e0e8db4 | ||
|
|
1e861d1125 | ||
|
|
baa93cb371 | ||
|
|
61dcc8db47 | ||
|
|
15505ffcd8 | ||
|
|
2c557eb015 | ||
|
|
f5a80526ab | ||
|
|
96cef35f09 | ||
|
|
27e1455874 | ||
|
|
278d8428de | ||
|
|
164e667158 | ||
|
|
28b31791e7 | ||
|
|
9515768e62 | ||
|
|
fbbad19cb7 | ||
|
|
eab353ca2e | ||
|
|
cb9ee20763 | ||
|
|
dac12532bc | ||
|
|
1d99734ea0 | ||
|
|
3e764c762a | ||
|
|
7be51168d3 | ||
|
|
530d193734 | ||
|
|
aba5ff75af | ||
|
|
9e34fcb8a8 | ||
|
|
055dd9cd01 | ||
|
|
1437fdc4e3 | ||
|
|
e5c67b16ac | ||
|
|
94987314b8 | ||
|
|
f4f881e839 | ||
|
|
92f5901b95 | ||
|
|
1c0cb601cb | ||
|
|
109f06f8bb | ||
|
|
bf23439792 | ||
|
|
b7a0bc08be | ||
|
|
9d6a26dda9 | ||
|
|
a01ce2c3fc | ||
|
|
ba6298af27 | ||
|
|
3d17e0aa75 | ||
|
|
7e18166160 | ||
|
|
40d8571797 | ||
|
|
25e04e358a | ||
|
|
e473e12c0e | ||
|
|
dfb20df16f | ||
|
|
efcbf439ee | ||
|
|
514f7fedbc | ||
|
|
ee88fedacd | ||
|
|
2933f9c49f | ||
|
|
1cca5d989c | ||
|
|
9981020728 | ||
|
|
56843dcf8b | ||
|
|
e661118192 | ||
|
|
54a7de6cb0 | ||
|
|
13b1e0afbb | ||
|
|
4a48796142 | ||
|
|
9a4fef80b9 | ||
|
|
79dc4b39f1 | ||
|
|
9bc18b774e | ||
|
|
465c36407c | ||
|
|
b99486259e | ||
|
|
ecf5475966 | ||
|
|
90822cc8a3 | ||
|
|
5c46209ddc | ||
|
|
176de87b6b | ||
|
|
7f199c527b | ||
|
|
2432e230c5 | ||
|
|
fc1be0d23d | ||
|
|
d084b9e941 | ||
|
|
6678c0af49 | ||
|
|
37754ecf31 | ||
|
|
709d9633a1 | ||
|
|
7ca57efaad | ||
|
|
342fedca1c | ||
|
|
b1262b0448 | ||
|
|
626aca5181 | ||
|
|
8204322b46 | ||
|
|
70ce86cd53 | ||
|
|
ed3b86cd49 | ||
|
|
b371675494 | ||
|
|
ff06c8e7bd | ||
|
|
8ff41d8fa9 | ||
|
|
5f5b9ba8cb | ||
|
|
a3221470e7 | ||
|
|
0e115bd92a | ||
|
|
95a50c0ba6 | ||
|
|
e323ccb259 | ||
|
|
3294d0b93b | ||
|
|
55e8694990 | ||
|
|
b3888b391a | ||
|
|
f2907ab40f | ||
|
|
7e7218cbdf | ||
|
|
e41c9cb7f4 | ||
|
|
20f96c88e4 | ||
|
|
66afda1343 | ||
|
|
c5a6212065 | ||
|
|
3e7e355575 | ||
|
|
fb9eb3e4b5 | ||
|
|
a35ac82f24 | ||
|
|
66add6b9e4 | ||
|
|
fe81bde1c9 | ||
|
|
6b223098ab | ||
|
|
788e867a6c | ||
|
|
7ad8d307dc | ||
|
|
b6d4ac5ada | ||
|
|
0a069854e5 | ||
|
|
8770afa211 | ||
|
|
312c193b1a | ||
|
|
3700e2bb93 | ||
|
|
a9be72081c | ||
|
|
f57b57791b | ||
|
|
5cf249afa4 | ||
|
|
3f24627f67 | ||
|
|
806c3fdc00 | ||
|
|
e81ee88cda | ||
|
|
db46f63337 | ||
|
|
395102026d | ||
|
|
b62c078de6 | ||
|
|
47c1c08bed | ||
|
|
a23c4f03e0 | ||
|
|
5a6da60fe8 | ||
|
|
588c47aee7 | ||
|
|
36fd51219a | ||
|
|
bc43a79d97 | ||
|
|
5c22c029d7 | ||
|
|
126d9be9d8 | ||
|
|
09be2822e0 | ||
|
|
a93029f789 | ||
|
|
48cf214f4c | ||
|
|
6834bad7b0 | ||
|
|
855458bab0 | ||
|
|
5be48bf8c8 | ||
|
|
80ac0eea62 | ||
|
|
5995ec468d | ||
|
|
e9a876e8f0 | ||
|
|
90223a5ffd | ||
|
|
8331daae5b | ||
|
|
027280954a | ||
|
|
5138a63d23 | ||
|
|
be95cf5510 | ||
|
|
4082328c2b | ||
|
|
729e840af2 | ||
|
|
e4a38fe277 | ||
|
|
a5cb9c7de6 | ||
|
|
7543109583 | ||
|
|
bff2f10fa4 | ||
|
|
37120bf153 | ||
|
|
b88c85db5e | ||
|
|
c682e3dfc0 | ||
|
|
6c0bbb7778 | ||
|
|
bde8c40d16 | ||
|
|
c4d352ba26 | ||
|
|
cc1c0696ad | ||
|
|
186b784004 | ||
|
|
5441d15654 | ||
|
|
bd61af89ae | ||
|
|
eddd77f97f | ||
|
|
ab0338c318 | ||
|
|
1892bec772 | ||
|
|
bf7070a7da | ||
|
|
314331b956 | ||
|
|
6ff949fdb5 | ||
|
|
21d24b7bea | ||
|
|
8522151949 | ||
|
|
3720099b1d | ||
|
|
073873c33c | ||
|
|
25bf62faa3 | ||
|
|
e54cb9c626 | ||
|
|
208330d73a | ||
|
|
343e3e67ed | ||
|
|
6447003927 | ||
|
|
cbdf925703 | ||
|
|
7440e4a610 | ||
|
|
54a5c3fac0 | ||
|
|
42e60da127 | ||
|
|
325dc9c8a8 | ||
|
|
877427f0db | ||
|
|
1a64e7ba63 | ||
|
|
7dfa59a845 | ||
|
|
62fd19368d | ||
|
|
058518fcba | ||
|
|
6e1d10f052 | ||
|
|
af988fec69 | ||
|
|
dd5979aec8 | ||
|
|
657fbeba79 | ||
|
|
4a0d45ad7d | ||
|
|
f47ec21aa8 | ||
|
|
be40d65982 | ||
|
|
faebacb883 | ||
|
|
df0efc39d5 | ||
|
|
57a299de8f | ||
|
|
be724ec45f | ||
|
|
98c70e662d | ||
|
|
4ed9b84d75 | ||
|
|
b7f05acfd3 | ||
|
|
45ebb37a01 | ||
|
|
f77adea800 | ||
|
|
88b855ed47 | ||
|
|
4fa689873f | ||
|
|
d76b9329fc | ||
|
|
1c43ddd3a9 | ||
|
|
1aedbcef94 | ||
|
|
295280861a | ||
|
|
9f70e20fa0 | ||
|
|
a20e96eb6a | ||
|
|
9b238a3ac6 | ||
|
|
0167597ae0 | ||
|
|
a4f6071c8b | ||
|
|
aa0b0bd249 | ||
|
|
c6185a51c2 | ||
|
|
9c9c717025 | ||
|
|
00342ed569 | ||
|
|
1f0a6b4a79 | ||
|
|
3e767b4723 | ||
|
|
e539b11718 | ||
|
|
2fca8c3850 | ||
|
|
0d3f70a231 | ||
|
|
a3a52aaafe | ||
|
|
a6c4401973 | ||
|
|
2e34ec2a17 | ||
|
|
927afec83c | ||
|
|
8bd1da0552 | ||
|
|
4f571fc3d7 | ||
|
|
c3f8e523cc | ||
|
|
9878f76f65 | ||
|
|
23799562ae | ||
|
|
f441a145b5 | ||
|
|
7189764916 | ||
|
|
70bc707e3a | ||
|
|
90215bde8b | ||
|
|
2b3ae5285b | ||
|
|
9b6d0db5b6 | ||
|
|
723da88ff8 | ||
|
|
5bcf2f4356 | ||
|
|
42680574c1 | ||
|
|
82e723c915 | ||
|
|
ac9560d9d7 | ||
|
|
32f95efa54 | ||
|
|
3da416908d | ||
|
|
d79d2e9ad2 | ||
|
|
30ba36894d | ||
|
|
b747402352 | ||
|
|
0398a9bda3 | ||
|
|
72dff88384 | ||
|
|
0314a9755f | ||
|
|
bc967b15b2 | ||
|
|
8ac686a19f | ||
|
|
aafecaa3a4 | ||
|
|
bb23b08b15 | ||
|
|
476396da53 | ||
|
|
5112971848 | ||
|
|
2d852c38ec | ||
|
|
f163cacddc | ||
|
|
6ecb1cb2b0 | ||
|
|
24fefe0711 | ||
|
|
e5eba69d0d | ||
|
|
bdd2b7e317 | ||
|
|
ad29375975 | ||
|
|
cf73a4ef43 | ||
|
|
60a2621928 | ||
|
|
b4e5d9dbc2 | ||
|
|
650b700415 | ||
|
|
212f742164 | ||
|
|
6f2296eb05 | ||
|
|
722efd74c2 | ||
|
|
5dc9b6defe | ||
|
|
605fbaaa4a | ||
|
|
23b46865c5 | ||
|
|
ac310eaaf5 | ||
|
|
010f59df8a | ||
|
|
44a5dccd61 | ||
|
|
acbbf021a1 | ||
|
|
731fece258 | ||
|
|
8d255d1b89 | ||
|
|
64318c92e7 | ||
|
|
49fc7e48d4 | ||
|
|
ec9fa0baee | ||
|
|
ba91d91fd1 | ||
|
|
0aa1fea9dc | ||
|
|
1551f01f49 | ||
|
|
d46748602e | ||
|
|
9cfad0fe6a | ||
|
|
6d3cff84a4 | ||
|
|
010230645c | ||
|
|
5979290f0c | ||
|
|
e648872257 | ||
|
|
e4910ae31a | ||
|
|
d8ea0c7bcf | ||
|
|
6393d2c188 | ||
|
|
d9f0a163cf | ||
|
|
6534beec14 | ||
|
|
6d050340ee | ||
|
|
0e7f7fa208 | ||
|
|
287be0bd25 | ||
|
|
18cf2ff873 | ||
|
|
b626fb448b | ||
|
|
38f6fb5a7f | ||
|
|
5846df7d02 | ||
|
|
9462d6109c | ||
|
|
f0c93cd06e | ||
|
|
14e0507689 | ||
|
|
393b90f7be | ||
|
|
47ee5c1d84 | ||
|
|
1cb6f2d351 | ||
|
|
bb72b0cdfc | ||
|
|
ab2467b074 | ||
|
|
2d652523bb | ||
|
|
55df50253f | ||
|
|
d009914ff9 | ||
|
|
5e97222206 | ||
|
|
038705483b | ||
|
|
10c9ba5783 | ||
|
|
a1d008688b | ||
|
|
78a043c536 | ||
|
|
acdc840f17 | ||
|
|
63d4b8894b | ||
|
|
23ccbf9642 | ||
|
|
a5793ff768 | ||
|
|
a84e2f72c3 | ||
|
|
0d805a01c1 | ||
|
|
ba90a1c396 | ||
|
|
465927e730 | ||
|
|
74f3c14a62 | ||
|
|
2eb40c7b42 | ||
|
|
457c5f85af | ||
|
|
c6ef3d774a | ||
|
|
7f1e4c0969 | ||
|
|
e55cd7841f | ||
|
|
8b5b32fecb | ||
|
|
819c9a7506 | ||
|
|
4b3ef50d4b | ||
|
|
bc945c5196 | ||
|
|
57ea3c576e | ||
|
|
450e15f558 | ||
|
|
a66ef977a0 | ||
|
|
96a474adc1 | ||
|
|
1fe22aeef1 | ||
|
|
a97897527e | ||
|
|
86bbb4d885 | ||
|
|
041f8314ab | ||
|
|
dffdeff798 | ||
|
|
d61e399c67 | ||
|
|
601f246bdc | ||
|
|
6f08dc3ada | ||
|
|
07e1b86586 | ||
|
|
ce4883ea39 | ||
|
|
2deda8947e | ||
|
|
adb9532d1b | ||
|
|
a2959342a9 | ||
|
|
f528833232 | ||
|
|
a6b8785341 | ||
|
|
6e7a14fb3e | ||
|
|
708180a037 | ||
|
|
04efa2742c | ||
|
|
0e2c96d544 | ||
|
|
a45c1818a5 | ||
|
|
f04f47d17a | ||
|
|
cabce14a49 | ||
|
|
5f669684c4 | ||
|
|
4d169809bd | ||
|
|
2929d64fa0 | ||
|
|
20311d31f6 | ||
|
|
c13b68ef42 | ||
|
|
8eff623b67 | ||
|
|
f4b9207379 | ||
|
|
90930e19e7 | ||
|
|
8c0dacd6d7 | ||
|
|
c617bea45a | ||
|
|
bac25c9173 | ||
|
|
acfc3f617e | ||
|
|
4c6aa3baf1 | ||
|
|
ed2d72c008 | ||
|
|
3cb82c58a1 | ||
|
|
d87e3cb24d | ||
|
|
8a4c46c40b | ||
|
|
5f3dcdb7e5 | ||
|
|
8964c316b8 | ||
|
|
230f682a27 | ||
|
|
8f25d048df | ||
|
|
90fcf3153c | ||
|
|
069c4cf5c4 | ||
|
|
f10e55ad71 | ||
|
|
a934c7842b | ||
|
|
a2b6bc0493 | ||
|
|
24e418bf7c | ||
|
|
3fc3ef4ea8 | ||
|
|
952d6b9851 | ||
|
|
841c58ca8c | ||
|
|
41164add15 | ||
|
|
f4858d3684 | ||
|
|
be60479122 | ||
|
|
948f160d14 | ||
|
|
768c733f92 | ||
|
|
1a02be7c91 | ||
|
|
ac75f6f7a6 | ||
|
|
b2befb4feb | ||
|
|
3e49399f82 | ||
|
|
eaaaf3effd | ||
|
|
f2cd1be3af | ||
|
|
b4fcf41420 | ||
|
|
5feccae2a0 | ||
|
|
d28318005d | ||
|
|
fcf39d7786 | ||
|
|
5e9fc614d7 | ||
|
|
a860803cc4 | ||
|
|
c40f5953fa | ||
|
|
241282296e | ||
|
|
8a8143167f | ||
|
|
12797293f0 | ||
|
|
af0eb9551a | ||
|
|
8a492450da | ||
|
|
f3cb356b2b | ||
|
|
8ea1b7afba | ||
|
|
911c1bdd0c | ||
|
|
41f3274c7e | ||
|
|
0fc62dda78 | ||
|
|
e482c911c4 | ||
|
|
0e59126c52 | ||
|
|
abbe6437a9 | ||
|
|
f2d67d4128 | ||
|
|
7c9e02996e | ||
|
|
dc560edb7c | ||
|
|
f7bbcee386 | ||
|
|
2182d4b440 | ||
|
|
c43e10c4af | ||
|
|
25037324ab | ||
|
|
b8f9916d13 | ||
|
|
ed8b9cc943 | ||
|
|
efbe7e0a21 | ||
|
|
46dd500d37 | ||
|
|
261c95fb06 | ||
|
|
41a122f722 | ||
|
|
490406e12a | ||
|
|
d12677094d | ||
|
|
3c69792744 | ||
|
|
395e79adbf | ||
|
|
d5e56d8e29 | ||
|
|
e4c4873aa7 | ||
|
|
293da1d4ef | ||
|
|
d1c206a05a | ||
|
|
37b370511f | ||
|
|
734ef5533a | ||
|
|
0eb9b9fdac | ||
|
|
7817890cfe | ||
|
|
23dbedd139 | ||
|
|
2c8e2251fa | ||
|
|
4c27ed9997 | ||
|
|
d2fd1362c0 | ||
|
|
45e57f0d5e | ||
|
|
660facea96 | ||
|
|
9fa2e940d6 | ||
|
|
0ffcfb8f43 | ||
|
|
ad1b3df74e | ||
|
|
0ccf10bbbb | ||
|
|
59c007e801 | ||
|
|
0654bc1049 | ||
|
|
9fabefc847 | ||
|
|
e70ded0be1 | ||
|
|
16806275e0 | ||
|
|
e8214c3aae | ||
|
|
3a8e148301 | ||
|
|
a0b546614f | ||
|
|
5fcea86b94 | ||
|
|
d8c00ed6c0 | ||
|
|
863e68ec88 | ||
|
|
046ee343dc | ||
|
|
2db9e376d5 | ||
|
|
9458128ad6 | ||
|
|
89638e3f56 | ||
|
|
8d492d7d4b | ||
|
|
246c561b64 | ||
|
|
88295f2462 | ||
|
|
d2d4e1cbac | ||
|
|
261e5b59e0 | ||
|
|
fa7ec01329 | ||
|
|
4c4a29f9cf | ||
|
|
9ddcaf4552 | ||
|
|
c806a99fbc | ||
|
|
ad91d360ce | ||
|
|
cf8d7cd71f | ||
|
|
f370799b1d | ||
|
|
f8655b5de4 | ||
|
|
ed3a5778d0 | ||
|
|
19d213059f | ||
|
|
276a802ab2 | ||
|
|
e756ded89f | ||
|
|
b551f0fe2d | ||
|
|
f6e8bdb0fd | ||
|
|
9029ea8085 | ||
|
|
d61ade9fe9 | ||
|
|
aa1fe549c7 | ||
|
|
e3701bbcb4 | ||
|
|
fb7fc4bf0c | ||
|
|
f8c59a1730 | ||
|
|
dc50ca157d | ||
|
|
ff2e775b5e | ||
|
|
584d48c5ab | ||
|
|
25df43b0be | ||
|
|
1af1fcd148 | ||
|
|
516f9aad45 | ||
|
|
79a420de0f | ||
|
|
ac213b6664 | ||
|
|
ff2d74029a | ||
|
|
31ac1d3f2d | ||
|
|
2c32382ca6 | ||
|
|
0d94c20deb | ||
|
|
9904df1611 | ||
|
|
2d945d4fb2 | ||
|
|
c1f9a22bf3 | ||
|
|
22e2e2339e | ||
|
|
b6435bbfc9 | ||
|
|
63387cb958 | ||
|
|
a8d104ec57 | ||
|
|
2432bb11c7 | ||
|
|
10377b527f | ||
|
|
87fb568995 | ||
|
|
355209769f | ||
|
|
72cc5cc5ea | ||
|
|
d4552fa075 | ||
|
|
8dafd918ed | ||
|
|
6c295611cc | ||
|
|
c833c3591f | ||
|
|
ccbd962e0b | ||
|
|
966d2afe69 | ||
|
|
0386e7dd4f | ||
|
|
573ab077ac | ||
|
|
496405d922 | ||
|
|
591b3a121f | ||
|
|
a81dae2ad0 | ||
|
|
d370ee2d99 | ||
|
|
a6b1af6a16 | ||
|
|
2d21627aff | ||
|
|
0fb3f98136 | ||
|
|
3889d7a5be | ||
|
|
9d3c997743 | ||
|
|
8c86f9fcea | ||
|
|
1c74a019ab | ||
|
|
11a46f0f58 | ||
|
|
0a0157a1ef | ||
|
|
680fb4122c | ||
|
|
3502324389 | ||
|
|
97e52e53bf | ||
|
|
dfd68ca8a3 | ||
|
|
fc6bdb56df | ||
|
|
129f1ccd8d | ||
|
|
f6e92c411e | ||
|
|
db98884ae4 | ||
|
|
a7a1e5c480 | ||
|
|
b32dd949d7 | ||
|
|
015e50cdb8 | ||
|
|
f00e051e75 | ||
|
|
e7adf08854 | ||
|
|
7646d8be07 | ||
|
|
978e02350c | ||
|
|
b4d0af6eb2 | ||
|
|
555d997e34 | ||
|
|
1b9124422a | ||
|
|
81f02209ea | ||
|
|
8f23874628 | ||
|
|
124d456c60 | ||
|
|
75da044bbe | ||
|
|
19dfbaacce | ||
|
|
31578521cf | ||
|
|
8d5e82fa5e | ||
|
|
bd25ae77fc | ||
|
|
9aec8be1c0 | ||
|
|
90ac727250 | ||
|
|
5bc9840825 | ||
|
|
0525114036 | ||
|
|
fb691f6ade | ||
|
|
92f1048911 | ||
|
|
6481b90daf | ||
|
|
4d753398c1 | ||
|
|
f01bebedc9 | ||
|
|
48dd93b94b | ||
|
|
ac231374f6 | ||
|
|
87fc4e1281 | ||
|
|
8fd2cb39c1 | ||
|
|
24a01aefe2 | ||
|
|
06fb9c0a6b | ||
|
|
bc0942180e | ||
|
|
f358563c27 | ||
|
|
dcaebeea83 | ||
|
|
ac13af73c5 | ||
|
|
ba529d2721 | ||
|
|
f23a7b4842 | ||
|
|
5718631889 | ||
|
|
da3d71d21e | ||
|
|
b533546236 | ||
|
|
1c148f407c | ||
|
|
9403efa9a1 | ||
|
|
6a06fc7995 | ||
|
|
77733ce205 | ||
|
|
585b6ccd3e | ||
|
|
ac24c69858 | ||
|
|
b9cef158d8 | ||
|
|
5ec6141369 | ||
|
|
55ac1e01f2 | ||
|
|
65b58c3668 | ||
|
|
2cb4e5e8dc | ||
|
|
72cea245f1 | ||
|
|
08ca86c68a | ||
|
|
925c9c1e7b | ||
|
|
6212ea0304 | ||
|
|
f295592134 | ||
|
|
69b0973e6d | ||
|
|
422d318dac | ||
|
|
c55aa6ee88 | ||
|
|
090b175152 | ||
|
|
11e9b097a2 | ||
|
|
2adfc1d32b | ||
|
|
99fa5d89e7 | ||
|
|
ca8cbf8ccf | ||
|
|
6722d2d266 | ||
|
|
508cbeaa1b | ||
|
|
e040865905 | ||
|
|
a7878dd2c6 | ||
|
|
02980834ad | ||
|
|
2a8c8871c4 | ||
|
|
893be24c1d | ||
|
|
9029f59410 | ||
|
|
4b5e8d33a6 | ||
|
|
09196c045f | ||
|
|
7868ebec1e | ||
|
|
80a9182f05 | ||
|
|
d20b3d854f | ||
|
|
f1356228a3 | ||
|
|
a4adc51e50 | ||
|
|
864543e4f9 | ||
|
|
33a549202b | ||
|
|
c4a0219b18 |
7
.claude/settings.local.json
Normal file
7
.claude/settings.local.json
Normal file
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"permissions": {
|
||||
"allow": [
|
||||
"Bash(gh issue *)"
|
||||
]
|
||||
}
|
||||
}
|
||||
18
.github/actions/build-electron/action.yml
vendored
18
.github/actions/build-electron/action.yml
vendored
@@ -66,12 +66,20 @@ runs:
|
||||
if: ${{ inputs.os == 'linux' }}
|
||||
shell: ${{ inputs.shell }}
|
||||
run: |
|
||||
sudo apt-get update && sudo apt-get install rpm flatpak-builder elfutils
|
||||
sudo apt-get update && sudo apt-get install rpm flatpak-builder elfutils libfuse2
|
||||
flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||
FLATPAK_ARCH=$(if [[ ${{ inputs.arch }} = 'arm64' ]]; then echo 'aarch64'; else echo 'x86_64'; fi)
|
||||
FLATPAK_VERSION='24.08'
|
||||
flatpak install --user --no-deps --arch $FLATPAK_ARCH --assumeyes runtime/org.freedesktop.Platform/$FLATPAK_ARCH/$FLATPAK_VERSION runtime/org.freedesktop.Sdk/$FLATPAK_ARCH/$FLATPAK_VERSION org.electronjs.Electron2.BaseApp/$FLATPAK_ARCH/$FLATPAK_VERSION
|
||||
|
||||
- name: Install appimagetool
|
||||
if: ${{ inputs.os == 'linux' }}
|
||||
shell: ${{ inputs.shell }}
|
||||
run: |
|
||||
APPIMAGETOOL_ARCH=$(if [[ ${{ inputs.arch }} = 'arm64' ]]; then echo 'aarch64'; else echo 'x86_64'; fi)
|
||||
wget -q "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-${APPIMAGETOOL_ARCH}.AppImage" -O /usr/local/bin/appimagetool
|
||||
chmod +x /usr/local/bin/appimagetool
|
||||
|
||||
- name: Update build info
|
||||
shell: ${{ inputs.shell }}
|
||||
run: pnpm run chore:update-build-info
|
||||
@@ -90,6 +98,14 @@ runs:
|
||||
TARGET_ARCH: ${{ inputs.arch }}
|
||||
run: pnpm run --filter desktop electron-forge:make --arch=${{ inputs.arch }} --platform=${{ inputs.forge_platform }}
|
||||
|
||||
- name: Build AppImage
|
||||
if: ${{ inputs.os == 'linux' }}
|
||||
shell: ${{ inputs.shell }}
|
||||
env:
|
||||
TRILIUM_ARTIFACT_NAME_HINT: TriliumNotes-${{ github.ref_name }}-${{ inputs.os }}-${{ inputs.arch }}
|
||||
APPIMAGE_EXTRACT_AND_RUN: "1"
|
||||
run: bash apps/desktop/scripts/build-appimage.sh ${{ inputs.arch }}
|
||||
|
||||
# Add DMG signing step
|
||||
- name: Sign DMG
|
||||
if: inputs.os == 'macos'
|
||||
|
||||
2
.github/actions/build-server/action.yml
vendored
2
.github/actions/build-server/action.yml
vendored
@@ -8,7 +8,7 @@ inputs:
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- uses: pnpm/action-setup@v5
|
||||
- uses: pnpm/action-setup@v6
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
|
||||
@@ -55,7 +55,7 @@ runs:
|
||||
# Post deployment URL as PR comment
|
||||
- name: Comment PR with Preview URL
|
||||
if: github.event_name == 'pull_request'
|
||||
uses: actions/github-script@v8
|
||||
uses: actions/github-script@v9
|
||||
env:
|
||||
COMMENT_BODY: ${{ inputs.comment_body }}
|
||||
PRODUCTION_URL: ${{ inputs.production_url }}
|
||||
|
||||
51
.github/copilot-instructions.md
vendored
51
.github/copilot-instructions.md
vendored
@@ -1,5 +1,7 @@
|
||||
# Trilium Notes - AI Coding Agent Instructions
|
||||
|
||||
> **Note**: When updating this file, also update `CLAUDE.md` in the repository root to keep both AI coding assistants in sync.
|
||||
|
||||
## Project Overview
|
||||
|
||||
Trilium Notes is a hierarchical note-taking application with advanced features like synchronization, scripting, and rich text editing. Built as a TypeScript monorepo using pnpm, it implements a three-layer caching architecture (Becca/Froca/Shaca) with a widget-based UI system and supports extensive user scripting capabilities.
|
||||
@@ -115,6 +117,15 @@ class MyNoteWidget extends NoteContextAwareWidget {
|
||||
|
||||
**Important**: Widgets use jQuery (`this.$widget`) for DOM manipulation. Don't mix React patterns here.
|
||||
|
||||
### Reusable Preact Components
|
||||
Common UI components are available in `apps/client/src/widgets/react/` — prefer reusing these over creating custom implementations:
|
||||
- `NoItems` - Empty state placeholder with icon and message (use for "no results", "too many items", error states)
|
||||
- `ActionButton` - Consistent button styling with icon support
|
||||
- `FormTextBox` - Text input with validation and controlled input handling
|
||||
- `Slider` - Range slider with label
|
||||
- `Checkbox`, `RadioButton` - Form controls
|
||||
- `CollapsibleSection` - Expandable content sections
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### Running & Testing
|
||||
@@ -186,6 +197,14 @@ When adding query parameters to ETAPI endpoints (`apps/server/src/etapi/`), main
|
||||
|
||||
**Auth note**: ETAPI uses basic auth with tokens. Internal API endpoints trust the frontend.
|
||||
|
||||
### Adding New LLM Tools
|
||||
Tools are defined using `defineTools()` in `apps/server/src/services/llm/tools/` and automatically registered for both the LLM chat and MCP server.
|
||||
|
||||
1. Add the tool definition in the appropriate module (`note_tools.ts`, `attribute_tools.ts`, `hierarchy_tools.ts`) or create a new module
|
||||
2. Each tool needs: `description`, `inputSchema` (Zod), `execute` function, and optionally `mutates: true` for write operations or `needsContext: true` for tools that need the current note context
|
||||
3. If creating a new module, wrap tools in `defineTools({...})` and add the registry to `allToolRegistries` in `tools/index.ts`
|
||||
4. Add a client-side friendly name in `apps/client/src/translations/en/translation.json` under `llm.tools.<tool_name>` — use **imperative tense** (e.g. "Search notes", "Create note", "Get attributes"), not present continuous
|
||||
|
||||
### Database Migrations
|
||||
- Add scripts in `apps/server/src/migrations/YYMMDD_HHMM__description.sql`
|
||||
- Update schema in `apps/server/src/assets/db/schema.sql`
|
||||
@@ -213,6 +232,12 @@ When adding query parameters to ETAPI endpoints (`apps/server/src/etapi/`), main
|
||||
|
||||
10. **Attribute inheritance can be complex** - When checking for labels/relations, use `note.getOwnedAttribute()` for direct attributes or `note.getAttribute()` for inherited ones. Don't assume attributes are directly on the note.
|
||||
|
||||
## MCP Server
|
||||
- Trilium exposes an MCP (Model Context Protocol) server at `http://localhost:8080/mcp`, configured in `.mcp.json`
|
||||
- The MCP server is **only available when the Trilium server is running** (`pnpm run server:start`)
|
||||
- It provides tools for reading, searching, and modifying notes directly from the AI assistant
|
||||
- Use it to interact with actual note data when developing or debugging note-related features
|
||||
|
||||
## TypeScript Configuration
|
||||
|
||||
- **Project references**: Monorepo uses TypeScript project references (`tsconfig.json`)
|
||||
@@ -275,6 +300,12 @@ View types are configured via `#viewType` label (e.g., `#viewType=table`). Each
|
||||
- Register in `packages/ckeditor5/src/plugins.ts`
|
||||
- See `ckeditor5-admonition`, `ckeditor5-footnotes`, `ckeditor5-math`, `ckeditor5-mermaid` for examples
|
||||
|
||||
### Updating PDF.js
|
||||
1. Update `pdfjs-dist` version in `packages/pdfjs-viewer/package.json`
|
||||
2. Run `npx tsx scripts/update-viewer.ts` from that directory
|
||||
3. Run `pnpm build` to verify success
|
||||
4. Commit all changes including updated viewer files
|
||||
|
||||
### Database Migrations
|
||||
- Add migration scripts in `apps/server/src/migrations/YYMMDD_HHMM__description.sql`
|
||||
- Update schema in `apps/server/src/assets/db/schema.sql`
|
||||
@@ -299,9 +330,29 @@ Trilium provides powerful user scripting capabilities:
|
||||
- Translation files in `apps/client/src/translations/`
|
||||
- Use translation system via `t()` function
|
||||
- Automatic pluralization: Add `_other` suffix to translation keys (e.g., `item` and `item_other` for singular/plural)
|
||||
- When a translated string contains **interpolated components** (e.g. links, note references) whose order may vary across languages, use `<Trans>` from `react-i18next` instead of `t()`. This lets translators reorder components freely (e.g. `"<Note/> in <Parent/>"` vs `"in <Parent/>, <Note/>"`)
|
||||
- When adding a new locale, follow the step-by-step guide in `docs/Developer Guide/Developer Guide/Concepts/Internationalisation Translations/Adding a new locale.md`
|
||||
|
||||
#### Client vs Server Translation Usage
|
||||
- **Client-side**: `import { t } from "../services/i18n"` with keys in `apps/client/src/translations/en/translation.json`
|
||||
- **Server-side**: `import { t } from "i18next"` with keys in `apps/server/src/assets/translations/en/server.json`
|
||||
- **Interpolation**: Use `{{variable}}` for normal interpolation; use `{{- variable}}` (with hyphen) for **unescaped** interpolation when the value contains special characters like quotes that shouldn't be HTML-escaped
|
||||
|
||||
### Storing User Preferences
|
||||
- **Do not use `localStorage`** for user preferences — Trilium has a synced options system that persists across devices
|
||||
- To add a new user preference:
|
||||
1. Add the option type to `OptionDefinitions` in `packages/commons/src/lib/options_interface.ts`
|
||||
2. Add a default value in `apps/server/src/services/options_init.ts` in the `defaultOptions` array
|
||||
3. **Whitelist the option** in `apps/server/src/routes/api/options.ts` by adding it to `ALLOWED_OPTIONS` (required for client updates)
|
||||
4. Use `useTriliumOption("optionName")` hook in React components to read/write the option
|
||||
- Available hooks: `useTriliumOption` (string), `useTriliumOptionBool`, `useTriliumOptionInt`, `useTriliumOptionJson`
|
||||
- See `docs/Developer Guide/Developer Guide/Concepts/Options/Creating a new option.md` for detailed documentation
|
||||
|
||||
## Testing Conventions
|
||||
|
||||
- **Write concise tests**: Group related assertions together in a single test case rather than creating many one-shot tests
|
||||
- **Extract and test business logic**: When adding pure business logic (e.g., data transformations, migrations, validations), extract it as a separate function and always write unit tests for it
|
||||
|
||||
```typescript
|
||||
// ETAPI test pattern
|
||||
describe("etapi/feature", () => {
|
||||
|
||||
44
.github/workflows/claude-code-review.yml
vendored
Normal file
44
.github/workflows/claude-code-review.yml
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
name: Claude Code Review
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, synchronize, ready_for_review, reopened]
|
||||
# Optional: Only run on specific file changes
|
||||
# paths:
|
||||
# - "src/**/*.ts"
|
||||
# - "src/**/*.tsx"
|
||||
# - "src/**/*.js"
|
||||
# - "src/**/*.jsx"
|
||||
|
||||
jobs:
|
||||
claude-review:
|
||||
# Optional: Filter by PR author
|
||||
# if: |
|
||||
# github.event.pull_request.user.login == 'external-contributor' ||
|
||||
# github.event.pull_request.user.login == 'new-developer' ||
|
||||
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
issues: read
|
||||
id-token: write
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Run Claude Code Review
|
||||
id: claude-review
|
||||
uses: anthropics/claude-code-action@v1
|
||||
with:
|
||||
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||
plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
|
||||
plugins: 'code-review@claude-code-plugins'
|
||||
prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
|
||||
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
||||
# or https://code.claude.com/docs/en/cli-reference for available options
|
||||
|
||||
50
.github/workflows/claude.yml
vendored
Normal file
50
.github/workflows/claude.yml
vendored
Normal file
@@ -0,0 +1,50 @@
|
||||
name: Claude Code
|
||||
|
||||
on:
|
||||
issue_comment:
|
||||
types: [created]
|
||||
pull_request_review_comment:
|
||||
types: [created]
|
||||
issues:
|
||||
types: [opened, assigned]
|
||||
pull_request_review:
|
||||
types: [submitted]
|
||||
|
||||
jobs:
|
||||
claude:
|
||||
if: |
|
||||
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
|
||||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
|
||||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
|
||||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
issues: write
|
||||
id-token: write
|
||||
actions: read # Required for Claude to read CI results on PRs
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 1
|
||||
|
||||
- name: Run Claude Code
|
||||
id: claude
|
||||
uses: anthropics/claude-code-action@v1
|
||||
with:
|
||||
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
|
||||
|
||||
# This is an optional setting that allows Claude to read CI results on PRs
|
||||
additional_permissions: |
|
||||
actions: read
|
||||
|
||||
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
|
||||
# prompt: 'Update the pull request description to include a summary of changes.'
|
||||
|
||||
# Optional: Add claude_args to customize behavior and configuration
|
||||
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
|
||||
# or https://code.claude.com/docs/en/cli-reference for available options
|
||||
# claude_args: '--allowed-tools Bash(gh pr *)'
|
||||
|
||||
2
.github/workflows/deploy-docs.yml
vendored
2
.github/workflows/deploy-docs.yml
vendored
@@ -45,7 +45,7 @@ jobs:
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- name: Setup pnpm
|
||||
uses: pnpm/action-setup@v5
|
||||
uses: pnpm/action-setup@v6
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v6
|
||||
|
||||
14
.github/workflows/dev.yml
vendored
14
.github/workflows/dev.yml
vendored
@@ -1,9 +1,13 @@
|
||||
name: Dev
|
||||
on:
|
||||
push:
|
||||
branches: [ main ]
|
||||
branches:
|
||||
- main
|
||||
- "release/*"
|
||||
pull_request:
|
||||
branches: [ main ]
|
||||
branches:
|
||||
- main
|
||||
- "release/*"
|
||||
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
@@ -26,7 +30,7 @@ jobs:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- uses: pnpm/action-setup@v5
|
||||
- uses: pnpm/action-setup@v6
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
@@ -74,7 +78,7 @@ jobs:
|
||||
- test_dev
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: pnpm/action-setup@v5
|
||||
- uses: pnpm/action-setup@v6
|
||||
- name: Install dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
- name: Update build info
|
||||
@@ -109,7 +113,7 @@ jobs:
|
||||
- name: Checkout the repository
|
||||
uses: actions/checkout@v6
|
||||
|
||||
- uses: pnpm/action-setup@v5
|
||||
- uses: pnpm/action-setup@v6
|
||||
- name: Install dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
|
||||
|
||||
2
.github/workflows/i18n.yml
vendored
2
.github/workflows/i18n.yml
vendored
@@ -18,7 +18,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: pnpm/action-setup@v5
|
||||
- uses: pnpm/action-setup@v6
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
|
||||
4
.github/workflows/main-docker.yml
vendored
4
.github/workflows/main-docker.yml
vendored
@@ -42,7 +42,7 @@ jobs:
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v4
|
||||
|
||||
- uses: pnpm/action-setup@v5
|
||||
- uses: pnpm/action-setup@v6
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
@@ -142,7 +142,7 @@ jobs:
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
- uses: pnpm/action-setup@v5
|
||||
- uses: pnpm/action-setup@v6
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
|
||||
12
.github/workflows/nightly.yml
vendored
12
.github/workflows/nightly.yml
vendored
@@ -42,7 +42,7 @@ jobs:
|
||||
shell: bash
|
||||
forge_platform: linux
|
||||
- name: windows
|
||||
image: win-signing
|
||||
image: windows-latest
|
||||
shell: cmd
|
||||
forge_platform: win32
|
||||
# Exclude ARM64 Linux from default matrix to use native runner
|
||||
@@ -61,7 +61,7 @@ jobs:
|
||||
runs-on: ${{ matrix.os.image }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: pnpm/action-setup@v5
|
||||
- uses: pnpm/action-setup@v6
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
@@ -69,6 +69,8 @@ jobs:
|
||||
cache: 'pnpm'
|
||||
- name: Install dependencies
|
||||
run: pnpm install --frozen-lockfile
|
||||
env:
|
||||
npm_config_package_import_method: copy
|
||||
- name: Update nightly version
|
||||
run: pnpm run chore:ci-update-nightly-version
|
||||
- name: Run the build
|
||||
@@ -86,12 +88,10 @@ jobs:
|
||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
||||
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
||||
WINDOWS_SIGN_EXECUTABLE: ${{ vars.WINDOWS_SIGN_EXECUTABLE }}
|
||||
WINDOWS_SIGN_ERROR_LOG: ${{ vars.WINDOWS_SIGN_ERROR_LOG }}
|
||||
GPG_SIGNING_KEY: ${{ secrets.GPG_SIGN_KEY }}
|
||||
|
||||
- name: Publish release
|
||||
uses: softprops/action-gh-release@v2.6.1
|
||||
uses: softprops/action-gh-release@v3.0.0
|
||||
if: ${{ github.event_name != 'pull_request' }}
|
||||
with:
|
||||
make_latest: false
|
||||
@@ -132,7 +132,7 @@ jobs:
|
||||
arch: ${{ matrix.arch }}
|
||||
|
||||
- name: Publish release
|
||||
uses: softprops/action-gh-release@v2.6.1
|
||||
uses: softprops/action-gh-release@v3.0.0
|
||||
if: ${{ github.event_name != 'pull_request' }}
|
||||
with:
|
||||
make_latest: false
|
||||
|
||||
2
.github/workflows/playwright.yml
vendored
2
.github/workflows/playwright.yml
vendored
@@ -38,7 +38,7 @@ jobs:
|
||||
filter: tree:0
|
||||
fetch-depth: 0
|
||||
|
||||
- uses: pnpm/action-setup@v5
|
||||
- uses: pnpm/action-setup@v6
|
||||
- uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: 24
|
||||
|
||||
6
.github/workflows/release.yml
vendored
6
.github/workflows/release.yml
vendored
@@ -17,7 +17,7 @@ jobs:
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- uses: pnpm/action-setup@v5
|
||||
- uses: pnpm/action-setup@v6
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
@@ -66,7 +66,7 @@ jobs:
|
||||
runs-on: ${{ matrix.os.image }}
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: pnpm/action-setup@v5
|
||||
- uses: pnpm/action-setup@v6
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
@@ -150,7 +150,7 @@ jobs:
|
||||
path: upload
|
||||
|
||||
- name: Publish stable release
|
||||
uses: softprops/action-gh-release@v2.6.1
|
||||
uses: softprops/action-gh-release@v3.0.0
|
||||
with:
|
||||
draft: false
|
||||
body_path: docs/Release Notes/Release Notes/${{ github.ref_name }}.md
|
||||
|
||||
4
.github/workflows/web-clipper.yml
vendored
4
.github/workflows/web-clipper.yml
vendored
@@ -32,7 +32,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: pnpm/action-setup@v5
|
||||
- uses: pnpm/action-setup@v6
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
@@ -58,7 +58,7 @@ jobs:
|
||||
compression-level: 0
|
||||
|
||||
- name: Release web clipper extension
|
||||
uses: softprops/action-gh-release@v2.6.1
|
||||
uses: softprops/action-gh-release@v3.0.0
|
||||
if: ${{ startsWith(github.ref, 'refs/tags/web-clipper-v') }}
|
||||
with:
|
||||
draft: false
|
||||
|
||||
2
.github/workflows/website.yml
vendored
2
.github/workflows/website.yml
vendored
@@ -26,7 +26,7 @@ jobs:
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
- uses: pnpm/action-setup@v5
|
||||
- uses: pnpm/action-setup@v6
|
||||
- name: Set up node & dependencies
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
|
||||
118
.mailmap
118
.mailmap
@@ -1,2 +1,116 @@
|
||||
zadam <adam.zivner@gmail.com>
|
||||
zadam <zadam.apps@gmail.com>
|
||||
# Format: Canonical Name <canonical-email> <commit-email>
|
||||
# Merges aliases so `git shortlog`, `git log --use-mailmap`, etc. group commits per person.
|
||||
|
||||
# Core maintainers
|
||||
zadam <zadam.apps@gmail.com>
|
||||
zadam <zadam.apps@gmail.com> <adam.zivner@gmail.com>
|
||||
zadam <zadam.apps@gmail.com> <adam.zivner@gemalto.com>
|
||||
|
||||
Elian Doran <contact@eliandoran.me>
|
||||
Elian Doran <contact@eliandoran.me> <online@eliandoran.me>
|
||||
|
||||
Adorian Doran <adorian@esevo.ro>
|
||||
Adorian Doran <adorian@esevo.ro> <adoriandoran@gmail.com>
|
||||
|
||||
# Contributors with multiple emails / name variants
|
||||
Panagiotis Papadopoulos <pano_90@gmx.net> <102623907+pano9000@users.noreply.github.com>
|
||||
|
||||
Jon Fuller <jonfuller2012@gmail.com>
|
||||
|
||||
SiriusXT <1160925501@qq.com>
|
||||
SiriusXT <1160925501@qq.com> <11609255001@qq.com>
|
||||
SiriusXT <1160925501@qq.com> <37627919+SiriusXT@users.noreply.github.com>
|
||||
|
||||
JYC333 <22962980+JYC333@users.noreply.github.com>
|
||||
JYC333 <22962980+JYC333@users.noreply.github.com> <yuchuanjin333@gmail.com>
|
||||
|
||||
Nriver <6752679+Nriver@users.noreply.github.com>
|
||||
|
||||
Francis C. <normitomf@gmail.com>
|
||||
Francis C. <normitomf@gmail.com> <francistw@users.noreply.github.com>
|
||||
|
||||
Thomas Frei <7283497+thfrei@users.noreply.github.com>
|
||||
|
||||
hasecilu <hasecilu@tuta.io>
|
||||
|
||||
meinzzzz <lukas.geiselhart35@gmail.com>
|
||||
|
||||
FliegendeWurst <arne.keller@posteo.de>
|
||||
FliegendeWurst <arne.keller@posteo.de> <2012gdwu@web.de>
|
||||
FliegendeWurst <arne.keller@posteo.de> <2012gdwu+github@posteo.de>
|
||||
|
||||
MeIchthys <github.com@meichthys.com>
|
||||
MeIchthys <github.com@meichthys.com> <10717998+meichthys@users.noreply.github.com>
|
||||
|
||||
Marcel Wiechmann <marcel.wiechmann@gmail.com>
|
||||
Marcel Wiechmann <marcel.wiechmann@gmail.com> <github.y3y0w@sl.wiechmann.at>
|
||||
|
||||
Tomas Adamek <ad.tomik@seznam.cz>
|
||||
Tomas Adamek <ad.tomik@seznam.cz> <50672285+Kureii@users.noreply.github.com>
|
||||
|
||||
soulsands <407221377@qq.com>
|
||||
|
||||
chesspro13 <chesspro13@gmail.com>
|
||||
|
||||
sigaloid <69441971+sigaloid@users.noreply.github.com>
|
||||
|
||||
Marek Lewandowski <m.lewandowski@cksource.com>
|
||||
Marek Lewandowski <m.lewandowski@cksource.com> <code@mlewandowski.com>
|
||||
Marek Lewandowski <m.lewandowski@cksource.com> <mlewand@users.noreply.github.com>
|
||||
|
||||
lzinga <lucas.elzinga@outlook.com>
|
||||
lzinga <lucas.elzinga@outlook.com> <lzinga@users.noreply.github.com>
|
||||
|
||||
Sukant Gujar <sukantgujar@yahoo.com>
|
||||
|
||||
Matt Wilkie <maphew@gmail.com>
|
||||
Matt Wilkie <maphew@gmail.com> <matt.wilkie@yukon.ca>
|
||||
|
||||
Andreas Haan <andreas.mobil1@googlemail.com>
|
||||
|
||||
Potjoe-97 <42873357+Potjoe-97@users.noreply.github.com>
|
||||
Potjoe-97 <42873357+Potjoe-97@users.noreply.github.com> <giann@LAPTOPT490-GF>
|
||||
|
||||
Alex Pietsch <54153428+alexpietsch@users.noreply.github.com>
|
||||
|
||||
Laurent Cozic <laurent@cozic.net>
|
||||
Laurent Cozic <laurent@cozic.net> <laurent22@users.noreply.github.com>
|
||||
|
||||
Zexin Yuan <git@yzx9.xyz>
|
||||
Zexin Yuan <git@yzx9.xyz> <yuan.zx@outlook.com>
|
||||
|
||||
hulmgulm <hulmgulm@users.noreply.github.com>
|
||||
hulmgulm <hulmgulm@users.noreply.github.com> <12165268+hulmgulm@users.noreply.github.com>
|
||||
hulmgulm <hulmgulm@users.noreply.github.com> <github@hulmgulm.de>
|
||||
|
||||
Jules Bertholet <jules.bertholet@gmail.com>
|
||||
|
||||
Charles Dagenais <dagenais.charles@gmail.com>
|
||||
|
||||
Giulia Ye <yg97.cs@gmail.com>
|
||||
|
||||
baddate <37013819+baddate@users.noreply.github.com>
|
||||
|
||||
DerVogel101 <128903814+DerVogel101@users.noreply.github.com>
|
||||
DerVogel101 <128903814+DerVogel101@users.noreply.github.com> <jan.irmer@outlook.de>
|
||||
|
||||
Marcello Fuschi <marcellofuschi1@gmail.com>
|
||||
|
||||
Jiahao Lee <lijiahao34@live.com>
|
||||
|
||||
Dmitry Matveyev <dev@greenfork.me>
|
||||
Dmitry Matveyev <dev@greenfork.me> <info@greenfork.me>
|
||||
|
||||
Grant Zhu <a1065135230@gmail.com>
|
||||
|
||||
Sylvain Pasche <sylvain.pasche@gmail.com>
|
||||
Sylvain Pasche <sylvain.pasche@gmail.com> <spasche@spasche.net>
|
||||
|
||||
mm21 <8033134+mm21@users.noreply.github.com>
|
||||
mm21 <8033134+mm21@users.noreply.github.com> <mm21.dev@gmail.com>
|
||||
|
||||
BeatLink <git@beatlink.simplelogin.com>
|
||||
BeatLink <git@beatlink.simplelogin.com> <github@beatlink.simplelogin.com>
|
||||
|
||||
Florian Meißner <161936+Mystler@users.noreply.github.com>
|
||||
Florian Meißner <161936+Mystler@users.noreply.github.com> <developer@mystler.eu>
|
||||
|
||||
8
.mcp.json
Normal file
8
.mcp.json
Normal file
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"mcpServers": {
|
||||
"trilium": {
|
||||
"type": "http",
|
||||
"url": "http://localhost:8080/mcp"
|
||||
}
|
||||
}
|
||||
}
|
||||
89
CLAUDE.md
89
CLAUDE.md
@@ -2,6 +2,8 @@
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
> **Note**: When updating this file, also update `.github/copilot-instructions.md` to keep both AI coding assistants in sync.
|
||||
|
||||
## Overview
|
||||
|
||||
Trilium Notes is a hierarchical note-taking application with advanced features like synchronization, scripting, and rich text editing. It's built as a TypeScript monorepo using pnpm, with multiple applications and shared packages.
|
||||
@@ -66,6 +68,15 @@ Frontend uses a widget system (`apps/client/src/widgets/`):
|
||||
- `RightPanelWidget` - Widgets displayed in the right panel
|
||||
- Type-specific widgets in `type_widgets/` directory
|
||||
|
||||
#### Reusable Preact Components
|
||||
Common UI components are available in `apps/client/src/widgets/react/` — prefer reusing these over creating custom implementations:
|
||||
- `NoItems` - Empty state placeholder with icon and message (use for "no results", "too many items", error states)
|
||||
- `ActionButton` - Consistent button styling with icon support
|
||||
- `FormTextBox` - Text input with validation and controlled input handling
|
||||
- `Slider` - Range slider with label
|
||||
- `Checkbox`, `RadioButton` - Form controls
|
||||
- `CollapsibleSection` - Expandable content sections
|
||||
|
||||
#### API Architecture
|
||||
- **Internal API**: REST endpoints in `apps/server/src/routes/api/`
|
||||
- **ETAPI**: External API for third-party integrations (`apps/server/src/etapi/`)
|
||||
@@ -108,6 +119,8 @@ Trilium supports multiple note types, each with specialized widgets:
|
||||
- Client tests can run in parallel
|
||||
- E2E tests use Playwright for both server and desktop apps
|
||||
- Build validation tests check artifact integrity
|
||||
- **Write concise tests**: Group related assertions together in a single test case rather than creating many one-shot tests
|
||||
- **Extract and test business logic**: When adding pure business logic (e.g., data transformations, migrations, validations), extract it as a separate function and always write unit tests for it
|
||||
|
||||
### Scripting System
|
||||
Trilium provides powerful user scripting capabilities:
|
||||
@@ -118,6 +131,21 @@ Trilium provides powerful user scripting capabilities:
|
||||
### Internationalization
|
||||
- Translation files in `apps/client/src/translations/`
|
||||
- Supported languages: English, German, Spanish, French, Romanian, Chinese
|
||||
- **Only add new translation keys to `en/translation.json`** — translations for other languages are managed via Weblate and will be contributed by the community
|
||||
- Third-party components (e.g., mind-map context menu) should use i18next `t()` for their labels, with the English strings added to `en/translation.json` under a dedicated namespace (e.g., `"mind-map"`)
|
||||
- When a translated string contains **interpolated components** (e.g. links, note references) whose order may vary across languages, use `<Trans>` from `react-i18next` instead of `t()`. This lets translators reorder components freely (e.g. `"<Note/> in <Parent/>"` vs `"in <Parent/>, <Note/>"`)
|
||||
- When adding a new locale, follow the step-by-step guide in `docs/Developer Guide/Developer Guide/Concepts/Internationalisation Translations/Adding a new locale.md`
|
||||
- **Server-side translations** (e.g. hidden subtree titles) go in `apps/server/src/assets/translations/en/server.json`, not in the client `translation.json`
|
||||
|
||||
#### Client vs Server Translation Usage
|
||||
- **Client-side**: `import { t } from "../services/i18n"` with keys in `apps/client/src/translations/en/translation.json`
|
||||
- **Server-side**: `import { t } from "i18next"` with keys in `apps/server/src/assets/translations/en/server.json`
|
||||
- **Interpolation**: Use `{{variable}}` for normal interpolation; use `{{- variable}}` (with hyphen) for **unescaped** interpolation when the value contains special characters like quotes that shouldn't be HTML-escaped
|
||||
|
||||
### Electron Desktop App
|
||||
- Desktop entry point: `apps/desktop/src/main.ts`, window management: `apps/server/src/services/window.ts`
|
||||
- IPC communication: use `electron.ipcMain.on(channel, handler)` on server side, `electron.ipcRenderer.send(channel, data)` on client side
|
||||
- Electron-only features should check `isElectron()` from `apps/client/src/services/utils.ts` (client) or `utils.isElectron` (server)
|
||||
|
||||
### Security Considerations
|
||||
- Per-note encryption with granular protected sessions
|
||||
@@ -125,6 +153,26 @@ Trilium provides powerful user scripting capabilities:
|
||||
- OpenID and TOTP authentication support
|
||||
- Sanitization of user-generated content
|
||||
|
||||
### Client-Side API Restrictions
|
||||
- **Do not use `crypto.randomUUID()`** or other Web Crypto APIs that require secure contexts - Trilium can run over HTTP, not just HTTPS
|
||||
- Use `randomString()` from `apps/client/src/services/utils.ts` for generating IDs instead
|
||||
|
||||
### Storing User Preferences
|
||||
- **Do not use `localStorage`** for user preferences — Trilium has a synced options system that persists across devices
|
||||
- To add a new user preference:
|
||||
1. Add the option type to `OptionDefinitions` in `packages/commons/src/lib/options_interface.ts`
|
||||
2. Add a default value in `apps/server/src/services/options_init.ts` in the `defaultOptions` array
|
||||
3. **Whitelist the option** in `apps/server/src/routes/api/options.ts` by adding it to the `ALLOWED_OPTIONS` array — **without this, the API will reject changes with "Option 'X' is not allowed to be changed"**
|
||||
4. If the option should be user-editable in the UI, add a control in the appropriate settings component (e.g., `apps/client/src/widgets/type_widgets/options/other.tsx`) and a translation key in `apps/client/src/translations/en/translation.json`
|
||||
5. Use `useTriliumOption("optionName")` hook in React components to read/write the option
|
||||
- Available hooks: `useTriliumOption` (string), `useTriliumOptionBool`, `useTriliumOptionInt`, `useTriliumOptionJson`
|
||||
- See `docs/Developer Guide/Developer Guide/Concepts/Options/Creating a new option.md` for detailed documentation
|
||||
|
||||
### Shared Types Policy
|
||||
- Types shared between client and server belong in `@triliumnext/commons` (`packages/commons/src/lib/`)
|
||||
- Import shared types directly from `@triliumnext/commons` - do not re-export them from app-specific modules
|
||||
- Keep app-specific types (e.g., `LlmProvider` for server, `StreamCallbacks` for client) in their respective apps
|
||||
|
||||
## Common Development Tasks
|
||||
|
||||
### Adding New Note Types
|
||||
@@ -140,10 +188,51 @@ Trilium provides powerful user scripting capabilities:
|
||||
- Create new package in `packages/` following existing plugin structure
|
||||
- Register in `packages/ckeditor5/src/plugins.ts`
|
||||
|
||||
### Adding Hidden System Notes
|
||||
The hidden subtree (`_hidden`) contains system notes with predictable IDs (prefixed with `_`). Defined in `apps/server/src/services/hidden_subtree.ts` via the `HiddenSubtreeItem` interface from `@triliumnext/commons`.
|
||||
|
||||
1. Add the note definition to `buildHiddenSubtreeDefinition()` in `apps/server/src/services/hidden_subtree.ts`
|
||||
2. Add a translation key for the title in `apps/server/src/assets/translations/en/server.json` under `"hidden-subtree"`
|
||||
3. The note is auto-created on startup by `checkHiddenSubtree()` — uses deterministic IDs so all sync cluster instances generate the same structure
|
||||
4. Key properties: `id` (must start with `_`), `title`, `type`, `icon` (format: `bx-icon-name` without `bx ` prefix), `attributes`, `children`, `content`
|
||||
5. Use `enforceAttributes: true` to keep attributes in sync, `enforceBranches: true` for correct placement, `enforceDeleted: true` to remove deprecated notes
|
||||
6. For launcher bar entries, see `hidden_subtree_launcherbar.ts`; for templates, see `hidden_subtree_templates.ts`
|
||||
|
||||
### Writing to Notes from Server Services
|
||||
- `note.setContent()` requires a CLS (Continuation Local Storage) context — wrap calls in `cls.init(() => { ... })` (from `apps/server/src/services/cls.ts`)
|
||||
- Operations called from Express routes already have CLS context; standalone services (schedulers, Electron IPC handlers) do not
|
||||
|
||||
### Adding New LLM Tools
|
||||
Tools are defined using `defineTools()` in `apps/server/src/services/llm/tools/` and automatically registered for both the LLM chat and MCP server.
|
||||
|
||||
1. Add the tool definition in the appropriate module (`note_tools.ts`, `attribute_tools.ts`, `attachment_tools.ts`, `hierarchy_tools.ts`) or create a new module
|
||||
2. Each tool needs: `description`, `inputSchema` (Zod), `execute` function, and optionally `mutates: true` for write operations
|
||||
3. If creating a new module, wrap tools in `defineTools({...})` and add the registry to `allToolRegistries` in `tools/index.ts`
|
||||
4. Add a client-side friendly name in `apps/client/src/translations/en/translation.json` under `llm.tools.<tool_name>` — use **imperative tense** (e.g. "Search notes", "Create note", "Get attributes"), not present continuous
|
||||
5. Use ETAPI (`apps/server/src/etapi/`) as inspiration for what fields to expose, but **do not import ETAPI mappers** — inline the field mappings directly in the tool so the LLM layer stays decoupled from the API layer
|
||||
|
||||
### Updating PDF.js
|
||||
1. Update `pdfjs-dist` version in `packages/pdfjs-viewer/package.json`
|
||||
2. Run `npx tsx scripts/update-viewer.ts` from that directory
|
||||
3. Run `pnpm build` to verify success
|
||||
4. Commit all changes including updated viewer files
|
||||
|
||||
### Database Migrations
|
||||
- Add migration scripts in `apps/server/src/migrations/`
|
||||
- Update schema in `apps/server/src/assets/db/schema.sql`
|
||||
|
||||
### Server-Side Static Assets
|
||||
- Static assets (templates, SQL, translations, etc.) go in `apps/server/src/assets/`
|
||||
- Access them at runtime via `RESOURCE_DIR` from `apps/server/src/services/resource_dir.ts` (e.g. `path.join(RESOURCE_DIR, "llm", "skills", "file.md")`)
|
||||
- **Do not use `import.meta.url`/`fileURLToPath`** to resolve file paths — the server is bundled into CJS for production, so `import.meta.url` will not point to the source directory
|
||||
- **Do not use `__dirname` with relative paths** from source files — after bundling, `__dirname` points to the bundle output, not the original source tree
|
||||
|
||||
## MCP Server
|
||||
- Trilium exposes an MCP (Model Context Protocol) server at `http://localhost:8080/mcp`, configured in `.mcp.json`
|
||||
- The MCP server is **only available when the Trilium server is running** (`pnpm run server:start`)
|
||||
- It provides tools for reading, searching, and modifying notes directly from the AI assistant
|
||||
- Use it to interact with actual note data when developing or debugging note-related features
|
||||
|
||||
## Build System Notes
|
||||
- Uses pnpm for monorepo management
|
||||
- Vite for fast development builds
|
||||
|
||||
84
SECURITY.md
84
SECURITY.md
@@ -2,13 +2,87 @@
|
||||
|
||||
## Supported Versions
|
||||
|
||||
In the (still active) 0.X phase of the project only the latest stable minor release is getting bugfixes (including security ones).
|
||||
Only the latest stable minor release receives security fixes.
|
||||
|
||||
So e.g. if the latest stable version is 0.42.3 and the latest beta version is 0.43.0-beta, then 0.42 line will still get security fixes but older versions (like 0.41.X) won't get any fixes.
|
||||
For example, if the latest stable version is 0.92.3 and the latest beta is 0.93.0-beta, then only the 0.92.x line will receive security patches. Older versions (like 0.91.x) will not receive fixes.
|
||||
|
||||
Description above is a general rule and may be altered on case by case basis.
|
||||
This policy may be altered on a case-by-case basis for critical vulnerabilities.
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
* For low severity vulnerabilities, they can be reported as GitHub issues.
|
||||
* For severe vulnerabilities, please report it using [GitHub Security Advisories](https://github.com/TriliumNext/Trilium/security/advisories).
|
||||
**Please report all security vulnerabilities through [GitHub Security Advisories](https://github.com/TriliumNext/Notes/security/advisories/new).**
|
||||
|
||||
We do not accept security reports via email, public issues, or other channels. GitHub Security Advisories allows us to:
|
||||
- Discuss and triage vulnerabilities privately
|
||||
- Coordinate fixes before public disclosure
|
||||
- Credit reporters appropriately
|
||||
- Publish advisories with CVE identifiers
|
||||
|
||||
### What to Include
|
||||
|
||||
When reporting, please provide:
|
||||
- A clear description of the vulnerability
|
||||
- Steps to reproduce or proof-of-concept
|
||||
- Affected versions (if known)
|
||||
- Potential impact assessment
|
||||
- Any suggested mitigations or fixes
|
||||
|
||||
### Response Timeline
|
||||
|
||||
- **Initial response**: Within 7 days
|
||||
- **Triage decision**: Within 14 days
|
||||
- **Fix timeline**: Depends on severity and complexity
|
||||
|
||||
## Scope
|
||||
|
||||
### In Scope
|
||||
|
||||
- Remote code execution
|
||||
- Authentication/authorization bypass
|
||||
- Cross-site scripting (XSS) that affects other users
|
||||
- SQL injection
|
||||
- Path traversal
|
||||
- Sensitive data exposure
|
||||
- Privilege escalation
|
||||
|
||||
### Out of Scope (Won't Fix)
|
||||
|
||||
The following are considered out of scope or accepted risks:
|
||||
|
||||
#### Self-XSS / Self-Injection
|
||||
Trilium is a personal knowledge base where users have full control over their own data. Users can intentionally create notes containing scripts, HTML, or other executable content. This is by design - Trilium's scripting system allows users to extend functionality with custom JavaScript.
|
||||
|
||||
Vulnerabilities that require a user to inject malicious content into their own notes and then view it themselves are not considered security issues.
|
||||
|
||||
#### Electron Architecture (nodeIntegration)
|
||||
Trilium's desktop application runs with `nodeIntegration: true` to enable its powerful scripting features. This is an intentional design decision, similar to VS Code extensions having full system access. We mitigate risks by:
|
||||
- Sanitizing content at input boundaries
|
||||
- Fixing specific XSS vectors as they're discovered
|
||||
- Using Electron fuses to prevent external abuse
|
||||
|
||||
#### Authenticated User Actions
|
||||
Actions that require valid authentication and only affect the authenticated user's own data are generally not vulnerabilities.
|
||||
|
||||
#### Denial of Service via Resource Exhaustion
|
||||
Creating extremely large notes or performing many operations is expected user behavior in a note-taking application.
|
||||
|
||||
#### Missing Security Headers on Non-Sensitive Endpoints
|
||||
We implement security headers where they provide meaningful protection, but may omit them on endpoints where they provide no practical benefit.
|
||||
|
||||
## Coordinated Disclosure
|
||||
|
||||
We follow a coordinated disclosure process:
|
||||
|
||||
1. **Report received** - We acknowledge receipt and begin triage
|
||||
2. **Fix developed** - We develop and test a fix privately
|
||||
3. **Release prepared** - Security release is prepared with vague changelog
|
||||
4. **Users notified** - Release is published, users encouraged to upgrade
|
||||
5. **Advisory published** - After reasonable upgrade window (typically 2-4 weeks), full advisory is published
|
||||
|
||||
We appreciate reporters allowing us time to fix issues before public disclosure. We aim to credit all reporters in published advisories unless they prefer to remain anonymous.
|
||||
|
||||
## Security Updates
|
||||
|
||||
Security fixes are released as patch versions (e.g., 0.92.1 → 0.92.2) to minimize upgrade friction. We recommend all users keep their installations up to date.
|
||||
|
||||
Subscribe to GitHub releases or watch the repository to receive notifications of new releases.
|
||||
|
||||
@@ -16,13 +16,11 @@
|
||||
"license": "AGPL-3.0-only",
|
||||
"packageManager": "pnpm@10.33.0",
|
||||
"devDependencies": {
|
||||
"@redocly/cli": "2.25.1",
|
||||
"@redocly/cli": "2.28.0",
|
||||
"archiver": "7.0.1",
|
||||
"fs-extra": "11.3.4",
|
||||
"js-yaml": "4.1.1",
|
||||
"react": "19.2.4",
|
||||
"react-dom": "19.2.4",
|
||||
"typedoc": "0.28.18",
|
||||
"typedoc-plugin-missing-exports": "4.1.2"
|
||||
"typedoc": "0.28.19",
|
||||
"typedoc-plugin-missing-exports": "4.1.3"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@triliumnext/client",
|
||||
"version": "0.102.1",
|
||||
"version": "0.102.2",
|
||||
"description": "JQuery-based client for TriliumNext, used for both web and desktop (via Electron)",
|
||||
"private": true,
|
||||
"license": "AGPL-3.0-only",
|
||||
@@ -27,50 +27,49 @@
|
||||
"@maplibre/maplibre-gl-leaflet": "0.1.3",
|
||||
"@mermaid-js/layout-elk": "0.2.1",
|
||||
"@mind-elixir/node-menu": "5.0.1",
|
||||
"@popperjs/core": "2.11.8",
|
||||
"@preact/signals": "2.8.2",
|
||||
"@preact/signals": "2.9.0",
|
||||
"@triliumnext/ckeditor5": "workspace:*",
|
||||
"@triliumnext/codemirror": "workspace:*",
|
||||
"@triliumnext/commons": "workspace:*",
|
||||
"@triliumnext/highlightjs": "workspace:*",
|
||||
"@triliumnext/share-theme": "workspace:*",
|
||||
"@triliumnext/split.js": "workspace:*",
|
||||
"@univerjs/preset-sheets-conditional-formatting": "0.18.0",
|
||||
"@univerjs/preset-sheets-core": "0.18.0",
|
||||
"@univerjs/preset-sheets-data-validation": "0.18.0",
|
||||
"@univerjs/preset-sheets-filter": "0.18.0",
|
||||
"@univerjs/preset-sheets-find-replace": "0.18.0",
|
||||
"@univerjs/preset-sheets-note": "0.18.0",
|
||||
"@univerjs/preset-sheets-sort": "0.18.0",
|
||||
"@univerjs/presets": "0.18.0",
|
||||
"@zumer/snapdom": "2.6.0",
|
||||
"@univerjs/preset-sheets-conditional-formatting": "0.20.1",
|
||||
"@univerjs/preset-sheets-core": "0.20.1",
|
||||
"@univerjs/preset-sheets-data-validation": "0.20.1",
|
||||
"@univerjs/preset-sheets-filter": "0.20.1",
|
||||
"@univerjs/preset-sheets-find-replace": "0.20.1",
|
||||
"@univerjs/preset-sheets-note": "0.20.1",
|
||||
"@univerjs/preset-sheets-sort": "0.20.1",
|
||||
"@univerjs/presets": "0.20.1",
|
||||
"@zumer/snapdom": "2.8.0",
|
||||
"autocomplete.js": "0.38.1",
|
||||
"bootstrap": "5.3.8",
|
||||
"boxicons": "2.1.4",
|
||||
"clsx": "2.1.1",
|
||||
"color": "5.0.3",
|
||||
"debounce": "3.0.0",
|
||||
"dompurify": "3.4.0",
|
||||
"draggabilly": "3.0.0",
|
||||
"force-graph": "1.51.2",
|
||||
"globals": "17.4.0",
|
||||
"i18next": "25.10.10",
|
||||
"i18next-http-backend": "3.0.2",
|
||||
"force-graph": "1.51.4",
|
||||
"htmldiff-js": "1.0.5",
|
||||
"i18next": "26.0.4",
|
||||
"i18next-http-backend": "3.0.4",
|
||||
"jquery": "4.0.0",
|
||||
"jquery.fancytree": "2.38.5",
|
||||
"jsplumb": "2.15.6",
|
||||
"katex": "0.16.43",
|
||||
"katex": "0.16.45",
|
||||
"leaflet": "1.9.4",
|
||||
"leaflet-gpx": "2.2.0",
|
||||
"mark.js": "8.11.1",
|
||||
"marked": "17.0.5",
|
||||
"mermaid": "11.13.0",
|
||||
"mind-elixir": "5.9.3",
|
||||
"normalize.css": "8.0.1",
|
||||
"marked": "18.0.0",
|
||||
"mermaid": "11.14.0",
|
||||
"mind-elixir": "5.10.0",
|
||||
"panzoom": "9.4.4",
|
||||
"preact": "10.29.0",
|
||||
"react-i18next": "16.6.6",
|
||||
"preact": "10.29.1",
|
||||
"react-i18next": "17.0.3",
|
||||
"react-window": "2.2.7",
|
||||
"reveal.js": "6.0.0",
|
||||
"reveal.js": "6.0.1",
|
||||
"rrule": "2.8.1",
|
||||
"svg-pan-zoom": "3.6.2",
|
||||
"tabulator-tables": "6.4.0",
|
||||
@@ -78,7 +77,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@ckeditor/ckeditor5-inspector": "5.0.0",
|
||||
"@prefresh/vite": "2.4.12",
|
||||
"@prefresh/vite": "3.0.0",
|
||||
"@types/bootstrap": "5.2.10",
|
||||
"@types/jquery": "4.0.0",
|
||||
"@types/leaflet": "1.9.21",
|
||||
@@ -86,9 +85,9 @@
|
||||
"@types/mark.js": "8.11.12",
|
||||
"@types/tabulator-tables": "6.3.1",
|
||||
"copy-webpack-plugin": "14.0.0",
|
||||
"happy-dom": "20.8.9",
|
||||
"happy-dom": "20.9.0",
|
||||
"lightningcss": "1.32.0",
|
||||
"script-loader": "0.7.2",
|
||||
"vite-plugin-static-copy": "3.4.0"
|
||||
"vite-plugin-static-copy": "4.0.1"
|
||||
}
|
||||
}
|
||||
|
||||
1
apps/client/src/assets/icon-classic.svg
Normal file
1
apps/client/src/assets/icon-classic.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve"><path d="M63.966,45.043c0.008-0.009,0.021-0.021,0.027-0.029c0.938-1.156-0.823-13.453-5.063-20.125 c-1.389-2.186-2.239-3.423-3.219-4.719c-3.907-5.166-6-6.125-6-6.125S35.732,24.78,36.149,44.315 c-1.754,0.065-11.218,7.528-14.826,14.388c-1.206,2.291-1.856,3.645-2.493,5.141c-2.539,5.957-2.33,8.25-2.33,8.25 s16.271,6.79,33.014-3.294c0.007,0.021,0.013,0.046,0.02,0.063c0.537,1.389,12.08,5.979,19.976,5.621 c2.587-0.116,4.084-0.238,5.696-0.444c6.424-0.818,8.298-2.157,8.298-2.157S81.144,54.396,63.966,45.043z M50.787,65.343 c1.059-1.183,4.648-5.853,0.995-11.315c-0.253-0.377-0.496-0.236-0.496-0.236s0.063,10.822-5.162,12.359 c-5.225,1.537-13.886,4.4-20.427,0.455C25,66.186,26.924,53.606,38.544,47.229c0.546,1.599,2.836,6.854,9.292,6.409 c0.453-0.031,0.453-0.313,0.453-0.313s-9.422-5.328-8.156-10.625s3.089-14.236,9.766-17.948c0.714-0.397,10.746,7.593,10.417,20.94 c-1.606-0.319-7.377-1.004-10.226,4.864c-0.198,0.409,0.046,0.549,0.046,0.549s9.31-5.521,13.275-1.789 c3.965,3.733,10.813,9.763,10.71,17.4C74.111,67.533,62.197,72.258,50.787,65.343z M35.613,35.145c0,0-0.991,3.241-0.603,7.524 l-13.393-7.524C21.618,35.145,27.838,30.931,35.613,35.145z M21.193,36.03l13.344,7.612c-3.872,1.872-6.142,4.388-6.142,4.388 C20.78,43.531,21.193,36.03,21.193,36.03z M72.287,49.064c0,0-2.321-2.471-6.23-4.263l13.187-7.881 C79.243,36.92,79.808,44.413,72.287,49.064z M78.687,36.113l-13.237,7.794c0.3-4.291-0.754-7.511-0.754-7.511 C72.383,32.025,78.687,36.113,78.687,36.113z M42.076,73.778c0,0,3.309-0.737,6.845-3.185l0.056,15.361 C48.977,85.955,42.244,82.621,42.076,73.778z M49.956,85.888L50,70.526c3.539,2.445,6.846,3.181,6.846,3.181 C56.686,82.551,49.956,85.888,49.956,85.888z"></path></svg>
|
||||
|
After Width: | Height: | Size: 1.8 KiB |
17
apps/client/src/assets/icon-nightly.svg
Normal file
17
apps/client/src/assets/icon-nightly.svg
Normal file
@@ -0,0 +1,17 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg enable-background="new 0 0 256 256" version="1.1" viewBox="0 0 256 256" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
|
||||
<title>Trilium Notes</title>
|
||||
<g>
|
||||
<path d="m202.9 112.7c-22.5 16.1-54.5 12.8-74.9 6.3l14.8-11.8 14.1-11.3 49.1-39.3-51.2 35.9-14.3 10-14.9 10.5c0.7-21.2 7-49.9 28.6-65.4 1.8-1.3 3.9-2.6 6.1-3.8 2.7-1.5 5.7-2.9 8.8-4.1 27.1-11.1 68.5-15.3 85.2-9.5 0.1 16.2-15.9 45.4-33.9 65.9-2.4 2.8-4.9 5.4-7.4 7.8-3.4 3.5-6.8 6.4-10.1 8.8z" fill="#ab60e3"/>
|
||||
<path d="m213.1 104c-22.2 12.6-51.4 9.3-70.3 3.2l14.1-11.3 49.1-39.3-51.2 35.9-14.3 10c0.5-18.1 4.9-42.1 19.7-58.6 2.7-1.5 5.7-2.9 8.8-4.1 27.1-11.1 68.5-15.3 85.2-9.5 0.1 16.2-15.9 45.4-33.9 65.9-2.3 2.8-4.8 5.4-7.2 7.8z" fill="#8038b8"/>
|
||||
<path d="m220.5 96.2c-21.1 8.6-46.6 5.3-63.7-0.2l49.2-39.4-51.2 35.9c0.3-15.8 3.5-36.6 14.3-52.8 27.1-11.1 68.5-15.3 85.2-9.5 0.1 16.2-15.9 45.4-33.8 66z" fill="#560a8f"/>
|
||||
|
||||
<path d="m106.7 179c-5.8-21 5.2-43.8 15.5-57.2l4.8 14.2 4.5 13.4 15.9 47-12.8-47.6-3.6-13.2-3.7-13.9c15.5 6.2 35.1 18.6 40.7 38.8 0.5 1.7 0.9 3.6 1.2 5.5 0.4 2.4 0.6 5 0.7 7.7 0.9 23.1-7.1 54.9-15.9 65.7-12-4.3-29.3-24-39.7-42.8-1.4-2.6-2.7-5.1-3.8-7.6-1.6-3.5-2.9-6.8-3.8-10z" fill="#bb9dd2"/>
|
||||
<path d="m110.4 188.9c-3.4-19.8 6.9-40.5 16.6-52.9l4.5 13.4 15.9 47-12.8-47.6-3.6-13.2c13.3 5.2 29.9 15 38.1 30.4 0.4 2.4 0.6 5 0.7 7.7 0.9 23.1-7.1 54.9-15.9 65.7-12-4.3-29.3-24-39.7-42.8-1.4-2.6-2.7-5.2-3.8-7.7z" fill="#9a6cbc"/>
|
||||
<path d="m114.2 196.5c-0.7-18 8.6-35.9 17.3-47.1l15.9 47-12.8-47.6c11.6 4.4 26.1 12.4 35.2 24.8 0.9 23.1-7.1 54.9-15.9 65.7-12-4.3-29.3-24-39.7-42.8z" fill="#783ba5"/>
|
||||
|
||||
<path d="m86.3 59.1c21.7 10.9 32.4 36.6 35.8 54.9l-15.2-6.6-14.5-6.3-50.6-22 48.8 24.9 13.6 6.9 14.3 7.3c-16.6 7.9-41.3 14.5-62.1 4.1-1.8-0.9-3.6-1.9-5.4-3.2-2.3-1.5-4.5-3.2-6.8-5.1-19.9-16.4-40.3-46.4-42.7-61.5 12.4-6.5 41.5-5.8 64.8-0.3 3.2 0.8 6.2 1.6 9.1 2.5 4 1.3 7.6 2.8 10.9 4.4z" fill="#ab60e3"/>
|
||||
<path d="m75.4 54.8c18.9 12 28.4 35.6 31.6 52.6l-14.5-6.3-50.6-22 48.7 24.9 13.6 6.9c-14.1 6.8-34.5 13-53.3 8.2-2.3-1.5-4.5-3.2-6.8-5.1-19.8-16.4-40.2-46.4-42.6-61.5 12.4-6.5 41.5-5.8 64.8-0.3 3.1 0.8 6.2 1.6 9.1 2.6z" fill="#8038b8"/>
|
||||
<path d="m66.3 52.2c15.3 12.8 23.3 33.6 26.1 48.9l-50.6-22 48.8 24.9c-12.2 6-29.6 11.8-46.5 10-19.8-16.4-40.2-46.4-42.6-61.5 12.4-6.5 41.5-5.8 64.8-0.3z" fill="#6f2796"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.3 KiB |
28
apps/client/src/assets/icon.svg
Normal file
28
apps/client/src/assets/icon.svg
Normal file
@@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg enable-background="new 0 0 256 256" version="1.1" viewBox="0 0 256 256" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
|
||||
<title>Trilium Notes</title>
|
||||
<style type="text/css">
|
||||
.st0{fill:#95C980;}
|
||||
.st1{fill:#72B755;}
|
||||
.st2{fill:#4FA52B;}
|
||||
.st3{fill:#EE8C89;}
|
||||
.st4{fill:#E96562;}
|
||||
.st5{fill:#E33F3B;}
|
||||
.st6{fill:#EFB075;}
|
||||
.st7{fill:#E99547;}
|
||||
.st8{fill:#E47B19;}
|
||||
</style>
|
||||
<g>
|
||||
<path class="st0" d="m202.9 112.7c-22.5 16.1-54.5 12.8-74.9 6.3l14.8-11.8 14.1-11.3 49.1-39.3-51.2 35.9-14.3 10-14.9 10.5c0.7-21.2 7-49.9 28.6-65.4 1.8-1.3 3.9-2.6 6.1-3.8 2.7-1.5 5.7-2.9 8.8-4.1 27.1-11.1 68.5-15.3 85.2-9.5 0.1 16.2-15.9 45.4-33.9 65.9-2.4 2.8-4.9 5.4-7.4 7.8-3.4 3.5-6.8 6.4-10.1 8.8z"/>
|
||||
<path class="st1" d="m213.1 104c-22.2 12.6-51.4 9.3-70.3 3.2l14.1-11.3 49.1-39.3-51.2 35.9-14.3 10c0.5-18.1 4.9-42.1 19.7-58.6 2.7-1.5 5.7-2.9 8.8-4.1 27.1-11.1 68.5-15.3 85.2-9.5 0.1 16.2-15.9 45.4-33.9 65.9-2.3 2.8-4.8 5.4-7.2 7.8z"/>
|
||||
<path class="st2" d="m220.5 96.2c-21.1 8.6-46.6 5.3-63.7-0.2l49.2-39.4-51.2 35.9c0.3-15.8 3.5-36.6 14.3-52.8 27.1-11.1 68.5-15.3 85.2-9.5 0.1 16.2-15.9 45.4-33.8 66z"/>
|
||||
|
||||
<path class="st3" d="m106.7 179c-5.8-21 5.2-43.8 15.5-57.2l4.8 14.2 4.5 13.4 15.9 47-12.8-47.6-3.6-13.2-3.7-13.9c15.5 6.2 35.1 18.6 40.7 38.8 0.5 1.7 0.9 3.6 1.2 5.5 0.4 2.4 0.6 5 0.7 7.7 0.9 23.1-7.1 54.9-15.9 65.7-12-4.3-29.3-24-39.7-42.8-1.4-2.6-2.7-5.1-3.8-7.6-1.6-3.5-2.9-6.8-3.8-10z"/>
|
||||
<path class="st4" d="m110.4 188.9c-3.4-19.8 6.9-40.5 16.6-52.9l4.5 13.4 15.9 47-12.8-47.6-3.6-13.2c13.3 5.2 29.9 15 38.1 30.4 0.4 2.4 0.6 5 0.7 7.7 0.9 23.1-7.1 54.9-15.9 65.7-12-4.3-29.3-24-39.7-42.8-1.4-2.6-2.7-5.2-3.8-7.7z"/>
|
||||
<path class="st5" d="m114.2 196.5c-0.7-18 8.6-35.9 17.3-47.1l15.9 47-12.8-47.6c11.6 4.4 26.1 12.4 35.2 24.8 0.9 23.1-7.1 54.9-15.9 65.7-12-4.3-29.3-24-39.7-42.8z"/>
|
||||
|
||||
<path class="st6" d="m86.3 59.1c21.7 10.9 32.4 36.6 35.8 54.9l-15.2-6.6-14.5-6.3-50.6-22 48.8 24.9 13.6 6.9 14.3 7.3c-16.6 7.9-41.3 14.5-62.1 4.1-1.8-0.9-3.6-1.9-5.4-3.2-2.3-1.5-4.5-3.2-6.8-5.1-19.9-16.4-40.3-46.4-42.7-61.5 12.4-6.5 41.5-5.8 64.8-0.3 3.2 0.8 6.2 1.6 9.1 2.5 4 1.3 7.6 2.8 10.9 4.4z"/>
|
||||
<path class="st7" d="m75.4 54.8c18.9 12 28.4 35.6 31.6 52.6l-14.5-6.3-50.6-22 48.7 24.9 13.6 6.9c-14.1 6.8-34.5 13-53.3 8.2-2.3-1.5-4.5-3.2-6.8-5.1-19.8-16.4-40.2-46.4-42.6-61.5 12.4-6.5 41.5-5.8 64.8-0.3 3.1 0.8 6.2 1.6 9.1 2.6z"/>
|
||||
<path class="st8" d="m66.3 52.2c15.3 12.8 23.3 33.6 26.1 48.9l-50.6-22 48.8 24.9c-12.2 6-29.6 11.8-46.5 10-19.8-16.4-40.2-46.4-42.6-61.5 12.4-6.5 41.5-5.8 64.8-0.3z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
@@ -1,10 +1,11 @@
|
||||
import type { CKTextEditor } from "@triliumnext/ckeditor5";
|
||||
import type CodeMirror from "@triliumnext/codemirror";
|
||||
import { SqlExecuteResponse } from "@triliumnext/commons";
|
||||
import { type LOCALE_IDS, SqlExecuteResponse } from "@triliumnext/commons";
|
||||
import type { NativeImage, TouchBar } from "electron";
|
||||
import { ColumnComponent } from "tabulator-tables";
|
||||
|
||||
import type { Attribute } from "../services/attribute_parser.js";
|
||||
import bundleService from "../services/bundle.js";
|
||||
import froca from "../services/froca.js";
|
||||
import { initLocale, t } from "../services/i18n.js";
|
||||
import keyboardActionsService from "../services/keyboard_actions.js";
|
||||
@@ -23,6 +24,7 @@ import { IncludeNoteOpts } from "../widgets/dialogs/include_note.jsx";
|
||||
import type { InfoProps } from "../widgets/dialogs/info.jsx";
|
||||
import type { MarkdownImportOpts } from "../widgets/dialogs/markdown_import.jsx";
|
||||
import { ChooseNoteTypeCallback } from "../widgets/dialogs/note_type_chooser.jsx";
|
||||
import type { PrintPreviewData } from "../widgets/dialogs/print_preview.jsx";
|
||||
import type { PromptDialogOptions } from "../widgets/dialogs/prompt.js";
|
||||
import type NoteTreeWidget from "../widgets/note_tree.js";
|
||||
import Component from "./component.js";
|
||||
@@ -279,6 +281,7 @@ export type CommandMappings = {
|
||||
backInNoteHistory: CommandData;
|
||||
forwardInNoteHistory: CommandData;
|
||||
forceSaveRevision: CommandData;
|
||||
saveNamedRevision: CommandData;
|
||||
scrollToActiveNote: CommandData;
|
||||
quickSearch: CommandData;
|
||||
collapseTree: CommandData;
|
||||
@@ -302,6 +305,7 @@ export type CommandMappings = {
|
||||
ninthTab: CommandData;
|
||||
lastTab: CommandData;
|
||||
showNoteSource: CommandData;
|
||||
showNoteOCRText: CommandData;
|
||||
showSQLConsole: CommandData;
|
||||
showBackendLog: CommandData;
|
||||
showCheatsheet: CommandData;
|
||||
@@ -328,6 +332,7 @@ export type CommandMappings = {
|
||||
toggleRightPane: CommandData;
|
||||
printActiveNote: CommandData;
|
||||
exportAsPdf: CommandData;
|
||||
showPrintPreview: PrintPreviewData;
|
||||
openNoteExternally: CommandData;
|
||||
openNoteCustom: CommandData;
|
||||
openNoteOnServer: CommandData;
|
||||
@@ -508,7 +513,7 @@ type EventMappings = {
|
||||
contentSafeMarginChanged: {
|
||||
top: number;
|
||||
noteContext: NoteContext;
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
export type EventListener<T extends EventNames> = {
|
||||
@@ -562,7 +567,7 @@ export class AppContext extends Component {
|
||||
*/
|
||||
async earlyInit() {
|
||||
await options.initializedPromise;
|
||||
await initLocale();
|
||||
await initLocale((options.get("locale") || "en") as LOCALE_IDS);
|
||||
}
|
||||
|
||||
setLayout(layout: Layout) {
|
||||
@@ -577,7 +582,6 @@ export class AppContext extends Component {
|
||||
|
||||
this.tabManager.loadTabs();
|
||||
|
||||
const bundleService = (await import("../services/bundle.js")).default;
|
||||
setTimeout(() => bundleService.executeStartupBundles(), 2000);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import { CreateChildrenResponse, SqlExecuteResponse } from "@triliumnext/commons";
|
||||
|
||||
import bundleService from "../services/bundle.js";
|
||||
import dialog from "../services/dialog.js";
|
||||
import dateNoteService from "../services/date_notes.js";
|
||||
import froca from "../services/froca.js";
|
||||
import { t } from "../services/i18n.js";
|
||||
@@ -216,4 +217,21 @@ export default class Entrypoints extends Component {
|
||||
|
||||
toastService.showMessage(t("entrypoints.note-revision-created"));
|
||||
}
|
||||
|
||||
async saveNamedRevisionCommand() {
|
||||
const noteId = appContext.tabManager.getActiveContextNoteId();
|
||||
if (!noteId) return;
|
||||
|
||||
const name = await dialog.prompt({
|
||||
title: t("entrypoints.save-named-revision-title"),
|
||||
message: t("entrypoints.save-named-revision-message"),
|
||||
defaultValue: ""
|
||||
});
|
||||
|
||||
// null means the user cancelled
|
||||
if (name === null) return;
|
||||
|
||||
await server.post(`notes/${noteId}/revision`, { description: name || undefined });
|
||||
toastService.showMessage(t("entrypoints.note-revision-created"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,6 +25,15 @@ export type GetTextEditorCallback = (editor: CKTextEditor) => void;
|
||||
|
||||
export type SaveState = "saved" | "saving" | "unsaved" | "error";
|
||||
|
||||
const READ_ONLY_CAPABLE_TYPES: string[] = [
|
||||
"text",
|
||||
"code",
|
||||
"mermaid",
|
||||
"canvas",
|
||||
"mindMap",
|
||||
"spreadsheet"
|
||||
];
|
||||
|
||||
export interface NoteContextDataMap {
|
||||
toc: HeadingContext;
|
||||
pdfPages: {
|
||||
@@ -303,8 +312,12 @@ class NoteContext extends Component implements EventListener<"entitiesReloaded">
|
||||
return false;
|
||||
}
|
||||
|
||||
// "readOnly" is a state valid only for text/code notes
|
||||
if (!this.note || (this.note.type !== "text" && this.note.type !== "code")) {
|
||||
if (!this.note) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Note types that support a read-only state (via the #readOnly label, source view, or auto-readonly).
|
||||
if (!READ_ONLY_CAPABLE_TYPES.includes(this.note.type)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -320,6 +333,11 @@ class NoteContext extends Component implements EventListener<"entitiesReloaded">
|
||||
return true;
|
||||
}
|
||||
|
||||
// Auto read-only based on content size is only configurable for text/code.
|
||||
if (this.note.type !== "text" && this.note.type !== "code") {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Store the initial decision about read-only status in the viewScope
|
||||
// This will be "remembered" until the viewScope is refreshed
|
||||
if (!this.viewScope) {
|
||||
|
||||
@@ -148,6 +148,19 @@ export default class RootCommandExecutor extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
async showNoteOCRTextCommand() {
|
||||
const notePath = appContext.tabManager.getActiveContextNotePath();
|
||||
|
||||
if (notePath) {
|
||||
await appContext.tabManager.openTabWithNoteWithHoisting(notePath, {
|
||||
activate: true,
|
||||
viewScope: {
|
||||
viewMode: "ocr"
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async showAttachmentsCommand() {
|
||||
const notePath = appContext.tabManager.getActiveContextNotePath();
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ function initOnElectron() {
|
||||
const currentWindow = electronRemote.getCurrentWindow();
|
||||
const style = window.getComputedStyle(document.body);
|
||||
|
||||
initDarkOrLightMode(style);
|
||||
initDarkOrLightMode();
|
||||
initTransparencyEffects(style, currentWindow);
|
||||
initFullScreenDetection(currentWindow);
|
||||
|
||||
@@ -119,11 +119,11 @@ function initTransparencyEffects(style: CSSStyleDeclaration, currentWindow: Elec
|
||||
*
|
||||
* @param style the root CSS element to read variables from.
|
||||
*/
|
||||
function initDarkOrLightMode(style: CSSStyleDeclaration) {
|
||||
function initDarkOrLightMode() {
|
||||
let themeSource: typeof nativeTheme.themeSource = "system";
|
||||
|
||||
const themeStyle = style.getPropertyValue("--theme-style");
|
||||
if (style.getPropertyValue("--theme-style-auto") !== "true" && (themeStyle === "light" || themeStyle === "dark")) {
|
||||
const themeStyle = window.glob.getThemeStyle();
|
||||
if (themeStyle !== "auto") {
|
||||
themeSource = themeStyle;
|
||||
}
|
||||
|
||||
|
||||
@@ -66,7 +66,15 @@ class FAttribute {
|
||||
}
|
||||
|
||||
get isAutoLink() {
|
||||
return this.type === "relation" && ["internalLink", "imageLink", "relationMapLink", "includeNoteLink"].includes(this.name);
|
||||
if (this.type === "relation") {
|
||||
return ["internalLink", "imageLink", "relationMapLink", "includeNoteLink"].includes(this.name);
|
||||
}
|
||||
|
||||
if (this.type === "label") {
|
||||
return this.name === "internalBookmark";
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
get toString() {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import { getNoteIcon } from "@triliumnext/commons";
|
||||
|
||||
import bundleService from "../services/bundle.js";
|
||||
import cssClassManager from "../services/css_class_manager.js";
|
||||
import type { Froca } from "../services/froca-interface.js";
|
||||
import noteAttributeCache from "../services/note_attribute_cache.js";
|
||||
@@ -18,7 +19,7 @@ const RELATION = "relation";
|
||||
* end user. Those types should be used only for checking against, they are
|
||||
* not for direct use.
|
||||
*/
|
||||
export type NoteType = "file" | "image" | "search" | "noteMap" | "launcher" | "doc" | "contentWidget" | "text" | "relationMap" | "render" | "canvas" | "mermaid" | "book" | "webView" | "code" | "mindMap" | "spreadsheet";
|
||||
export type NoteType = "file" | "image" | "search" | "noteMap" | "launcher" | "doc" | "contentWidget" | "text" | "relationMap" | "render" | "canvas" | "mermaid" | "book" | "webView" | "code" | "mindMap" | "spreadsheet" | "llmChat";
|
||||
|
||||
export interface NotePathRecord {
|
||||
isArchived: boolean;
|
||||
@@ -235,6 +236,16 @@ export default class FNote {
|
||||
return this.hasAttribute("label", "archived");
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the note's metadata (title, icon) should not be editable.
|
||||
* This applies to system notes like options, help, and launch bar configuration.
|
||||
*/
|
||||
get isMetadataReadOnly() {
|
||||
return utils.isLaunchBarConfig(this.noteId)
|
||||
|| this.noteId.startsWith("_help_")
|
||||
|| this.noteId.startsWith("_options");
|
||||
}
|
||||
|
||||
getChildNoteIds() {
|
||||
return this.children;
|
||||
}
|
||||
@@ -1014,7 +1025,6 @@ export default class FNote {
|
||||
const env = this.getScriptEnv();
|
||||
|
||||
if (env === "frontend") {
|
||||
const bundleService = (await import("../services/bundle.js")).default;
|
||||
return await bundleService.getAndExecuteBundle(this.noteId);
|
||||
} else if (env === "backend") {
|
||||
await server.post(`script/run/${this.noteId}`);
|
||||
@@ -1059,6 +1069,10 @@ export default class FNote {
|
||||
return this.mime === "text/x-sqlite;schema=trilium";
|
||||
}
|
||||
|
||||
isMarkdown() {
|
||||
return this.type === "code" && (this.mime === "text/markdown" || this.mime === "text/x-markdown" || this.mime === "text/x-gfm");
|
||||
}
|
||||
|
||||
isTriliumScript() {
|
||||
return this.mime.startsWith("application/javascript");
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import { getThemeStyle } from "./services/theme";
|
||||
|
||||
async function bootstrap() {
|
||||
showSplash();
|
||||
await setupGlob();
|
||||
@@ -38,6 +40,7 @@ async function setupGlob() {
|
||||
...json,
|
||||
activeDialog: null
|
||||
};
|
||||
window.glob.getThemeStyle = getThemeStyle;
|
||||
}
|
||||
|
||||
async function loadBootstrapCss() {
|
||||
@@ -49,31 +52,65 @@ async function loadBootstrapCss() {
|
||||
}
|
||||
}
|
||||
|
||||
function loadStylesheets() {
|
||||
const { device, assetPath, themeCssUrl, themeUseNextAsBase } = window.glob;
|
||||
type StylesheetRef = {
|
||||
href: string;
|
||||
media?: string;
|
||||
};
|
||||
|
||||
const cssToLoad: string[] = [];
|
||||
if (device !== "print") {
|
||||
cssToLoad.push(`${assetPath}/stylesheets/ckeditor-theme.css`);
|
||||
cssToLoad.push(`api/fonts`);
|
||||
cssToLoad.push(`${assetPath}/stylesheets/theme-light.css`);
|
||||
if (themeCssUrl) {
|
||||
cssToLoad.push(themeCssUrl);
|
||||
}
|
||||
if (themeUseNextAsBase === "next") {
|
||||
cssToLoad.push(`${assetPath}/stylesheets/theme-next.css`);
|
||||
} else if (themeUseNextAsBase === "next-dark") {
|
||||
cssToLoad.push(`${assetPath}/stylesheets/theme-next-dark.css`);
|
||||
} else if (themeUseNextAsBase === "next-light") {
|
||||
cssToLoad.push(`${assetPath}/stylesheets/theme-next-light.css`);
|
||||
}
|
||||
cssToLoad.push(`${assetPath}/stylesheets/style.css`);
|
||||
function getConfiguredThemeStylesheets(stylesheetsPath: string, theme: string, customThemeCssUrl?: string) {
|
||||
if (theme === "auto") {
|
||||
return [{ href: `${stylesheetsPath}/theme-dark.css`, media: "(prefers-color-scheme: dark)" }];
|
||||
}
|
||||
|
||||
for (const href of cssToLoad) {
|
||||
if (theme === "dark") {
|
||||
return [{ href: `${stylesheetsPath}/theme-dark.css` }];
|
||||
}
|
||||
|
||||
if (theme === "next") {
|
||||
return [
|
||||
{ href: `${stylesheetsPath}/theme-next-light.css` },
|
||||
{ href: `${stylesheetsPath}/theme-next-dark.css`, media: "(prefers-color-scheme: dark)" }
|
||||
];
|
||||
}
|
||||
|
||||
if (theme === "next-light") {
|
||||
return [{ href: `${stylesheetsPath}/theme-next-light.css` }];
|
||||
}
|
||||
|
||||
if (theme === "next-dark") {
|
||||
return [{ href: `${stylesheetsPath}/theme-next-dark.css` }];
|
||||
}
|
||||
|
||||
if (theme !== "light" && customThemeCssUrl) {
|
||||
return [{ href: customThemeCssUrl }];
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
function loadStylesheets() {
|
||||
const { device, assetPath, theme, themeBase, customThemeCssUrl } = window.glob;
|
||||
const stylesheetsPath = `${assetPath}/stylesheets`;
|
||||
|
||||
const cssToLoad: StylesheetRef[] = [];
|
||||
if (device !== "print") {
|
||||
cssToLoad.push({ href: `${stylesheetsPath}/ckeditor-theme.css` });
|
||||
cssToLoad.push({ href: `api/fonts` });
|
||||
cssToLoad.push({ href: `${stylesheetsPath}/theme-light.css` });
|
||||
cssToLoad.push(...getConfiguredThemeStylesheets(stylesheetsPath, theme, customThemeCssUrl));
|
||||
if (themeBase) {
|
||||
cssToLoad.push(...getConfiguredThemeStylesheets(stylesheetsPath, themeBase));
|
||||
}
|
||||
cssToLoad.push({ href: `${stylesheetsPath}/style.css` });
|
||||
}
|
||||
|
||||
for (const { href, media } of cssToLoad) {
|
||||
const linkEl = document.createElement("link");
|
||||
linkEl.href = href;
|
||||
linkEl.rel = "stylesheet";
|
||||
if (media) {
|
||||
linkEl.media = media;
|
||||
}
|
||||
document.head.appendChild(linkEl);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import InfoDialog from "../widgets/dialogs/info.js";
|
||||
import IncorrectCpuArchDialog from "../widgets/dialogs/incorrect_cpu_arch.js";
|
||||
import CallToActionDialog from "../widgets/dialogs/call_to_action.jsx";
|
||||
import PopupEditorDialog from "../widgets/dialogs/PopupEditor.jsx";
|
||||
import PrintPreviewDialog from "../widgets/dialogs/print_preview.jsx";
|
||||
import ToastContainer from "../widgets/Toast.jsx";
|
||||
|
||||
export function applyModals(rootContainer: RootContainer) {
|
||||
@@ -51,6 +52,7 @@ export function applyModals(rootContainer: RootContainer) {
|
||||
.child(<PromptDialog />)
|
||||
.child(<IncorrectCpuArchDialog />)
|
||||
.child(<PopupEditorDialog />)
|
||||
.child(<PrintPreviewDialog />)
|
||||
.child(<CallToActionDialog />)
|
||||
.child(<ToastContainer />);
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@ export interface MenuCommandItem<T> {
|
||||
title: string;
|
||||
command?: T;
|
||||
type?: string;
|
||||
mime?: string;
|
||||
/**
|
||||
* The icon to display in the menu item.
|
||||
*
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
import utils from "../services/utils.js";
|
||||
import options from "../services/options.js";
|
||||
import zoomService from "../components/zoom.js";
|
||||
import contextMenu, { type MenuItem } from "./context_menu.js";
|
||||
import { t } from "../services/i18n.js";
|
||||
import server from "../services/server.js";
|
||||
import * as clipboardExt from "../services/clipboard_ext.js";
|
||||
import type { BrowserWindow } from "electron";
|
||||
import type { CommandNames, AppContext } from "../components/app_context.js";
|
||||
|
||||
import type { CommandNames } from "../components/app_context.js";
|
||||
import appContext from "../components/app_context.js";
|
||||
import zoomService from "../components/zoom.js";
|
||||
import * as clipboardExt from "../services/clipboard_ext.js";
|
||||
import { t } from "../services/i18n.js";
|
||||
import options from "../services/options.js";
|
||||
import server from "../services/server.js";
|
||||
import utils from "../services/utils.js";
|
||||
import contextMenu, { type MenuItem } from "./context_menu.js";
|
||||
|
||||
function setupContextMenu() {
|
||||
const electron = utils.dynamicRequire("electron");
|
||||
@@ -15,8 +17,6 @@ function setupContextMenu() {
|
||||
// FIXME: Remove typecast once Electron is properly integrated.
|
||||
const { webContents } = remote.getCurrentWindow() as BrowserWindow;
|
||||
|
||||
let appContext: AppContext;
|
||||
|
||||
webContents.on("context-menu", (event, params) => {
|
||||
const { editFlags } = params;
|
||||
const hasText = params.selectionText.trim().length > 0;
|
||||
@@ -38,7 +38,7 @@ function setupContextMenu() {
|
||||
items.push({
|
||||
title: t("electron_context_menu.add-term-to-dictionary", { term: params.misspelledWord }),
|
||||
uiIcon: "bx bx-plus",
|
||||
handler: () => webContents.session.addWordToSpellCheckerDictionary(params.misspelledWord)
|
||||
handler: () => electron.ipcRenderer.send("add-word-to-dictionary", params.misspelledWord)
|
||||
});
|
||||
|
||||
items.push({ kind: "separator" });
|
||||
@@ -141,7 +141,7 @@ function setupContextMenu() {
|
||||
}
|
||||
|
||||
// Replace the placeholder with the real search keyword.
|
||||
let searchUrl = searchEngineUrl.replace("{keyword}", encodeURIComponent(params.selectionText));
|
||||
const searchUrl = searchEngineUrl.replace("{keyword}", encodeURIComponent(params.selectionText));
|
||||
|
||||
items.push({ kind: "separator" });
|
||||
|
||||
@@ -155,10 +155,6 @@ function setupContextMenu() {
|
||||
title: t("electron_context_menu.search_in_trilium", { term: shortenedSelection }),
|
||||
uiIcon: "bx bx-search",
|
||||
handler: async () => {
|
||||
if (!appContext) {
|
||||
appContext = (await import("../components/app_context.js")).default;
|
||||
}
|
||||
|
||||
await appContext.triggerCommand("searchNotes", {
|
||||
searchString: params.selectionText
|
||||
});
|
||||
|
||||
101
apps/client/src/menus/launcher_button_context_menu.ts
Normal file
101
apps/client/src/menus/launcher_button_context_menu.ts
Normal file
@@ -0,0 +1,101 @@
|
||||
import type { ToggleInParentResponse } from "@triliumnext/commons";
|
||||
|
||||
import type FNote from "../entities/fnote.js";
|
||||
import branchService from "../services/branches.js";
|
||||
import { t } from "../services/i18n.js";
|
||||
import server from "../services/server.js";
|
||||
import toast from "../services/toast.js";
|
||||
import contextMenu, { type ContextMenuEvent, type MenuItem } from "./context_menu.js";
|
||||
|
||||
const VISIBLE_LAUNCHER_PARENTS = ["_lbVisibleLaunchers", "_lbMobileVisibleLaunchers"];
|
||||
|
||||
function getVisibleLauncherBranch(launcherNote: FNote) {
|
||||
return launcherNote.getParentBranches().find((b) => VISIBLE_LAUNCHER_PARENTS.includes(b.parentNoteId));
|
||||
}
|
||||
|
||||
function getBookmarkBranch(launcherNote: FNote) {
|
||||
return launcherNote.getParentBranches().find((b) => b.parentNoteId === "_lbBookmarks");
|
||||
}
|
||||
|
||||
async function removeFromLaunchBar(launcherNote: FNote) {
|
||||
const bookmarkBranch = getBookmarkBranch(launcherNote);
|
||||
if (bookmarkBranch) {
|
||||
// Individual bookmarks are represented via a branch under `_lbBookmarks`; removing them
|
||||
// from the launch bar is the same as unbookmarking the note.
|
||||
const resp = await server.put<ToggleInParentResponse>(
|
||||
`notes/${launcherNote.noteId}/toggle-in-parent/_lbBookmarks/false`
|
||||
);
|
||||
if (!resp.success && resp.message) {
|
||||
toast.showError(resp.message);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
const launcherBranch = getVisibleLauncherBranch(launcherNote);
|
||||
if (!launcherBranch) return;
|
||||
|
||||
const isMobileLauncher = launcherBranch.parentNoteId === "_lbMobileVisibleLaunchers";
|
||||
// Branch IDs in the hidden subtree follow the `${parentNoteId}_${noteId}` convention,
|
||||
// so the branch linking `_lb(Mobile)?Root` to the "available" launchers root is predictable.
|
||||
const targetBranchId = isMobileLauncher
|
||||
? "_lbMobileRoot__lbMobileAvailableLaunchers"
|
||||
: "_lbRoot__lbAvailableLaunchers";
|
||||
await branchService.moveToParentNote([launcherBranch.branchId], targetBranchId);
|
||||
}
|
||||
|
||||
export function canRemoveFromLaunchBar(launcherNote: FNote | null | undefined) {
|
||||
if (!launcherNote) return false;
|
||||
return !!(getVisibleLauncherBranch(launcherNote) || getBookmarkBranch(launcherNote));
|
||||
}
|
||||
|
||||
export interface ShowLauncherContextMenuOptions<T extends string> {
|
||||
/** Menu items specific to this launcher (e.g. "Open in new tab" for note-based launchers). They appear above the "Remove from launch bar" item. */
|
||||
extraItems?: MenuItem<T>[];
|
||||
/** Handler for the {@link extraItems}. The "Remove from launch bar" item is handled internally and will not be forwarded. */
|
||||
onCommand?: (command: T | undefined) => void;
|
||||
}
|
||||
|
||||
const REMOVE_COMMAND = "__removeFromLaunchBar__";
|
||||
|
||||
/**
|
||||
* Displays the launch bar icon context menu. When the launcher can be removed (i.e. it is a direct
|
||||
* child of the visible launchers root or of `_lbBookmarks`), a "Remove from launch bar" entry is
|
||||
* appended. Extra items can be supplied to preserve launcher-specific actions (e.g. "Open in new tab").
|
||||
*/
|
||||
export async function showLauncherContextMenu<T extends string>(
|
||||
launcherNote: FNote | null | undefined,
|
||||
e: ContextMenuEvent,
|
||||
options: ShowLauncherContextMenuOptions<T> = {}
|
||||
) {
|
||||
e.preventDefault();
|
||||
|
||||
const items = [...(options.extraItems ?? [])] as MenuItem<string>[];
|
||||
|
||||
if (canRemoveFromLaunchBar(launcherNote)) {
|
||||
if (items.length > 0) {
|
||||
items.push({ kind: "separator" });
|
||||
}
|
||||
items.push({
|
||||
title: t("launcher_button_context_menu.remove_from_launch_bar"),
|
||||
command: REMOVE_COMMAND,
|
||||
uiIcon: "bx bx-x-circle"
|
||||
});
|
||||
}
|
||||
|
||||
if (items.length === 0) return;
|
||||
|
||||
contextMenu.show<string>({
|
||||
x: e.pageX ?? 0,
|
||||
y: e.pageY ?? 0,
|
||||
items,
|
||||
selectMenuItemHandler: ({ command }) => {
|
||||
if (command === REMOVE_COMMAND) {
|
||||
if (launcherNote) {
|
||||
void removeFromLaunchBar(launcherNote);
|
||||
}
|
||||
return;
|
||||
}
|
||||
options.onCommand?.(command as T | undefined);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -288,7 +288,7 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
|
||||
return items.filter((row) => row !== null) as MenuItem<TreeCommandNames>[];
|
||||
}
|
||||
|
||||
async selectMenuItemHandler({ command, type, templateNoteId }: MenuCommandItem<TreeCommandNames>) {
|
||||
async selectMenuItemHandler({ command, type, mime, templateNoteId }: MenuCommandItem<TreeCommandNames>) {
|
||||
const notePath = treeService.getNotePath(this.node);
|
||||
|
||||
if (utils.isMobile()) {
|
||||
@@ -305,6 +305,7 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
|
||||
target: "after",
|
||||
targetBranchId: this.node.data.branchId,
|
||||
type,
|
||||
mime,
|
||||
isProtected,
|
||||
templateNoteId
|
||||
});
|
||||
@@ -313,6 +314,7 @@ export default class TreeContextMenu implements SelectMenuItemEventListener<Tree
|
||||
|
||||
noteCreateService.createNote(parentNotePath, {
|
||||
type,
|
||||
mime,
|
||||
isProtected: this.node.data.isProtected,
|
||||
templateNoteId
|
||||
});
|
||||
|
||||
@@ -2,18 +2,17 @@
|
||||
|
||||
:root {
|
||||
--print-font-size: 11pt;
|
||||
--ck-content-color-image-caption-background: transparent !important;
|
||||
}
|
||||
|
||||
|
||||
html,
|
||||
body {
|
||||
--print-font-family: var(--detail-font-family, sans-serif);
|
||||
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
color: black;
|
||||
}
|
||||
|
||||
@page {
|
||||
margin: 2cm;
|
||||
font-family: var(--print-font-family);
|
||||
}
|
||||
|
||||
.note-list-widget.full-height,
|
||||
@@ -26,6 +25,12 @@ body {
|
||||
}
|
||||
|
||||
body[data-note-type="text"] .ck-content {
|
||||
--ck-content-font-family: var(--print-font-family);
|
||||
--ck-content-font-size: var(--print-font-size);
|
||||
--ck-content-font-color: black;
|
||||
--ck-content-line-height: 1.5;
|
||||
--ck-content-color-image-caption-background: transparent;
|
||||
|
||||
font-size: var(--print-font-size);
|
||||
text-align: justify;
|
||||
}
|
||||
@@ -154,4 +159,4 @@ span[style] {
|
||||
.page-break::after {
|
||||
display: none !important;
|
||||
}
|
||||
/* #endregion */
|
||||
/* #endregion */
|
||||
|
||||
@@ -4,6 +4,7 @@ import { useCallback, useLayoutEffect, useRef } from "preact/hooks";
|
||||
import FNote from "./entities/fnote";
|
||||
import content_renderer from "./services/content_renderer";
|
||||
import { applyInlineMermaid } from "./services/content_renderer_text";
|
||||
import froca from "./services/froca";
|
||||
import { dynamicRequire, isElectron } from "./services/utils";
|
||||
import { CustomNoteList, useNoteViewType } from "./widgets/collections/NoteList";
|
||||
|
||||
@@ -30,7 +31,21 @@ async function main() {
|
||||
if (!noteId) return;
|
||||
|
||||
await import("./print.css");
|
||||
const froca = (await import("./services/froca")).default;
|
||||
|
||||
// Browser printing relies on @page margins since there's no programmatic control.
|
||||
// Electron uses printToPDF() margins instead, so we only inject this for the browser path.
|
||||
if (!isElectron()) {
|
||||
const style = document.createElement("style");
|
||||
style.textContent = "@page { margin: 2cm; }";
|
||||
document.head.appendChild(style);
|
||||
}
|
||||
|
||||
// Load the user's font preferences so that --detail-font-family is available.
|
||||
const fontLink = document.createElement("link");
|
||||
fontLink.rel = "stylesheet";
|
||||
fontLink.href = "api/fonts";
|
||||
document.head.appendChild(fontLink);
|
||||
|
||||
const note = await froca.getNote(noteId);
|
||||
|
||||
const bodyWrapper = document.createElement("div");
|
||||
@@ -105,6 +120,9 @@ function SingleNoteRenderer({ note, onReady }: RendererProps) {
|
||||
|
||||
// Check custom CSS.
|
||||
await loadCustomCss(note);
|
||||
|
||||
// Wait for all fonts (including those from custom CSS) to finish loading.
|
||||
await document.fonts.ready;
|
||||
}
|
||||
|
||||
load().then(() => requestAnimationFrame(() => onReady({
|
||||
@@ -130,6 +148,7 @@ function CollectionRenderer({ note, onReady, onProgressChanged }: RendererProps)
|
||||
media="print"
|
||||
onReady={async (data: PrintReport) => {
|
||||
await loadCustomCss(note);
|
||||
await document.fonts.ready;
|
||||
onReady(data);
|
||||
}}
|
||||
onProgressChanged={onProgressChanged}
|
||||
|
||||
@@ -7,6 +7,10 @@ async function renderAttribute(attribute: FAttribute, renderIsInheritable: boole
|
||||
const isInheritable = renderIsInheritable && attribute.isInheritable ? `(inheritable)` : "";
|
||||
const $attr = $("<span>");
|
||||
|
||||
if (attribute.isAutoLink) {
|
||||
return $attr;
|
||||
}
|
||||
|
||||
if (attribute.type === "label") {
|
||||
$attr.append(document.createTextNode(`#${attribute.name}${isInheritable}`));
|
||||
|
||||
@@ -15,9 +19,6 @@ async function renderAttribute(attribute: FAttribute, renderIsInheritable: boole
|
||||
$attr.append(document.createTextNode(formatValue(attribute.value)));
|
||||
}
|
||||
} else if (attribute.type === "relation") {
|
||||
if (attribute.isAutoLink) {
|
||||
return $attr;
|
||||
}
|
||||
|
||||
// when the relation has just been created, then it might not have a value
|
||||
if (attribute.value) {
|
||||
|
||||
@@ -6,10 +6,8 @@ import froca from "./froca";
|
||||
import server from "./server.js";
|
||||
|
||||
// Spy on server methods to track calls
|
||||
// @ts-expect-error the generic typing is causing issues here
|
||||
server.put = vi.fn(async <T> (url: string, data?: T) => ({} as T));
|
||||
// @ts-expect-error the generic typing is causing issues here
|
||||
server.remove = vi.fn(async <T> (url: string) => ({} as T));
|
||||
server.put = vi.fn(async () => ({})) as typeof server.put;
|
||||
server.remove = vi.fn(async () => ({})) as typeof server.remove;
|
||||
|
||||
describe("Set boolean with inheritance", () => {
|
||||
beforeEach(() => {
|
||||
|
||||
@@ -120,7 +120,7 @@ async function deleteNotes(branchIdsToDelete: string[], forceDeleteAllClones = f
|
||||
|
||||
if (moveToParent) {
|
||||
try {
|
||||
await activateParentNotePath();
|
||||
await activateParentNotePath(branchIdsToDelete);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
@@ -152,13 +152,28 @@ async function deleteNotes(branchIdsToDelete: string[], forceDeleteAllClones = f
|
||||
return true;
|
||||
}
|
||||
|
||||
async function activateParentNotePath() {
|
||||
// this is not perfect, maybe we should find the next/previous sibling, but that's more complex
|
||||
async function activateParentNotePath(branchIdsToDelete: string[]) {
|
||||
const activeContext = appContext.tabManager.getActiveContext();
|
||||
const parentNotePathArr = activeContext?.notePathArray.slice(0, -1);
|
||||
const activeNotePath = activeContext?.notePathArray ?? [];
|
||||
|
||||
if (parentNotePathArr && parentNotePathArr.length > 0) {
|
||||
activeContext?.setNote(parentNotePathArr.join("/"));
|
||||
// Find the deleted branch that appears earliest in the active note's path
|
||||
let earliestIndex = activeNotePath.length;
|
||||
for (const branchId of branchIdsToDelete) {
|
||||
const branch = froca.getBranch(branchId);
|
||||
if (branch) {
|
||||
const index = activeNotePath.indexOf(branch.noteId);
|
||||
if (index !== -1 && index < earliestIndex) {
|
||||
earliestIndex = index;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Navigate to the parent of the highest deleted ancestor
|
||||
if (earliestIndex < activeNotePath.length) {
|
||||
const parentPath = activeNotePath.slice(0, earliestIndex);
|
||||
if (parentPath.length > 0) {
|
||||
await activeContext?.setNote(parentPath.join("/"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ type WithNoteId<T> = T & {
|
||||
};
|
||||
export type Widget = WithNoteId<(LegacyWidget | WidgetDefinitionWithType)>;
|
||||
|
||||
async function getAndExecuteBundle(noteId: string, originEntity = null, script = null, params = null) {
|
||||
async function getAndExecuteBundle(noteId: string, originEntity: Entity | null = null, script: string | null = null, params: string | null = null) {
|
||||
const bundle = await server.post<Bundle>(`script/bundle/${noteId}`, {
|
||||
script,
|
||||
params
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
import { t } from "./i18n.js";
|
||||
import toast from "./toast.js";
|
||||
|
||||
export function copyText(text: string) {
|
||||
if (!text) {
|
||||
return;
|
||||
@@ -6,29 +9,26 @@ export function copyText(text: string) {
|
||||
if (navigator.clipboard) {
|
||||
navigator.clipboard.writeText(text);
|
||||
return true;
|
||||
} else {
|
||||
// Fallback method: https://stackoverflow.com/a/72239825
|
||||
const textArea = document.createElement("textarea");
|
||||
textArea.value = text;
|
||||
try {
|
||||
document.body.appendChild(textArea);
|
||||
textArea.focus();
|
||||
textArea.select();
|
||||
return document.execCommand('copy');
|
||||
} finally {
|
||||
document.body.removeChild(textArea);
|
||||
}
|
||||
}
|
||||
// Fallback method: https://stackoverflow.com/a/72239825
|
||||
const textArea = document.createElement("textarea");
|
||||
textArea.value = text;
|
||||
try {
|
||||
document.body.appendChild(textArea);
|
||||
textArea.focus();
|
||||
textArea.select();
|
||||
return document.execCommand('copy');
|
||||
} finally {
|
||||
document.body.removeChild(textArea);
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
console.warn(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
export async function copyTextWithToast(text: string) {
|
||||
const t = (await import("./i18n.js")).t;
|
||||
const toast = (await import("./toast.js")).default;
|
||||
|
||||
export function copyTextWithToast(text: string) {
|
||||
if (copyText(text)) {
|
||||
toast.showMessage(t("clipboard.copy_success"));
|
||||
} else {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import "./content_renderer.css";
|
||||
|
||||
import { normalizeMimeTypeForCKEditor } from "@triliumnext/commons";
|
||||
import { normalizeMimeTypeForCKEditor, renderToHtml, type TextRepresentationResponse } from "@triliumnext/commons";
|
||||
import DOMPurify from "dompurify";
|
||||
import { h, render } from "preact";
|
||||
import WheelZoom from 'vanilla-js-wheel-zoom';
|
||||
|
||||
@@ -8,13 +9,14 @@ import FAttachment from "../entities/fattachment.js";
|
||||
import FNote from "../entities/fnote.js";
|
||||
import imageContextMenuService from "../menus/image_context_menu.js";
|
||||
import { t } from "../services/i18n.js";
|
||||
import renderText from "./content_renderer_text.js";
|
||||
import renderText, { postProcessRichContent, renderChildrenList } from "./content_renderer_text.js";
|
||||
import renderDoc from "./doc_renderer.js";
|
||||
import { loadElkIfNeeded, postprocessMermaidSvg } from "./mermaid.js";
|
||||
import openService from "./open.js";
|
||||
import protectedSessionService from "./protected_session.js";
|
||||
import protectedSessionHolder from "./protected_session_holder.js";
|
||||
import renderService from "./render.js";
|
||||
import server from "./server.js";
|
||||
import { applySingleBlockSyntaxHighlight } from "./syntax_highlight.js";
|
||||
import utils, { getErrorMessage } from "./utils.js";
|
||||
|
||||
@@ -32,6 +34,7 @@ export interface RenderOptions {
|
||||
includeArchivedNotes?: boolean;
|
||||
/** Set of note IDs that have already been seen during rendering to prevent infinite recursion. */
|
||||
seenNoteIds?: Set<string>;
|
||||
showTextRepresentation?: boolean;
|
||||
}
|
||||
|
||||
const CODE_MIME_TYPES = new Set(["application/json"]);
|
||||
@@ -52,12 +55,14 @@ export async function getRenderedContent(this: {} | { ctx: string }, entity: FNo
|
||||
|
||||
if (type === "text" || type === "book") {
|
||||
await renderText(entity, $renderedContent, options);
|
||||
} else if (type === "markdown") {
|
||||
await renderMarkdown(entity, $renderedContent, options);
|
||||
} else if (type === "code") {
|
||||
await renderCode(entity, $renderedContent);
|
||||
} else if (["image", "canvas", "mindMap", "spreadsheet"].includes(type)) {
|
||||
renderImage(entity, $renderedContent, options);
|
||||
await renderImage(entity, $renderedContent, options);
|
||||
} else if (!options.tooltip && ["file", "pdf", "audio", "video"].includes(type)) {
|
||||
await renderFile(entity, type, $renderedContent);
|
||||
await renderFile(entity, type, $renderedContent, options);
|
||||
} else if (type === "mermaid") {
|
||||
await renderMermaid(entity, $renderedContent);
|
||||
} else if (type === "render" && entity instanceof FNote) {
|
||||
@@ -117,6 +122,31 @@ export async function getRenderedContent(this: {} | { ctx: string }, entity: FNo
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a markdown note by converting its source to CKEditor-compatible HTML,
|
||||
* then running the same post-render pipeline as text notes (included notes,
|
||||
* math, reference links, Mermaid, code highlight) so the preview matches what
|
||||
* the user sees in the Markdown note type's preview pane.
|
||||
*/
|
||||
async function renderMarkdown(note: FNote | FAttachment, $renderedContent: JQuery<HTMLElement>, options: RenderOptions) {
|
||||
const blob = await note.getBlob();
|
||||
const source = blob?.content ?? "";
|
||||
|
||||
if (!source.trim()) {
|
||||
if (note instanceof FNote && !options.noChildrenList) {
|
||||
await renderChildrenList($renderedContent, note, options.includeArchivedNotes ?? false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
const html = renderToHtml(source, note.title, {
|
||||
sanitize: (dirty) => DOMPurify.sanitize(dirty),
|
||||
wikiLink: { formatHref: (id) => `#root/${id}` }
|
||||
});
|
||||
$renderedContent.append($('<div class="ck-content">').html(html));
|
||||
await postProcessRichContent(note, $renderedContent, options);
|
||||
}
|
||||
|
||||
/**
|
||||
* Renders a code note, by displaying its content and applying syntax highlighting based on the selected MIME type.
|
||||
*/
|
||||
@@ -138,7 +168,7 @@ async function renderCode(note: FNote | FAttachment, $renderedContent: JQuery<HT
|
||||
await applySingleBlockSyntaxHighlight($codeBlock, normalizeMimeTypeForCKEditor(note.mime));
|
||||
}
|
||||
|
||||
function renderImage(entity: FNote | FAttachment, $renderedContent: JQuery<HTMLElement>, options: RenderOptions = {}) {
|
||||
async function renderImage(entity: FNote | FAttachment, $renderedContent: JQuery<HTMLElement>, options: RenderOptions = {}) {
|
||||
const encodedTitle = encodeURIComponent(entity.title);
|
||||
|
||||
let url;
|
||||
@@ -146,13 +176,14 @@ function renderImage(entity: FNote | FAttachment, $renderedContent: JQuery<HTMLE
|
||||
if (entity instanceof FNote) {
|
||||
url = `api/images/${entity.noteId}/${encodedTitle}?${Math.random()}`;
|
||||
} else if (entity instanceof FAttachment) {
|
||||
url = `api/attachments/${entity.attachmentId}/image/${encodedTitle}?${entity.utcDateModified}">`;
|
||||
url = `api/attachments/${entity.attachmentId}/image/${encodedTitle}?${entity.utcDateModified}`;
|
||||
}
|
||||
|
||||
$renderedContent // styles needed for the zoom to work well
|
||||
.css("display", "flex")
|
||||
.css("align-items", "center")
|
||||
.css("justify-content", "center");
|
||||
.css("justify-content", "center")
|
||||
.css("flex-direction", "column"); // OCR text is displayed below the image.
|
||||
|
||||
const $img = $("<img>")
|
||||
.attr("src", url || "")
|
||||
@@ -178,9 +209,35 @@ function renderImage(entity: FNote | FAttachment, $renderedContent: JQuery<HTMLE
|
||||
}
|
||||
|
||||
imageContextMenuService.setupContextMenu($img);
|
||||
|
||||
if (entity instanceof FNote && options.showTextRepresentation) {
|
||||
await addOCRTextIfAvailable(entity, $renderedContent);
|
||||
}
|
||||
}
|
||||
|
||||
async function renderFile(entity: FNote | FAttachment, type: string, $renderedContent: JQuery<HTMLElement>) {
|
||||
async function addOCRTextIfAvailable(note: FNote, $content: JQuery<HTMLElement>) {
|
||||
try {
|
||||
const data = await server.get<TextRepresentationResponse>(`ocr/notes/${note.noteId}/text`);
|
||||
if (data.success && data.hasOcr && data.text) {
|
||||
const $ocrSection = $(`
|
||||
<div class="ocr-text-section">
|
||||
<div class="ocr-header">
|
||||
<span class="bx bx-text"></span> ${t("ocr.extracted_text")}
|
||||
</div>
|
||||
<div class="ocr-content"></div>
|
||||
</div>
|
||||
`);
|
||||
|
||||
$ocrSection.find('.ocr-content').text(data.text);
|
||||
$content.append($ocrSection);
|
||||
}
|
||||
} catch (error) {
|
||||
// Silently fail if OCR API is not available
|
||||
console.debug('Failed to fetch OCR text:', error);
|
||||
}
|
||||
}
|
||||
|
||||
async function renderFile(entity: FNote | FAttachment, type: string, $renderedContent: JQuery<HTMLElement>, options: RenderOptions = {}) {
|
||||
let entityType, entityId;
|
||||
|
||||
if (entity instanceof FNote) {
|
||||
@@ -220,6 +277,10 @@ async function renderFile(entity: FNote | FAttachment, type: string, $renderedCo
|
||||
$content.append($videoPreview);
|
||||
}
|
||||
|
||||
if (entity instanceof FNote && options.showTextRepresentation) {
|
||||
await addOCRTextIfAvailable(entity, $content);
|
||||
}
|
||||
|
||||
if (entityType === "notes" && "noteId" in entity) {
|
||||
// TODO: we should make this available also for attachments, but there's a problem with "Open externally" support
|
||||
// in attachment list
|
||||
@@ -297,6 +358,8 @@ function getRenderingType(entity: FNote | FAttachment) {
|
||||
|
||||
if (type === "file" && mime === "application/pdf") {
|
||||
type = "pdf";
|
||||
} else if (type === "code" && entity instanceof FNote && entity.isMarkdown()) {
|
||||
type = "markdown";
|
||||
} else if ((type === "file" || type === "viewConfig") && mime && CODE_MIME_TYPES.has(mime) && !isIconPack) {
|
||||
type = "code";
|
||||
} else if (type === "file" && mime && mime.startsWith("audio/")) {
|
||||
|
||||
@@ -15,37 +15,47 @@ export default async function renderText(note: FNote | FAttachment, $renderedCon
|
||||
|
||||
if (blob && !isHtmlEmpty(blob.content)) {
|
||||
$renderedContent.append($('<div class="ck-content">').html(blob.content));
|
||||
|
||||
const seenNoteIds = options.seenNoteIds ?? new Set<string>();
|
||||
seenNoteIds.add("noteId" in note ? note.noteId : note.attachmentId);
|
||||
if (!options.noIncludedNotes) {
|
||||
await renderIncludedNotes($renderedContent[0], seenNoteIds);
|
||||
} else {
|
||||
$renderedContent.find("section.include-note").remove();
|
||||
}
|
||||
|
||||
if ($renderedContent.find("span.math-tex").length > 0) {
|
||||
renderMathInElement($renderedContent[0], { trust: true });
|
||||
}
|
||||
|
||||
const getNoteIdFromLink = (el: HTMLElement) => tree.getNoteIdFromUrl($(el).attr("href") || "");
|
||||
const referenceLinks = $renderedContent.find<HTMLAnchorElement>("a.reference-link");
|
||||
const noteIdsToPrefetch = referenceLinks.map((i, el) => getNoteIdFromLink(el));
|
||||
await froca.getNotes(noteIdsToPrefetch);
|
||||
|
||||
for (const el of referenceLinks) {
|
||||
const innerSpan = document.createElement("span");
|
||||
await link.loadReferenceLinkTitle($(innerSpan), el.href);
|
||||
el.replaceChildren(innerSpan);
|
||||
}
|
||||
|
||||
await rewriteMermaidDiagramsInContainer($renderedContent[0] as HTMLDivElement);
|
||||
await formatCodeBlocks($renderedContent);
|
||||
await postProcessRichContent(note, $renderedContent, options);
|
||||
} else if (note instanceof FNote && !options.noChildrenList) {
|
||||
await renderChildrenList($renderedContent, note, options.includeArchivedNotes ?? false);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Apply the post-render passes that make CKEditor-compatible HTML fully
|
||||
* interactive: expand `<section class="include-note">`, render inline math and
|
||||
* Mermaid diagrams, rewrite reference-link titles, and highlight code blocks.
|
||||
* Assumes the caller has already appended the HTML inside a `.ck-content` child
|
||||
* of `$renderedContent`.
|
||||
*/
|
||||
export async function postProcessRichContent(note: FNote | FAttachment, $renderedContent: JQuery<HTMLElement>, options: RenderOptions = {}) {
|
||||
const seenNoteIds = options.seenNoteIds ?? new Set<string>();
|
||||
seenNoteIds.add("noteId" in note ? note.noteId : note.attachmentId);
|
||||
if (!options.noIncludedNotes) {
|
||||
await renderIncludedNotes($renderedContent[0], seenNoteIds);
|
||||
} else {
|
||||
$renderedContent.find("section.include-note").remove();
|
||||
}
|
||||
|
||||
if ($renderedContent.find("span.math-tex").length > 0) {
|
||||
renderMathInElement($renderedContent[0], { trust: true });
|
||||
}
|
||||
|
||||
const getNoteIdFromLink = (el: HTMLElement) => tree.getNoteIdFromUrl($(el).attr("href") || "");
|
||||
const referenceLinks = $renderedContent.find<HTMLAnchorElement>("a.reference-link");
|
||||
const noteIdsToPrefetch = referenceLinks.map((i, el) => getNoteIdFromLink(el));
|
||||
await froca.getNotes(noteIdsToPrefetch);
|
||||
|
||||
await Promise.all(referenceLinks.toArray().map(async (el) => {
|
||||
const innerSpan = document.createElement("span");
|
||||
await link.loadReferenceLinkTitle($(innerSpan), el.getAttribute("href"));
|
||||
el.replaceChildren(innerSpan);
|
||||
}));
|
||||
|
||||
await rewriteMermaidDiagramsInContainer($renderedContent[0] as HTMLDivElement);
|
||||
await formatCodeBlocks($renderedContent);
|
||||
}
|
||||
|
||||
async function renderIncludedNotes(contentEl: HTMLElement, seenNoteIds: Set<string>) {
|
||||
// TODO: Consider duplicating with server's share/content_renderer.ts.
|
||||
const includeNoteEls = contentEl.querySelectorAll("section.include-note");
|
||||
@@ -101,19 +111,107 @@ export async function rewriteMermaidDiagramsInContainer(container: HTMLDivElemen
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Per-container cache of rendered mermaid SVG keyed by diagram source text.
|
||||
* Populated after each successful render; reused on subsequent renders to
|
||||
* avoid flicker when the preview HTML is regenerated (e.g. live markdown
|
||||
* editing). Entries for diagrams no longer present in the container are
|
||||
* evicted on each run so the cache can't grow unbounded.
|
||||
*/
|
||||
const mermaidSvgCache = new WeakMap<HTMLElement, Map<string, string>>();
|
||||
|
||||
/**
|
||||
* Per-container, ordered snapshot of the most recently rendered SVGs. Used as
|
||||
* a positional placeholder so edits to a diagram's source keep the previous
|
||||
* SVG visible while the new one renders offscreen.
|
||||
*/
|
||||
const mermaidLastRenderedByPosition = new WeakMap<HTMLElement, string[]>();
|
||||
|
||||
export async function applyInlineMermaid(container: HTMLDivElement) {
|
||||
// Initialize mermaid
|
||||
const nodes = Array.from(container.querySelectorAll<HTMLElement>("div.mermaid-diagram"));
|
||||
if (!nodes.length) {
|
||||
mermaidLastRenderedByPosition.delete(container);
|
||||
return;
|
||||
}
|
||||
|
||||
let cache = mermaidSvgCache.get(container);
|
||||
if (!cache) {
|
||||
cache = new Map();
|
||||
mermaidSvgCache.set(container, cache);
|
||||
}
|
||||
const lastRendered = mermaidLastRenderedByPosition.get(container) ?? [];
|
||||
|
||||
// Decide per node: exact cache hit → paint final SVG; source changed →
|
||||
// paint the previous SVG (by position) as a placeholder and queue an
|
||||
// offscreen re-render. This way the user keeps seeing the old diagram
|
||||
// until mermaid has finished producing the new one.
|
||||
const pending: Array<{ visible: HTMLElement; source: string }> = [];
|
||||
const seenSources = new Set<string>();
|
||||
for (const [ index, node ] of nodes.entries()) {
|
||||
const source = (node.textContent ?? "").trim();
|
||||
seenSources.add(source);
|
||||
|
||||
const cached = cache.get(source);
|
||||
if (cached) {
|
||||
node.innerHTML = cached;
|
||||
node.setAttribute("data-processed", "true");
|
||||
continue;
|
||||
}
|
||||
|
||||
pending.push({ visible: node, source });
|
||||
const placeholder = lastRendered[index];
|
||||
if (placeholder) {
|
||||
node.innerHTML = placeholder;
|
||||
}
|
||||
}
|
||||
|
||||
// Evict cache entries whose source is no longer present.
|
||||
for (const key of [ ...cache.keys() ]) {
|
||||
if (!seenSources.has(key)) cache.delete(key);
|
||||
}
|
||||
|
||||
if (!pending.length) {
|
||||
mermaidLastRenderedByPosition.set(container, nodes.map((n) => n.innerHTML));
|
||||
return;
|
||||
}
|
||||
|
||||
const mermaid = (await import("mermaid")).default;
|
||||
mermaid.initialize(getMermaidConfig());
|
||||
const nodes = Array.from(container.querySelectorAll<HTMLElement>("div.mermaid-diagram"));
|
||||
|
||||
// Render clones offscreen so the visible nodes keep showing the placeholder
|
||||
// until the new SVG is ready. Keeps mermaid away from our placeholder SVG
|
||||
// (which would otherwise confuse its text-based parser).
|
||||
const offscreen = document.createElement("div");
|
||||
offscreen.style.cssText = "position:absolute;left:-9999px;top:-9999px;width:0;height:0;overflow:hidden;visibility:hidden;";
|
||||
document.body.appendChild(offscreen);
|
||||
|
||||
const pairs = pending.map(({ visible, source }) => {
|
||||
const clone = document.createElement("div");
|
||||
clone.className = "mermaid-diagram";
|
||||
clone.textContent = source;
|
||||
offscreen.appendChild(clone);
|
||||
return { visible, clone, source };
|
||||
});
|
||||
|
||||
try {
|
||||
await mermaid.run({ nodes });
|
||||
await mermaid.run({ nodes: pairs.map((p) => p.clone) });
|
||||
for (const { visible, clone, source } of pairs) {
|
||||
if (clone.getAttribute("data-processed") !== "true") continue;
|
||||
const svg = clone.innerHTML;
|
||||
visible.innerHTML = svg;
|
||||
visible.setAttribute("data-processed", "true");
|
||||
cache.set(source, svg);
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e);
|
||||
console.error(e);
|
||||
} finally {
|
||||
offscreen.remove();
|
||||
}
|
||||
|
||||
mermaidLastRenderedByPosition.set(container, nodes.map((n) => n.innerHTML));
|
||||
}
|
||||
|
||||
async function renderChildrenList($renderedContent: JQuery<HTMLElement>, note: FNote, includeArchivedNotes: boolean) {
|
||||
export async function renderChildrenList($renderedContent: JQuery<HTMLElement>, note: FNote, includeArchivedNotes: boolean) {
|
||||
let childNoteIds = note.getChildNoteIds();
|
||||
|
||||
if (!childNoteIds.length) {
|
||||
|
||||
@@ -84,6 +84,55 @@ async function createSearchNote(opts = {}) {
|
||||
return await froca.getNote(note.noteId);
|
||||
}
|
||||
|
||||
async function createLlmChat() {
|
||||
const note = await server.post<FNoteRow>("special-notes/llm-chat");
|
||||
|
||||
await ws.waitForMaxKnownEntityChangeId();
|
||||
|
||||
return await froca.getNote(note.noteId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the most recently modified LLM chat.
|
||||
* Returns null if no chat exists.
|
||||
*/
|
||||
async function getMostRecentLlmChat() {
|
||||
const note = await server.get<FNoteRow | null>("special-notes/most-recent-llm-chat");
|
||||
|
||||
if (!note) {
|
||||
return null;
|
||||
}
|
||||
|
||||
await ws.waitForMaxKnownEntityChangeId();
|
||||
|
||||
return await froca.getNote(note.noteId);
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the most recent LLM chat, or creates a new one if none exists.
|
||||
* Used by sidebar chat for persistent conversations across page refreshes.
|
||||
*/
|
||||
async function getOrCreateLlmChat() {
|
||||
const note = await server.get<FNoteRow>("special-notes/get-or-create-llm-chat");
|
||||
|
||||
await ws.waitForMaxKnownEntityChangeId();
|
||||
|
||||
return await froca.getNote(note.noteId);
|
||||
}
|
||||
|
||||
export interface RecentLlmChat {
|
||||
noteId: string;
|
||||
title: string;
|
||||
dateModified: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a list of recent LLM chats for the history popup.
|
||||
*/
|
||||
async function getRecentLlmChats(limit: number = 10): Promise<RecentLlmChat[]> {
|
||||
return await server.get<RecentLlmChat[]>(`special-notes/recent-llm-chats?limit=${limit}`);
|
||||
}
|
||||
|
||||
export default {
|
||||
getInboxNote,
|
||||
getTodayNote,
|
||||
@@ -94,5 +143,9 @@ export default {
|
||||
getMonthNote,
|
||||
getYearNote,
|
||||
createSqlConsole,
|
||||
createSearchNote
|
||||
createSearchNote,
|
||||
createLlmChat,
|
||||
getMostRecentLlmChat,
|
||||
getOrCreateLlmChat,
|
||||
getRecentLlmChats
|
||||
};
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
import { Modal } from "bootstrap";
|
||||
|
||||
import appContext from "../components/app_context.js";
|
||||
import type { ConfirmDialogOptions, ConfirmDialogResult, ConfirmWithMessageOptions, MessageType } from "../widgets/dialogs/confirm.js";
|
||||
import { InfoExtraProps } from "../widgets/dialogs/info.jsx";
|
||||
import type { PromptDialogOptions } from "../widgets/dialogs/prompt.js";
|
||||
import { focusSavedElement, saveFocusedElement } from "./focus.js";
|
||||
import { InfoExtraProps } from "../widgets/dialogs/info.jsx";
|
||||
import keyboardActionsService from "./keyboard_actions.js";
|
||||
|
||||
export async function openDialog($dialog: JQuery<HTMLElement>, closeActDialog = true, config?: Partial<Modal.Options>) {
|
||||
if (closeActDialog) {
|
||||
@@ -25,7 +27,6 @@ export async function openDialog($dialog: JQuery<HTMLElement>, closeActDialog =
|
||||
}
|
||||
});
|
||||
|
||||
const keyboardActionsService = (await import("./keyboard_actions.js")).default;
|
||||
keyboardActionsService.updateDisplayedShortcuts($dialog);
|
||||
|
||||
return $dialog;
|
||||
|
||||
30
apps/client/src/services/doc_renderer.spec.ts
Normal file
30
apps/client/src/services/doc_renderer.spec.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
import { isValidDocName } from "./doc_renderer.js";
|
||||
|
||||
describe("isValidDocName", () => {
|
||||
it("accepts valid docNames", () => {
|
||||
expect(isValidDocName("launchbar_intro")).toBe(true);
|
||||
expect(isValidDocName("User Guide/Quick Start")).toBe(true);
|
||||
expect(isValidDocName("User Guide/User Guide/Quick Start")).toBe(true);
|
||||
expect(isValidDocName("Quick Start Guide")).toBe(true);
|
||||
expect(isValidDocName("quick_start_guide")).toBe(true);
|
||||
expect(isValidDocName("quick-start-guide")).toBe(true);
|
||||
});
|
||||
|
||||
it("rejects path traversal attacks", () => {
|
||||
expect(isValidDocName("..")).toBe(false);
|
||||
expect(isValidDocName("../etc/passwd")).toBe(false);
|
||||
expect(isValidDocName("foo/../bar")).toBe(false);
|
||||
expect(isValidDocName("../../../../api/notes/_malicious/open")).toBe(false);
|
||||
expect(isValidDocName("..\\etc\\passwd")).toBe(false);
|
||||
expect(isValidDocName("foo\\bar")).toBe(false);
|
||||
});
|
||||
|
||||
it("rejects URL manipulation attacks", () => {
|
||||
expect(isValidDocName("../../../../api/notes/_malicious/open?x=")).toBe(false);
|
||||
expect(isValidDocName("foo#bar")).toBe(false);
|
||||
expect(isValidDocName("%2e%2e")).toBe(false);
|
||||
expect(isValidDocName("%2e%2e%2f%2e%2e%2fapi")).toBe(false);
|
||||
});
|
||||
});
|
||||
@@ -3,22 +3,39 @@ import { applyReferenceLinks } from "../widgets/type_widgets/text/read_only_help
|
||||
import { getCurrentLanguage } from "./i18n.js";
|
||||
import { formatCodeBlocks } from "./syntax_highlight.js";
|
||||
|
||||
/**
|
||||
* Validates a docName to prevent path traversal attacks.
|
||||
* Allows forward slashes for subdirectories (e.g., "User Guide/Quick Start")
|
||||
* but blocks traversal sequences and URL manipulation characters.
|
||||
*/
|
||||
export function isValidDocName(docName: string): boolean {
|
||||
// Allow alphanumeric characters, spaces, underscores, hyphens, and forward slashes.
|
||||
const validDocNameRegex = /^[a-zA-Z0-9_/\- ]+$/;
|
||||
return validDocNameRegex.test(docName);
|
||||
}
|
||||
|
||||
export default function renderDoc(note: FNote) {
|
||||
return new Promise<JQuery<HTMLElement>>((resolve) => {
|
||||
let docName = note.getLabelValue("docName");
|
||||
const docName = note.getLabelValue("docName");
|
||||
const $content = $("<div>");
|
||||
|
||||
if (docName) {
|
||||
// find doc based on language
|
||||
const url = getUrl(docName, getCurrentLanguage());
|
||||
// find doc based on language
|
||||
const url = getUrl(docName, getCurrentLanguage());
|
||||
|
||||
if (url) {
|
||||
$content.load(url, async (response, status) => {
|
||||
// fallback to english doc if no translation available
|
||||
if (status === "error") {
|
||||
const fallbackUrl = getUrl(docName, "en");
|
||||
$content.load(fallbackUrl, async () => {
|
||||
await processContent(fallbackUrl, $content)
|
||||
|
||||
if (fallbackUrl) {
|
||||
$content.load(fallbackUrl, async () => {
|
||||
await processContent(fallbackUrl, $content);
|
||||
resolve($content);
|
||||
});
|
||||
} else {
|
||||
resolve($content);
|
||||
});
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -28,8 +45,6 @@ export default function renderDoc(note: FNote) {
|
||||
} else {
|
||||
resolve($content);
|
||||
}
|
||||
|
||||
return $content;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -39,7 +54,7 @@ async function processContent(url: string, $content: JQuery<HTMLElement>) {
|
||||
// Images are relative to the docnote but that will not work when rendered in the application since the path breaks.
|
||||
$content.find("img").each((i, el) => {
|
||||
const $img = $(el);
|
||||
$img.attr("src", dir + "/" + $img.attr("src"));
|
||||
$img.attr("src", `${dir}/${$img.attr("src")}`);
|
||||
});
|
||||
|
||||
formatCodeBlocks($content);
|
||||
@@ -48,10 +63,17 @@ async function processContent(url: string, $content: JQuery<HTMLElement>) {
|
||||
await applyReferenceLinks($content[0]);
|
||||
}
|
||||
|
||||
function getUrl(docNameValue: string, language: string) {
|
||||
function getUrl(docNameValue: string | null, language: string) {
|
||||
if (!docNameValue) return;
|
||||
|
||||
if (!isValidDocName(docNameValue)) {
|
||||
console.error(`Invalid docName: ${docNameValue}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
// Cannot have spaces in the URL due to how JQuery.load works.
|
||||
docNameValue = docNameValue.replaceAll(" ", "%20");
|
||||
|
||||
const basePath = window.glob.isDev ? window.glob.assetPath + "/.." : window.glob.assetPath;
|
||||
const basePath = window.glob.isDev ? `${window.glob.assetPath }/..` : window.glob.assetPath;
|
||||
return `${basePath}/doc_notes/${language}/${docNameValue}.html`;
|
||||
}
|
||||
|
||||
@@ -13,6 +13,11 @@ export const experimentalFeatures = [
|
||||
id: "new-layout",
|
||||
name: t("experimental_features.new_layout_name"),
|
||||
description: t("experimental_features.new_layout_description"),
|
||||
},
|
||||
{
|
||||
id: "llm",
|
||||
name: t("experimental_features.llm_name"),
|
||||
description: t("experimental_features.llm_description"),
|
||||
}
|
||||
] as const satisfies ExperimentalFeature[];
|
||||
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
import LoadResults from "./load_results.js";
|
||||
import froca from "./froca.js";
|
||||
import utils from "./utils.js";
|
||||
import options from "./options.js";
|
||||
import noteAttributeCache from "./note_attribute_cache.js";
|
||||
import FBranch, { type FBranchRow } from "../entities/fbranch.js";
|
||||
import FAttribute, { type FAttributeRow } from "../entities/fattribute.js";
|
||||
import type { OptionNames } from "@triliumnext/commons";
|
||||
|
||||
import appContext from "../components/app_context.js";
|
||||
import FAttachment, { type FAttachmentRow } from "../entities/fattachment.js";
|
||||
import FAttribute, { type FAttributeRow } from "../entities/fattribute.js";
|
||||
import FBranch, { type FBranchRow } from "../entities/fbranch.js";
|
||||
import type { default as FNote, FNoteRow } from "../entities/fnote.js";
|
||||
import type { EntityChange } from "../server_types.js";
|
||||
import type { OptionNames } from "@triliumnext/commons";
|
||||
import froca from "./froca.js";
|
||||
import LoadResults from "./load_results.js";
|
||||
import noteAttributeCache from "./note_attribute_cache.js";
|
||||
import options from "./options.js";
|
||||
import utils from "./utils.js";
|
||||
|
||||
async function processEntityChanges(entityChanges: EntityChange[]) {
|
||||
const loadResults = new LoadResults(entityChanges);
|
||||
@@ -63,7 +65,7 @@ async function processEntityChanges(entityChanges: EntityChange[]) {
|
||||
if (entityName === "branches" && !((entity as FBranchRow).parentNoteId in froca.notes)) {
|
||||
missingNoteIds.push((entity as FBranchRow).parentNoteId);
|
||||
} else if (entityName === "attributes") {
|
||||
let attributeEntity = entity as FAttributeRow;
|
||||
const attributeEntity = entity as FAttributeRow;
|
||||
if (attributeEntity.type === "relation" && (attributeEntity.name === "template" || attributeEntity.name === "inherit") && !(attributeEntity.value in froca.notes)) {
|
||||
missingNoteIds.push(attributeEntity.value);
|
||||
}
|
||||
@@ -79,7 +81,6 @@ async function processEntityChanges(entityChanges: EntityChange[]) {
|
||||
noteAttributeCache.invalidate();
|
||||
}
|
||||
|
||||
const appContext = (await import("../components/app_context.js")).default;
|
||||
await appContext.triggerEvent("entitiesReloaded", { loadResults });
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { Fragment, h, VNode } from "preact";
|
||||
import { createContext, Fragment, h, VNode } from "preact";
|
||||
import * as hooks from "preact/hooks";
|
||||
|
||||
import ActionButton from "../widgets/react/ActionButton";
|
||||
@@ -47,6 +47,7 @@ export const preactAPI = Object.freeze({
|
||||
// Core
|
||||
h,
|
||||
Fragment,
|
||||
createContext,
|
||||
|
||||
/**
|
||||
* Method that must be run for widget scripts that run on Preact, using JSX. The method just returns the same definition, reserved for future typechecking and perhaps validation purposes.
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import { LOCALES } from "@triliumnext/commons";
|
||||
import { findDuplicateJsonKeys, LOCALES } from "@triliumnext/commons";
|
||||
import { readFileSync } from "fs";
|
||||
import { join } from "path";
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
describe("i18n", () => {
|
||||
it("translations are valid JSON", () => {
|
||||
it("translations are valid JSON with no duplicate keys", () => {
|
||||
for (const locale of LOCALES) {
|
||||
if (locale.contentOnly || locale.id === "en_rtl") {
|
||||
continue;
|
||||
@@ -14,6 +14,13 @@ describe("i18n", () => {
|
||||
const translationFile = readFileSync(translationPath, { encoding: "utf-8" });
|
||||
expect(() => JSON.parse(translationFile), `JSON error while parsing locale '${locale.id}' at "${translationPath}"`)
|
||||
.not.toThrow();
|
||||
|
||||
const duplicates = findDuplicateJsonKeys(translationFile);
|
||||
expect(
|
||||
duplicates,
|
||||
`Duplicate keys in locale '${locale.id}' at "${translationPath}":\n${
|
||||
duplicates.map((d) => ` - "${d.key}" (line ${d.line})`).join("\n")}`
|
||||
).toEqual([]);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,21 +1,14 @@
|
||||
import options from "./options.js";
|
||||
import { LOCALE_IDS, LOCALES, setDayjsLocale } from "@triliumnext/commons";
|
||||
import i18next from "i18next";
|
||||
import i18nextHttpBackend from "i18next-http-backend";
|
||||
import server from "./server.js";
|
||||
import { LOCALE_IDS, setDayjsLocale, type Locale } from "@triliumnext/commons";
|
||||
import { initReactI18next } from "react-i18next";
|
||||
|
||||
let locales: Locale[] | null;
|
||||
|
||||
/**
|
||||
* A deferred promise that resolves when translations are initialized.
|
||||
*/
|
||||
export let translationsInitializedPromise = $.Deferred();
|
||||
export const translationsInitializedPromise = $.Deferred();
|
||||
|
||||
export async function initLocale() {
|
||||
const locale = ((options.get("locale") as string) || "en") as LOCALE_IDS;
|
||||
|
||||
locales = await server.get<Locale[]>("options/locales");
|
||||
export async function initLocale(locale: LOCALE_IDS = "en") {
|
||||
|
||||
i18next.use(initReactI18next);
|
||||
await i18next.use(i18nextHttpBackend).init({
|
||||
@@ -24,8 +17,7 @@ export async function initLocale() {
|
||||
backend: {
|
||||
loadPath: `${window.glob.assetPath}/translations/{{lng}}/{{ns}}.json`
|
||||
},
|
||||
returnEmptyString: false,
|
||||
showSupportNotice: false
|
||||
returnEmptyString: false
|
||||
});
|
||||
|
||||
await setDayjsLocale(locale);
|
||||
@@ -33,11 +25,7 @@ export async function initLocale() {
|
||||
}
|
||||
|
||||
export function getAvailableLocales() {
|
||||
if (!locales) {
|
||||
throw new Error("Tried to load list of locales, but localization is not yet initialized.")
|
||||
}
|
||||
|
||||
return locales;
|
||||
return LOCALES;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -48,7 +36,7 @@ export function getAvailableLocales() {
|
||||
*/
|
||||
export function getLocaleById(localeId: string | null | undefined) {
|
||||
if (!localeId) return null;
|
||||
return locales?.find((l) => l.id === localeId) ?? null;
|
||||
return LOCALES.find((l) => l.id === localeId) ?? null;
|
||||
}
|
||||
|
||||
export const t = i18next.t;
|
||||
|
||||
@@ -19,7 +19,8 @@ export const byNoteType: Record<Exclude<NoteType, "book">, string | null> = {
|
||||
search: null,
|
||||
text: null,
|
||||
webView: null,
|
||||
spreadsheet: null
|
||||
spreadsheet: null,
|
||||
llmChat: null
|
||||
};
|
||||
|
||||
export const byBookType: Record<ViewTypeOptions, string | null> = {
|
||||
|
||||
@@ -4,6 +4,8 @@ import appContext, { type NoteCommandData } from "../components/app_context.js";
|
||||
import { openInCurrentNoteContext } from "../components/note_context.js";
|
||||
import linkContextMenuService from "../menus/link_context_menu.js";
|
||||
import froca from "./froca.js";
|
||||
import { t } from "./i18n.js";
|
||||
import { showError } from "./toast.js";
|
||||
import treeService from "./tree.js";
|
||||
import utils from "./utils.js";
|
||||
|
||||
@@ -28,7 +30,7 @@ async function getLinkIcon(noteId: string, viewMode: ViewMode | undefined) {
|
||||
return icon;
|
||||
}
|
||||
|
||||
export type ViewMode = "default" | "source" | "attachments" | "contextual-help" | "note-map";
|
||||
export type ViewMode = "default" | "source" | "attachments" | "contextual-help" | "note-map" | "ocr";
|
||||
|
||||
export interface ViewScope {
|
||||
/**
|
||||
@@ -58,6 +60,8 @@ export interface ViewScope {
|
||||
*/
|
||||
tocPreviousVisible?: boolean;
|
||||
tocCollapsedHeadings?: Set<string>;
|
||||
/** When set, scrolls to a bookmark anchor within the note after navigation. */
|
||||
bookmark?: string;
|
||||
}
|
||||
|
||||
interface CreateLinkOptions {
|
||||
@@ -242,7 +246,7 @@ export function parseNavigationStateFromUrl(url: string | undefined) {
|
||||
hoistedNoteId = value;
|
||||
} else if (name === "searchString") {
|
||||
searchString = value; // supports triggering search from URL, e.g. #?searchString=blabla
|
||||
} else if (["viewMode", "attachmentId"].includes(name)) {
|
||||
} else if (["viewMode", "attachmentId", "bookmark"].includes(name)) {
|
||||
(viewScope as any)[name] = value;
|
||||
} else if (name === "popup") {
|
||||
openInPopup = true;
|
||||
@@ -333,15 +337,30 @@ export function goToLinkExt(evt: MouseEvent | JQuery.ClickEvent | JQuery.MouseDo
|
||||
if (openInNewTab || openInNewWindow || (isLeftClick && (withinEditLink || outsideOfCKEditor))) {
|
||||
if (hrefLink.toLowerCase().startsWith("http") || hrefLink.startsWith("api/")) {
|
||||
window.open(hrefLink, "_blank");
|
||||
} else {
|
||||
} else if (ALLOWED_PROTOCOLS.some((protocol) => hrefLink.toLowerCase().startsWith(`${protocol}:`))) {
|
||||
// Enable protocols supported by CKEditor 5 to be clickable.
|
||||
if (ALLOWED_PROTOCOLS.some((protocol) => hrefLink.toLowerCase().startsWith(`${protocol}:`))) {
|
||||
if ( utils.isElectron()) {
|
||||
const electron = utils.dynamicRequire("electron");
|
||||
electron.shell.openExternal(hrefLink);
|
||||
if (utils.isElectron()) {
|
||||
const electron = utils.dynamicRequire("electron");
|
||||
const reportLinkError = (e: unknown) => {
|
||||
const message = e instanceof Error ? e.message : String(e);
|
||||
logError(`Failed to open link '${hrefLink}': ${message}`);
|
||||
showError(t("link.failed_to_open", { href: hrefLink, message }));
|
||||
};
|
||||
|
||||
if (hrefLink.toLowerCase().startsWith("file:")) {
|
||||
// shell.openExternal mishandles Unicode file:// URLs on Windows;
|
||||
// convert to a filesystem path and use shell.openPath instead.
|
||||
// Normalize file://c:/... (2 slashes — drive read as host) to file:///c:/...
|
||||
const normalized = hrefLink.replace(/^file:\/\/(?=[a-zA-Z]:)/i, "file:///");
|
||||
const { fileURLToPath } = utils.dynamicRequire("url");
|
||||
electron.shell.openPath(fileURLToPath(normalized)).then((err: string) => {
|
||||
if (err) reportLinkError(new Error(err));
|
||||
}).catch(reportLinkError);
|
||||
} else {
|
||||
window.open(hrefLink, "_blank");
|
||||
electron.shell.openExternal(hrefLink).catch(reportLinkError);
|
||||
}
|
||||
} else {
|
||||
window.open(hrefLink, "_blank");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -415,6 +434,13 @@ async function loadReferenceLinkTitle($el: JQuery<HTMLElement>, href: string | n
|
||||
const title = await getReferenceLinkTitle(href);
|
||||
$el.text(title);
|
||||
|
||||
if (viewScope?.bookmark) {
|
||||
$el.append($("<small>").append(
|
||||
$("<span>").addClass("bx bx-bookmark"),
|
||||
document.createTextNode(viewScope.bookmark)
|
||||
));
|
||||
}
|
||||
|
||||
if (note) {
|
||||
const icon = await getLinkIcon(noteId, viewScope.viewMode);
|
||||
|
||||
@@ -440,8 +466,8 @@ async function getReferenceLinkTitle(href: string) {
|
||||
|
||||
return attachment ? attachment.title : "[missing attachment]";
|
||||
}
|
||||
return note.title;
|
||||
|
||||
return note.title;
|
||||
}
|
||||
|
||||
function getReferenceLinkTitleSync(href: string) {
|
||||
@@ -464,8 +490,12 @@ function getReferenceLinkTitleSync(href: string) {
|
||||
|
||||
return attachment ? attachment.title : "[missing attachment]";
|
||||
}
|
||||
return note.title;
|
||||
|
||||
if (viewScope?.bookmark) {
|
||||
return `${note.title} - ${viewScope.bookmark}`;
|
||||
}
|
||||
|
||||
return note.title;
|
||||
}
|
||||
|
||||
if (glob.device !== "print") {
|
||||
|
||||
116
apps/client/src/services/llm_chat.ts
Normal file
116
apps/client/src/services/llm_chat.ts
Normal file
@@ -0,0 +1,116 @@
|
||||
import type { LlmChatConfig, LlmCitation, LlmMessage, LlmModelInfo,LlmUsage } from "@triliumnext/commons";
|
||||
|
||||
import server from "./server.js";
|
||||
|
||||
/**
|
||||
* Fetch available models from all configured providers.
|
||||
*/
|
||||
export async function getAvailableModels(): Promise<LlmModelInfo[]> {
|
||||
const response = await server.get<{ models?: LlmModelInfo[] }>("llm-chat/models");
|
||||
return response.models ?? [];
|
||||
}
|
||||
|
||||
export interface StreamCallbacks {
|
||||
onChunk: (text: string) => void;
|
||||
onThinking?: (text: string) => void;
|
||||
onToolUse?: (toolName: string, input: Record<string, unknown>) => void;
|
||||
onToolResult?: (toolName: string, result: string, isError?: boolean) => void;
|
||||
onCitation?: (citation: LlmCitation) => void;
|
||||
onUsage?: (usage: LlmUsage) => void;
|
||||
onError: (error: string) => void;
|
||||
onDone: () => void;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stream a chat completion from the LLM API using Server-Sent Events.
|
||||
*/
|
||||
export async function streamChatCompletion(
|
||||
messages: LlmMessage[],
|
||||
config: LlmChatConfig,
|
||||
callbacks: StreamCallbacks,
|
||||
abortSignal?: AbortSignal
|
||||
): Promise<void> {
|
||||
const headers = await server.getHeaders();
|
||||
|
||||
const response = await fetch(`${window.glob.baseApiUrl}llm-chat/stream`, {
|
||||
method: "POST",
|
||||
headers: {
|
||||
...headers,
|
||||
"Content-Type": "application/json"
|
||||
} as HeadersInit,
|
||||
body: JSON.stringify({ messages, config }),
|
||||
signal: abortSignal
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
callbacks.onError(`HTTP ${response.status}: ${response.statusText}`);
|
||||
return;
|
||||
}
|
||||
|
||||
const reader = response.body?.getReader();
|
||||
if (!reader) {
|
||||
callbacks.onError("No response body");
|
||||
return;
|
||||
}
|
||||
|
||||
const decoder = new TextDecoder();
|
||||
let buffer = "";
|
||||
|
||||
try {
|
||||
while (true) {
|
||||
const { done, value } = await reader.read();
|
||||
if (done) break;
|
||||
|
||||
buffer += decoder.decode(value, { stream: true });
|
||||
const lines = buffer.split("\n");
|
||||
buffer = lines.pop() || "";
|
||||
|
||||
for (const line of lines) {
|
||||
if (line.startsWith("data: ")) {
|
||||
try {
|
||||
const data = JSON.parse(line.slice(6));
|
||||
|
||||
switch (data.type) {
|
||||
case "text":
|
||||
callbacks.onChunk(data.content);
|
||||
break;
|
||||
case "thinking":
|
||||
callbacks.onThinking?.(data.content);
|
||||
break;
|
||||
case "tool_use":
|
||||
callbacks.onToolUse?.(data.toolName, data.toolInput);
|
||||
// Yield to force Preact to commit the pending tool call
|
||||
// state before we process the result.
|
||||
await new Promise((r) => setTimeout(r, 1));
|
||||
break;
|
||||
case "tool_result":
|
||||
callbacks.onToolResult?.(data.toolName, data.result, data.isError);
|
||||
await new Promise((r) => setTimeout(r, 1));
|
||||
break;
|
||||
case "citation":
|
||||
if (data.citation) {
|
||||
callbacks.onCitation?.(data.citation);
|
||||
}
|
||||
break;
|
||||
case "usage":
|
||||
if (data.usage) {
|
||||
callbacks.onUsage?.(data.usage);
|
||||
}
|
||||
break;
|
||||
case "error":
|
||||
callbacks.onError(data.error);
|
||||
break;
|
||||
case "done":
|
||||
callbacks.onDone();
|
||||
break;
|
||||
}
|
||||
} catch (e) {
|
||||
console.error("Failed to parse SSE data line:", line, e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
reader.releaseLock();
|
||||
}
|
||||
}
|
||||
@@ -32,4 +32,9 @@ describe("Mermaid", () => {
|
||||
`;
|
||||
expect(postprocessMermaidSvg(before)).toBe(after);
|
||||
});
|
||||
|
||||
it("replaces with numeric entity for valid XML", () => {
|
||||
expect(postprocessMermaidSvg("<text>a b c</text>"))
|
||||
.toBe("<text>a b  c</text>");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -49,11 +49,15 @@ export async function loadElkIfNeeded(mermaid: Mermaid, mermaidContent: string)
|
||||
* Processes the output of a Mermaid SVG render before it should be delivered to the user.
|
||||
*
|
||||
* <p>
|
||||
* Currently this fixes <br> to <br/> which would otherwise cause an invalid XML.
|
||||
* Currently this fixes <br> to <br/> and replaces named HTML entities like with their
|
||||
* numeric equivalents, both of which would otherwise cause invalid XML when the SVG is saved
|
||||
* as an attachment.
|
||||
*
|
||||
* @param svg the Mermaid SVG to process.
|
||||
* @returns the processed SVG.
|
||||
*/
|
||||
export function postprocessMermaidSvg(svg: string) {
|
||||
return svg.replaceAll(/<br\s*>/ig, "<br/>");
|
||||
return svg
|
||||
.replaceAll(/<br\s*>/ig, "<br/>")
|
||||
.replaceAll(/ /g, " ");
|
||||
}
|
||||
|
||||
@@ -68,7 +68,8 @@ async function autocompleteSourceForCKEditor(queryText: string) {
|
||||
name: row.notePathTitle || "",
|
||||
link: `#${row.notePath}`,
|
||||
notePath: row.notePath,
|
||||
highlightedNotePathTitle: row.highlightedNotePathTitle
|
||||
highlightedNotePathTitle: row.highlightedNotePathTitle,
|
||||
icon: row.icon
|
||||
};
|
||||
})
|
||||
);
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { NoteType } from "../entities/fnote.js";
|
||||
import type { MenuCommandItem, MenuItem, MenuItemBadge, MenuSeparatorItem } from "../menus/context_menu.js";
|
||||
import type { TreeCommandNames } from "../menus/tree_context_menu.js";
|
||||
import { isExperimentalFeatureEnabled } from "./experimental_features.js";
|
||||
import froca from "./froca.js";
|
||||
import { t } from "./i18n.js";
|
||||
import server from "./server.js";
|
||||
@@ -26,7 +27,7 @@ export const NOTE_TYPES: NoteTypeMapping[] = [
|
||||
|
||||
// The default note type (always the first item)
|
||||
{ type: "text", mime: "text/html", title: t("note_types.text"), icon: "bx-note" },
|
||||
{ type: "spreadsheet", mime: "application/json", title: t("note_types.spreadsheet"), icon: "bx-table", isBeta: true },
|
||||
{ type: "spreadsheet", mime: "application/json", title: t("note_types.spreadsheet"), icon: "bx-table", isBeta: true, isNew: true },
|
||||
|
||||
// Text notes group
|
||||
{ type: "book", mime: "", title: t("note_types.book"), icon: "bx-book" },
|
||||
@@ -41,12 +42,14 @@ export const NOTE_TYPES: NoteTypeMapping[] = [
|
||||
{ type: "relationMap", mime: "application/json", title: t("note_types.relation-map"), icon: "bxs-network-chart" },
|
||||
|
||||
// Misc note types
|
||||
{ type: "llmChat", mime: "application/json", title: t("note_types.llm-chat"), icon: "bx-message-square-dots", isBeta: true },
|
||||
{ type: "render", mime: "", title: t("note_types.render-note"), icon: "bx-extension" },
|
||||
{ type: "search", title: t("note_types.saved-search"), icon: "bx-file-find", static: true },
|
||||
{ type: "webView", mime: "", title: t("note_types.web-view"), icon: "bx-globe-alt" },
|
||||
|
||||
// Code notes
|
||||
{ type: "code", mime: "text/plain", title: t("note_types.code"), icon: "bx-code" },
|
||||
{ type: "code", mime: "text/x-markdown", title: t("note_types.markdown"), icon: "bxl-markdown", isNew: true },
|
||||
|
||||
// Reserved types (cannot be created by the user)
|
||||
{ type: "contentWidget", mime: "", title: t("note_types.widget"), reserved: true },
|
||||
@@ -92,11 +95,13 @@ async function getNoteTypeItems(command?: TreeCommandNames) {
|
||||
function getBlankNoteTypes(command?: TreeCommandNames): MenuItem<TreeCommandNames>[] {
|
||||
return NOTE_TYPES
|
||||
.filter((nt) => !nt.reserved && nt.type !== "book")
|
||||
.filter((nt) => nt.type !== "llmChat" || isExperimentalFeatureEnabled("llm"))
|
||||
.map((nt) => {
|
||||
const menuItem: MenuCommandItem<TreeCommandNames> = {
|
||||
title: nt.title,
|
||||
command,
|
||||
type: nt.type,
|
||||
mime: nt.mime,
|
||||
uiIcon: `bx ${nt.icon}`,
|
||||
badges: []
|
||||
};
|
||||
|
||||
@@ -18,6 +18,10 @@ async function render(note: FNote, $el: JQuery<HTMLElement>, onError?: ErrorHand
|
||||
for (const renderNoteId of renderNoteIds) {
|
||||
const bundle = await server.postWithSilentInternalServerError<Bundle>(`script/bundle/${renderNoteId}`);
|
||||
|
||||
if (!bundle) {
|
||||
throw new Error(`Script note '${renderNoteId}' could not be loaded. It may be protected and require an active protected session.`);
|
||||
}
|
||||
|
||||
const $scriptContainer = $("<div>");
|
||||
$el.append($scriptContainer);
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { t } from "./i18n.js";
|
||||
import utils, { isShare } from "./utils.js";
|
||||
import ValidationError from "./validation_error.js";
|
||||
|
||||
@@ -32,8 +33,7 @@ async function getHeaders(headers?: Headers) {
|
||||
return {};
|
||||
}
|
||||
|
||||
const appContext = (await import("../components/app_context.js")).default;
|
||||
const activeNoteContext = appContext.tabManager ? appContext.tabManager.getActiveContext() : null;
|
||||
const activeNoteContext = glob.appContext?.tabManager ? glob.appContext.tabManager.getActiveContext() : null;
|
||||
|
||||
// headers need to be lowercase because node.js automatically converts them to lower case
|
||||
// also avoiding using underscores instead of dashes since nginx filters them out by default
|
||||
@@ -270,7 +270,11 @@ function ajax(url: string, method: string, data: unknown, headers: Headers, opts
|
||||
} else if (opts.silentInternalServerError && jqXhr.status === 500) {
|
||||
// report nothing
|
||||
} else {
|
||||
await reportError(method, url, jqXhr.status, jqXhr.responseText);
|
||||
try {
|
||||
await reportError(method, url, jqXhr.status, jqXhr.responseText);
|
||||
} catch {
|
||||
// reportError may throw (e.g. ValidationError); ensure rej() is still called below.
|
||||
}
|
||||
}
|
||||
|
||||
rej(jqXhr.responseText);
|
||||
@@ -340,6 +344,7 @@ async function reportError(method: string, url: string, statusCode: number, resp
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
// Dynamic import to avoid circular dependency (toast → app_context → options → server).
|
||||
const toastService = (await import("./toast.js")).default;
|
||||
|
||||
const messageStr = (typeof message === "string" ? message : JSON.stringify(message)) || "-";
|
||||
@@ -353,7 +358,6 @@ async function reportError(method: string, url: string, statusCode: number, resp
|
||||
...response
|
||||
});
|
||||
} else {
|
||||
const { t } = await import("./i18n.js");
|
||||
if (statusCode === 400 && (url.includes("%23") || url.includes("%2F"))) {
|
||||
toastService.showPersistent({
|
||||
id: "trafik-blocked",
|
||||
@@ -367,8 +371,7 @@ async function reportError(method: string, url: string, statusCode: number, resp
|
||||
t("server.unknown_http_error_content", { statusCode, method, url, message: messageStr }),
|
||||
15_000);
|
||||
}
|
||||
const { logError } = await import("./ws.js");
|
||||
logError(`${statusCode} ${method} ${url} - ${message}`);
|
||||
window.logError(`${statusCode} ${method} ${url} - ${message}`);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
87
apps/client/src/services/spaced_update.spec.ts
Normal file
87
apps/client/src/services/spaced_update.spec.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
import SpacedUpdate from "./spaced_update";
|
||||
|
||||
// Mock logError which is a global in Trilium
|
||||
vi.stubGlobal("logError", vi.fn());
|
||||
|
||||
describe("SpacedUpdate", () => {
|
||||
beforeEach(() => {
|
||||
vi.useFakeTimers();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.useRealTimers();
|
||||
});
|
||||
|
||||
it("should only call updater once per interval even with multiple pending callbacks", async () => {
|
||||
const updater = vi.fn(async () => {
|
||||
// Simulate a slow network request - this is where the race condition occurs
|
||||
await new Promise((resolve) => setTimeout(resolve, 100));
|
||||
});
|
||||
|
||||
const spacedUpdate = new SpacedUpdate(updater, 50);
|
||||
|
||||
// Simulate rapid typing - each keystroke calls scheduleUpdate()
|
||||
// This queues multiple setTimeout callbacks due to recursive scheduleUpdate() calls
|
||||
for (let i = 0; i < 10; i++) {
|
||||
spacedUpdate.scheduleUpdate();
|
||||
// Small delay between keystrokes
|
||||
await vi.advanceTimersByTimeAsync(5);
|
||||
}
|
||||
|
||||
// Advance time past the update interval to trigger the update
|
||||
await vi.advanceTimersByTimeAsync(100);
|
||||
|
||||
// Let the "network request" complete and any pending callbacks run
|
||||
await vi.advanceTimersByTimeAsync(200);
|
||||
|
||||
// The updater should have been called only ONCE, not multiple times
|
||||
// With the bug, multiple pending setTimeout callbacks would all pass the time check
|
||||
// during the async updater call and trigger multiple concurrent requests
|
||||
expect(updater).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it("should call updater again if changes occur during the update", async () => {
|
||||
const updater = vi.fn(async () => {
|
||||
await new Promise((resolve) => setTimeout(resolve, 50));
|
||||
});
|
||||
|
||||
const spacedUpdate = new SpacedUpdate(updater, 30);
|
||||
|
||||
// First update
|
||||
spacedUpdate.scheduleUpdate();
|
||||
await vi.advanceTimersByTimeAsync(40);
|
||||
|
||||
// Schedule another update while the first one is in progress
|
||||
spacedUpdate.scheduleUpdate();
|
||||
|
||||
// Let first update complete
|
||||
await vi.advanceTimersByTimeAsync(60);
|
||||
|
||||
// Advance past the interval again for the second update
|
||||
await vi.advanceTimersByTimeAsync(100);
|
||||
|
||||
// Should have been called twice - once for each distinct change period
|
||||
expect(updater).toHaveBeenCalledTimes(2);
|
||||
});
|
||||
|
||||
it("should restore changed flag on error so retry can happen", async () => {
|
||||
const updater = vi.fn()
|
||||
.mockRejectedValueOnce(new Error("Network error"))
|
||||
.mockResolvedValue(undefined);
|
||||
|
||||
const spacedUpdate = new SpacedUpdate(updater, 50);
|
||||
|
||||
spacedUpdate.scheduleUpdate();
|
||||
|
||||
// Advance to trigger first update (which will fail)
|
||||
await vi.advanceTimersByTimeAsync(60);
|
||||
|
||||
// The error should have restored the changed flag, so scheduling again should work
|
||||
spacedUpdate.scheduleUpdate();
|
||||
await vi.advanceTimersByTimeAsync(60);
|
||||
|
||||
expect(updater).toHaveBeenCalledTimes(2);
|
||||
});
|
||||
});
|
||||
@@ -77,16 +77,22 @@ export default class SpacedUpdate {
|
||||
}
|
||||
|
||||
if (Date.now() - this.lastUpdated > this.updateInterval) {
|
||||
// Update these BEFORE the async call to prevent race conditions.
|
||||
// Multiple setTimeout callbacks may be pending from recursive scheduleUpdate() calls.
|
||||
// Without this, they would all pass the time check during the await and trigger multiple requests.
|
||||
this.lastUpdated = Date.now();
|
||||
this.changed = false;
|
||||
|
||||
this.onStateChanged("saving");
|
||||
try {
|
||||
await this.updater();
|
||||
this.onStateChanged("saved");
|
||||
this.changed = false;
|
||||
} catch (e) {
|
||||
// Restore changed flag on error so a retry can happen
|
||||
this.changed = true;
|
||||
this.onStateChanged("error");
|
||||
logError(getErrorMessage(e));
|
||||
}
|
||||
this.lastUpdated = Date.now();
|
||||
} else {
|
||||
// update isn't triggered but changes are still pending, so we need to schedule another check
|
||||
this.scheduleUpdate();
|
||||
|
||||
@@ -33,6 +33,14 @@ export async function formatCodeBlocks($container: JQuery<HTMLElement>) {
|
||||
applySingleBlockSyntaxHighlight($(codeBlock), normalizedMimeType);
|
||||
}
|
||||
}
|
||||
|
||||
// Add click-to-copy for inline code (code elements not inside pre)
|
||||
if (glob.device !== "print") {
|
||||
const inlineCodeElements = $container.find("code:not(pre code)");
|
||||
for (const inlineCode of inlineCodeElements) {
|
||||
applyInlineCodeCopy($(inlineCode));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function applyCopyToClipboardButton($codeBlock: JQuery<HTMLElement>) {
|
||||
@@ -51,6 +59,23 @@ export function applyCopyToClipboardButton($codeBlock: JQuery<HTMLElement>) {
|
||||
$codeBlock.parent().append($copyButton);
|
||||
}
|
||||
|
||||
export function applyInlineCodeCopy($inlineCode: JQuery<HTMLElement>) {
|
||||
$inlineCode
|
||||
.addClass("copyable-inline-code")
|
||||
.attr("title", t("code_block.click_to_copy"))
|
||||
.off("click")
|
||||
.on("click", (e) => {
|
||||
e.stopPropagation();
|
||||
|
||||
const text = $inlineCode.text();
|
||||
if (!isShare) {
|
||||
copyTextWithToast(text);
|
||||
} else {
|
||||
copyText(text);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Applies syntax highlight to the given code block (assumed to be <pre><code>), using highlight.js.
|
||||
*/
|
||||
|
||||
35
apps/client/src/services/theme.ts
Normal file
35
apps/client/src/services/theme.ts
Normal file
@@ -0,0 +1,35 @@
|
||||
export function getThemeStyle(): "auto" | "light" | "dark" {
|
||||
const configuredTheme = window.glob?.theme;
|
||||
if (configuredTheme === "auto" || configuredTheme === "next") {
|
||||
return "auto";
|
||||
}
|
||||
|
||||
if (configuredTheme === "light" || configuredTheme === "dark") {
|
||||
return configuredTheme;
|
||||
}
|
||||
|
||||
if (configuredTheme === "next-light") {
|
||||
return "light";
|
||||
}
|
||||
|
||||
if (configuredTheme === "next-dark") {
|
||||
return "dark";
|
||||
}
|
||||
|
||||
const style = window.getComputedStyle(document.body);
|
||||
const themeStyle = style.getPropertyValue("--theme-style");
|
||||
if (style.getPropertyValue("--theme-style-auto") !== "true" && (themeStyle === "light" || themeStyle === "dark")) {
|
||||
return themeStyle as "light" | "dark";
|
||||
}
|
||||
|
||||
return "auto";
|
||||
}
|
||||
|
||||
export function getEffectiveThemeStyle(): "light" | "dark" {
|
||||
const themeStyle = getThemeStyle();
|
||||
if (themeStyle === "auto") {
|
||||
return window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
|
||||
}
|
||||
|
||||
return themeStyle === "dark" ? "dark" : "light";
|
||||
}
|
||||
@@ -360,7 +360,8 @@ function copySelectionToClipboard() {
|
||||
type dynamicRequireMappings = {
|
||||
"@electron/remote": typeof import("@electron/remote"),
|
||||
"electron": typeof import("electron"),
|
||||
"child_process": typeof import("child_process")
|
||||
"child_process": typeof import("child_process"),
|
||||
"url": typeof import("url")
|
||||
};
|
||||
|
||||
export function dynamicRequire<T extends keyof dynamicRequireMappings>(moduleName: T): Awaited<dynamicRequireMappings[T]>{
|
||||
@@ -455,9 +456,7 @@ export function openInAppHelpFromUrl(inAppHelpPage: string) {
|
||||
export async function openInReusableSplit(targetNoteId: string, targetViewMode: ViewMode, openOpts: {
|
||||
hoistedNoteId?: string;
|
||||
} = {}) {
|
||||
// Dynamic import to avoid import issues in tests.
|
||||
const appContext = (await import("../components/app_context.js")).default;
|
||||
const activeContext = appContext.tabManager.getActiveContext();
|
||||
const activeContext = glob.appContext?.tabManager?.getActiveContext();
|
||||
if (!activeContext) {
|
||||
return;
|
||||
}
|
||||
@@ -467,7 +466,7 @@ export async function openInReusableSplit(targetNoteId: string, targetViewMode:
|
||||
if (!existingSubcontext) {
|
||||
// The target split is not already open, open a new split with it.
|
||||
const { ntxId } = subContexts[subContexts.length - 1];
|
||||
appContext.triggerCommand("openNewNoteSplit", {
|
||||
glob.appContext?.triggerCommand("openNewNoteSplit", {
|
||||
ntxId,
|
||||
notePath: targetNoteId,
|
||||
hoistedNoteId: openOpts.hoistedNoteId,
|
||||
@@ -922,6 +921,7 @@ export default {
|
||||
parseDate,
|
||||
formatDateISO,
|
||||
formatDateTime,
|
||||
formatTime,
|
||||
formatTimeInterval,
|
||||
formatSize,
|
||||
localNowDateTime,
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
import utils from "./utils.js";
|
||||
import toastService from "./toast.js";
|
||||
import server from "./server.js";
|
||||
import options from "./options.js";
|
||||
import frocaUpdater from "./froca_updater.js";
|
||||
import appContext from "../components/app_context.js";
|
||||
import { t } from "./i18n.js";
|
||||
import type { EntityChange } from "../server_types.js";
|
||||
import { WebSocketMessage } from "@triliumnext/commons";
|
||||
|
||||
import appContext from "../components/app_context.js";
|
||||
import type { EntityChange } from "../server_types.js";
|
||||
import bundleService from "./bundle.js";
|
||||
import froca from "./froca.js";
|
||||
import frocaUpdater from "./froca_updater.js";
|
||||
import { t } from "./i18n.js";
|
||||
import options from "./options.js";
|
||||
import server from "./server.js";
|
||||
import toast from "./toast.js";
|
||||
import utils from "./utils.js";
|
||||
|
||||
type MessageHandler = (message: WebSocketMessage) => void;
|
||||
let messageHandlers: MessageHandler[] = [];
|
||||
@@ -126,20 +128,14 @@ async function handleMessage(event: MessageEvent<any>) {
|
||||
} else if (message.type === "frontend-update") {
|
||||
await executeFrontendUpdate(message.data.entityChanges);
|
||||
} else if (message.type === "sync-hash-check-failed") {
|
||||
toastService.showError(t("ws.sync-check-failed"), 60000);
|
||||
toast.showError(t("ws.sync-check-failed"), 60000);
|
||||
} else if (message.type === "consistency-checks-failed") {
|
||||
toastService.showError(t("ws.consistency-checks-failed"), 50 * 60000);
|
||||
toast.showError(t("ws.consistency-checks-failed"), 50 * 60000);
|
||||
} else if (message.type === "api-log-messages") {
|
||||
appContext.triggerEvent("apiLogMessages", { noteId: message.noteId, messages: message.messages });
|
||||
} else if (message.type === "toast") {
|
||||
toastService.showMessage(message.message);
|
||||
toast.showMessage(message.message, message.timeout);
|
||||
} else if (message.type === "execute-script") {
|
||||
// TODO: Remove after porting the file
|
||||
// @ts-ignore
|
||||
const bundleService = (await import("./bundle.js")).default as any;
|
||||
// TODO: Remove after porting the file
|
||||
// @ts-ignore
|
||||
const froca = (await import("./froca.js")).default as any;
|
||||
const originEntity = message.originEntityId ? await froca.getNote(message.originEntityId) : null;
|
||||
|
||||
bundleService.getAndExecuteBundle(message.currentNoteId, originEntity, message.script, message.params);
|
||||
@@ -161,7 +157,7 @@ function waitForEntityChangeId(desiredEntityChangeId: number) {
|
||||
|
||||
return new Promise<void>((res, rej) => {
|
||||
entityChangeIdReachedListeners.push({
|
||||
desiredEntityChangeId: desiredEntityChangeId,
|
||||
desiredEntityChangeId,
|
||||
resolvePromise: res,
|
||||
start: Date.now()
|
||||
});
|
||||
@@ -205,7 +201,7 @@ async function consumeFrontendUpdateData() {
|
||||
} else {
|
||||
console.log("nonProcessedEntityChanges causing the timeout", nonProcessedEntityChanges);
|
||||
|
||||
toastService.showError(t("ws.encountered-error", { message: e.message }));
|
||||
toast.showError(t("ws.encountered-error", { message: e.message }));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ class SetupController {
|
||||
}
|
||||
|
||||
private async finish() {
|
||||
const syncServerHost = this.syncServerHostInput.value.trim();
|
||||
const syncServerHost = this.syncServerHostInput.value.trim().replace(/\/+$/, "");
|
||||
const syncProxy = this.syncProxyInput.value.trim();
|
||||
const password = this.passwordInput.value;
|
||||
|
||||
|
||||
@@ -835,6 +835,7 @@ table.promoted-attributes-in-tooltip th {
|
||||
text-align: start;
|
||||
color: var(--main-text-color) !important;
|
||||
max-width: 500px;
|
||||
white-space: pre-line;
|
||||
box-shadow: 10px 10px 93px -25px #aaaaaa;
|
||||
}
|
||||
|
||||
@@ -960,15 +961,19 @@ table.promoted-attributes-in-tooltip th {
|
||||
background-color: var(--active-item-background-color);
|
||||
}
|
||||
|
||||
.help-button {
|
||||
.help-button,
|
||||
.custom-title-bar-button {
|
||||
float: inline-end;
|
||||
background: none;
|
||||
font-weight: 900;
|
||||
color: orange;
|
||||
border: 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.help-button {
|
||||
color: orange;
|
||||
}
|
||||
|
||||
.multiplicity {
|
||||
font-size: 1.3em;
|
||||
}
|
||||
@@ -1147,11 +1152,90 @@ a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href
|
||||
padding: 0.5rem 1rem 0.5rem 1rem !important; /* make modal header padding slightly smaller */
|
||||
}
|
||||
|
||||
.modal-header .help-button {
|
||||
.modal-header .help-button,
|
||||
.modal-header .custom-title-bar-button {
|
||||
padding: 6px;
|
||||
margin: 0 12px;
|
||||
}
|
||||
|
||||
.modal-content-with-sidebar {
|
||||
flex-direction: row !important;
|
||||
}
|
||||
|
||||
.modal-content-with-sidebar > .modal-sidebar {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
border-right: 1px solid var(--main-border-color);
|
||||
flex-shrink: 0;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
.modal-content-with-sidebar .modal-sidebar-header {
|
||||
padding: 0.75rem 1rem;
|
||||
flex-shrink: 0;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid var(--main-border-color);
|
||||
}
|
||||
|
||||
.modal-content-with-sidebar .modal-sidebar-header h5 {
|
||||
margin: 0;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.modal-content-with-sidebar > .modal-main > .modal-header > .modal-title {
|
||||
visibility: hidden;
|
||||
flex-grow: 1;
|
||||
width: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.modal-content-with-sidebar > .modal-main > .modal-header {
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
.modal-content-with-sidebar > .modal-main {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
min-width: 0;
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.modal-content-with-sidebar > .modal-main > .modal-body {
|
||||
overflow: auto;
|
||||
flex-grow: 1;
|
||||
min-height: 0;
|
||||
}
|
||||
|
||||
body.mobile .modal-content-with-sidebar {
|
||||
flex-direction: column !important;
|
||||
}
|
||||
|
||||
body.mobile .modal-content-with-sidebar > .modal-sidebar {
|
||||
border-right: none;
|
||||
border-bottom: 1px solid var(--main-border-color);
|
||||
height: 30vh;
|
||||
flex-shrink: 0;
|
||||
overflow: hidden;
|
||||
order: 1;
|
||||
}
|
||||
|
||||
body.mobile .modal-content-with-sidebar > .modal-main {
|
||||
order: 0;
|
||||
}
|
||||
|
||||
body.mobile .modal-content-with-sidebar .modal-sidebar-header {
|
||||
display: none;
|
||||
}
|
||||
|
||||
body.mobile .modal-content-with-sidebar > .modal-main > .modal-header > .modal-title {
|
||||
visibility: visible;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
.ck-mentions .ck-button {
|
||||
font-size: var(--detail-font-size) !important;
|
||||
padding: 5px;
|
||||
@@ -1230,6 +1314,43 @@ a.external:not(.no-arrow):after, a[href^="http://"]:not(.no-arrow):after, a[href
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* Expandable include note styles */
|
||||
.include-note-title-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.include-note-title-row .include-note-title {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.include-note-toggle {
|
||||
background: none;
|
||||
border: none;
|
||||
padding: 2px;
|
||||
cursor: pointer;
|
||||
font-size: 1.2em;
|
||||
color: var(--main-text-color);
|
||||
transition: transform 0.2s ease;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.include-note-toggle:hover {
|
||||
color: var(--main-link-color);
|
||||
}
|
||||
|
||||
.include-note-toggle.expanded {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
|
||||
.include-note[data-box-size="expandable"] .include-note-content {
|
||||
margin-top: 10px;
|
||||
}
|
||||
|
||||
.alert {
|
||||
padding: 8px 14px;
|
||||
width: auto;
|
||||
@@ -1629,6 +1750,22 @@ body:not(.mobile) #launcher-pane.horizontal .dropdown-submenu > .dropdown-menu {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
body.mobile .modal-dialog.modal-dialog-full-page-on-mobile {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
max-height: unset;
|
||||
max-width: unset;
|
||||
|
||||
.modal-content {
|
||||
border-radius: 0;
|
||||
border: 0;
|
||||
|
||||
.modal-body {
|
||||
overflow: scroll;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
body.mobile .modal-content {
|
||||
overflow-y: auto;
|
||||
border-radius: var(--bs-modal-border-radius) var(--bs-modal-border-radius) 0 0;
|
||||
@@ -1643,7 +1780,7 @@ body:not(.mobile) #launcher-pane.horizontal .dropdown-submenu > .dropdown-menu {
|
||||
display: inline !important;
|
||||
}
|
||||
|
||||
body.mobile .options-section table {
|
||||
body.mobile .options-section-card table {
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
@@ -1750,10 +1887,13 @@ body:not(.mobile) #launcher-pane.horizontal .dropdown-submenu > .dropdown-menu {
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
color: var(--muted-text-color) !important;
|
||||
}
|
||||
|
||||
#right-pane .card-header-title {
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#right-pane .card-header-buttons {
|
||||
display: flex;
|
||||
transform: scale(0.9);
|
||||
@@ -1820,12 +1960,12 @@ button.close:hover {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.options-section h5 {
|
||||
.options-section-card h5 {
|
||||
margin-top: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.options-section input[type="number"] {
|
||||
.options-section-card input[type="number"] {
|
||||
/* overriding settings from .form-control */
|
||||
width: 10em !important;
|
||||
flex-grow: 0 !important;
|
||||
@@ -2638,3 +2778,30 @@ iframe.print-iframe {
|
||||
min-height: 50px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.ocr-text-section {
|
||||
padding: 10px;
|
||||
background: var(--accented-background-color);
|
||||
border-left: 3px solid var(--main-border-color);
|
||||
text-align: left;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.ocr-header {
|
||||
font-weight: bold;
|
||||
margin-bottom: 8px;
|
||||
font-size: 0.9em;
|
||||
color: var(--muted-text-color);
|
||||
}
|
||||
|
||||
.ocr-content {
|
||||
max-height: 150px;
|
||||
overflow-y: auto;
|
||||
font-size: 0.9em;
|
||||
line-height: 1.4;
|
||||
white-space: pre-wrap;
|
||||
}
|
||||
|
||||
.ck-content pre code {
|
||||
tab-size: var(--code-block-tab-width, 4);
|
||||
}
|
||||
|
||||
@@ -269,9 +269,9 @@
|
||||
--timeline-connector-active-color: #ddd;
|
||||
--timeline-connector-hover-blend-mode: multiply;
|
||||
|
||||
--tooltip-background-color: rgba(255, 255, 255, 0.85);
|
||||
--tooltip-foreground-color: #000000ba;
|
||||
--tooltip-shadow-color: rgba(0, 0, 0, 0.15);
|
||||
--tooltip-background-color: rgba(0, 0, 0, 0.818);
|
||||
--tooltip-foreground-color: #ffffffeb;
|
||||
--tooltip-shadow-color: rgba(0, 0, 0, 0.2);
|
||||
|
||||
--help-background-color: #fffc;
|
||||
--help-card-background: var(--card-background-color);
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
/* Import the light color scheme.
|
||||
* This is the base color scheme, always active and overridden by the dark
|
||||
* color scheme stylesheet when necessary. */
|
||||
@import url(./theme-next-light.css);
|
||||
|
||||
/* Import the dark color scheme when the system preference is set to dark mode */
|
||||
@import url(./theme-next-dark.css) (prefers-color-scheme: dark);
|
||||
|
||||
:root {
|
||||
--theme-style-auto: true;
|
||||
}
|
||||
@@ -544,14 +544,11 @@ li.dropdown-item a.dropdown-item-button:focus-visible {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#toast-container .toast .toast-header .btn-close {
|
||||
#toast-container .toast .toast-header .btn-close,
|
||||
#toast-container .toast .toast-close .btn-close {
|
||||
margin: 0 0 0 12px;
|
||||
}
|
||||
|
||||
#toast-container .toast.no-title {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
#toast-container .toast .toast-body {
|
||||
flex-grow: 1;
|
||||
overflow: hidden;
|
||||
|
||||
@@ -26,7 +26,8 @@
|
||||
.modal .modal-header .btn-close,
|
||||
.modal .modal-header .help-button,
|
||||
.modal .modal-header .custom-title-bar-button,
|
||||
#toast-container .toast .toast-header .btn-close {
|
||||
#toast-container .toast .toast-header .btn-close,
|
||||
#toast-container .toast .toast-close .btn-close {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
@@ -46,12 +47,14 @@
|
||||
}
|
||||
|
||||
.modal .modal-header .btn-close,
|
||||
#toast-container .toast .toast-header .btn-close {
|
||||
#toast-container .toast .toast-header .btn-close,
|
||||
#toast-container .toast .toast-close .btn-close {
|
||||
--modal-control-button-hover-background: var(--modal-close-button-hover-background);
|
||||
}
|
||||
|
||||
.modal .modal-header .btn-close::after,
|
||||
#toast-container .toast .toast-header .btn-close::after {
|
||||
#toast-container .toast .toast-header .btn-close::after,
|
||||
#toast-container .toast .toast-close .btn-close::after {
|
||||
content: "\ec8d";
|
||||
font-family: boxicons;
|
||||
}
|
||||
@@ -67,7 +70,8 @@
|
||||
.modal .modal-header .btn-close:hover,
|
||||
.modal .modal-header .help-button:hover,
|
||||
.modal .modal-header .custom-title-bar-button:hover,
|
||||
#toast-container .toast .toast-header .btn-close:hover {
|
||||
#toast-container .toast .toast-header .btn-close:hover,
|
||||
#toast-container .toast .toast-close .btn-close:hover {
|
||||
background: var(--modal-control-button-hover-background);
|
||||
color: var(--modal-control-button-hover-color);
|
||||
}
|
||||
@@ -75,19 +79,22 @@
|
||||
.modal .modal-header .btn-close:active,
|
||||
.modal .modal-header .help-button:active,
|
||||
.modal .modal-header .custom-title-bar-button:active,
|
||||
#toast-container .toast .toast-header .btn-close:active {
|
||||
#toast-container .toast .toast-header .btn-close:active,
|
||||
#toast-container .toast .toast-close .btn-close:active {
|
||||
transform: scale(.85);
|
||||
}
|
||||
|
||||
.modal .modal-header .btn-close:focus,
|
||||
.modal .modal-header .help-button:focus,
|
||||
#toast-container .toast .toast-header .btn-close:focus {
|
||||
#toast-container .toast .toast-header .btn-close:focus,
|
||||
#toast-container .toast .toast-close .btn-close:focus {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.modal .modal-header .btn-close:focus-visible,
|
||||
.modal .modal-header .help-button:focus-visible,
|
||||
#toast-container .toast .toast-header .btn-close:focus-visible {
|
||||
#toast-container .toast .toast-header .btn-close:focus-visible,
|
||||
#toast-container .toast .toast-close .btn-close:focus-visible {
|
||||
outline: 2px solid var(--input-focus-outline-color);
|
||||
outline-offset: 2px;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,20 @@ button.ck.ck-button:is(.ck-button-action, .ck-button-save, .ck-button-cancel, .c
|
||||
&.dropdown-toggle-split {
|
||||
min-width: unset;
|
||||
}
|
||||
|
||||
.btn-group > & {
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
.btn-group > &:first-child {
|
||||
border-start-start-radius: 6px;
|
||||
border-end-start-radius: 6px;
|
||||
}
|
||||
|
||||
.btn-group > &:last-child {
|
||||
border-start-end-radius: 6px;
|
||||
border-end-end-radius: 6px;
|
||||
}
|
||||
}
|
||||
|
||||
button.btn.btn-primary:hover,
|
||||
@@ -117,11 +131,16 @@ button.tn-low-profile:hover {
|
||||
color: var(--icon-button-color);
|
||||
}
|
||||
|
||||
:root .btn-group .icon-action:last-child {
|
||||
:root .btn-group .icon-action:not(:first-child) {
|
||||
border-top-left-radius: unset !important;
|
||||
border-bottom-left-radius: unset !important;
|
||||
}
|
||||
|
||||
:root .btn-group .icon-action:not(:last-child) {
|
||||
border-top-right-radius: unset !important;
|
||||
border-bottom-right-radius: unset !important;
|
||||
}
|
||||
|
||||
.btn-group .tn-tool-button + .tn-tool-button {
|
||||
margin-inline-start: 4px !important;
|
||||
}
|
||||
|
||||
@@ -635,6 +635,7 @@ html .note-detail-editable-text :not(figure, .include-note, hr):first-child {
|
||||
inset-inline-end: 0.35em;
|
||||
}
|
||||
|
||||
.ck-content h1,
|
||||
.ck-content h2,
|
||||
.ck-content h3,
|
||||
.ck-content h4,
|
||||
@@ -694,7 +695,7 @@ html .note-detail-editable-text :not(figure, .include-note, hr):first-child {
|
||||
outline: none;
|
||||
box-shadow: 0 0 0 2px var(--link-selection-outline-color);
|
||||
background: var(--link-hover-background);
|
||||
}
|
||||
}
|
||||
|
||||
/* Reference link */
|
||||
|
||||
@@ -713,6 +714,15 @@ html .note-detail-editable-text :not(figure, .include-note, hr):first-child {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.ck-content a.reference-link small {
|
||||
margin-left: 0.25em;
|
||||
opacity: 0.5;
|
||||
|
||||
>span {
|
||||
font-size: 0.7em;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Read-only text content
|
||||
*/
|
||||
|
||||
@@ -186,12 +186,7 @@ body.experimental-feature-new-layout .note-detail-content-widget-content.options
|
||||
}
|
||||
|
||||
.options-section:not(.tn-no-card) {
|
||||
margin-bottom: calc(var(--options-title-offset) + 26px) !important;
|
||||
box-shadow: var(--card-box-shadow);
|
||||
border: 1px solid var(--card-border-color) !important;
|
||||
border-radius: 8px;
|
||||
background: var(--card-background-color);
|
||||
padding: var(--options-card-padding);
|
||||
margin-bottom: 26px !important;
|
||||
}
|
||||
|
||||
body.desktop .options-section:not(.tn-no-card) {
|
||||
@@ -199,40 +194,70 @@ body.desktop .options-section:not(.tn-no-card) {
|
||||
max-width: var(--options-card-max-width);
|
||||
}
|
||||
|
||||
.options-section-card {
|
||||
box-shadow: var(--card-box-shadow);
|
||||
border: 1px solid var(--card-border-color);
|
||||
border-radius: 8px;
|
||||
background: var(--card-background-color);
|
||||
padding: var(--options-card-padding);
|
||||
}
|
||||
|
||||
.note-detail-content-widget-content.options {
|
||||
--default-padding: 15px;
|
||||
padding-top: calc(var(--default-padding) + var(--options-title-offset) + var(--options-title-font-size));
|
||||
padding-top: var(--default-padding);
|
||||
padding-bottom: var(--default-padding);
|
||||
}
|
||||
|
||||
.options-section:not(.tn-no-card) h4,
|
||||
.options-section:not(.tn-no-card) h5 {
|
||||
.options-section:not(.tn-no-card) h4 {
|
||||
text-transform: uppercase;
|
||||
letter-spacing: .4pt;
|
||||
}
|
||||
|
||||
|
||||
.options-section:not(.tn-no-card) h4 {
|
||||
font-size: var(--options-title-font-size);
|
||||
font-weight: 600;
|
||||
color: var(--launcher-pane-text-color);
|
||||
margin-top: calc(-1 * var(--options-card-padding) - var(--options-title-font-size) - var(--options-title-offset)) !important;
|
||||
margin-bottom: calc(var(--options-title-offset) + var(--options-card-padding)) !important;
|
||||
margin-inline-start: calc(-1 * var(--options-card-padding));
|
||||
margin-top: 0;
|
||||
margin-bottom: var(--options-title-offset);
|
||||
}
|
||||
|
||||
.options-section:not(.tn-no-card) h5 {
|
||||
.options-section:not(.tn-no-card) .options-section-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
|
||||
.options-section:not(.tn-no-card) .options-section-header h4 {
|
||||
margin: 0;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.options-section:not(.tn-no-card) .options-section-header .icon-action {
|
||||
margin-inline-start: auto;
|
||||
}
|
||||
|
||||
.options-section-description {
|
||||
color: var(--muted-text-color);
|
||||
font-size: 13px;
|
||||
margin-top: 0;
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.options-section-card h5 {
|
||||
text-transform: uppercase;
|
||||
letter-spacing: .4pt;
|
||||
font-size: var(--options-title-font-size);
|
||||
font-weight: bold;
|
||||
margin-top: 1em !important;
|
||||
margin-bottom: unset !important;
|
||||
}
|
||||
|
||||
.options-section:not(.tn-no-card) h5:first-of-type {
|
||||
.options-section-card h5:first-of-type {
|
||||
margin-top: unset !important;
|
||||
}
|
||||
|
||||
.options-section hr {
|
||||
.options-section-card hr {
|
||||
--bs-border-width: 2px;
|
||||
|
||||
margin-inline-start: calc(var(--options-card-padding) * -1);
|
||||
@@ -241,27 +266,26 @@ body.desktop .options-section:not(.tn-no-card) {
|
||||
color: var(--root-background);
|
||||
}
|
||||
|
||||
.options-section p:last-of-type:not(:first-of-type),
|
||||
.options-section h4 + p:last-child,
|
||||
.options-section .existing-anonymized-databases {
|
||||
.options-section-card p:last-of-type:not(:first-of-type),
|
||||
.options-section-card .existing-anonymized-databases {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.options-section .form-group {
|
||||
.options-section-card .form-group {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.options-section .form-group:last-child {
|
||||
.options-section-card .form-group:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.options-section ul {
|
||||
.options-section-card ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.options-section label:not(.tn-checkbox):not(.tn-radio) {
|
||||
.options-section-card label:not(.tn-checkbox):not(.tn-radio) {
|
||||
margin-bottom: 6px;
|
||||
}
|
||||
|
||||
@@ -275,7 +299,7 @@ nav.options-section-tabs .nav-tabs {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
nav.options-section-tabs + .options-section {
|
||||
nav.options-section-tabs + .options-section .options-section-card {
|
||||
border-top-left-radius: 0;
|
||||
border-top-right-radius: 0;
|
||||
}
|
||||
@@ -329,3 +353,9 @@ nav.options-section-tabs + .options-section {
|
||||
.etapi-options-section div {
|
||||
height: auto !important;
|
||||
}
|
||||
|
||||
/* BACKUP */
|
||||
|
||||
.options-section-card table a {
|
||||
color: inherit;
|
||||
}
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
/* Import the light color scheme.
|
||||
* This is the base color scheme, always active and overridden by the dark
|
||||
* color scheme stylesheet when necessary. */
|
||||
@import url(./theme-light.css);
|
||||
|
||||
/* Import the dark color scheme when the system preference is set to dark mode */
|
||||
@import url(./theme-dark.css) (prefers-color-scheme: dark);
|
||||
|
||||
:root {
|
||||
--theme-style-auto: true;
|
||||
}
|
||||
@@ -1,13 +1,6 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "حول تريليوم للملاحظات",
|
||||
"homepage": "الصفحة الرئيسية:",
|
||||
"app_version": "اصدار التطبيق:",
|
||||
"sync_version": "اصدار المزامنه:",
|
||||
"build_date": "تاريخ الانشاء:",
|
||||
"build_revision": "مراجعة الاصدار:",
|
||||
"data_directory": "مجلد البيانات:",
|
||||
"db_version": "اصدار قاعدة البيانات:"
|
||||
"data_directory": "مجلد البيانات:"
|
||||
},
|
||||
"toast": {
|
||||
"critical-error": {
|
||||
@@ -373,7 +366,6 @@
|
||||
"theme_defined": "النسق المحدد",
|
||||
"main_font": "الخط الرئيسي",
|
||||
"font_family": "عائلة الخطوط",
|
||||
"reload_frontend": "اعادة تحميل الواجهة",
|
||||
"generic-fonts": "الخطوط العامة",
|
||||
"sans-serif": "خطوط بدون زوائد",
|
||||
"system-default": "الاعداد الافتراضي للنظام",
|
||||
@@ -393,9 +385,7 @@
|
||||
},
|
||||
"delete_notes": {
|
||||
"close": "غلق",
|
||||
"cancel": "الغاء",
|
||||
"ok": "نعم",
|
||||
"delete_notes_preview": "حذف معاينة الملاحظات"
|
||||
"cancel": "الغاء"
|
||||
},
|
||||
"export": {
|
||||
"close": "غلق",
|
||||
@@ -487,26 +477,6 @@
|
||||
"start_button": "بدء جلسة محمية",
|
||||
"help_title": "مساعدة حول الملاحظات المحمية"
|
||||
},
|
||||
"revisions": {
|
||||
"delete_button": "حذف",
|
||||
"download_button": "تنزيل",
|
||||
"restore_button": "أستعادة",
|
||||
"note_revisions": "مراجعات الملاحظة",
|
||||
"diff_on": "عرض الفروقات",
|
||||
"diff_off": "عرض المحتوى",
|
||||
"file_size": "حجم الملف:",
|
||||
"mime": "MIME: ",
|
||||
"delete_all_button": "حذف كل المراجعات",
|
||||
"settings": "اعدادات مراجعة الملاحظة",
|
||||
"diff_not_available": "المقارنة غير متوفرة.",
|
||||
"help_title": "مساعدة حول مراجعات الملاحظة",
|
||||
"diff_off_hint": "انقر لعرض محتويات الملاحظة",
|
||||
"revisions_deleted": "تم حذف جميع نسخ المراجعات للملاحظة.",
|
||||
"revision_restored": "تم استعادة نسخ المراجعة للملاحظة.",
|
||||
"revision_deleted": "تم حذف مراجعة الملاحظة.",
|
||||
"snapshot_interval": "فاصل زمني لحفظ لقطات اصدارات المراجعة: {{seconds}}",
|
||||
"maximum_revisions": "حد عدد لقطات اصدارات الملاحظة: {{number}}"
|
||||
},
|
||||
"sort_child_notes": {
|
||||
"title": "عنوان",
|
||||
"ascending": "تصاعدي",
|
||||
@@ -626,7 +596,8 @@
|
||||
"date-and-time": "التاريخ والوقت",
|
||||
"no_backup_yet": "لايوجد نسخة احتياطية لحد الان",
|
||||
"enable_daily_backup": "تمكين النسخ الاحتياطي اليومي",
|
||||
"backup_database_now": "نسخ اختياطي لقاعدة البيانات الان"
|
||||
"backup_database_now": "نسخ اختياطي لقاعدة البيانات الان",
|
||||
"download": "تنزيل"
|
||||
},
|
||||
"etapi": {
|
||||
"created": "تم الأنشاء",
|
||||
@@ -663,8 +634,6 @@
|
||||
"default_shortcuts": "اختصارات افتراضية"
|
||||
},
|
||||
"sync_2": {
|
||||
"timeout_unit": "ميلي ثانية",
|
||||
"note": "ملاحظة",
|
||||
"save": "حفظ",
|
||||
"help": "المساعدة",
|
||||
"config_title": "تهيئة المزامنة",
|
||||
@@ -1129,9 +1098,7 @@
|
||||
"spellcheck": {
|
||||
"title": "التدقيق الاملائي",
|
||||
"enable": "تفعيل التدقيق الاملائي",
|
||||
"language_code_label": "رمز اللغة او رموز اللغات",
|
||||
"available_language_codes_label": "رموز اللغات المتاحة:",
|
||||
"language_code_placeholder": "على سبيل المثال \"en-US\", \"de-AI\""
|
||||
"language_code_label": "رمز اللغة او رموز اللغات"
|
||||
},
|
||||
"note-map": {
|
||||
"button-link-map": "خريطة الروابط",
|
||||
|
||||
@@ -1,10 +1,4 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "Sobre Trilium Notes",
|
||||
"homepage": "Pàgina principal:",
|
||||
"app_version": "Versió de l'aplicació:",
|
||||
"db_version": "Versió de la base de dades:"
|
||||
},
|
||||
"add_link": {
|
||||
"note": "Nota"
|
||||
},
|
||||
@@ -25,8 +19,7 @@
|
||||
},
|
||||
"delete_notes": {
|
||||
"close": "Tanca",
|
||||
"cancel": "Cancel·la",
|
||||
"ok": "OK"
|
||||
"cancel": "Cancel·la"
|
||||
},
|
||||
"export": {
|
||||
"close": "Tanca",
|
||||
@@ -60,12 +53,6 @@
|
||||
"recent_changes": {
|
||||
"undelete_link": "recuperar"
|
||||
},
|
||||
"revisions": {
|
||||
"restore_button": "Restaura",
|
||||
"delete_button": "Suprimeix",
|
||||
"download_button": "Descarrega",
|
||||
"mime": "MIME: "
|
||||
},
|
||||
"sort_child_notes": {
|
||||
"title": "títol",
|
||||
"ascending": "ascendent",
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "关于 Trilium Notes",
|
||||
"homepage": "项目主页:",
|
||||
"app_version": "应用版本:",
|
||||
"db_version": "数据库版本:",
|
||||
"sync_version": "同步版本:",
|
||||
"build_date": "编译日期:",
|
||||
"build_revision": "编译版本:",
|
||||
"data_directory": "数据目录:"
|
||||
},
|
||||
"toast": {
|
||||
@@ -41,7 +34,9 @@
|
||||
"link_title_mirrors": "链接标题跟随笔记标题变化",
|
||||
"link_title_arbitrary": "链接标题可随意修改",
|
||||
"link_title": "链接标题",
|
||||
"button_add_link": "添加链接"
|
||||
"button_add_link": "添加链接",
|
||||
"anchor": "锚点(可选)",
|
||||
"anchor_none": "无(笔记链接)"
|
||||
},
|
||||
"branch_prefix": {
|
||||
"edit_branch_prefix": "编辑分支前缀",
|
||||
@@ -88,17 +83,22 @@
|
||||
"also_delete_note": "同时删除笔记"
|
||||
},
|
||||
"delete_notes": {
|
||||
"delete_notes_preview": "删除笔记预览",
|
||||
"close": "关闭",
|
||||
"delete_all_clones_description": "同时删除所有克隆(可以在最近修改中撤消)",
|
||||
"erase_notes_description": "通常(软)删除仅标记笔记为已删除,可以在一段时间内通过最近修改对话框撤消。选中此选项将立即擦除笔记,不可撤销。",
|
||||
"erase_notes_description": "立即删除笔记,而不是软删除。此操作无法撤销,并将强制应用程序重新加载。",
|
||||
"erase_notes_warning": "永久擦除笔记(无法撤销),包括所有克隆。这将强制应用程序重载。",
|
||||
"notes_to_be_deleted": "将删除以下笔记 ({{notesCount}})",
|
||||
"notes_to_be_deleted": "待删除笔记({{notesCount}})",
|
||||
"no_note_to_delete": "没有笔记将被删除(仅克隆)。",
|
||||
"broken_relations_to_be_deleted": "将删除以下关系并断开连接 ({{ relationCount}})",
|
||||
"broken_relations_to_be_deleted": "断开的关联({{relationCount}})",
|
||||
"cancel": "取消",
|
||||
"ok": "确定",
|
||||
"deleted_relation_text": "笔记 {{- note}} (将被删除的笔记) 被以下关系 {{- relation}} 引用, 来自 {{- source}}。"
|
||||
"title": "删除笔记",
|
||||
"delete": "删除",
|
||||
"clones_label": "克隆",
|
||||
"delete_clones_description_other": "同时删除 {{count}} 个其他克隆。此操作可在最近的更改中撤销。",
|
||||
"erase_notes_label": "永久擦除",
|
||||
"table_note_with_relation": "关联笔记",
|
||||
"table_relation": "关联",
|
||||
"table_points_to": "指向(已删除)"
|
||||
},
|
||||
"export": {
|
||||
"export_note_title": "导出笔记",
|
||||
@@ -209,7 +209,8 @@
|
||||
"box_size_small": "小型 (显示大约10行)",
|
||||
"box_size_medium": "中型 (显示大约30行)",
|
||||
"box_size_full": "完整显示(完整文本框)",
|
||||
"button_include": "包含笔记"
|
||||
"button_include": "包含笔记",
|
||||
"box_size_expandable": "可展开(默认折叠)"
|
||||
},
|
||||
"info": {
|
||||
"modalTitle": "信息消息",
|
||||
@@ -270,33 +271,6 @@
|
||||
"undelete_link": "恢复删除",
|
||||
"confirm_undelete": "您确定要恢复此笔记及其子笔记吗?"
|
||||
},
|
||||
"revisions": {
|
||||
"note_revisions": "笔记历史版本",
|
||||
"delete_all_revisions": "删除此笔记的所有修订版本",
|
||||
"delete_all_button": "删除所有修订版本",
|
||||
"help_title": "关于笔记修订版本的帮助",
|
||||
"confirm_delete_all": "您是否要删除此笔记的所有修订版本?",
|
||||
"no_revisions": "此笔记暂无修订版本...",
|
||||
"restore_button": "恢复",
|
||||
"confirm_restore": "您是否要恢复此修订版本?这将使用此修订版本覆盖笔记的当前标题和内容。",
|
||||
"delete_button": "删除",
|
||||
"confirm_delete": "您是否要删除此修订版本?",
|
||||
"revisions_deleted": "笔记修订版本已删除。",
|
||||
"revision_restored": "笔记修订版本已恢复。",
|
||||
"revision_deleted": "笔记修订版本已删除。",
|
||||
"snapshot_interval": "笔记快照保存间隔: {{seconds}}秒。",
|
||||
"maximum_revisions": "当前笔记的最大历史数量: {{number}}。",
|
||||
"settings": "笔记修订设置",
|
||||
"download_button": "下载",
|
||||
"mime": "MIME 类型: ",
|
||||
"file_size": "文件大小:",
|
||||
"preview_not_available": "无法预览此类型的笔记。",
|
||||
"diff_on": "显示差异",
|
||||
"diff_off": "显示内容",
|
||||
"diff_on_hint": "点击以显示笔记源代码差异",
|
||||
"diff_off_hint": "点击以显示笔记内容",
|
||||
"diff_not_available": "差异不可用。"
|
||||
},
|
||||
"sort_child_notes": {
|
||||
"sort_children_by": "按...排序子笔记",
|
||||
"sorting_criteria": "排序条件",
|
||||
@@ -368,7 +342,7 @@
|
||||
"calendar_root": "标记应用作为每日笔记的根。只应标记一个笔记。",
|
||||
"archived": "含有此标签的笔记默认在搜索结果中不可见(也适用于跳转到、添加链接对话框等)。",
|
||||
"exclude_from_export": "笔记(及其子树)不会包含在任何笔记导出中",
|
||||
"run": "定义脚本应运行的事件。可能的值包括:\n<ul>\n<li>frontendStartup - Trilium前端启动时(或刷新时),但不会在移动端执行。</li>\n<li>mobileStartup - Trilium前端启动时(或刷新时), 在移动端会执行。</li>\n<li>backendStartup - Trilium后端启动时</li>\n<li>hourly - 每小时运行一次。您可以使用附加标签<code>runAtHour</code>指定小时。</li>\n<li>daily - 每天运行一次</li>\n</ul>",
|
||||
"run": "定义脚本应运行的事件。可能的值包括:\n<ul>\n<li>frontendStartup - Trilium前端启动时(或刷新时),但不会在移动端执行。</li>\n<li>mobileStartup - Trilium前端启动时(或刷新时), 在移动端会执行。</li>\n<li>backendStartup - Trilium后端启动时。</li>\n<li>hourly - 每小时运行一次。您可以使用附加标签<code>runAtHour</code>指定小时。</li>\n<li>daily - 每天运行一次。</li>\n</ul>",
|
||||
"run_on_instance": "定义应在哪个Trilium实例上运行。默认为所有实例。",
|
||||
"run_at_hour": "应在哪个小时运行。应与<code>#run=hourly</code>一起使用。可以多次定义,以便一天内运行多次。",
|
||||
"disable_inclusion": "含有此标签的脚本不会包含在父脚本执行中。",
|
||||
@@ -447,7 +421,9 @@
|
||||
"print_landscape": "导出为 PDF 时,将页面方向更改为横向而不是纵向。",
|
||||
"print_page_size": "导出为 PDF 时,更改页面大小。支持的值:<code>A0</code>、<code>A1</code>、<code>A2</code>、<code>A3</code>、<code>A4</code>、<code>A5</code>、<code>A6</code>、<code>Legal</code>、<code>Letter</code>、<code>Tabloid</code>、<code>Ledger</code>。",
|
||||
"color_type": "颜色",
|
||||
"textarea": "多行文本"
|
||||
"textarea": "多行文本",
|
||||
"print_scale": "导出为 PDF 时,更改渲染内容的比例。取值范围从 0.1 (10%) 到 2 (200%),默认值为 1 (100%)。",
|
||||
"print_margins": "导出为 PDF 时,设置页面边距。可以使用 <code>default</code>、<code>none</code>、<code>minimum</code> 或以毫米为单位的自定义值,例如 <code>top,right,bottom,left</code>。"
|
||||
},
|
||||
"attribute_editor": {
|
||||
"help_text_body1": "要添加标签,只需输入例如 <code>#rock</code> 或者如果您还想添加值,则例如 <code>#year = 2020</code>",
|
||||
@@ -709,7 +685,13 @@
|
||||
"advanced": "高级",
|
||||
"export_as_image": "导出为图像",
|
||||
"export_as_image_png": "PNG(栅格)",
|
||||
"export_as_image_svg": "SVG(矢量图)"
|
||||
"export_as_image_svg": "SVG(矢量图)",
|
||||
"view_ocr_text": "查看 OCR 文本",
|
||||
"word_wrap": "自动换行",
|
||||
"word_wrap_auto": "自动",
|
||||
"word_wrap_auto_description": "遵循全局设置",
|
||||
"word_wrap_on": "开启",
|
||||
"word_wrap_off": "关闭"
|
||||
},
|
||||
"onclick_button": {
|
||||
"no_click_handler": "按钮组件'{{componentId}}'没有定义点击处理程序"
|
||||
@@ -803,7 +785,10 @@
|
||||
"expand_first_level": "展开直接子代",
|
||||
"expand_nth_level": "展开 {{depth}} 层",
|
||||
"expand_all_levels": "展开所有层级",
|
||||
"hide_child_notes": "隐藏树中的子笔记"
|
||||
"hide_child_notes": "隐藏树中的子笔记",
|
||||
"open_all_in_tabs": "全部打开",
|
||||
"open_all_in_tabs_tooltip": "在新标签页中打开所有结果",
|
||||
"open_all_confirm": "这将在新标签页中打开 {{count}} 个笔记。继续吗?"
|
||||
},
|
||||
"edited_notes": {
|
||||
"no_edited_notes_found": "今天还没有编辑过的笔记...",
|
||||
@@ -857,7 +842,8 @@
|
||||
"collapse": "折叠到正常大小",
|
||||
"title": "笔记地图",
|
||||
"fix-nodes": "固定节点",
|
||||
"link-distance": "链接距离"
|
||||
"link-distance": "链接距离",
|
||||
"too-many-notes": "此子树包含 {{count}} 个笔记,超过了笔记地图中可显示的 {{max}} 个笔记的限制。"
|
||||
},
|
||||
"note_paths": {
|
||||
"title": "笔记路径",
|
||||
@@ -1062,7 +1048,8 @@
|
||||
"note_already_in_diagram": "笔记 \"{{title}}\" 已经在图中。",
|
||||
"enter_title_of_new_note": "输入新笔记的标题",
|
||||
"default_new_note_title": "新笔记",
|
||||
"click_on_canvas_to_place_new_note": "点击画布以放置新笔记"
|
||||
"click_on_canvas_to_place_new_note": "点击画布以放置新笔记",
|
||||
"rename_relation": "重命名关系"
|
||||
},
|
||||
"backend_log": {
|
||||
"refresh": "刷新"
|
||||
@@ -1071,15 +1058,17 @@
|
||||
"title": "检查一致性",
|
||||
"find_and_fix_button": "查找并修复一致性问题",
|
||||
"finding_and_fixing_message": "正在查找并修复一致性问题...",
|
||||
"issues_fixed_message": "一致性问题应该已被修复。"
|
||||
"issues_fixed_message": "一致性问题应该已被修复。",
|
||||
"find_and_fix_label": "查找并修复一致性问题",
|
||||
"find_and_fix_description": "扫描并自动修复数据库中的任何数据一致性问题。"
|
||||
},
|
||||
"database_anonymization": {
|
||||
"title": "数据库匿名化",
|
||||
"full_anonymization": "完全匿名化",
|
||||
"full_anonymization_description": "此操作将创建一个新的数据库副本并进行匿名化处理(删除所有笔记内容,仅保留结构和一些非敏感元数据),用来分享到网上做调试而不用担心泄漏您的个人资料。",
|
||||
"full_anonymization_description": "创建数据库副本,移除所有笔记内容,仅保留数据库结构和非敏感元数据。在调试问题时,可安全地在线共享。",
|
||||
"save_fully_anonymized_database": "保存完全匿名化的数据库",
|
||||
"light_anonymization": "轻度匿名化",
|
||||
"light_anonymization_description": "此操作将创建一个新的数据库副本,并对其进行轻度匿名化处理——仅删除所有笔记的内容,但保留标题和属性。此外,自定义 JS 前端/后端脚本笔记和自定义小部件将保留。这提供了更多上下文以调试问题。",
|
||||
"light_anonymization_description": "创建一个副本,其中移除笔记内容,但保留标题、属性和自定义脚本/小部件。这有助于提供更多调试信息。",
|
||||
"choose_anonymization": "您可以自行决定是提供完全匿名化还是轻度匿名化的数据库。即使是完全匿名化的数据库也非常有用,但在某些情况下,轻度匿名化的数据库可以加快错误识别和修复的过程。",
|
||||
"save_lightly_anonymized_database": "保存轻度匿名化的数据库",
|
||||
"existing_anonymized_databases": "现有的匿名化数据库",
|
||||
@@ -1088,15 +1077,17 @@
|
||||
"error_creating_anonymized_database": "无法创建匿名化数据库,请检查后端日志以获取详细信息",
|
||||
"successfully_created_fully_anonymized_database": "成功创建完全匿名化的数据库,路径为 {{anonymizedFilePath}}",
|
||||
"successfully_created_lightly_anonymized_database": "成功创建轻度匿名化的数据库,路径为 {{anonymizedFilePath}}",
|
||||
"no_anonymized_database_yet": "尚无匿名化数据库。"
|
||||
"no_anonymized_database_yet": "尚无匿名化数据库。",
|
||||
"description": "创建数据库的匿名副本,以便在调试问题时与开发人员共享,而不会泄露个人数据。"
|
||||
},
|
||||
"database_integrity_check": {
|
||||
"title": "数据库完整性检查",
|
||||
"description": "检查 SQLite 数据库是否损坏。根据数据库的大小,可能会需要一些时间。",
|
||||
"check_button": "检查数据库完整性",
|
||||
"checking_integrity": "正在检查数据库完整性...",
|
||||
"integrity_check_succeeded": "完整性检查成功 - 未发现问题。",
|
||||
"integrity_check_failed": "完整性检查失败: {{results}}"
|
||||
"integrity_check_failed": "完整性检查失败: {{results}}",
|
||||
"check_integrity_label": "检查数据库完整性",
|
||||
"check_integrity_description": "验证 SQLite 数据库是否已损坏。"
|
||||
},
|
||||
"sync": {
|
||||
"title": "同步",
|
||||
@@ -1106,28 +1097,31 @@
|
||||
"filling_entity_changes": "正在填充实体变更行...",
|
||||
"sync_rows_filled_successfully": "同步行填充成功",
|
||||
"finished-successfully": "同步已完成。",
|
||||
"failed": "同步失败:{{message}}"
|
||||
"failed": "同步失败:{{message}}",
|
||||
"force_full_sync_label": "强制全量同步",
|
||||
"force_full_sync_description": "触发与同步服务器的全量同步,重新上传所有更改。",
|
||||
"fill_entity_changes_description": "重建实体变更记录。如果同步过程中缺少某些变更,请使用此功能。",
|
||||
"fill_entity_changes_label": "填充实体变更"
|
||||
},
|
||||
"vacuum_database": {
|
||||
"title": "数据库清理",
|
||||
"description": "这会重建数据库,通常会减少占用空间,不会删除数据。",
|
||||
"button_text": "清理数据库",
|
||||
"vacuuming_database": "正在清理数据库...",
|
||||
"database_vacuumed": "数据库已清理"
|
||||
"database_vacuumed": "数据库已清理",
|
||||
"vacuum_label": "数据库清理",
|
||||
"vacuum_description": "重建数据库以减小文件大小。数据不会发生任何变化。"
|
||||
},
|
||||
"fonts": {
|
||||
"theme_defined": "跟随主题",
|
||||
"fonts": "字体",
|
||||
"main_font": "主字体",
|
||||
"main_font": "界面字体",
|
||||
"font_family": "字体系列",
|
||||
"size": "大小",
|
||||
"note_tree_font": "笔记树字体",
|
||||
"note_detail_font": "笔记详情字体",
|
||||
"monospace_font": "等宽(代码)字体",
|
||||
"note_tree_and_detail_font_sizing": "请注意,笔记树字体和详细字体的大小相对于主字体大小设置。",
|
||||
"not_all_fonts_available": "并非所有列出的字体都可能在您的系统上可用。",
|
||||
"apply_font_changes": "要应用字体更改,请点击",
|
||||
"reload_frontend": "重载前端",
|
||||
"note_detail_font": "文档字体",
|
||||
"monospace_font": "等宽字体",
|
||||
"not_all_fonts_available": "并非所有列出的字体都可能在您的系统上可用",
|
||||
"generic-fonts": "通用字体",
|
||||
"sans-serif-system-fonts": "无衬线系统字体",
|
||||
"serif-system-fonts": "衬线系统字体",
|
||||
@@ -1136,7 +1130,12 @@
|
||||
"serif": "衬线",
|
||||
"sans-serif": "无衬线",
|
||||
"monospace": "等宽",
|
||||
"system-default": "系统默认"
|
||||
"system-default": "系统默认",
|
||||
"custom_fonts": "使用自定义字体",
|
||||
"preview": "预览",
|
||||
"monospace_font_description": "用于代码注释和代码块",
|
||||
"size_relative_to_general": "大小相对于一般字体大小",
|
||||
"apply_changes": "重新加载以应用更改"
|
||||
},
|
||||
"max_content_width": {
|
||||
"title": "内容宽度",
|
||||
@@ -1156,20 +1155,23 @@
|
||||
"edited_notes_message": "日记笔记自动打开编辑过的笔记功能区标签页"
|
||||
},
|
||||
"theme": {
|
||||
"title": "主题",
|
||||
"theme_label": "主题",
|
||||
"title": "用户界面",
|
||||
"theme_label": "应用主题",
|
||||
"override_theme_fonts_label": "覆盖主题字体",
|
||||
"triliumnext": "Trilium(跟随系统颜色方案)",
|
||||
"triliumnext-light": "Trilium(浅色)",
|
||||
"triliumnext-dark": "Trilium(深色)",
|
||||
"triliumnext": "跟随系统颜色方案",
|
||||
"triliumnext-light": "浅色",
|
||||
"triliumnext-dark": "深色",
|
||||
"layout": "布局",
|
||||
"layout-vertical-title": "垂直",
|
||||
"layout-horizontal-title": "水平",
|
||||
"layout-vertical-description": "启动栏位于左侧(默认)",
|
||||
"layout-horizontal-description": "启动栏位于标签页栏下方,标签页栏现在是全宽的。",
|
||||
"auto_theme": "传统(跟随系统配色方案)",
|
||||
"light_theme": "传统(浅色)",
|
||||
"dark_theme": "传统(深色)"
|
||||
"auto_theme": "跟随系统配色方案",
|
||||
"light_theme": "浅色",
|
||||
"dark_theme": "深色",
|
||||
"modern_themes": "现代",
|
||||
"legacy_themes": "传统",
|
||||
"custom_themes": "自定义"
|
||||
},
|
||||
"zoom_factor": {
|
||||
"title": "缩放系数(仅桌面客户端有效)",
|
||||
@@ -1178,7 +1180,7 @@
|
||||
"code_auto_read_only_size": {
|
||||
"title": "自动只读大小",
|
||||
"description": "自动只读大小是指笔记超过设置的大小后自动设置为只读模式(为性能考虑)。",
|
||||
"label": "自动只读大小(代码笔记)",
|
||||
"label": "自动只读大小",
|
||||
"unit": "字符"
|
||||
},
|
||||
"code_mime_types": {
|
||||
@@ -1197,32 +1199,51 @@
|
||||
},
|
||||
"images": {
|
||||
"images_section_title": "图片",
|
||||
"download_images_automatically": "自动下载图片以供离线使用。",
|
||||
"download_images_description": "粘贴的 HTML 可能包含在线图片的引用,Trilium 会找到这些引用并下载图片,以便它们可以离线使用。",
|
||||
"enable_image_compression": "启用图片压缩",
|
||||
"max_image_dimensions": "图片的最大宽度/高度(超过此限制的图像将会被缩放)。",
|
||||
"jpeg_quality_description": "JPEG 质量(10 - 最差质量,100 最佳质量,建议为 50 - 85)",
|
||||
"max_image_dimensions_unit": "像素"
|
||||
"download_images_automatically": "自动下载图片",
|
||||
"download_images_description": "从粘贴的 HTML 代码中下载引用的在线图片,以便离线使用。",
|
||||
"enable_image_compression": "图片压缩",
|
||||
"max_image_dimensions": "最大图像尺寸",
|
||||
"jpeg_quality_description": "建议范围为 50–85。较低的值可以减小文件大小,较高的值可以保留细节。",
|
||||
"max_image_dimensions_unit": "像素",
|
||||
"enable_image_compression_description": "上传或粘贴图片时,对其进行压缩和调整大小。",
|
||||
"max_image_dimensions_description": "超过此尺寸的图片将自动调整大小。",
|
||||
"jpeg_quality": "JPEG质量",
|
||||
"ocr_section_title": "文本提取(OCR)",
|
||||
"ocr_related_content_languages": "内容语言(用于文本提取)",
|
||||
"ocr_auto_process": "自动处理新文件",
|
||||
"ocr_auto_process_description": "自动从新上传或粘贴的文件中提取文本。",
|
||||
"ocr_min_confidence": "最低置信度",
|
||||
"ocr_confidence_description": "仅提取置信度高于此阈值的文本。较低的置信度阈值会包含更多文本,但可能准确性较低。",
|
||||
"batch_ocr_title": "处理现有文件",
|
||||
"batch_ocr_description": "从笔记中的所有现有图像、PDF 和 Office 文档中提取文本。这可能需要一些时间,具体取决于文件数量。",
|
||||
"batch_ocr_start": "开始批量处理",
|
||||
"batch_ocr_starting": "开始批量处理...",
|
||||
"batch_ocr_progress": "正在处理 {{processed}} 个文件,共 {{total}} 个文件...",
|
||||
"batch_ocr_completed": "批量处理完成!已处理 {{processed}} 个文件。",
|
||||
"batch_ocr_error": "批量处理过程中出错:{{error}}"
|
||||
},
|
||||
"attachment_erasure_timeout": {
|
||||
"attachment_erasure_timeout": "附件清理超时",
|
||||
"attachment_auto_deletion_description": "如果附件在一段时间后不再被笔记引用,它们将自动被删除(并被清理)。",
|
||||
"erase_attachments_after": "在此时间后删除未使用的附件:",
|
||||
"manual_erasing_description": "您还可以手动触发清理(而不考虑上述定义的超时时间):",
|
||||
"erase_unused_attachments_now": "立即清理未使用的附件笔记",
|
||||
"unused_attachments_erased": "未使用的附件已被删除。"
|
||||
"attachment_erasure_timeout": "未使用的附件",
|
||||
"erase_attachments_after": "在此时间后清理未使用的附件",
|
||||
"manual_erasing_description": "手动触发清理,忽略上述超时。",
|
||||
"erase_unused_attachments_now": "立即清理未使用的附件",
|
||||
"unused_attachments_erased": "未使用的附件已被清理。",
|
||||
"description": "不再被任何笔记引用的附件被视为未使用,可以在一段时间后自动清理。",
|
||||
"erase_attachments_after_description": "未使用附件被永久清理前的时间。"
|
||||
},
|
||||
"network_connections": {
|
||||
"network_connections_title": "网络连接",
|
||||
"check_for_updates": "自动检查更新"
|
||||
"network_connections_title": "网络",
|
||||
"check_for_updates": "自动检查更新",
|
||||
"check_for_updates_description": "在 GitHub 上检查新版本,并在可用时在全局菜单中显示通知。"
|
||||
},
|
||||
"note_erasure_timeout": {
|
||||
"note_erasure_timeout_title": "笔记清理超时",
|
||||
"note_erasure_description": "被删除的笔记(以及属性、修订历史等)最初仅被标记为“删除”,可以从“最近修改”对话框中恢复它们。经过一段时间后,已删除的笔记会被“清理”,这意味着它们的内容将无法恢复。此设置允许您配置从删除到清除笔记之间的时间长度。",
|
||||
"erase_notes_after": "在此时间后删除笔记:",
|
||||
"manual_erasing_description": "您还可以手动触发清理(不考虑上述定义的超时):",
|
||||
"note_erasure_timeout_title": "已删除的笔记",
|
||||
"erase_notes_after": "在此时间后清理笔记",
|
||||
"manual_erasing_description": "手动触发清理,忽略上述超时。",
|
||||
"erase_deleted_notes_now": "立即清理已删除的笔记",
|
||||
"deleted_notes_erased": "已删除的笔记已被清理。"
|
||||
"deleted_notes_erased": "已删除的笔记已被清理。",
|
||||
"description": "删除的笔记最初只是被标记为已删除,可以从“最近的笔记”中恢复。经过一段时间后,它们将被永久清理。",
|
||||
"erase_notes_after_description": "删除的笔记被永久清理之前的时间。"
|
||||
},
|
||||
"revisions_snapshot_interval": {
|
||||
"note_revisions_snapshot_interval_title": "笔记修订快照间隔",
|
||||
@@ -1297,7 +1318,6 @@
|
||||
"first-week-contains-first-thursday": "第一周包含一年的第一个周四",
|
||||
"first-week-has-minimum-days": "第一周有最小天数",
|
||||
"min-days-in-first-week": "第一周的最小天数",
|
||||
"first-week-info": "第一周包含一年的第一个周四,基于 <a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a> 标准。",
|
||||
"first-week-warning": "更改第一周选项可能会导致与现有周笔记重复,已创建的周笔记将不会相应更新。",
|
||||
"formatting-locale": "日期和数字格式",
|
||||
"tuesday": "周二",
|
||||
@@ -1320,7 +1340,8 @@
|
||||
"date-and-time": "日期和时间",
|
||||
"path": "路径",
|
||||
"database_backed_up_to": "数据库已备份到 {{backupFilePath}}",
|
||||
"no_backup_yet": "尚无备份"
|
||||
"no_backup_yet": "尚无备份",
|
||||
"download": "下载"
|
||||
},
|
||||
"etapi": {
|
||||
"title": "ETAPI",
|
||||
@@ -1418,28 +1439,28 @@
|
||||
"spellcheck": {
|
||||
"title": "拼写检查",
|
||||
"description": "这些选项仅适用于桌面版本,浏览器将使用其原生的拼写检查功能。",
|
||||
"enable": "启用拼写检查",
|
||||
"language_code_label": "语言代码",
|
||||
"language_code_placeholder": "例如 \"en-US\", \"de-AT\"",
|
||||
"multiple_languages_info": "多种语言可以用逗号分隔,例如 \"en-US, de-DE, cs\"。 ",
|
||||
"available_language_codes_label": "可用的语言代码:",
|
||||
"restart-required": "拼写检查选项的更改将在应用重启后生效。"
|
||||
"enable": "拼写检查",
|
||||
"language_code_label": "拼写检查语言",
|
||||
"restart-required": "拼写检查选项的更改将在应用重启后生效。",
|
||||
"custom_dictionary_title": "自定义词典",
|
||||
"custom_dictionary_description": "添加到词典中的单词会在您的所有设备上同步。",
|
||||
"custom_dictionary_edit": "自定义词",
|
||||
"custom_dictionary_edit_description": "编辑拼写检查器不应标记的单词列表。更改将在重启后生效。",
|
||||
"custom_dictionary_open": "编辑词典",
|
||||
"related_description": "配置拼写检查语言和自定义词典。"
|
||||
},
|
||||
"sync_2": {
|
||||
"config_title": "同步配置",
|
||||
"server_address": "服务器实例地址",
|
||||
"timeout": "同步超时(单位:毫秒)",
|
||||
"proxy_label": "同步代理服务器(可选)",
|
||||
"note": "注意",
|
||||
"note_description": "代理设置留空则使用系统代理(仅桌面客户端有效)。",
|
||||
"special_value_description": "另一个特殊值是 <code>noproxy</code>,它强制忽略系统代理并遵守 <code>NODE_TLS_REJECT_UNAUTHORIZED</code>。",
|
||||
"save": "保存",
|
||||
"help": "帮助",
|
||||
"test_title": "同步测试",
|
||||
"test_description": "测试和同步服务器之间的连接。如果同步服务器没有初始化,会将本地文档同步到同步服务器上。",
|
||||
"test_button": "测试同步",
|
||||
"handshake_failed": "同步服务器握手失败,错误:{{message}}",
|
||||
"timeout_unit": "毫秒"
|
||||
"timeout_description": "同步连接速度慢时,应该等待多久才放弃?如果网络不稳定,请增加等待时间。"
|
||||
},
|
||||
"api_log": {
|
||||
"close": "关闭"
|
||||
@@ -1535,8 +1556,9 @@
|
||||
"new-feature": "新建",
|
||||
"collections": "集合",
|
||||
"book": "集合",
|
||||
"ai-chat": "AI聊天",
|
||||
"spreadsheet": "电子表格"
|
||||
"ai-chat": "AI对话",
|
||||
"spreadsheet": "电子表格",
|
||||
"llm-chat": "AI对话"
|
||||
},
|
||||
"protect_note": {
|
||||
"toggle-on": "保护笔记",
|
||||
@@ -1843,7 +1865,9 @@
|
||||
}
|
||||
},
|
||||
"code-editor-options": {
|
||||
"title": "编辑器"
|
||||
"title": "编辑器",
|
||||
"tab_width": "制表符宽度",
|
||||
"tab_width_unit": "空格"
|
||||
},
|
||||
"custom_date_time_format": {
|
||||
"title": "自定义日期/时间格式",
|
||||
@@ -1861,7 +1885,7 @@
|
||||
},
|
||||
"content_language": {
|
||||
"title": "内容语言",
|
||||
"description": "选择一种或多种语言出现在只读或可编辑文本注释的基本属性,这将支持拼写检查或从右向左之类的功能。"
|
||||
"description": "在只读或可编辑文本笔记的“基本属性”部分,选择一种或多种语言,这些语言将显示在语言选择列表中。这将启用拼写检查、从右到左的阅读支持和文本提取(OCR)等功能。"
|
||||
},
|
||||
"switch_layout_button": {
|
||||
"title_vertical": "将编辑面板移至底部",
|
||||
@@ -2002,11 +2026,11 @@
|
||||
},
|
||||
"ui-performance": {
|
||||
"title": "性能",
|
||||
"enable-motion": "启用过渡和动画",
|
||||
"enable-shadows": "启用阴影",
|
||||
"enable-backdrop-effects": "启用菜单、弹窗和面板的背景效果",
|
||||
"enable-smooth-scroll": "启用平滑滚动",
|
||||
"app-restart-required": "(需重启程序以应用更改)"
|
||||
"enable-motion": "过渡和动画",
|
||||
"enable-shadows": "阴影",
|
||||
"enable-backdrop-effects": "菜单、弹窗和面板的背景效果",
|
||||
"enable-smooth-scroll": "平滑滚动",
|
||||
"app-restart-required": "需要重启应用"
|
||||
},
|
||||
"pagination": {
|
||||
"total_notes": "{{count}} 篇笔记",
|
||||
@@ -2046,7 +2070,9 @@
|
||||
"title": "实验选项",
|
||||
"disclaimer": "这些选项处于实验阶段,可能导致系统不稳定。请谨慎使用。",
|
||||
"new_layout_name": "新布局",
|
||||
"new_layout_description": "尝试全新布局,呈现更现代的外观并提升易用性。后续版本将进行重大调整。"
|
||||
"new_layout_description": "尝试全新布局,呈现更现代的外观并提升易用性。后续版本将进行重大调整。",
|
||||
"llm_name": "AI/大语言模型对话",
|
||||
"llm_description": "启用由大语言模型驱动的 AI对话侧边栏和大语言模型对话笔记。"
|
||||
},
|
||||
"tab_history_navigation_buttons": {
|
||||
"go-back": "返回前一笔记",
|
||||
@@ -2214,6 +2240,124 @@
|
||||
"sample_xy": "散点图",
|
||||
"sample_venn": "韦恩图",
|
||||
"sample_ishikawa": "鱼骨图",
|
||||
"placeholder": "输入你的美人鱼图的内容,或者使用下面的示例图之一。"
|
||||
"placeholder": "输入你的美人鱼图的内容,或者使用下面的示例图之一。",
|
||||
"sample_treeview": "树形视图",
|
||||
"sample_wardley": "沃德利地图"
|
||||
},
|
||||
"llm_chat": {
|
||||
"placeholder": "输入消息…",
|
||||
"send": "发送",
|
||||
"sending": "正在发送...",
|
||||
"empty_state": "在下方输入消息,即可开始对话。",
|
||||
"searching_web": "在网上搜索…",
|
||||
"web_search": "联网搜索",
|
||||
"sources": "来源",
|
||||
"extended_thinking": "延伸思考",
|
||||
"legacy_models": "传统模型",
|
||||
"thinking": "正在思考...",
|
||||
"thought_process": "思考过程",
|
||||
"tool_calls": "{{count}} 次工具调用",
|
||||
"input": "输入",
|
||||
"result": "结果",
|
||||
"error": "错误",
|
||||
"tool_error": "失败",
|
||||
"total_tokens": "{{total}} 个词元",
|
||||
"tokens_detail": "{{prompt}} 提示词 + {{completion}} 补全",
|
||||
"tokens_used": "{{prompt}} 提示词 + {{completion}} 补全 = {{total}} 个词元",
|
||||
"tokens_used_with_cost": "{{prompt}} 提示词 + {{completion}} 补全 = {{total}} 个词元(约 ${{cost}})",
|
||||
"tokens_used_with_model": "{{model}}: {{prompt}} 提示词 + {{completion}} 补全 = {{total}} 个词元",
|
||||
"tokens_used_with_model_and_cost": "{{model}}: {{prompt}} 提示词 + {{completion}} 补全 = {{total}} 个词元(约 ${{cost}})",
|
||||
"tokens": "词元",
|
||||
"context_used": "{{percentage}}% 使用率",
|
||||
"note_context_enabled": "点击即可禁用笔记上下文:{{title}}",
|
||||
"note_context_disabled": "点击即可将当前注释添加到上下文中",
|
||||
"no_provider_message": "未配置人工智能提供商。添加一个即可开始对话。",
|
||||
"add_provider": "添加人工智能提供商",
|
||||
"note_tools": "笔记访问",
|
||||
"sources_summary": "来自 {{sites}} 个网站的 {{count}} 个来源"
|
||||
},
|
||||
"sidebar_chat": {
|
||||
"title": "AI对话",
|
||||
"launcher_title": "打开AI对话",
|
||||
"new_chat": "开始新对话",
|
||||
"save_chat": "将对话保存到笔记",
|
||||
"empty_state": "开始对话",
|
||||
"history": "对话历史",
|
||||
"recent_chats": "最近对话",
|
||||
"no_chats": "无历史对话"
|
||||
},
|
||||
"ocr": {
|
||||
"extracted_text": "提取文本(OCR)",
|
||||
"extracted_text_title": "提取文本(OCR)",
|
||||
"loading_text": "正在加载OCR文本...",
|
||||
"no_text_available": "暂无OCR文本",
|
||||
"no_text_explanation": "该笔记未进行 OCR 文本提取处理,或未找到文本。",
|
||||
"failed_to_load": "OCR文本加载失败",
|
||||
"process_now": "处理 OCR",
|
||||
"processing": "正在处理...",
|
||||
"processing_started": "OCR识别已开始。请稍候片刻并刷新页面。",
|
||||
"processing_failed": "OCR处理启动失败",
|
||||
"view_extracted_text": "查看提取的文本(OCR)",
|
||||
"processing_complete": "OCR识别处理完成。",
|
||||
"text_filtered_low_confidence": "OCR 检测到文本,置信度为 {{confidence}}% ,但由于您的最小阈值为 {{threshold}}% ,因此该文本已被丢弃。",
|
||||
"open_media_settings": "打开设置"
|
||||
},
|
||||
"mind-map": {
|
||||
"addChild": "添加子节点",
|
||||
"addParent": "添加父节点",
|
||||
"addSibling": "添加同级节点",
|
||||
"removeNode": "删除节点",
|
||||
"focus": "专注模式",
|
||||
"cancelFocus": "退出专注模式",
|
||||
"moveUp": "上移",
|
||||
"moveDown": "下移",
|
||||
"link": "链接",
|
||||
"linkBidirectional": "双向链接",
|
||||
"clickTips": "请点击目标节点",
|
||||
"summary": "总结"
|
||||
},
|
||||
"llm": {
|
||||
"settings_description": "配置人工智能和大语言模型集成。",
|
||||
"add_provider": "添加提供商",
|
||||
"settings_title": "AI / LLM",
|
||||
"feature_not_enabled": "在“设置”→“高级”→“实验性功能”中启用 LLM 实验性功能,即可使用 AI 集成。",
|
||||
"add_provider_title": "添加AI供应商",
|
||||
"configured_providers": "已配置的供应商",
|
||||
"no_providers_configured": "尚未配置任何供应商。",
|
||||
"provider_name": "名称",
|
||||
"provider_type": "供应商"
|
||||
},
|
||||
"revisions": {
|
||||
"note_revisions": "笔记修订",
|
||||
"delete_all_revisions": "删除此笔记的所有修订版本",
|
||||
"delete_all_button": "删除所有修订版本",
|
||||
"help_title": "关于笔记修订的帮助",
|
||||
"confirm_delete_all": "是否要删除此笔记的所有修订版本?",
|
||||
"no_revisions": "这篇笔记目前还没有修改……",
|
||||
"restore_button": "恢复",
|
||||
"diff_on": "显示差异",
|
||||
"diff_off": "显示内容",
|
||||
"diff_on_hint": "点击显示笔记来源差异",
|
||||
"diff_off_hint": "点击显示笔记内容",
|
||||
"diff_not_available": "差异数据不可用。",
|
||||
"confirm_restore": "是否恢复此版本?这将用此版本覆盖笔记的当前标题和内容。",
|
||||
"delete_button": "删除",
|
||||
"confirm_delete": "您要删除此修订吗?",
|
||||
"revisions_deleted": "笔记修订已被删除。",
|
||||
"revision_restored": "笔记修订已恢复。",
|
||||
"revision_deleted": "笔记修订已删除。",
|
||||
"snapshot_interval": "笔记修订快照间隔:{{seconds}}秒。",
|
||||
"maximum_revisions": "笔记修订快照限制:{{number}}。",
|
||||
"settings": "笔记修订设置",
|
||||
"download_button": "下载",
|
||||
"mime": "MIME 类型: ",
|
||||
"file_size": "文件大小:",
|
||||
"preview_not_available": "无法预览此类型的笔记。"
|
||||
},
|
||||
"database": {
|
||||
"title": "数据库"
|
||||
},
|
||||
"auto_link_attribute_list": {
|
||||
"title": "系统属性"
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,12 +1,5 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "Über Trilium Notes",
|
||||
"homepage": "Startseite:",
|
||||
"app_version": "App-Version:",
|
||||
"db_version": "DB-Version:",
|
||||
"sync_version": "Sync-Version:",
|
||||
"build_date": "Build-Datum:",
|
||||
"build_revision": "Build-Revision:",
|
||||
"data_directory": "Datenverzeichnis:"
|
||||
},
|
||||
"toast": {
|
||||
@@ -88,17 +81,22 @@
|
||||
"also_delete_note": "Auch die Notiz löschen"
|
||||
},
|
||||
"delete_notes": {
|
||||
"delete_notes_preview": "Vorschau der Notizen löschen",
|
||||
"close": "Schließen",
|
||||
"delete_all_clones_description": "auch alle Klone löschen (kann bei letzte Änderungen rückgängig gemacht werden)",
|
||||
"erase_notes_description": "Beim normalen (vorläufigen) Löschen werden die Notizen nur als gelöscht markiert und sie können innerhalb eines bestimmten Zeitraums (im Dialogfeld „Letzte Änderungen“) wiederhergestellt werden. Wenn du diese Option aktivierst, werden die Notizen sofort gelöscht und es ist nicht möglich, die Notizen wiederherzustellen.",
|
||||
"erase_notes_warning": "Notizen dauerhaft löschen (kann nicht rückgängig gemacht werden), einschließlich aller Klone. Dadurch wird ein Neuladen der Anwendung erzwungen.",
|
||||
"notes_to_be_deleted": "Folgende Notizen werden gelöscht ({{notesCount}})",
|
||||
"notes_to_be_deleted": "({{notesCount}}) Notizen werden gelöscht",
|
||||
"no_note_to_delete": "Es werden keine Notizen gelöscht (nur Klone).",
|
||||
"broken_relations_to_be_deleted": "Folgende Beziehungen werden gelöst und gelöscht ({{ relationCount}})",
|
||||
"broken_relations_to_be_deleted": "Unterbrochene Beziehungen ({{relationCount}})",
|
||||
"cancel": "Abbrechen",
|
||||
"ok": "OK",
|
||||
"deleted_relation_text": "Notiz {{- note}} (soll gelöscht werden) wird von Beziehung {{- relation}} ausgehend von {{- source}} referenziert."
|
||||
"title": "Notizen löschen",
|
||||
"clones_label": "Duplikate",
|
||||
"delete_clones_description_one": "Löscht {{count}} weiteres Duplikat. Kann unter „Letzte Änderungen“ rückgängig gemacht werden.",
|
||||
"delete_clones_description_other": "Löscht {{count}} weitere Duplikate. Kann unter „Letzte Änderungen“ rückgängig gemacht werden.",
|
||||
"erase_notes_label": "Permanent löschen",
|
||||
"table_note_with_relation": "Notiz mit Beziehung",
|
||||
"table_relation": "Beziehung",
|
||||
"delete": "Löschen"
|
||||
},
|
||||
"export": {
|
||||
"export_note_title": "Notiz exportieren",
|
||||
@@ -270,33 +268,6 @@
|
||||
"undelete_link": "Wiederherstellen",
|
||||
"confirm_undelete": "Möchten Sie diese Notiz und ihre Unternotizen wiederherstellen?"
|
||||
},
|
||||
"revisions": {
|
||||
"note_revisions": "Notizrevisionen",
|
||||
"delete_all_revisions": "Lösche alle Revisionen dieser Notiz",
|
||||
"delete_all_button": "Alle Revisionen löschen",
|
||||
"help_title": "Hilfe zu Notizrevisionen",
|
||||
"confirm_delete_all": "Möchtest du alle Revisionen dieser Notiz löschen?",
|
||||
"no_revisions": "Für diese Notiz gibt es noch keine Revisionen...",
|
||||
"confirm_restore": "Möchtest du diese Revision wiederherstellen? Dadurch werden der aktuelle Titel und Inhalt der Notiz mit dieser Revision überschrieben.",
|
||||
"confirm_delete": "Möchtest du diese Revision löschen?",
|
||||
"revisions_deleted": "Notizrevisionen wurden gelöscht.",
|
||||
"revision_restored": "Die Notizrevision wurde wiederhergestellt.",
|
||||
"revision_deleted": "Notizrevision wurde gelöscht.",
|
||||
"snapshot_interval": "Notizrevisionen-Snapshot Intervall: {{seconds}}s.",
|
||||
"maximum_revisions": "Maximale Revisionen für aktuelle Notiz: {{number}}.",
|
||||
"settings": "Einstellungen für Notizrevisionen",
|
||||
"download_button": "Herunterladen",
|
||||
"mime": "MIME: ",
|
||||
"file_size": "Dateigröße:",
|
||||
"preview_not_available": "Für diesen Notiztyp ist keine Vorschau verfügbar.",
|
||||
"restore_button": "Wiederherstellen",
|
||||
"delete_button": "Löschen",
|
||||
"diff_on": "Zeige Differenz",
|
||||
"diff_off": "Zeige Inhalt",
|
||||
"diff_on_hint": "Klicke, um die Differenz des Notiz-Quellcodes zu zeigen",
|
||||
"diff_off_hint": "Klicke, um den Notizinhalt zu zeigen",
|
||||
"diff_not_available": "Differenz-Abgleich ist nicht verfügbar."
|
||||
},
|
||||
"sort_child_notes": {
|
||||
"sort_children_by": "Unternotizen sortieren nach...",
|
||||
"sorting_criteria": "Sortierkriterien",
|
||||
@@ -368,7 +339,7 @@
|
||||
"calendar_root": "Markiert eine Notiz, die als Basis für Tagesnotizen verwendet werden soll. Nur einer sollte als solcher gekennzeichnet sein.",
|
||||
"archived": "Notizen mit dieser Bezeichnung werden standardmäßig nicht in den Suchergebnissen angezeigt (auch nicht in den Dialogen „Springen zu“, „Link hinzufügen“ usw.).",
|
||||
"exclude_from_export": "Notizen (mit ihrem Unterbaum) werden nicht im Notizexport inkludiert",
|
||||
"run": "Definiert, bei welchen Ereignissen das Skript ausgeführt werden soll. Mögliche Werte sind:\n<ul>\n<li>frontendStartup - wenn das Trilium-Frontend startet (oder aktualisiert wird), außer auf mobilen Geräten.</li>\n<li>mobileStartup - wenn das Trilium-Frontend auf einem mobilen Gerät startet (oder aktualisiert wird).</li>\n<li>backendStartup - wenn das Trilium-Backend startet</li>\n<li>hourly - einmal pro Stunde ausführen. Du kannst das zusätzliche Label <code>runAtHour</code> verwenden, um die genaue Stunde festzulegen.</li>\n<li>daily - einmal pro Tag ausführen</li>\n</ul>",
|
||||
"run": "Definiert bei welchen Ereignissen das Skript ausgeführt werden soll. Mögliche Werte sind:\n<ul>\n<li>frontendStartup - wenn das Trilium-Frontend startet (oder aktualisiert wird), außer auf mobilen Geräten.</li>\n<li>mobileStartup - wenn das Trilium-Frontend auf einem mobilen Gerät startet (oder aktualisiert wird).</li>\n<li>backendStartup - wenn das Trilium-Backend startet.</li>\n<li>hourly - einmal pro Stunde ausführen. Du kannst das zusätzliche Label <code>runAtHour</code> verwenden, um die genaue Stunde festzulegen.</li>\n<li>daily - einmal pro Tag ausführen</li>\n</ul>",
|
||||
"run_on_instance": "Definiere, auf welcher Trilium-Instanz dies ausgeführt werden soll. Standardmäßig alle Instanzen.",
|
||||
"run_at_hour": "Zu welcher Stunde soll das laufen? Sollte zusammen mit <code>#runu003dhourly</code> verwendet werden. Kann für mehr Läufe im Laufe des Tages mehrfach definiert werden.",
|
||||
"disable_inclusion": "Skripte mit dieser Bezeichnung werden nicht in die Ausführung des übergeordneten Skripts einbezogen.",
|
||||
@@ -706,7 +677,8 @@
|
||||
"export_as_image_svg": "SVG (Vektor)",
|
||||
"note_map": "Notizen Karte",
|
||||
"view_revisions": "Notizrevisionen...",
|
||||
"advanced": "Erweitert"
|
||||
"advanced": "Erweitert",
|
||||
"view_ocr_text": "OCR text anzeigen"
|
||||
},
|
||||
"onclick_button": {
|
||||
"no_click_handler": "Das Schaltflächen-Widget „{{componentId}}“ hat keinen definierten Klick-Handler"
|
||||
@@ -802,7 +774,10 @@
|
||||
"expand_tooltip": "Erweitert die direkten Unterelemente dieser Sammlung (eine Ebene tiefer). Für weitere Optionen auf den Pfeil rechts klicken.",
|
||||
"expand_first_level": "Direkte Unterelemente erweitern",
|
||||
"expand_nth_level": "{{depth}} Ebenen erweitern",
|
||||
"hide_child_notes": "Untergeordnete Notizen im Baum ausblenden"
|
||||
"hide_child_notes": "Untergeordnete Notizen im Baum ausblenden",
|
||||
"open_all_in_tabs": "Alle öffnen",
|
||||
"open_all_in_tabs_tooltip": "Alle Resultate in neuen Tabs öffnen",
|
||||
"open_all_confirm": "Dies öffnet {{count}} Notizen in neuen Tabs. Fortfahren?"
|
||||
},
|
||||
"edited_notes": {
|
||||
"no_edited_notes_found": "An diesem Tag wurden noch keine Notizen bearbeitet...",
|
||||
@@ -856,7 +831,8 @@
|
||||
"collapse": "Auf normale Größe reduzieren",
|
||||
"title": "Notizkarte",
|
||||
"fix-nodes": "Knoten fixieren",
|
||||
"link-distance": "Verbindungslänge"
|
||||
"link-distance": "Verbindungslänge",
|
||||
"too-many-notes": "Dieser Unterbaum enthält {{count}} Notizen, welche die Limitierung von {{max}} überschreitet die in der Notizkarte dargestellt werden können."
|
||||
},
|
||||
"note_paths": {
|
||||
"title": "Notizpfade",
|
||||
@@ -904,7 +880,7 @@
|
||||
"limit": "Limit",
|
||||
"limit_description": "Begrenze die Anzahl der Ergebnisse",
|
||||
"debug": "debuggen",
|
||||
"debug_description": "Debug gibt zusätzliche Debuginformationen in die Konsole aus, um das Debuggen komplexer Abfragen zu erleichtern",
|
||||
"debug_description": "Debug gibt zusätzliche Protokolleinträge in der Konsole aus, um die Fehlerdiagnose komplexer Abfragen zu erleichtern",
|
||||
"action": "Aktion",
|
||||
"search_button": "Suchen",
|
||||
"search_execute": "Aktionen suchen und ausführen",
|
||||
@@ -936,7 +912,7 @@
|
||||
},
|
||||
"debug": {
|
||||
"debug": "Debuggen",
|
||||
"debug_info": "Debug gibt zusätzliche Debuginformationen in die Konsole aus, um das Debuggen komplexer Abfragen zu erleichtern.",
|
||||
"debug_info": "Debug gibt zusätzliche Protokolleinträge in der Konsole aus, um die Fehlerdiagnose komplexer Abfragen zu erleichtern.",
|
||||
"access_info": "Um auf die Debug-Informationen zuzugreifen, führe die Abfrage aus und klicke oben links auf \"Backend-Log anzeigen\"."
|
||||
},
|
||||
"fast_search": {
|
||||
@@ -1061,7 +1037,8 @@
|
||||
"note_already_in_diagram": "Die Notiz \"{{title}}\" ist schon im Diagram.",
|
||||
"enter_title_of_new_note": "Gebe den Titel der neuen Notiz ein",
|
||||
"default_new_note_title": "neue Notiz",
|
||||
"click_on_canvas_to_place_new_note": "Klicke auf den Canvas, um eine neue Notiz zu platzieren"
|
||||
"click_on_canvas_to_place_new_note": "Klicke auf den Canvas, um eine neue Notiz zu platzieren",
|
||||
"rename_relation": "Beziehung umbenennen"
|
||||
},
|
||||
"backend_log": {
|
||||
"refresh": "Aktualisieren"
|
||||
@@ -1070,15 +1047,17 @@
|
||||
"title": "Konsistenzprüfungen",
|
||||
"find_and_fix_button": "Finde und behebe die Konsistenzprobleme",
|
||||
"finding_and_fixing_message": "Konsistenzprobleme finden und beheben...",
|
||||
"issues_fixed_message": "Konsistenzprobleme sollten behoben werden."
|
||||
"issues_fixed_message": "Konsistenzprobleme sollten behoben werden.",
|
||||
"find_and_fix_label": "Finde und behebe Konsistenzprobleme",
|
||||
"find_and_fix_description": "Suche nach Probleme mit der Datenkonsistenz in der Datenbank und repariere diese automatisch."
|
||||
},
|
||||
"database_anonymization": {
|
||||
"title": "Datenbankanonymisierung",
|
||||
"full_anonymization": "Vollständige Anonymisierung",
|
||||
"full_anonymization_description": "Durch diese Aktion wird eine neue Kopie der Datenbank erstellt und anonymisiert (der gesamte Notizinhalt wird entfernt und nur die Struktur und einige nicht vertrauliche Metadaten bleiben übrig), sodass sie zu Debugging-Zwecken online geteilt werden kann, ohne befürchten zu müssen, dass Ihre persönlichen Daten verloren gehen.",
|
||||
"full_anonymization_description": "Erstellt eine Kopie der Datenbank, wo der Inhalt der Notizen entfernt wurde. Es vergleicht lediglich die Struktur sowie nicht-kritische Metadaten. Sicher zum teilen für die Fehlerdiagnose.",
|
||||
"save_fully_anonymized_database": "Speichere eine vollständig anonymisierte Datenbank",
|
||||
"light_anonymization": "Leichte Anonymisierung",
|
||||
"light_anonymization_description": "Durch diese Aktion wird eine neue Kopie der Datenbank erstellt und eine leichte Anonymisierung vorgenommen – insbesondere wird nur der Inhalt aller Notizen entfernt, Titel und Attribute bleiben jedoch erhalten. Darüber hinaus bleiben benutzerdefinierte JS-Frontend-/Backend-Skriptnotizen und benutzerdefinierte Widgets erhalten. Dies bietet mehr Kontext zum Debuggen der Probleme.",
|
||||
"light_anonymization_description": "Erstellt eine Kopie wo der Inhalt der Notiz entfernt ist, jedoch Title, Attribute und benutzerdefinierte Skripte erhalten bleiben. Hilfreich zur Fehlerdiagnose.",
|
||||
"choose_anonymization": "Du kannst selbst entscheiden, ob du eine vollständig oder leicht anonymisierte Datenbank bereitstellen möchten. Selbst eine vollständig anonymisierte Datenbank ist sehr nützlich. In einigen Fällen kann jedoch eine leicht anonymisierte Datenbank den Prozess der Fehlererkennung und -behebung beschleunigen.",
|
||||
"save_lightly_anonymized_database": "Speichere eine leicht anonymisierte Datenbank",
|
||||
"existing_anonymized_databases": "Vorhandene anonymisierte Datenbanken",
|
||||
@@ -1087,15 +1066,17 @@
|
||||
"error_creating_anonymized_database": "Die anonymisierte Datenbank konnte nicht erstellt werden. Überprüfe die Backend-Protokolle auf Details",
|
||||
"successfully_created_fully_anonymized_database": "Vollständig anonymisierte Datenbank in {{anonymizedFilePath}} erstellt",
|
||||
"successfully_created_lightly_anonymized_database": "Leicht anonymisierte Datenbank in {{anonymizedFilePath}} erstellt",
|
||||
"no_anonymized_database_yet": "Noch keine anonymisierte Datenbank."
|
||||
"no_anonymized_database_yet": "Noch keine anonymisierte Datenbank.",
|
||||
"description": "Erstellt eine anonymisierte Kopie deiner Datenbank für den Austausch mit Entwicklern zur Fehlerdiagnose, ohne persönliche Daten preiszugeben."
|
||||
},
|
||||
"database_integrity_check": {
|
||||
"title": "Datenbankintegritätsprüfung",
|
||||
"description": "Dadurch wird überprüft, ob die Datenbank auf SQLite-Ebene nicht beschädigt ist. Abhängig von der DB-Größe kann es einige Zeit dauern.",
|
||||
"check_button": "Überprüfe die Datenbankintegrität",
|
||||
"checking_integrity": "Datenbankintegrität prüfen...",
|
||||
"integrity_check_succeeded": "Integritätsprüfung erfolgreich – keine Probleme gefunden.",
|
||||
"integrity_check_failed": "Integritätsprüfung fehlgeschlagen: {{results}}"
|
||||
"integrity_check_failed": "Integritätsprüfung fehlgeschlagen: {{results}}",
|
||||
"check_integrity_label": "Überprüfe die Datenbankintegrität",
|
||||
"check_integrity_description": "Überprüfe die Datenbank auf SQLite Ebene auf Fehler."
|
||||
},
|
||||
"sync": {
|
||||
"title": "Synchronisieren",
|
||||
@@ -1105,14 +1086,18 @@
|
||||
"filling_entity_changes": "Entitätsänderungszeilen werden gefüllt...",
|
||||
"sync_rows_filled_successfully": "Synchronisierungszeilen erfolgreich gefüllt",
|
||||
"finished-successfully": "Synchronisierung erfolgreich beendet.",
|
||||
"failed": "Synchronisierung fehlgeschlagen: {{message}}"
|
||||
"failed": "Synchronisierung fehlgeschlagen: {{message}}",
|
||||
"force_full_sync_label": "Vollständige Synchronisierung erzwingen",
|
||||
"force_full_sync_description": "Vollständige Synchronisation mit dem Sync-Server auslösen, lädt alle Änderungen erneut hoch."
|
||||
},
|
||||
"vacuum_database": {
|
||||
"title": "Datenbank aufräumen",
|
||||
"description": "Dadurch wird die Datenbank neu erstellt, was normalerweise zu einer kleineren Datenbankdatei führt. Es werden keine Daten tatsächlich geändert.",
|
||||
"button_text": "Datenbank aufräumen",
|
||||
"vacuuming_database": "Datenbank wird geleert...",
|
||||
"database_vacuumed": "Die Datenbank wurde geleert"
|
||||
"database_vacuumed": "Die Datenbank wurde geleert",
|
||||
"vacuum_label": "Datenbank bereinigen",
|
||||
"vacuum_description": "Datenbank neu aufbauen um die Dateigröße zu reduzieren. Keine Daten werden verändert."
|
||||
},
|
||||
"fonts": {
|
||||
"theme_defined": "Thema definiert",
|
||||
@@ -1123,10 +1108,7 @@
|
||||
"note_tree_font": "Notizbaum-Schriftart",
|
||||
"note_detail_font": "Notiz-Detail-Schriftart",
|
||||
"monospace_font": "Minivan (Code) Schriftart",
|
||||
"note_tree_and_detail_font_sizing": "Beachte, dass die Größe der Baum- und Detailschriftarten relativ zur Hauptschriftgrößeneinstellung ist.",
|
||||
"not_all_fonts_available": "Möglicherweise sind nicht alle aufgelisteten Schriftarten auf Ihrem System verfügbar.",
|
||||
"apply_font_changes": "Um Schriftartänderungen zu übernehmen, klicke auf",
|
||||
"reload_frontend": "Frontend neu laden",
|
||||
"not_all_fonts_available": "Möglicherweise sind nicht alle aufgelisteten Schriftarten auf Ihrem System verfügbar",
|
||||
"generic-fonts": "Generische Schriftarten",
|
||||
"sans-serif-system-fonts": "Sans-serif Systemschriftarten",
|
||||
"serif-system-fonts": "Serif Systemschriftarten",
|
||||
@@ -1135,7 +1117,9 @@
|
||||
"serif": "Serif",
|
||||
"sans-serif": "Sans Serif",
|
||||
"monospace": "Monospace",
|
||||
"system-default": "System Standard"
|
||||
"system-default": "System Standard",
|
||||
"custom_fonts": "Benutzerdefinierte Schriftarten verwenden",
|
||||
"preview": "Vorschau"
|
||||
},
|
||||
"max_content_width": {
|
||||
"title": "Inhaltsbreite",
|
||||
@@ -1168,7 +1152,10 @@
|
||||
"layout-horizontal-description": "Startleiste ist unter der Tableiste. Die Tableiste wird dadurch auf die ganze Breite erweitert.",
|
||||
"auto_theme": "Alt (Folge dem Farbschema des Systems)",
|
||||
"light_theme": "Alt (Hell)",
|
||||
"dark_theme": "Alt (Dunkel)"
|
||||
"dark_theme": "Alt (Dunkel)",
|
||||
"modern_themes": "Modern",
|
||||
"legacy_themes": "Veraltet",
|
||||
"custom_themes": "Benutzerdefiniert"
|
||||
},
|
||||
"zoom_factor": {
|
||||
"title": "Zoomfaktor (nur Desktop-Build)",
|
||||
@@ -1196,18 +1183,25 @@
|
||||
},
|
||||
"images": {
|
||||
"images_section_title": "Bilder",
|
||||
"download_images_automatically": "Lade Bilder automatisch herunter, um sie offline zu verwenden.",
|
||||
"download_images_description": "Eingefügter HTML-Code kann Verweise auf Online-Bilder enthalten. Trilium findet diese Verweise und lädt die Bilder herunter, sodass sie offline verfügbar sind.",
|
||||
"enable_image_compression": "Bildkomprimierung aktivieren",
|
||||
"max_image_dimensions": "Maximale Breite/Höhe eines Bildes in Pixel (die Größe des Bildes wird geändert, wenn es diese Einstellung überschreitet).",
|
||||
"jpeg_quality_description": "JPEG-Qualität (10 – schlechteste Qualität, 100 – beste Qualität, 50 – 85 wird empfohlen)",
|
||||
"max_image_dimensions_unit": "Pixel"
|
||||
"download_images_automatically": "Bilder automatisch herunterladen",
|
||||
"download_images_description": "Referenzierte online Bilder vom eingefügten HTML-Code herunterladen, damit diese offline zur Verfügung stehen.",
|
||||
"enable_image_compression": "Bildkomprimierung",
|
||||
"max_image_dimensions": "Maximale Maße eines Bildes",
|
||||
"jpeg_quality_description": "Empfohlener Bereich liegt zwischen 50-85. Niedrige Werte reduzieren die Dateigröße, höhere Werte bewahren Details.",
|
||||
"max_image_dimensions_unit": "Pixel",
|
||||
"enable_image_compression_description": "Komprimieren und skalieren Bilder, wenn diese hochgeladen oder eingefügt werden.",
|
||||
"max_image_dimensions_description": "Bilder, die diese Größe überschreiten, werden automatisch verkleinert.",
|
||||
"jpeg_quality": "JPEG Qualität",
|
||||
"ocr_section_title": "Text Extrahierung (OCR)",
|
||||
"ocr_related_content_languages": "Inhaltssprachen (für Textextrahierung verwendet)",
|
||||
"ocr_auto_process": "Neue Dateien automatisch verarbeiten",
|
||||
"ocr_auto_process_description": "Text automatisch extrahieren von neu hochgeladenen oder eingefügten Dateien.",
|
||||
"ocr_min_confidence": "Minimale Sicherheit"
|
||||
},
|
||||
"attachment_erasure_timeout": {
|
||||
"attachment_erasure_timeout": "Zeitüberschreitung beim Löschen von Anhängen",
|
||||
"attachment_auto_deletion_description": "Anhänge werden automatisch gelöscht (und gelöscht), wenn sie nach einer definierten Zeitspanne nicht mehr in ihrer Notiz referenziert werden.",
|
||||
"erase_attachments_after": "Nicht verwendete Anhänge löschen nach:",
|
||||
"manual_erasing_description": "Du kannst das Löschen auch manuell auslösen (ohne Berücksichtigung des oben definierten Timeouts):",
|
||||
"erase_attachments_after": "Nicht verwendete Anhänge löschen nach",
|
||||
"manual_erasing_description": "Manuelle Löschung aktivieren, ignoriert den obigen Zeitpunkt.",
|
||||
"erase_unused_attachments_now": "Lösche jetzt nicht verwendete Anhangnotizen",
|
||||
"unused_attachments_erased": "Nicht verwendete Anhänge wurden gelöscht."
|
||||
},
|
||||
@@ -1217,28 +1211,29 @@
|
||||
},
|
||||
"note_erasure_timeout": {
|
||||
"note_erasure_timeout_title": "Beachte das Zeitlimit für die Löschung",
|
||||
"note_erasure_description": "Gelöschte Notizen (und Attribute, Notizrevisionen...) werden zunächst nur als gelöscht markiert und können über den Dialog „Zuletzt verwendete Notizen” wiederhergestellt werden. Nach einer bestimmten Zeit werden gelöschte Notizen „gelöscht”, was bedeutet, dass ihr Inhalt nicht mehr wiederhergestellt werden kann. Mit dieser Einstellung können Sie die Zeitspanne zwischen dem Löschen und dem endgültigen Löschen der Notiz festlegen.",
|
||||
"erase_notes_after": "Notizen löschen nach:",
|
||||
"manual_erasing_description": "Du kannst das Löschen auch manuell auslösen (ohne Berücksichtigung des oben definierten Timeouts):",
|
||||
"erase_notes_after": "Notizen löschen nach",
|
||||
"manual_erasing_description": "Manuelle Löschung aktivieren, ignoriert den obigen Zeitpunkt.",
|
||||
"erase_deleted_notes_now": "Jetzt gelöschte Notizen löschen",
|
||||
"deleted_notes_erased": "Gelöschte Notizen wurden gelöscht."
|
||||
},
|
||||
"revisions_snapshot_interval": {
|
||||
"note_revisions_snapshot_interval_title": "Snapshot-Intervall für Notizrevisionen",
|
||||
"note_revisions_snapshot_description": "Das Snapshot-Zeitintervall für Notizrevisionen ist die Zeit, nach der eine neue Notizrevision erstellt wird. Weitere Informationen findest du im <doc>Wiki</doc>.",
|
||||
"snapshot_time_interval_label": "Zeitintervall für Notiz-Revisions-Snapshot:"
|
||||
"snapshot_time_interval_label": "Snapshot Intervall"
|
||||
},
|
||||
"revisions_snapshot_limit": {
|
||||
"note_revisions_snapshot_limit_title": "Limit für Notizrevision-Snapshots",
|
||||
"note_revisions_snapshot_limit_description": "Das Limit für Notizrevision-Snapshots bezieht sich auf die maximale Anzahl von Revisionen, die für jede Notiz gespeichert werden können. Dabei bedeutet -1, dass es kein Limit gibt, und 0 bedeutet, dass alle Revisionen gelöscht werden. Du kannst das maximale Limit für Revisionen einer einzelnen Notiz über das Label #versioningLimit festlegen.",
|
||||
"snapshot_number_limit_label": "Limit der Notizrevision-Snapshots:",
|
||||
"snapshot_number_limit_label": "Maximale Revisionen",
|
||||
"erase_excess_revision_snapshots": "Überschüssige Revision-Snapshots jetzt löschen",
|
||||
"erase_excess_revision_snapshots_prompt": "Überschüssige Revision-Snapshots wurden gelöscht.",
|
||||
"snapshot_number_limit_unit": "Momentaufnahmen"
|
||||
"snapshot_number_limit_unit": "Momentaufnahmen",
|
||||
"note_revisions_snapshot_limit_description_short": "Maximale Anzahl an Revisionen pro Notiz. Nutze -1 für unlimitiert oder 0 zum deaktivieren.",
|
||||
"erase_excess_revision_snapshots_description": "Lösche Revisionen aller Notizen die das Limit überschreiten."
|
||||
},
|
||||
"search_engine": {
|
||||
"title": "Suchmaschine",
|
||||
"custom_search_engine_info": "Für eine benutzerdefinierte Suchmaschine müssen sowohl ein Name als auch eine URL festgelegt werden. Wenn keine dieser Optionen festgelegt ist, wird DuckDuckGo als Standardsuchmaschine verwendet.",
|
||||
"custom_search_engine_info": "Wird verwendet bei der Suche im Web für den ausgewählten Text. Wenn nicht konfiguriert, wird DuckDuckGo verwendet.",
|
||||
"predefined_templates_label": "Vordefinierte Suchmaschinenvorlagen",
|
||||
"bing": "Bing",
|
||||
"baidu": "Baidu",
|
||||
@@ -1296,7 +1291,6 @@
|
||||
"first-week-contains-first-thursday": "Erste Woche enthält den ersten Donnerstag des Jahres",
|
||||
"first-week-has-minimum-days": "Erste Woche hat Mindestanzahl an Tagen",
|
||||
"min-days-in-first-week": "Mindestanzahl an Tagen in erster Woche",
|
||||
"first-week-info": "Die erste Woche, die den ersten Donnerstag des Jahres enthält, basiert auf dem Standard <a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a>.",
|
||||
"first-week-warning": "Das Ändern der Optionen für die erste Woche kann zu Duplikaten mit bestehenden Wochen-Notizen führen. Bestehende Wochen-Notizen werden nicht entsprechend aktualisiert.",
|
||||
"formatting-locale": "Datums- und Zahlenformat",
|
||||
"tuesday": "Dienstag",
|
||||
@@ -1319,7 +1313,9 @@
|
||||
"date-and-time": "Datum & Uhrzeit",
|
||||
"path": "Pfad",
|
||||
"database_backed_up_to": "Die Datenbank wurde gesichert unter {{backupFilePath}}",
|
||||
"no_backup_yet": "noch kein Backup"
|
||||
"no_backup_yet": "noch kein Backup",
|
||||
"title": "Sicherung",
|
||||
"download": "Download"
|
||||
},
|
||||
"etapi": {
|
||||
"title": "ETAPI",
|
||||
@@ -1358,14 +1354,17 @@
|
||||
"protected_session_timeout_description": "Das Zeitlimit für geschützte Sitzungen ist ein Zeitraum, nach dem die geschützte Sitzung aus dem Speicher des Browsers gelöscht wird. Dies wird ab der letzten Interaktion mit geschützten Notizen gemessen. Sehen",
|
||||
"wiki": "Wiki",
|
||||
"for_more_info": "für weitere Informationen.",
|
||||
"protected_session_timeout_label": "Zeitüberschreitung der geschützten Sitzung:",
|
||||
"protected_session_timeout_label": "Automatisches beenden der Sitzung nach",
|
||||
"reset_confirmation": "Durch das Zurücksetzen des Passworts verlierst du für immer den Zugriff auf alle Ihre bestehenden geschützten Notizen. Möchtest du das Passwort wirklich zurücksetzen?",
|
||||
"reset_success_message": "Das Passwort wurde zurückgesetzt. Bitte lege ein neues Passwort fest",
|
||||
"change_password_heading": "Kennwort ändern",
|
||||
"set_password_heading": "Passwort festlegen",
|
||||
"set_password": "Passwort festlegen",
|
||||
"password_mismatch": "Neue Passwörter sind nicht dasselbe.",
|
||||
"password_changed_success": "Das Passwort wurde geändert. Trilium wird neu geladen, nachdem du auf OK geklickt hast."
|
||||
"password_changed_success": "Das Passwort wurde geändert. Trilium wird neu geladen, nachdem du auf OK geklickt hast.",
|
||||
"change_password_description": "Aktualisiere dein aktuelles Passwort",
|
||||
"reset_password": "Passwort zurücksetzen",
|
||||
"cancel": "Abbrechen"
|
||||
},
|
||||
"shortcuts": {
|
||||
"keyboard_shortcuts": "Tastaturkürzel",
|
||||
@@ -1386,26 +1385,22 @@
|
||||
"description": "Diese Optionen gelten nur für Desktop-Builds. Browser verwenden ihre eigene native Rechtschreibprüfung.",
|
||||
"enable": "Aktiviere die Rechtschreibprüfung",
|
||||
"language_code_label": "Sprachcode(s)",
|
||||
"language_code_placeholder": "zum Beispiel \"en-US\", \"de-AT\"",
|
||||
"multiple_languages_info": "Mehrere Sprachen können mit einem Komma getrennt werden z.B. \"en-US, de-DE, cs\". ",
|
||||
"available_language_codes_label": "Verfügbare Sprachcodes:",
|
||||
"restart-required": "Änderungen an den Rechtschreibprüfungsoptionen werden nach dem Neustart der Anwendung wirksam."
|
||||
"restart-required": "Änderungen an den Rechtschreibprüfungsoptionen werden nach dem Neustart der Anwendung wirksam.",
|
||||
"custom_dictionary_title": "Benutzerdefiniertes Wörterbuch",
|
||||
"custom_dictionary_edit": "Benutzerdefiniert Wörter",
|
||||
"custom_dictionary_open": "Wörterbuch bearbeiten"
|
||||
},
|
||||
"sync_2": {
|
||||
"config_title": "Synchronisierungskonfiguration",
|
||||
"server_address": "Adresse der Serverinstanz",
|
||||
"timeout": "Synchronisierungs-Timeout (Millisekunden)",
|
||||
"proxy_label": "Proxyserver synchronisieren (optional)",
|
||||
"note": "Notiz",
|
||||
"note_description": "Wenn du die Proxy-Einstellung leer lässt, wird der System-Proxy verwendet (gilt nur für Desktop-/Electron-Build).",
|
||||
"special_value_description": "Ein weiterer besonderer Wert ist <code>noproxy</code>, der das Ignorieren sogar des System-Proxys erzwingt und <code>NODE_TLS_REJECT_UNAUTHORIZED</code> respektiert.",
|
||||
"save": "Speichern",
|
||||
"help": "Helfen",
|
||||
"test_title": "Synchronisierungstest",
|
||||
"test_description": "Dadurch werden die Verbindung und der Handshake zum Synchronisierungsserver getestet. Wenn der Synchronisierungsserver nicht initialisiert ist, wird er dadurch für die Synchronisierung mit dem lokalen Dokument eingerichtet.",
|
||||
"test_button": "Teste die Synchronisierung",
|
||||
"handshake_failed": "Handshake des Synchronisierungsservers fehlgeschlagen, Fehler: {{message}}",
|
||||
"timeout_unit": "Millisekunden"
|
||||
"handshake_failed": "Handshake des Synchronisierungsservers fehlgeschlagen, Fehler: {{message}}"
|
||||
},
|
||||
"api_log": {
|
||||
"close": "Schließen"
|
||||
@@ -1502,7 +1497,8 @@
|
||||
"task-list": "Aufgabenliste",
|
||||
"new-feature": "Neu",
|
||||
"collections": "Sammlungen",
|
||||
"spreadsheet": "Tabelle"
|
||||
"spreadsheet": "Tabelle",
|
||||
"llm-chat": "KI-Chat"
|
||||
},
|
||||
"protect_note": {
|
||||
"toggle-on": "Notiz schützen",
|
||||
@@ -1704,7 +1700,8 @@
|
||||
"theme_none": "Keine Syntaxhervorhebung",
|
||||
"theme_group_light": "Helle Themen",
|
||||
"theme_group_dark": "Dunkle Themen",
|
||||
"copy_title": "Kopiere in Zwischenablage"
|
||||
"copy_title": "Kopiere in Zwischenablage",
|
||||
"click_to_copy": "Klicke zum kopieren"
|
||||
},
|
||||
"classic_editor_toolbar": {
|
||||
"title": "Format"
|
||||
@@ -1723,7 +1720,7 @@
|
||||
"title": "Fixiert",
|
||||
"description": "Werkzeuge erscheinen im \"Format\" Tab."
|
||||
},
|
||||
"multiline-toolbar": "Toolbar wenn nötig in mehreren Zeilen darstellen."
|
||||
"multiline-toolbar": "Toolbar wenn nötig in mehreren Zeilen darstellen"
|
||||
}
|
||||
},
|
||||
"electron_context_menu": {
|
||||
@@ -1814,8 +1811,9 @@
|
||||
"custom_date_time_format": {
|
||||
"title": "Benutzerdefiniertes Datums-/Zeitformat",
|
||||
"description": "Passe das Format des Datums und der Uhrzeit an, die über <shortcut /> oder die Symbolleiste eingefügt werden. Die verfügbaren Format-Tokens sind unter <doc>Day.js docs</doc> zu finden.",
|
||||
"format_string": "Format Zeichenfolge:",
|
||||
"formatted_time": "Formatiertes Datum/Uhrzeit:"
|
||||
"format_string": "Format Zeichenfolge",
|
||||
"formatted_time": "Formatiertes Datum/Uhrzeit",
|
||||
"preview": "Vorschau: {{preview}}"
|
||||
},
|
||||
"multi_factor_authentication": {
|
||||
"title": "Multi-Faktor-Authentifizierung",
|
||||
@@ -2046,7 +2044,9 @@
|
||||
"title": "Experimentelle Optionen",
|
||||
"disclaimer": "Diese Optionen sind experimentell und können Instabilitäten verursachen. Achtsam zu verwenden.",
|
||||
"new_layout_name": "Neues Layout",
|
||||
"new_layout_description": "Probiere das neue Layout für eine modernere Darstellung und verbesserte Benutzbarkeit aus. Kann sich in Zukunft stark ändern."
|
||||
"new_layout_description": "Probiere das neue Layout für eine modernere Darstellung und verbesserte Benutzbarkeit aus. Kann sich in Zukunft stark ändern.",
|
||||
"llm_name": "KI- / LLM-Chat",
|
||||
"llm_description": "Aktiviert die KI-Chat Seitenleiste sowie LLM-Chat Notizen die von einem Sprachmodell betrieben werden."
|
||||
},
|
||||
"server": {
|
||||
"unknown_http_error_title": "Kommunikationsfehler mit dem Server",
|
||||
@@ -2230,5 +2230,79 @@
|
||||
"sample_xy": "XY",
|
||||
"sample_venn": "Mengen",
|
||||
"sample_ishikawa": "Ursache-Wirkung"
|
||||
},
|
||||
"database": {
|
||||
"title": "Datenbank"
|
||||
},
|
||||
"search": {
|
||||
"title": "Suche",
|
||||
"fuzzy_matching_label": "Fehlertoleranz bei Suche"
|
||||
},
|
||||
"text_editor": {
|
||||
"title": "Editor"
|
||||
},
|
||||
"llm_chat": {
|
||||
"placeholder": "Schreibe eine Nachricht...",
|
||||
"send": "Senden",
|
||||
"sending": "Sende...",
|
||||
"empty_state": "Starte eine Unterhaltung indem du unten eine Nachricht schreibst.",
|
||||
"searching_web": "Suche im Web...",
|
||||
"web_search": "Websuche",
|
||||
"note_tools": "Notizzugriff",
|
||||
"sources": "Quellen",
|
||||
"legacy_models": "Veraltete Modelle",
|
||||
"thinking": "Denke...",
|
||||
"thought_process": "Denkprozess",
|
||||
"result": "Ergebnis",
|
||||
"error": "Fehler",
|
||||
"tool_error": "Fehlgeschlagen",
|
||||
"total_tokens": "{{total}} Token",
|
||||
"tokens": "Token",
|
||||
"context_used": "{{percentage}}% verwendet",
|
||||
"no_provider_message": "Kein KI-Anbieter konfiguriert. Fügen einen hinzu, um zu chatten.",
|
||||
"add_provider": "KI-Anbieter hinzufügen",
|
||||
"stop": "Stopp"
|
||||
},
|
||||
"sidebar_chat": {
|
||||
"title": "KI-Chat",
|
||||
"launcher_title": "KI-Chat öffnen",
|
||||
"new_chat": "Neuen Chat starten",
|
||||
"save_chat": "Chat in Notiz sichern",
|
||||
"empty_state": "Starte Unterhaltung",
|
||||
"history": "Chathistorie",
|
||||
"recent_chats": "Kürzliche Chats",
|
||||
"no_chats": "Keine vorherigen Chats"
|
||||
},
|
||||
"llm": {
|
||||
"tools": {
|
||||
"clone_note": "Notiz duplizieren",
|
||||
"move_note": "Notiz verschieben",
|
||||
"delete_note": "Notiz löschen",
|
||||
"rename_note": "Notiz umbenennen",
|
||||
"web_search": "Websuche",
|
||||
"create_note": "Notiz erstellen",
|
||||
"append_to_note": "An Notiz anhängen",
|
||||
"get_note": "Notiz beziehen",
|
||||
"search_notes": "Notizen durchsuchen"
|
||||
},
|
||||
"cancel": "Abbrechen",
|
||||
"api_key": "API Schlüssel",
|
||||
"delete_provider": "Löschen",
|
||||
"actions": "Aktionen",
|
||||
"provider_type": "Anbieter",
|
||||
"provider_name": "Name",
|
||||
"settings_title": "KI / LLM"
|
||||
},
|
||||
"mind-map": {
|
||||
"summary": "Zusammenfassung",
|
||||
"link": "Link"
|
||||
},
|
||||
"ocr": {
|
||||
"view_extracted_text": "Extrahierten Text anzeigen (OCR)",
|
||||
"open_media_settings": "Öffne Einstellungen",
|
||||
"processing": "Verarbeite...",
|
||||
"loading_text": "Lädt OCR Text...",
|
||||
"extracted_text_title": "Extrahierter Text (OCR)",
|
||||
"extracted_text": "Extrahierter Text (OCR)"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "Σχετικά με το Trilium Notes",
|
||||
"homepage": "Αρχική Σελίδα:",
|
||||
"app_version": "Έκδοση εφαρμογής:",
|
||||
"db_version": "Έκδοση βάσης δεδομένων:",
|
||||
"sync_version": "Έκδοση πρωτοκόλου συγχρονισμού:",
|
||||
"build_date": "Ημερομηνία χτισίματος εφαρμογής:",
|
||||
"build_revision": "Αριθμός αναθεώρησης χτισίματος:",
|
||||
"data_directory": "Φάκελος δεδομένων:"
|
||||
},
|
||||
"toast": {
|
||||
|
||||
@@ -66,6 +66,172 @@
|
||||
"set-custom-color": "Set custom note colour"
|
||||
},
|
||||
"about": {
|
||||
"title": "About Trilium Notes"
|
||||
"data_directory": "Data directory:"
|
||||
},
|
||||
"toast": {
|
||||
"critical-error": {
|
||||
"title": "Critical error",
|
||||
"message": "A critical error has occurred which prevents the client application from starting:\n\n{{message}}\n\nThis is most likely caused by a script failing in an unexpected way. Try starting the application in safe mode and addressing the issue."
|
||||
},
|
||||
"widget-error": {
|
||||
"title": "Failed to initialise a widget",
|
||||
"message-custom": "Custom widget from note with ID \"{{id}}\", titled \"{{title}}\" could not be initialised due to:\n\n{{message}}",
|
||||
"message-unknown": "Unknown widget could not be initialised due to:\n\n{{message}}"
|
||||
},
|
||||
"bundle-error": {
|
||||
"title": "Failed to load a custom script",
|
||||
"message": "Script could not be executed due to:\n\n{{message}}"
|
||||
},
|
||||
"widget-list-error": {
|
||||
"title": "Failed to obtain the list of widgets from the server"
|
||||
},
|
||||
"widget-render-error": {
|
||||
"title": "Failed to render a custom React widget"
|
||||
},
|
||||
"widget-missing-parent": "Custom widget does not have mandatory '{{property}}' property defined.\n\nIf this script is meant to be run without a UI element, use '#run=frontendStartup' instead.",
|
||||
"open-script-note": "Open script note",
|
||||
"scripting-error": "Custom script error: {{title}}"
|
||||
},
|
||||
"add_link": {
|
||||
"add_link": "Add link",
|
||||
"help_on_links": "Help on links",
|
||||
"note": "Note",
|
||||
"search_note": "search for note by its name",
|
||||
"link_title_mirrors": "link title mirrors the note's current title",
|
||||
"link_title_arbitrary": "link title can be changed arbitrarily",
|
||||
"link_title": "Link title",
|
||||
"anchor": "Anchor (optional)",
|
||||
"anchor_none": "None (link to note)",
|
||||
"button_add_link": "Add link"
|
||||
},
|
||||
"delete_notes": {
|
||||
"delete_clones_description_one": "Also delete {{count}} other clone. Can be undone in recent changes.",
|
||||
"delete_clones_description_other": "Also delete {{count}} other clones. Can be undone in recent changes.",
|
||||
"title": "Delete notes",
|
||||
"close": "Close",
|
||||
"clones_label": "Clones",
|
||||
"delete_all_clones_description": "Delete also all clones (can be undone in recent changes)",
|
||||
"erase_notes_label": "Erase permanently",
|
||||
"erase_notes_description": "Erase notes immediately instead of soft deletion. This cannot be undone and will force application reload.",
|
||||
"erase_notes_warning": "Erase notes permanently (can't be undone), including all clones. This will force application reload.",
|
||||
"notes_to_be_deleted": "Notes to be deleted ({{notesCount}})",
|
||||
"no_note_to_delete": "No note will be deleted (only clones).",
|
||||
"broken_relations_to_be_deleted": "Broken relations ({{relationCount}})",
|
||||
"table_note_with_relation": "Note with relation",
|
||||
"table_relation": "Relation",
|
||||
"table_points_to": "Points to (deleted)",
|
||||
"cancel": "Cancel",
|
||||
"delete": "Delete"
|
||||
},
|
||||
"branch_prefix": {
|
||||
"edit_branch_prefix": "Edit branch prefix",
|
||||
"edit_branch_prefix_multiple": "Edit branch prefix for {{count}} branches",
|
||||
"help_on_tree_prefix": "Help on Tree prefix",
|
||||
"prefix": "Prefix: ",
|
||||
"save": "Save",
|
||||
"branch_prefix_saved": "Branch prefix has been saved.",
|
||||
"branch_prefix_saved_multiple": "Branch prefix has been saved for {{count}} branches.",
|
||||
"affected_branches": "Affected branches ({{count}}):"
|
||||
},
|
||||
"bulk_actions": {
|
||||
"bulk_actions": "Bulk actions",
|
||||
"affected_notes": "Affected notes",
|
||||
"include_descendants": "Include descendants of the selected notes",
|
||||
"available_actions": "Available actions",
|
||||
"chosen_actions": "Chosen actions",
|
||||
"execute_bulk_actions": "Execute bulk actions",
|
||||
"bulk_actions_executed": "Bulk actions have been executed successfully.",
|
||||
"none_yet": "None yet... add an action by clicking one of the available ones above.",
|
||||
"labels": "Labels",
|
||||
"relations": "Relations",
|
||||
"notes": "Notes",
|
||||
"other": "Other"
|
||||
},
|
||||
"clone_to": {
|
||||
"clone_notes_to": "Clone notes to...",
|
||||
"help_on_links": "Help on links",
|
||||
"notes_to_clone": "Notes to clone",
|
||||
"target_parent_note": "Target parent note",
|
||||
"search_for_note_by_its_name": "search for note by its name",
|
||||
"cloned_note_prefix_title": "Cloned note will be shown in note tree with given prefix",
|
||||
"prefix_optional": "Prefix (optional)",
|
||||
"clone_to_selected_note": "Clone to selected note",
|
||||
"no_path_to_clone_to": "No path to clone to.",
|
||||
"note_cloned": "Note \"{{clonedTitle}}\" has been cloned into \"{{targetTitle}}\""
|
||||
},
|
||||
"confirm": {
|
||||
"confirmation": "Confirmation",
|
||||
"cancel": "Cancel",
|
||||
"ok": "OK",
|
||||
"are_you_sure_remove_note": "Are you sure you want to remove the note \"{{title}}\" from relation map? ",
|
||||
"if_you_dont_check": "If you don't check this, the note will be only removed from the relation map.",
|
||||
"also_delete_note": "Also delete the note"
|
||||
},
|
||||
"export": {
|
||||
"export_note_title": "Export note",
|
||||
"close": "Close",
|
||||
"export_type_subtree": "This note and all of its descendants",
|
||||
"format_html": "HTML - recommended as it keeps all format",
|
||||
"format_html_zip": "HTML in ZIP archive - this is recommended since this preserves all the formatting.",
|
||||
"format_markdown": "Markdown - this preserves most of the formatting.",
|
||||
"format_opml": "OPML - outliner interchange format for text only. Formatting, images and files are not included.",
|
||||
"opml_version_1": "OPML v1.0 - plain text only",
|
||||
"opml_version_2": "OPML v2.0 - allows also HTML",
|
||||
"export_type_single": "Only this note without its descendants",
|
||||
"export": "Export",
|
||||
"choose_export_type": "Choose export type first please",
|
||||
"export_status": "Export status",
|
||||
"export_in_progress": "Export in progress: {{progressCount}}",
|
||||
"export_finished_successfully": "Export finished successfully.",
|
||||
"format_pdf": "PDF - for printing or sharing purposes.",
|
||||
"share-format": "HTML for web publishing - uses the same theme that is used shared notes, but can be published as a static website."
|
||||
},
|
||||
"help": {
|
||||
"title": "Cheatsheet",
|
||||
"collapseSubTree": "collapse sub-tree",
|
||||
"activateNextTab": "activate next tab",
|
||||
"editShortcuts": "Edit keyboard shortcuts",
|
||||
"noteNavigation": "Note navigation",
|
||||
"goUpDown": "go up/down in the list of notes",
|
||||
"collapseExpand": "collapse/expand node",
|
||||
"notSet": "not set",
|
||||
"goBackForwards": "go back / forwards in the history",
|
||||
"showJumpToNoteDialog": "show <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/note-navigation.html#jump-to-note\">\"Jump to\" dialog</a>",
|
||||
"scrollToActiveNote": "scroll to active note",
|
||||
"jumpToParentNote": "jump to parent note",
|
||||
"collapseWholeTree": "collapse whole note tree",
|
||||
"tabShortcuts": "Tab shortcuts",
|
||||
"newTabNoteLink": "on note link opens note in a new tab",
|
||||
"newTabWithActivationNoteLink": "on note link opens and activates the note in a new tab",
|
||||
"onlyInDesktop": "Only in desktop (Electron build)",
|
||||
"openEmptyTab": "open empty tab",
|
||||
"closeActiveTab": "close active tab",
|
||||
"activatePreviousTab": "activate previous tab",
|
||||
"creatingNotes": "Creating notes",
|
||||
"createNoteAfter": "create new note after the active note",
|
||||
"createNoteInto": "create new sub-note into active note",
|
||||
"editBranchPrefix": "edit <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/tree-concepts.html#prefix\">prefix</a> of active note clone",
|
||||
"movingCloningNotes": "Moving / cloning notes",
|
||||
"moveNoteUpDown": "move note up/down in the note list",
|
||||
"moveNoteUpHierarchy": "move note up in the hierarchy",
|
||||
"multiSelectNote": "multi-select note above/below",
|
||||
"selectAllNotes": "select all notes in the current level",
|
||||
"selectNote": "select note",
|
||||
"copyNotes": "copy active note (or current selection) into clipboard (used for <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/cloning-notes.html#cloning-notes\">cloning</a>)",
|
||||
"cutNotes": "cut current note (or current selection) into clipboard (used for moving notes)",
|
||||
"pasteNotes": "paste note(s) as sub-note into active note (which is either move or clone depending on whether it was copied or cut into clipboard)",
|
||||
"deleteNotes": "delete note / sub-tree",
|
||||
"editingNotes": "Editing notes",
|
||||
"editNoteTitle": "in tree pane will switch from tree pane into note title. Enter from note title will switch focus to text editor. <kbd>Ctrl+.</kbd> will switch back from editor to tree pane.",
|
||||
"createEditLink": "create / edit external link",
|
||||
"createInternalLink": "create internal link",
|
||||
"followLink": "follow link under cursor",
|
||||
"insertDateTime": "insert current date and time at caret position",
|
||||
"jumpToTreePane": "jump away to the tree pane and scroll to active note",
|
||||
"markdownAutoformat": "Markdown-like autoformatting",
|
||||
"headings": "<code>##</code>, <code>###</code>, <code>####</code> etc. followed by space for headings",
|
||||
"bulletList": "<code>*</code> or <code>-</code> followed by space for bullet list",
|
||||
"numberedList": "<code>1.</code> or <code>1)</code> followed by space for numbered list",
|
||||
"blockQuote": "start a line with <code>></code> followed by space for block quote"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,13 +1,23 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "About Trilium Notes",
|
||||
"homepage": "Homepage:",
|
||||
"app_version": "App version:",
|
||||
"db_version": "DB version:",
|
||||
"sync_version": "Sync version:",
|
||||
"build_date": "Build date:",
|
||||
"build_revision": "Build revision:",
|
||||
"data_directory": "Data directory:"
|
||||
"about": {
|
||||
"version_label": "Version:",
|
||||
"version": "{{appVersion}} (database: {{dbVersion}}, sync protocol: {{syncVersion}})",
|
||||
"build_info": "Build: {{buildDate}}, revision: <buildRevision />",
|
||||
"contributors_label": "Contributors:",
|
||||
"contributor_roles": {
|
||||
"lead-dev": "lead developer",
|
||||
"original-dev": "original developer"
|
||||
},
|
||||
"role_brief_history": {
|
||||
"lead-dev": "Elian Doran founded TriliumNext in 2024, a community fork created after Zadam stepped back from the project. Zadam later transferred the original repository to the TriliumNext team, merging both projects back into one.",
|
||||
"original-dev": "On 25th December 2017, Zadam released the first beta of Trilium (written with a single \"l\", unlike the flower). Dissatisfied with existing note organizers, he built a powerful self-hosted hierarchical knowledge base that gathered over 22,000 GitHub stars. In 2024, as life got busier, he placed the project into maintenance mode."
|
||||
},
|
||||
"contributor_full_list": "See the entire community",
|
||||
"data_directory": "Data directory:",
|
||||
"github_tooltip": "Report bugs, suggest features, or contribute on GitHub",
|
||||
"license_tooltip": "View license",
|
||||
"donate": "Donate",
|
||||
"donate_tooltip": "Donate to support this project"
|
||||
},
|
||||
"toast": {
|
||||
"critical-error": {
|
||||
@@ -41,6 +51,8 @@
|
||||
"link_title_mirrors": "link title mirrors the note's current title",
|
||||
"link_title_arbitrary": "link title can be changed arbitrarily",
|
||||
"link_title": "Link title",
|
||||
"anchor": "Anchor (optional)",
|
||||
"anchor_none": "None (link to note)",
|
||||
"button_add_link": "Add link"
|
||||
},
|
||||
"branch_prefix": {
|
||||
@@ -88,17 +100,23 @@
|
||||
"also_delete_note": "Also delete the note"
|
||||
},
|
||||
"delete_notes": {
|
||||
"delete_notes_preview": "Delete notes preview",
|
||||
"title": "Delete notes",
|
||||
"close": "Close",
|
||||
"clones_label": "Clones",
|
||||
"delete_clones_description_one": "Also delete {{count}} other clone. Can be undone in recent changes.",
|
||||
"delete_clones_description_other": "Also delete {{count}} other clones. Can be undone in recent changes.",
|
||||
"delete_all_clones_description": "Delete also all clones (can be undone in recent changes)",
|
||||
"erase_notes_description": "Normal (soft) deletion only marks the notes as deleted and they can be undeleted (in recent changes dialog) within a period of time. Checking this option will erase the notes immediately and it won't be possible to undelete the notes.",
|
||||
"erase_notes_label": "Erase permanently",
|
||||
"erase_notes_description": "Erase notes immediately instead of soft deletion. This cannot be undone and will force application reload.",
|
||||
"erase_notes_warning": "Erase notes permanently (can't be undone), including all clones. This will force application reload.",
|
||||
"notes_to_be_deleted": "Following notes will be deleted ({{notesCount}})",
|
||||
"notes_to_be_deleted": "Notes to be deleted ({{notesCount}})",
|
||||
"no_note_to_delete": "No note will be deleted (only clones).",
|
||||
"broken_relations_to_be_deleted": "Following relations will be broken and deleted ({{ relationCount}})",
|
||||
"broken_relations_to_be_deleted": "Broken relations ({{relationCount}})",
|
||||
"table_note_with_relation": "Note with relation",
|
||||
"table_relation": "Relation",
|
||||
"table_points_to": "Points to (deleted)",
|
||||
"cancel": "Cancel",
|
||||
"ok": "OK",
|
||||
"deleted_relation_text": "Note {{- note}} (to be deleted) is referenced by relation {{- relation}} originating from {{- source}}."
|
||||
"delete": "Delete"
|
||||
},
|
||||
"export": {
|
||||
"export_note_title": "Export note",
|
||||
@@ -209,6 +227,7 @@
|
||||
"box_size_small": "small (~ 10 lines)",
|
||||
"box_size_medium": "medium (~ 30 lines)",
|
||||
"box_size_full": "full (box shows complete text)",
|
||||
"box_size_expandable": "expandable (collapsed by default)",
|
||||
"button_include": "Include note"
|
||||
},
|
||||
"info": {
|
||||
@@ -278,6 +297,7 @@
|
||||
"confirm_delete_all": "Do you want to delete all revisions of this note?",
|
||||
"no_revisions": "No revisions for this note yet...",
|
||||
"restore_button": "Restore",
|
||||
"highlight_changes": "Highlight changes",
|
||||
"diff_on": "Show diff",
|
||||
"diff_off": "Show content",
|
||||
"diff_on_hint": "Click to show note source diff",
|
||||
@@ -291,11 +311,39 @@
|
||||
"revision_deleted": "Note revision has been deleted.",
|
||||
"snapshot_interval": "Note Revision Snapshot Interval: {{seconds}}s.",
|
||||
"maximum_revisions": "Note Revision Snapshot Limit: {{number}}.",
|
||||
"save_revision_now": "Save a revision now",
|
||||
"save_named_revision": "Save named revision...",
|
||||
"snapshot_header": "Note revision snapshot",
|
||||
"snapshot_interval_value": "Interval: {{seconds}}s",
|
||||
"snapshot_limit_value": "Limit: {{number}}",
|
||||
"settings": "Note Revision Settings",
|
||||
"menu_tooltip": "Revision options",
|
||||
"download_button": "Download",
|
||||
"mime": "MIME: ",
|
||||
"file_size": "File size:",
|
||||
"preview_not_available": "Preview isn't available for this note type."
|
||||
"preview_not_available": "Preview isn't available for this note type.",
|
||||
"save_revision": "Save revision",
|
||||
"save_revision_tooltip": "Manually save a snapshot of the current note",
|
||||
"description_placeholder": "Name this revision",
|
||||
"revision_saved": "Note revision has been saved.",
|
||||
"edit_description": "Edit name",
|
||||
"description_updated": "Revision name has been updated.",
|
||||
"source_auto": "Auto-save",
|
||||
"source_manual": "Manual save",
|
||||
"source_etapi": "ETAPI",
|
||||
"source_llm": "LLM",
|
||||
"source_restore": "Restore",
|
||||
"source_unknown": "Snapshot",
|
||||
"date_today": "Today",
|
||||
"date_yesterday": "Yesterday",
|
||||
"date_this_week": "This week",
|
||||
"date_this_month": "This month",
|
||||
"source_description_auto": "Automatically saved by the system at regular intervals",
|
||||
"source_description_manual": "Manually saved by the user",
|
||||
"source_description_etapi": "Created via the External Trilium API",
|
||||
"source_description_llm": "Created by the AI assistant",
|
||||
"source_description_restore": "Saved before restoring a previous revision",
|
||||
"source_description_unknown": "Source not available"
|
||||
},
|
||||
"sort_child_notes": {
|
||||
"sort_children_by": "Sort children by...",
|
||||
@@ -369,7 +417,7 @@
|
||||
"calendar_root": "marks note which should be used as root for day notes. Only one should be marked as such.",
|
||||
"archived": "notes with this label won't be visible by default in search results (also in Jump To, Add Link dialogs etc).",
|
||||
"exclude_from_export": "notes (with their sub-tree) won't be included in any note export",
|
||||
"run": "defines on which events script should run. Possible values are:\n<ul>\n<li>frontendStartup - when Trilium frontend starts up (or is refreshed), but not on mobile.</li>\n<li>mobileStartup - when Trilium frontend starts up (or is refreshed), on mobile.</li>\n<li>backendStartup - when Trilium backend starts up</li>\n<li>hourly - run once an hour. You can use additional label <code>runAtHour</code> to specify at which hour.</li>\n<li>daily - run once a day</li>\n</ul>",
|
||||
"run": "defines on which events script should run. Possible values are:\n<ul>\n<li>frontendStartup - when Trilium frontend starts up (or is refreshed), but not on mobile.</li>\n<li>mobileStartup - when Trilium frontend starts up (or is refreshed), on mobile.</li>\n<li>backendStartup - when Trilium backend starts up.</li>\n<li>hourly - run once an hour. You can use additional label <code>runAtHour</code> to specify at which hour.</li>\n<li>daily - run once a day.</li>\n</ul>",
|
||||
"run_on_instance": "Define which trilium instance should run this on. Default to all instances.",
|
||||
"run_at_hour": "On which hour should this run. Should be used together with <code>#run=hourly</code>. Can be defined multiple times for more runs during the day.",
|
||||
"disable_inclusion": "scripts with this label won't be included into parent script execution.",
|
||||
@@ -447,6 +495,8 @@
|
||||
"and_more": "... and {{count}} more.",
|
||||
"print_landscape": "When exporting to PDF, changes the orientation of the page to landscape instead of portrait.",
|
||||
"print_page_size": "When exporting to PDF, changes the size of the page. Supported values: <code>A0</code>, <code>A1</code>, <code>A2</code>, <code>A3</code>, <code>A4</code>, <code>A5</code>, <code>A6</code>, <code>Legal</code>, <code>Letter</code>, <code>Tabloid</code>, <code>Ledger</code>.",
|
||||
"print_scale": "When exporting to PDF, changes the scale of the rendered content. Values range from 0.1 (10%) to 2 (200%), default is 1 (100%).",
|
||||
"print_margins": "When exporting to PDF, sets page margins. Use <code>default</code>, <code>none</code>, <code>minimum</code>, or custom values as <code>top,right,bottom,left</code> in millimeters.",
|
||||
"color_type": "Color"
|
||||
},
|
||||
"attribute_editor": {
|
||||
@@ -686,11 +736,17 @@
|
||||
"move_right": "Move right"
|
||||
},
|
||||
"note_actions": {
|
||||
"word_wrap": "Word wrap",
|
||||
"word_wrap_auto": "Auto",
|
||||
"word_wrap_auto_description": "Follow the global setting",
|
||||
"word_wrap_on": "On",
|
||||
"word_wrap_off": "Off",
|
||||
"convert_into_attachment": "Convert into attachment",
|
||||
"re_render_note": "Re-render note",
|
||||
"search_in_note": "Search in note",
|
||||
"note_source": "Note source",
|
||||
"note_attachments": "Note attachments",
|
||||
"view_ocr_text": "View OCR text",
|
||||
"open_note_externally": "Open note externally",
|
||||
"open_note_externally_title": "File will be open in an external application and watched for changes. You'll then be able to upload the modified version back to Trilium.",
|
||||
"open_note_custom": "Open note custom",
|
||||
@@ -701,6 +757,7 @@
|
||||
"print_note": "Print note",
|
||||
"view_revisions": "Note revisions...",
|
||||
"save_revision": "Save revision",
|
||||
"save_named_revision": "Save named revision...",
|
||||
"advanced": "Advanced",
|
||||
"convert_into_attachment_failed": "Converting note '{{title}}' failed.",
|
||||
"convert_into_attachment_successful": "Note '{{title}}' has been converted to attachment.",
|
||||
@@ -805,7 +862,11 @@
|
||||
"board": "Board",
|
||||
"presentation": "Presentation",
|
||||
"include_archived_notes": "Show archived notes",
|
||||
"hide_child_notes": "Hide child notes in tree"
|
||||
"hide_child_notes": "Hide child notes in tree",
|
||||
"open_all_in_tabs": "Open all",
|
||||
"open_all_in_tabs_tooltip": "Open all results in new tabs",
|
||||
"open_all_confirm": "This will open {{count}} notes in new tabs. Continue?",
|
||||
"open_all_too_many": "Too many results ({{count}}). Maximum is {{max}}."
|
||||
},
|
||||
"edited_notes": {
|
||||
"no_edited_notes_found": "No edited notes on this day yet...",
|
||||
@@ -841,6 +902,9 @@
|
||||
"no_inherited_attributes": "No inherited attributes.",
|
||||
"none": "none"
|
||||
},
|
||||
"auto_link_attribute_list": {
|
||||
"title": "System Attributes"
|
||||
},
|
||||
"note_info_widget": {
|
||||
"note_id": "Note ID",
|
||||
"created": "Created",
|
||||
@@ -859,7 +923,8 @@
|
||||
"collapse": "Collapse to normal size",
|
||||
"title": "Note Map",
|
||||
"fix-nodes": "Fix nodes",
|
||||
"link-distance": "Link distance"
|
||||
"link-distance": "Link distance",
|
||||
"too-many-notes": "This subtree contains {{count}} notes, which exceeds the limit of {{max}} that can be displayed in the note map."
|
||||
},
|
||||
"note_paths": {
|
||||
"title": "Note Paths",
|
||||
@@ -1073,6 +1138,7 @@
|
||||
"edit_title": "Edit title",
|
||||
"rename_note": "Rename note",
|
||||
"enter_new_title": "Enter new note title:",
|
||||
"rename_relation": "Rename relation",
|
||||
"remove_relation": "Remove relation",
|
||||
"confirm_remove_relation": "Are you sure you want to remove the relation?",
|
||||
"specify_new_relation_name": "Specify new relation name (allowed characters: alphanumeric, colon and underscore):",
|
||||
@@ -1107,17 +1173,20 @@
|
||||
},
|
||||
"consistency_checks": {
|
||||
"title": "Consistency Checks",
|
||||
"find_and_fix_label": "Find and fix consistency issues",
|
||||
"find_and_fix_description": "Scan for and automatically repair any data consistency issues in the database.",
|
||||
"find_and_fix_button": "Find and fix consistency issues",
|
||||
"finding_and_fixing_message": "Finding and fixing consistency issues...",
|
||||
"issues_fixed_message": "Any consistency issue which may have been found is now fixed."
|
||||
},
|
||||
"database_anonymization": {
|
||||
"title": "Database Anonymization",
|
||||
"full_anonymization": "Full Anonymization",
|
||||
"full_anonymization_description": "This action will create a new copy of the database and anonymize it (remove all note content and leave only structure and some non-sensitive metadata) for sharing online for debugging purposes without fear of leaking your personal data.",
|
||||
"description": "Create an anonymized copy of your database for sharing with developers when debugging issues, without exposing personal data.",
|
||||
"full_anonymization": "Full anonymization",
|
||||
"full_anonymization_description": "Creates a copy of the database with all note content removed, leaving only structure and non-sensitive metadata. Safe for sharing online when debugging issues.",
|
||||
"save_fully_anonymized_database": "Save fully anonymized database",
|
||||
"light_anonymization": "Light Anonymization",
|
||||
"light_anonymization_description": "This action will create a new copy of the database and do a light anonymization on it — specifically only content of all notes will be removed, but titles and attributes will remain. Additionally, custom JS frontend/backend script notes and custom widgets will remain. This provides more context to debug the issues.",
|
||||
"light_anonymization": "Light anonymization",
|
||||
"light_anonymization_description": "Creates a copy with note content removed, but titles, attributes, and custom scripts/widgets remain. Provides more context for debugging.",
|
||||
"choose_anonymization": "You can decide yourself if you want to provide a fully or lightly anonymized database. Even fully anonymized DB is very useful, however in some cases lightly anonymized database can speed up the process of bug identification and fixing.",
|
||||
"save_lightly_anonymized_database": "Save lightly anonymized database",
|
||||
"existing_anonymized_databases": "Existing anonymized databases",
|
||||
@@ -1130,7 +1199,8 @@
|
||||
},
|
||||
"database_integrity_check": {
|
||||
"title": "Database Integrity Check",
|
||||
"description": "This will check that the database is not corrupted on the SQLite level. It might take some time, depending on the DB size.",
|
||||
"check_integrity_label": "Check database integrity",
|
||||
"check_integrity_description": "Verify that the database is not corrupted on the SQLite level.",
|
||||
"check_button": "Check database integrity",
|
||||
"checking_integrity": "Checking database integrity...",
|
||||
"integrity_check_succeeded": "Integrity check succeeded - no problems found.",
|
||||
@@ -1138,7 +1208,11 @@
|
||||
},
|
||||
"sync": {
|
||||
"title": "Sync",
|
||||
"force_full_sync_label": "Force full sync",
|
||||
"force_full_sync_description": "Trigger a complete synchronization with the sync server, re-uploading all changes.",
|
||||
"force_full_sync_button": "Force full sync",
|
||||
"fill_entity_changes_label": "Fill entity changes",
|
||||
"fill_entity_changes_description": "Rebuild entity change records. Use this if sync is missing some changes.",
|
||||
"fill_entity_changes_button": "Fill entity changes records",
|
||||
"full_sync_triggered": "Full sync triggered",
|
||||
"filling_entity_changes": "Filling entity changes rows...",
|
||||
@@ -1146,8 +1220,13 @@
|
||||
"finished-successfully": "Sync finished successfully.",
|
||||
"failed": "Sync failed: {{message}}"
|
||||
},
|
||||
"database": {
|
||||
"title": "Database"
|
||||
},
|
||||
"vacuum_database": {
|
||||
"title": "Vacuum Database",
|
||||
"vacuum_label": "Vacuum database",
|
||||
"vacuum_description": "Rebuild the database to reduce file size. No data will be changed.",
|
||||
"description": "This will rebuild the database which will typically result in a smaller database file. No data will be actually changed.",
|
||||
"button_text": "Vacuum database",
|
||||
"vacuuming_database": "Vacuuming database...",
|
||||
@@ -1157,21 +1236,25 @@
|
||||
"title": "Experimental Options",
|
||||
"disclaimer": "These options are experimental and may cause instability. Use with caution.",
|
||||
"new_layout_name": "New Layout",
|
||||
"new_layout_description": "Try out the new layout for a more modern look and improved usability. Subject to heavy change in the upcoming releases."
|
||||
"new_layout_description": "Try out the new layout for a more modern look and improved usability. Subject to heavy change in the upcoming releases.",
|
||||
"llm_name": "AI / LLM Chat",
|
||||
"llm_description": "Enable the AI chat sidebar and LLM chat notes powered by large language models."
|
||||
},
|
||||
"fonts": {
|
||||
"theme_defined": "Theme defined",
|
||||
"fonts": "Fonts",
|
||||
"main_font": "Main Font",
|
||||
"custom_fonts": "Use custom fonts",
|
||||
"main_font": "Interface text",
|
||||
"font_family": "Font family",
|
||||
"size": "Size",
|
||||
"note_tree_font": "Note Tree Font",
|
||||
"note_detail_font": "Note Detail Font",
|
||||
"monospace_font": "Monospace (code) Font",
|
||||
"note_tree_and_detail_font_sizing": "Note that tree and detail font sizing is relative to the main font size setting.",
|
||||
"not_all_fonts_available": "Not all listed fonts may be available on your system.",
|
||||
"apply_font_changes": "To apply font changes, click on",
|
||||
"reload_frontend": "reload frontend",
|
||||
"preview": "Preview",
|
||||
"note_tree_font": "Note tree text",
|
||||
"note_detail_font": "Document text",
|
||||
"monospace_font": "Monospace text",
|
||||
"monospace_font_description": "Used for code notes and code blocks",
|
||||
"size_relative_to_general": "Size is relative to the general font size",
|
||||
"not_all_fonts_available": "Not all listed fonts may be available on your system",
|
||||
"apply_changes": "Reload to apply changes",
|
||||
"generic-fonts": "Generic fonts",
|
||||
"sans-serif-system-fonts": "Sans-serif system fonts",
|
||||
"serif-system-fonts": "Serif system fonts",
|
||||
@@ -1200,15 +1283,18 @@
|
||||
"edited_notes_message": "Edited Notes ribbon tab will automatically open on day notes"
|
||||
},
|
||||
"theme": {
|
||||
"title": "Application Theme",
|
||||
"theme_label": "Theme",
|
||||
"title": "User Interface",
|
||||
"theme_label": "Application theme",
|
||||
"override_theme_fonts_label": "Override theme fonts",
|
||||
"auto_theme": "Legacy (Follow system color scheme)",
|
||||
"light_theme": "Legacy (Light)",
|
||||
"dark_theme": "Legacy (Dark)",
|
||||
"triliumnext": "Trilium (Follow system color scheme)",
|
||||
"triliumnext-light": "Trilium (Light)",
|
||||
"triliumnext-dark": "Trilium (Dark)",
|
||||
"auto_theme": "Follow system color scheme",
|
||||
"light_theme": "Light",
|
||||
"dark_theme": "Dark",
|
||||
"triliumnext": "Follow system color scheme",
|
||||
"triliumnext-light": "Light",
|
||||
"triliumnext-dark": "Dark",
|
||||
"modern_themes": "Modern",
|
||||
"legacy_themes": "Legacy",
|
||||
"custom_themes": "Custom",
|
||||
"layout": "Layout",
|
||||
"layout-vertical-title": "Vertical",
|
||||
"layout-horizontal-title": "Horizontal",
|
||||
@@ -1217,11 +1303,11 @@
|
||||
},
|
||||
"ui-performance": {
|
||||
"title": "Performance",
|
||||
"enable-motion": "Enable transitions and animations",
|
||||
"enable-shadows": "Enable shadows",
|
||||
"enable-backdrop-effects": "Enable background effects for menus, popups and panels",
|
||||
"enable-smooth-scroll": "Enable smooth scrolling",
|
||||
"app-restart-required": "(a restart of the application is required for the change to take effect)"
|
||||
"enable-motion": "Transitions and animations",
|
||||
"enable-shadows": "Shadows",
|
||||
"enable-backdrop-effects": "Background effects for menus, popups and panels",
|
||||
"enable-smooth-scroll": "Smooth scrolling",
|
||||
"app-restart-required": "Requires app restart"
|
||||
},
|
||||
"zoom_factor": {
|
||||
"title": "Zoom Factor (desktop build only)",
|
||||
@@ -1230,11 +1316,13 @@
|
||||
"code_auto_read_only_size": {
|
||||
"title": "Automatic Read-Only Size",
|
||||
"description": "Automatic read-only note size is the size after which notes will be displayed in a read-only mode (for performance reasons).",
|
||||
"label": "Automatic read-only size (code notes)",
|
||||
"label": "Automatic read-only size",
|
||||
"unit": "characters"
|
||||
},
|
||||
"code-editor-options": {
|
||||
"title": "Editor"
|
||||
"title": "Editor",
|
||||
"tab_width": "Tab width",
|
||||
"tab_width_unit": "spaces"
|
||||
},
|
||||
"code_mime_types": {
|
||||
"title": "Available MIME types in the dropdown",
|
||||
@@ -1252,66 +1340,104 @@
|
||||
},
|
||||
"images": {
|
||||
"images_section_title": "Images",
|
||||
"download_images_automatically": "Download images automatically for offline use.",
|
||||
"download_images_description": "Pasted HTML can contain references to online images, Trilium will find those references and download the images so that they are available offline.",
|
||||
"enable_image_compression": "Enable image compression",
|
||||
"max_image_dimensions": "Max width / height of an image (image will be resized if it exceeds this setting).",
|
||||
"download_images_automatically": "Download images automatically",
|
||||
"download_images_description": "Download referenced online images from pasted HTML so they are available offline.",
|
||||
"enable_image_compression": "Image compression",
|
||||
"enable_image_compression_description": "Compress and resize images when they are uploaded or pasted.",
|
||||
"max_image_dimensions": "Max image dimensions",
|
||||
"max_image_dimensions_description": "Images exceeding this size will be resized automatically.",
|
||||
"max_image_dimensions_unit": "pixels",
|
||||
"jpeg_quality_description": "JPEG quality (10 - worst quality, 100 - best quality, 50 - 85 is recommended)"
|
||||
"jpeg_quality": "JPEG quality",
|
||||
"jpeg_quality_description": "Recommended range is 50–85. Lower values reduce file size, higher values preserve detail.",
|
||||
"ocr_section_title": "Text Extraction (OCR)",
|
||||
"ocr_related_content_languages": "Content languages (used for text extraction)",
|
||||
"ocr_auto_process": "Auto-process new files",
|
||||
"ocr_auto_process_description": "Automatically extract text from newly uploaded or pasted files.",
|
||||
"ocr_min_confidence": "Minimum confidence",
|
||||
"ocr_confidence_description": "Only extract text above this confidence threshold. Lower values include more text but may be less accurate.",
|
||||
"batch_ocr_title": "Process Existing Files",
|
||||
"batch_ocr_description": "Extract text from all existing images, PDFs, and Office documents in your notes. This may take some time depending on the number of files.",
|
||||
"batch_ocr_start": "Start Batch Processing",
|
||||
"batch_ocr_starting": "Starting batch processing...",
|
||||
"batch_ocr_progress": "Processing {{processed}} of {{total}} files...",
|
||||
"batch_ocr_completed": "Batch processing completed! Processed {{processed}} files.",
|
||||
"batch_ocr_error": "Error during batch processing: {{error}}"
|
||||
},
|
||||
"attachment_erasure_timeout": {
|
||||
"attachment_erasure_timeout": "Attachment Erasure Timeout",
|
||||
"attachment_auto_deletion_description": "Attachments get automatically deleted (and erased) if they are not referenced by their note anymore after a defined time out.",
|
||||
"erase_attachments_after": "Erase unused attachments after:",
|
||||
"manual_erasing_description": "You can also trigger erasing manually (without considering the timeout defined above):",
|
||||
"erase_unused_attachments_now": "Erase unused attachment notes now",
|
||||
"attachment_erasure_timeout": "Unused Attachments",
|
||||
"description": "Attachments that are no longer referenced by any note are considered unused and can be automatically erased after a period of time.",
|
||||
"erase_attachments_after": "Erase unused attachments after",
|
||||
"erase_attachments_after_description": "Time before unused attachments are permanently erased.",
|
||||
"manual_erasing_description": "Trigger erasing manually, ignoring the timeout above.",
|
||||
"erase_unused_attachments_now": "Erase unused attachments now",
|
||||
"unused_attachments_erased": "Unused attachments have been erased."
|
||||
},
|
||||
"network_connections": {
|
||||
"network_connections_title": "Network Connections",
|
||||
"check_for_updates": "Check for updates automatically"
|
||||
"network_connections_title": "Network",
|
||||
"check_for_updates": "Check for updates automatically",
|
||||
"check_for_updates_description": "Checks for new versions on GitHub and shows a notification in the global menu when available."
|
||||
},
|
||||
"note_erasure_timeout": {
|
||||
"note_erasure_timeout_title": "Note Erasure Timeout",
|
||||
"note_erasure_description": "Deleted notes (and attributes, revisions...) are at first only marked as deleted and it is possible to recover them from Recent Notes dialog. After a period of time, deleted notes are \"erased\" which means their content is not recoverable anymore. This setting allows you to configure the length of the period between deleting and erasing the note.",
|
||||
"erase_notes_after": "Erase notes after:",
|
||||
"manual_erasing_description": "You can also trigger erasing manually (without considering the timeout defined above):",
|
||||
"note_erasure_timeout_title": "Deleted Notes",
|
||||
"description": "Deleted notes are first only marked as deleted and can be recovered from Recent Notes. After a period of time, they are permanently erased.",
|
||||
"erase_notes_after": "Erase notes after",
|
||||
"erase_notes_after_description": "Time before deleted notes are permanently erased.",
|
||||
"manual_erasing_description": "Trigger erasing manually, ignoring the timeout above.",
|
||||
"erase_deleted_notes_now": "Erase deleted notes now",
|
||||
"deleted_notes_erased": "Deleted notes have been erased."
|
||||
},
|
||||
"revisions_snapshot": {
|
||||
"title": "Note Revisions"
|
||||
},
|
||||
"revisions_snapshot_interval": {
|
||||
"note_revisions_snapshot_interval_title": "Note Revision Snapshot Interval",
|
||||
"note_revisions_snapshot_description": "The Note revision snapshot interval is the time after which a new note revision will be created for the note. See <doc>wiki</doc> for more info.",
|
||||
"snapshot_time_interval_label": "Note revision snapshot time interval:"
|
||||
"note_revisions_snapshot_description_short": "Time after which a new note revision will be created.",
|
||||
"snapshot_time_interval_label": "Snapshot interval"
|
||||
},
|
||||
"revisions_snapshot_limit": {
|
||||
"note_revisions_snapshot_limit_title": "Note Revision Snapshot Limit",
|
||||
"note_revisions_snapshot_limit_description": "The note revision snapshot number limit refers to the maximum number of revisions that can be saved for each note. Where -1 means no limit, 0 means delete all revisions. You can set the maximum revisions for a single note through the #versioningLimit label.",
|
||||
"snapshot_number_limit_label": "Note revision snapshot number limit:",
|
||||
"note_revisions_snapshot_limit_description_short": "Max revisions per note. Use -1 for unlimited, 0 to disable.",
|
||||
"snapshot_number_limit_label": "Maximum revisions",
|
||||
"snapshot_number_limit_unit": "snapshots",
|
||||
"erase_excess_revision_snapshots": "Erase excess revision snapshots now",
|
||||
"erase_excess_revision_snapshots_description": "Delete revisions exceeding the limit for all notes.",
|
||||
"erase_excess_revision_snapshots_prompt": "Excess revision snapshots have been erased."
|
||||
},
|
||||
"search": {
|
||||
"title": "Search",
|
||||
"fuzzy_matching_label": "Typo tolerance in search",
|
||||
"fuzzy_matching_description": "Affects quick search and full search. Finds similar words when exact matches are insufficient.",
|
||||
"autocomplete_fuzzy_label": "Typo tolerance in autocomplete",
|
||||
"autocomplete_fuzzy_description": "Affects jump-to-note and note selectors. Slower but tolerates typos."
|
||||
},
|
||||
"search_engine": {
|
||||
"title": "Search Engine",
|
||||
"custom_search_engine_info": "Custom search engine requires both a name and a URL to be set. If either of these is not set, DuckDuckGo will be used as the default search engine.",
|
||||
"predefined_templates_label": "Predefined search engine templates",
|
||||
"custom_search_engine_info": "Used when searching the web for selected text. If not configured, DuckDuckGo will be used.",
|
||||
"predefined_templates_label": "Presets",
|
||||
"bing": "Bing",
|
||||
"baidu": "Baidu",
|
||||
"duckduckgo": "DuckDuckGo",
|
||||
"google": "Google",
|
||||
"custom_name_label": "Custom search engine name",
|
||||
"custom_name_placeholder": "Customize search engine name",
|
||||
"custom_url_label": "Custom search engine URL should include {keyword} as a placeholder for the search term.",
|
||||
"custom_url_placeholder": "Customize search engine url",
|
||||
"custom_name_label": "Name",
|
||||
"custom_name_placeholder": "Search engine name",
|
||||
"custom_url_label": "URL",
|
||||
"custom_url_description": "Use {keyword} as a placeholder for the search term.",
|
||||
"custom_url_placeholder": "Search engine URL",
|
||||
"save_button": "Save"
|
||||
},
|
||||
"tray": {
|
||||
"title": "System Tray",
|
||||
"enable_tray": "Enable tray (Trilium needs to be restarted for this change to take effect)"
|
||||
"enable_tray": "Tray icon",
|
||||
"enable_tray_description": "Trilium needs to be restarted for this change to take effect."
|
||||
},
|
||||
"text_editor": {
|
||||
"title": "Editor"
|
||||
},
|
||||
"heading_style": {
|
||||
"title": "Heading Style",
|
||||
"title": "Heading style",
|
||||
"description": "Visual style for headings in text notes.",
|
||||
"plain": "Plain",
|
||||
"underline": "Underline",
|
||||
"markdown": "Markdown-style"
|
||||
@@ -1338,14 +1464,16 @@
|
||||
"text_auto_read_only_size": {
|
||||
"title": "Automatic Read-Only Size",
|
||||
"description": "Automatic read-only note size is the size after which notes will be displayed in a read-only mode (for performance reasons).",
|
||||
"label": "Automatic read-only size (text notes)",
|
||||
"label": "Automatic read-only size",
|
||||
"unit": "characters"
|
||||
},
|
||||
"custom_date_time_format": {
|
||||
"title": "Custom Date/Time Format",
|
||||
"title": "Date/time format",
|
||||
"description": "Customize the format of the date and time inserted via <shortcut /> or the toolbar. See <doc>Day.js docs</doc> for available format tokens.",
|
||||
"format_string": "Format string:",
|
||||
"formatted_time": "Formatted date/time:"
|
||||
"description_short": "Customize the format of the date and time inserted via the toolbar.",
|
||||
"preview": "Preview: {{preview}}",
|
||||
"format_string": "Format string",
|
||||
"formatted_time": "Formatted date/time"
|
||||
},
|
||||
"i18n": {
|
||||
"title": "Localization",
|
||||
@@ -1360,20 +1488,20 @@
|
||||
"sunday": "Sunday",
|
||||
"first-week-of-the-year": "First week of the year",
|
||||
"first-week-contains-first-day": "First week contains first day of the year",
|
||||
"first-week-contains-first-thursday": "First week contains first Thursday of the year",
|
||||
"first-week-contains-first-thursday": "First week contains first Thursday (ISO 8601)",
|
||||
"first-week-has-minimum-days": "First week has minimum days",
|
||||
"min-days-in-first-week": "Minimum days in first week",
|
||||
"first-week-info": "First week contains first Thursday of the year is based on <a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a> standard.",
|
||||
"first-week-warning": "Changing first week options may cause duplicate with existing Week Notes and the existing Week Notes will not be updated accordingly.",
|
||||
"first-week-warning": "Changing this may cause duplicates with existing Week Notes.",
|
||||
"formatting-locale": "Date & number format",
|
||||
"formatting-locale-auto": "Based on the application's language"
|
||||
},
|
||||
"backup": {
|
||||
"title": "Backup",
|
||||
"automatic_backup": "Automatic backup",
|
||||
"automatic_backup_description": "Trilium can back up the database automatically:",
|
||||
"enable_daily_backup": "Enable daily backup",
|
||||
"enable_weekly_backup": "Enable weekly backup",
|
||||
"enable_monthly_backup": "Enable monthly backup",
|
||||
"enable_daily_backup": "Backup daily",
|
||||
"enable_weekly_backup": "Backup weekly",
|
||||
"enable_monthly_backup": "Backup monthly",
|
||||
"backup_recommendation": "It's recommended to keep the backup turned on, but this can make application startup slow with large databases and/or slow storage devices.",
|
||||
"backup_now": "Backup now",
|
||||
"backup_database_now": "Backup database now",
|
||||
@@ -1381,7 +1509,8 @@
|
||||
"date-and-time": "Date & time",
|
||||
"path": "Path",
|
||||
"database_backed_up_to": "Database has been backed up to {{backupFilePath}}",
|
||||
"no_backup_yet": "no backup yet"
|
||||
"no_backup_yet": "no backup yet",
|
||||
"download": "Download"
|
||||
},
|
||||
"etapi": {
|
||||
"title": "ETAPI",
|
||||
@@ -1416,11 +1545,15 @@
|
||||
"new_password": "New password",
|
||||
"new_password_confirmation": "New password confirmation",
|
||||
"change_password": "Change password",
|
||||
"protected_session_timeout": "Protected Session Timeout",
|
||||
"protected_session_timeout_description": "Protected session timeout is a time period after which the protected session is wiped from the browser's memory. This is measured from the last interaction with protected notes. See",
|
||||
"change_password_description": "Update your current password",
|
||||
"reset_password": "Reset password",
|
||||
"reset_password_description": "Permanently lose access to protected notes",
|
||||
"cancel": "Cancel",
|
||||
"protected_session_timeout": "Protected Session",
|
||||
"protected_session_timeout_description": "Time of inactivity before the session is cleared from browser memory. See",
|
||||
"wiki": "wiki",
|
||||
"for_more_info": "for more info.",
|
||||
"protected_session_timeout_label": "Protected session timeout:",
|
||||
"protected_session_timeout_label": "Auto-close session after",
|
||||
"reset_confirmation": "By resetting the password you will forever lose access to all your existing protected notes. Do you really want to reset the password?",
|
||||
"reset_success_message": "Password has been reset. Please set new password",
|
||||
"change_password_heading": "Change Password",
|
||||
@@ -1479,26 +1612,28 @@
|
||||
"spellcheck": {
|
||||
"title": "Spell Check",
|
||||
"description": "These options apply only for desktop builds, browsers will use their own native spell check.",
|
||||
"enable": "Enable spellcheck",
|
||||
"language_code_label": "Language code(s)",
|
||||
"language_code_placeholder": "for example \"en-US\", \"de-AT\"",
|
||||
"multiple_languages_info": "Multiple languages can be separated by comma, e.g. \"en-US, de-DE, cs\". ",
|
||||
"available_language_codes_label": "Available language codes:",
|
||||
"restart-required": "Changes to the spell check options will take effect after application restart."
|
||||
"enable": "Check spelling",
|
||||
"language_code_label": "Spell Check Languages",
|
||||
"restart-required": "Changes to the spell check options will take effect after application restart.",
|
||||
"custom_dictionary_title": "Custom Dictionary",
|
||||
"custom_dictionary_description": "Words added to the dictionary are synced across all your devices.",
|
||||
"custom_dictionary_edit": "Custom words",
|
||||
"custom_dictionary_edit_description": "Edit the list of words that should not be flagged by the spell checker. Changes will be visible after a restart.",
|
||||
"custom_dictionary_open": "Edit dictionary",
|
||||
"related_description": "Configure spell check languages and custom dictionary."
|
||||
},
|
||||
"sync_2": {
|
||||
"config_title": "Sync Configuration",
|
||||
"server_address": "Server instance address",
|
||||
"timeout": "Sync timeout",
|
||||
"timeout_unit": "milliseconds",
|
||||
"proxy_label": "Sync proxy server (optional)",
|
||||
"note": "Note",
|
||||
"note_description": "If you leave the proxy setting blank, the system proxy will be used (applies to desktop/electron build only).",
|
||||
"special_value_description": "Another special value is <code>noproxy</code> which forces ignoring even the system proxy and respects <code>NODE_TLS_REJECT_UNAUTHORIZED</code>.",
|
||||
"config_title": "Sync Server",
|
||||
"server_address": "Server address",
|
||||
"server_address_description": "URL of the Trilium server to sync with.",
|
||||
"timeout": "Connection timeout",
|
||||
"timeout_description": "Time to wait before giving up on a slow connection.",
|
||||
"proxy_label": "Proxy server",
|
||||
"proxy_description": "Leave blank to use system proxy (desktop only). Use \"noproxy\" to bypass all proxies.",
|
||||
"save": "Save",
|
||||
"help": "Help",
|
||||
"test_title": "Sync Test",
|
||||
"test_description": "This will test the connection and handshake to the sync server. If the sync server isn't initialized, this will set it up to sync with the local document.",
|
||||
"test_title": "Test Connection",
|
||||
"test_description": "Test the connection to the sync server. If not initialized, this will set up syncing.",
|
||||
"test_button": "Test sync",
|
||||
"handshake_failed": "Sync server handshake failed, error: {{message}}"
|
||||
},
|
||||
@@ -1581,6 +1716,7 @@
|
||||
"note_types": {
|
||||
"text": "Text",
|
||||
"code": "Code",
|
||||
"markdown": "Markdown",
|
||||
"saved-search": "Saved Search",
|
||||
"relation-map": "Relation Map",
|
||||
"note-map": "Note Map",
|
||||
@@ -1599,6 +1735,7 @@
|
||||
"geo-map": "Geo Map",
|
||||
"beta-feature": "Beta",
|
||||
"ai-chat": "AI Chat",
|
||||
"llm-chat": "AI Chat",
|
||||
"task-list": "Task List",
|
||||
"new-feature": "New",
|
||||
"collections": "Collections",
|
||||
@@ -1610,6 +1747,49 @@
|
||||
"toggle-on-hint": "Note is not protected, click to make it protected",
|
||||
"toggle-off-hint": "Note is protected, click to make it unprotected"
|
||||
},
|
||||
"llm_chat": {
|
||||
"placeholder": "Type a message...",
|
||||
"send": "Send",
|
||||
"sending": "Sending...",
|
||||
"empty_state": "Start a conversation by typing a message below.",
|
||||
"searching_web": "Searching the web...",
|
||||
"web_search": "Web search",
|
||||
"note_tools": "Note access",
|
||||
"sources": "Sources",
|
||||
"sources_summary": "{{count}} sources from {{sites}} sites",
|
||||
"extended_thinking": "Extended thinking",
|
||||
"legacy_models": "Legacy models",
|
||||
"thinking": "Thinking...",
|
||||
"thought_process": "Thought process",
|
||||
"tool_calls": "{{count}} tool call(s)",
|
||||
"input": "Input",
|
||||
"result": "Result",
|
||||
"error": "Error",
|
||||
"tool_error": "failed",
|
||||
"total_tokens": "{{total}} tokens",
|
||||
"tokens_detail": "{{prompt}} prompt + {{completion}} completion",
|
||||
"tokens_used": "{{prompt}} prompt + {{completion}} completion = {{total}} tokens",
|
||||
"tokens_used_with_cost": "{{prompt}} prompt + {{completion}} completion = {{total}} tokens (~${{cost}})",
|
||||
"tokens_used_with_model": "{{model}}: {{prompt}} prompt + {{completion}} completion = {{total}} tokens",
|
||||
"tokens_used_with_model_and_cost": "{{model}}: {{prompt}} prompt + {{completion}} completion = {{total}} tokens (~${{cost}})",
|
||||
"tokens": "tokens",
|
||||
"context_used": "{{percentage}}% used",
|
||||
"note_context_enabled": "Click to disable note context: {{title}}",
|
||||
"note_context_disabled": "Click to include current note in context",
|
||||
"no_provider_message": "No AI provider configured. Add one to start chatting.",
|
||||
"add_provider": "Add AI Provider",
|
||||
"stop": "Stop"
|
||||
},
|
||||
"sidebar_chat": {
|
||||
"title": "AI Chat",
|
||||
"launcher_title": "Open AI Chat",
|
||||
"new_chat": "Start new chat",
|
||||
"save_chat": "Save chat to notes",
|
||||
"empty_state": "Start a conversation",
|
||||
"history": "Chat history",
|
||||
"recent_chats": "Recent chats",
|
||||
"no_chats": "No previous chats"
|
||||
},
|
||||
"shared_switch": {
|
||||
"shared": "Shared",
|
||||
"toggle-on-title": "Share the note",
|
||||
@@ -1679,7 +1859,7 @@
|
||||
"note_detail": {
|
||||
"could_not_find_typewidget": "Could not find typeWidget for type '{{type}}'",
|
||||
"printing": "Printing in progress...",
|
||||
"printing_pdf": "Exporting to PDF in progress...",
|
||||
"printing_pdf": "Preparing print preview...",
|
||||
"print_report_title": "Print report",
|
||||
"print_report_error_title": "Failed to print",
|
||||
"print_report_stack_trace": "Stack trace",
|
||||
@@ -1757,6 +1937,8 @@
|
||||
},
|
||||
"entrypoints": {
|
||||
"note-revision-created": "Note revision has been created.",
|
||||
"save-named-revision-title": "Save named revision",
|
||||
"save-named-revision-message": "Enter a name for this revision (leave empty for no name):",
|
||||
"note-executed": "Note executed.",
|
||||
"sql-error": "Error occurred while executing SQL query: {{message}}"
|
||||
},
|
||||
@@ -1794,6 +1976,9 @@
|
||||
"move-to-available-launchers": "Move to available launchers",
|
||||
"duplicate-launcher": "Duplicate launcher <kbd data-command=\"duplicateSubtree\">"
|
||||
},
|
||||
"launcher_button_context_menu": {
|
||||
"remove_from_launch_bar": "Remove from launch bar"
|
||||
},
|
||||
"highlighting": {
|
||||
"title": "Code Blocks",
|
||||
"description": "Controls the syntax highlighting for code blocks inside text notes, code notes will not be affected.",
|
||||
@@ -1804,7 +1989,10 @@
|
||||
"theme_none": "No syntax highlighting",
|
||||
"theme_group_light": "Light themes",
|
||||
"theme_group_dark": "Dark themes",
|
||||
"copy_title": "Copy to clipboard"
|
||||
"copy_title": "Copy to clipboard",
|
||||
"click_to_copy": "Click to copy",
|
||||
"tab_width": "Tab width",
|
||||
"tab_width_unit": "spaces"
|
||||
},
|
||||
"classic_editor_toolbar": {
|
||||
"title": "Formatting"
|
||||
@@ -1815,6 +2003,7 @@
|
||||
"editing": {
|
||||
"editor_type": {
|
||||
"label": "Formatting toolbar",
|
||||
"toolbar_style": "Toolbar style",
|
||||
"floating": {
|
||||
"title": "Floating",
|
||||
"description": "editing tools appear near the cursor;"
|
||||
@@ -1823,7 +2012,7 @@
|
||||
"title": "Fixed",
|
||||
"description": "editing tools appear in the \"Formatting\" ribbon tab."
|
||||
},
|
||||
"multiline-toolbar": "Display the toolbar on multiple lines if it doesn't fit."
|
||||
"multiline-toolbar": "Display the toolbar on multiple lines if it doesn't fit"
|
||||
}
|
||||
},
|
||||
"electron_context_menu": {
|
||||
@@ -1841,6 +2030,9 @@
|
||||
"copy_reference_to_clipboard": "Copy reference to clipboard",
|
||||
"copy_image_to_clipboard": "Copy image to clipboard"
|
||||
},
|
||||
"link": {
|
||||
"failed_to_open": "Failed to open link '{{- href}}': {{- message}}"
|
||||
},
|
||||
"link_context_menu": {
|
||||
"open_note_in_new_tab": "Open note in a new tab",
|
||||
"open_note_in_new_split": "Open note in a new split",
|
||||
@@ -1890,7 +2082,7 @@
|
||||
"days": "Days"
|
||||
},
|
||||
"share": {
|
||||
"title": "Share Settings",
|
||||
"title": "Share",
|
||||
"redirect_bare_domain": "Redirect bare domain to Share page",
|
||||
"redirect_bare_domain_description": "Redirect anonymous users to the Share page instead of showing Login",
|
||||
"show_login_link": "Show Login link in Share theme",
|
||||
@@ -1921,7 +2113,7 @@
|
||||
},
|
||||
"content_language": {
|
||||
"title": "Content languages",
|
||||
"description": "Select one or more languages that should appear in the language selection in the Basic Properties section of a read-only or editable text note. This will allow features such as spell-checking or right-to-left support."
|
||||
"description": "Select one or more languages that should appear in the language selection in the Basic Properties section of a read-only or editable text note. This will allow features such as spell-checking, right-to-left support and text extraction (OCR)."
|
||||
},
|
||||
"switch_layout_button": {
|
||||
"title_vertical": "Move editing pane to the bottom",
|
||||
@@ -1931,6 +2123,11 @@
|
||||
"unlock-editing": "Unlock editing",
|
||||
"lock-editing": "Lock editing"
|
||||
},
|
||||
"display_mode": {
|
||||
"source": "Source view",
|
||||
"split": "Split view",
|
||||
"preview": "Preview"
|
||||
},
|
||||
"png_export_button": {
|
||||
"button_title": "Export diagram as PNG"
|
||||
},
|
||||
@@ -1954,12 +2151,12 @@
|
||||
},
|
||||
"editorfeatures": {
|
||||
"title": "Features",
|
||||
"emoji_completion_enabled": "Enable Emoji auto-completion",
|
||||
"emoji_completion_description": "If enabled, emojis can be easily inserted into text by typing `:`, followed by the name of an emoji.",
|
||||
"note_completion_enabled": "Enable note auto-completion",
|
||||
"note_completion_description": "If enabled, links to notes can be created by typing `@` followed by the title of a note.",
|
||||
"slash_commands_enabled": "Enable slash commands",
|
||||
"slash_commands_description": "If enabled, editing commands such as inserting line breaks or headings can be toggled by typing `/`."
|
||||
"emoji_completion_enabled": "Emoji auto-completion",
|
||||
"emoji_completion_description": "Emojis can be easily inserted into text by typing `:`, followed by the name of an emoji.",
|
||||
"note_completion_enabled": "Note auto-completion",
|
||||
"note_completion_description": "Links to notes can be created by typing `@` followed by the title of a note.",
|
||||
"slash_commands_enabled": "Slash commands",
|
||||
"slash_commands_description": "Editing commands such as inserting line breaks or headings can be toggled by typing `/`."
|
||||
},
|
||||
"table_view": {
|
||||
"new-row": "New row",
|
||||
@@ -2021,6 +2218,22 @@
|
||||
"calendar_view": {
|
||||
"delete_note": "Delete note..."
|
||||
},
|
||||
"ocr": {
|
||||
"extracted_text": "Extracted Text (OCR)",
|
||||
"extracted_text_title": "Extracted Text (OCR)",
|
||||
"loading_text": "Loading OCR text...",
|
||||
"no_text_available": "No OCR text available",
|
||||
"no_text_explanation": "This note has not been processed for OCR text extraction or no text was found.",
|
||||
"failed_to_load": "Failed to load OCR text",
|
||||
"process_now": "Process OCR",
|
||||
"processing": "Processing...",
|
||||
"processing_started": "OCR processing has been started. Please wait a moment and refresh.",
|
||||
"processing_complete": "OCR processing complete.",
|
||||
"processing_failed": "Failed to start OCR processing",
|
||||
"text_filtered_low_confidence": "OCR detected text with {{confidence}}% confidence, but it was discarded because your minimum threshold is {{threshold}}%.",
|
||||
"open_media_settings": "Open Settings",
|
||||
"view_extracted_text": "View extracted text (OCR)"
|
||||
},
|
||||
"command_palette": {
|
||||
"tree-action-name": "Tree: {{name}}",
|
||||
"export_note_title": "Export Note",
|
||||
@@ -2062,6 +2275,8 @@
|
||||
"related_code_blocks": "Color scheme for code blocks in text notes",
|
||||
"related_code_notes": "Color scheme for code notes",
|
||||
"ui": "User interface",
|
||||
"ui_layout_style": "Layout style",
|
||||
"ui_layout_orientation": "Launcher bar orientation",
|
||||
"ui_old_layout": "Old layout",
|
||||
"ui_new_layout": "New layout"
|
||||
},
|
||||
@@ -2144,7 +2359,19 @@
|
||||
"note_paths_one": "{{count}} path",
|
||||
"note_paths_other": "{{count}} paths",
|
||||
"note_paths_title": "Note paths",
|
||||
"code_note_switcher": "Change language mode"
|
||||
"code_note_switcher": "Change language mode",
|
||||
"tab_width": "Tab Width: {{width}}",
|
||||
"tab_width_title": "Change tab width",
|
||||
"tab_width_spaces": "{{count}} spaces",
|
||||
"tab_width_spaces_short": "Spaces: {{width}}",
|
||||
"tab_width_tabs": "Tabs: {{width}}",
|
||||
"tab_width_use_default": "Use default ({{width}})",
|
||||
"tab_width_use_default_style": "Use default ({{style}})",
|
||||
"tab_width_display_header": "Display width",
|
||||
"tab_width_reindent_header": "Re-indent content to",
|
||||
"tab_width_style_header": "Indent using",
|
||||
"tab_width_style_spaces": "Spaces",
|
||||
"tab_width_style_tabs": "Tabs"
|
||||
},
|
||||
"attributes_panel": {
|
||||
"title": "Note Attributes"
|
||||
@@ -2155,6 +2382,37 @@
|
||||
"toggle": "Toggle right panel",
|
||||
"custom_widget_go_to_source": "Go to source code"
|
||||
},
|
||||
"print_preview": {
|
||||
"title": "Print preview",
|
||||
"close": "Close",
|
||||
"save": "Save as PDF",
|
||||
"print": "Print",
|
||||
"export_pdf": "Export as PDF",
|
||||
"system_print": "Print using system dialog",
|
||||
"destination": "Destination",
|
||||
"destination_pdf": "Save as PDF",
|
||||
"destination_printers": "Printers",
|
||||
"destination_default": "Default",
|
||||
"orientation": "Orientation",
|
||||
"portrait": "Portrait",
|
||||
"landscape": "Landscape",
|
||||
"page_size": "Page size",
|
||||
"scale": "Scale",
|
||||
"margins": "Margins",
|
||||
"render_error": "Unable to render PDF with the current settings. Please check the margins and scale.",
|
||||
"margins_default": "Default",
|
||||
"margins_none": "None",
|
||||
"margins_minimum": "Minimum",
|
||||
"margins_custom": "Custom",
|
||||
"margin_top": "Top",
|
||||
"margin_right": "Right",
|
||||
"margin_bottom": "Bottom",
|
||||
"margin_left": "Left",
|
||||
"page_ranges": "Pages",
|
||||
"page_ranges_hint": "Leave empty to print all pages.",
|
||||
"page_ranges_invalid": "Invalid format. Use e.g. 1-5, 8, 11-13.",
|
||||
"page_ranges_placeholder": "e.g. 1-5, 8, 11-13"
|
||||
},
|
||||
"pdf": {
|
||||
"attachments_one": "{{count}} attachment",
|
||||
"attachments_other": "{{count}} attachments",
|
||||
@@ -2229,6 +2487,71 @@
|
||||
"sample_user_journey": "User Journey",
|
||||
"sample_xy": "XY",
|
||||
"sample_venn": "Venn",
|
||||
"sample_ishikawa": "Ishikawa"
|
||||
"sample_ishikawa": "Ishikawa",
|
||||
"sample_treeview": "TreeView",
|
||||
"sample_wardley": "Wardley Map"
|
||||
},
|
||||
"mind-map": {
|
||||
"addChild": "Add child",
|
||||
"addParent": "Add parent",
|
||||
"addSibling": "Add sibling",
|
||||
"removeNode": "Remove node",
|
||||
"focus": "Focus Mode",
|
||||
"cancelFocus": "Cancel Focus Mode",
|
||||
"moveUp": "Move up",
|
||||
"moveDown": "Move down",
|
||||
"link": "Link",
|
||||
"linkBidirectional": "Bidirectional Link",
|
||||
"clickTips": "Please click the target node",
|
||||
"summary": "Summary"
|
||||
},
|
||||
"llm": {
|
||||
"settings_title": "AI / LLM",
|
||||
"settings_description": "Configure AI and Large Language Model integrations.",
|
||||
"feature_not_enabled": "Enable the LLM experimental feature in Settings → Advanced → Experimental features to use AI integrations.",
|
||||
"add_provider": "Add Provider",
|
||||
"add_provider_title": "Add AI Provider",
|
||||
"configured_providers": "Configured Providers",
|
||||
"no_providers_configured": "No providers configured yet.",
|
||||
"provider_name": "Name",
|
||||
"provider_type": "Provider",
|
||||
"actions": "Actions",
|
||||
"delete_provider": "Delete",
|
||||
"delete_provider_confirmation": "Are you sure you want to delete the provider \"{{name}}\"?",
|
||||
"api_key": "API Key",
|
||||
"api_key_placeholder": "Enter your API key",
|
||||
"cancel": "Cancel",
|
||||
"mcp_title": "MCP (Model Context Protocol)",
|
||||
"mcp_enabled": "MCP server",
|
||||
"mcp_enabled_description": "Expose a Model Context Protocol (MCP) endpoint so that AI coding assistants (e.g. Claude Code, GitHub Copilot) can read and modify your notes. The endpoint is only accessible from localhost.",
|
||||
"mcp_endpoint_title": "Endpoint URL",
|
||||
"mcp_endpoint_description": "Add this URL to your AI assistant's MCP configuration",
|
||||
"tools": {
|
||||
"search_notes": "Search notes",
|
||||
"get_note": "Get note",
|
||||
"get_note_content": "Get note content",
|
||||
"update_note_content": "Update note content",
|
||||
"append_to_note": "Append to note",
|
||||
"create_note": "Create note",
|
||||
"get_attributes": "Get attributes",
|
||||
"get_attribute": "Get attribute",
|
||||
"set_attribute": "Set attribute",
|
||||
"delete_attribute": "Delete attribute",
|
||||
"get_child_notes": "Get child notes",
|
||||
"get_subtree": "Get subtree",
|
||||
"load_skill": "Load skill",
|
||||
"web_search": "Web search",
|
||||
"note_in_parent": "<Note/> in <Parent/>",
|
||||
"get_attachment": "Get attachment",
|
||||
"get_attachment_content": "Read attachment content",
|
||||
"rename_note": "Rename note",
|
||||
"delete_note": "Delete note",
|
||||
"move_note": "Move note",
|
||||
"clone_note": "Clone note"
|
||||
}
|
||||
},
|
||||
"common": {
|
||||
"save": "Save",
|
||||
"cancel": "Cancel"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "Acerca de Trilium Notes",
|
||||
"homepage": "Página principal:",
|
||||
"app_version": "Versión de la aplicación:",
|
||||
"db_version": "Versión de base de datos:",
|
||||
"sync_version": "Versión de sincronización:",
|
||||
"build_date": "Fecha de creación:",
|
||||
"build_revision": "Revisión de compilación:",
|
||||
"data_directory": "Directorio de datos:"
|
||||
},
|
||||
"toast": {
|
||||
@@ -88,17 +81,24 @@
|
||||
"also_delete_note": "También eliminar la nota"
|
||||
},
|
||||
"delete_notes": {
|
||||
"delete_notes_preview": "Eliminar vista previa de notas",
|
||||
"close": "Cerrar",
|
||||
"delete_all_clones_description": "Eliminar también todos los clones (se puede deshacer en cambios recientes)",
|
||||
"erase_notes_description": "La eliminación normal (suave) solo marca las notas como eliminadas y se pueden recuperar (en el cuadro de diálogo de cambios recientes) dentro de un periodo de tiempo. Al marcar esta opción se borrarán las notas inmediatamente y no será posible recuperarlas.",
|
||||
"erase_notes_description": "Borrar notas inmediatamente en lugar de la eliminación con respaldo. Esto no se puede deshacer y forzará la recarga de la aplicación.",
|
||||
"erase_notes_warning": "Eliminar notas permanentemente (no se puede deshacer), incluidos todos los clones. Esto forzará la recarga de la aplicación.",
|
||||
"notes_to_be_deleted": "Las siguientes notas serán eliminadas ({{notesCount}})",
|
||||
"notes_to_be_deleted": "Notas a ser eliminadas ({{notesCount}})",
|
||||
"no_note_to_delete": "No se eliminará ninguna nota (solo clones).",
|
||||
"broken_relations_to_be_deleted": "Las siguientes relaciones se romperán y serán eliminadas ({{ relationCount}})",
|
||||
"broken_relations_to_be_deleted": "Relaciones rotas ({{ relationCount}})",
|
||||
"cancel": "Cancelar",
|
||||
"ok": "Aceptar",
|
||||
"deleted_relation_text": "Nota {{- note}} (para ser eliminada) está referenciado por la relación {{- relation}} que se origina en {{- source}}."
|
||||
"title": "Eliminar notas",
|
||||
"clones_label": "Clones",
|
||||
"delete_clones_description_one": "También eliminar otro clon. Puede deshacerse en los cambios recientes.",
|
||||
"delete_clones_description_many": "También eliminar otros {{count}} clones. Puede deshacerse en los cambios recientes.",
|
||||
"delete_clones_description_other": "También eliminar otros {{count}} clones. Puede deshacerse en los cambios recientes.",
|
||||
"erase_notes_label": "Borrar permanentemente",
|
||||
"table_note_with_relation": "Nota con relación",
|
||||
"table_relation": "Relación",
|
||||
"table_points_to": "Apunta a (eliminado)",
|
||||
"delete": "Eliminar"
|
||||
},
|
||||
"export": {
|
||||
"export_note_title": "Exportar nota",
|
||||
@@ -209,7 +209,8 @@
|
||||
"box_size_small": "pequeño (~ 10 líneas)",
|
||||
"box_size_medium": "medio (~ 30 líneas)",
|
||||
"box_size_full": "completo (el cuadro muestra el texto completo)",
|
||||
"button_include": "Incluir nota"
|
||||
"button_include": "Incluir nota",
|
||||
"box_size_expandable": "expandible (colapsado por defecto)"
|
||||
},
|
||||
"info": {
|
||||
"modalTitle": "Mensaje informativo",
|
||||
@@ -270,33 +271,6 @@
|
||||
"undelete_link": "recuperar",
|
||||
"confirm_undelete": "¿Quiere recuperar esta nota y sus subnotas?"
|
||||
},
|
||||
"revisions": {
|
||||
"note_revisions": "Revisiones de nota",
|
||||
"delete_all_revisions": "Eliminar todas las revisiones de esta nota",
|
||||
"delete_all_button": "Eliminar todas las revisiones",
|
||||
"help_title": "Ayuda sobre revisiones de notas",
|
||||
"confirm_delete_all": "¿Quiere eliminar todas las revisiones de esta nota?",
|
||||
"no_revisions": "Aún no hay revisiones para esta nota...",
|
||||
"restore_button": "Restaurar",
|
||||
"confirm_restore": "¿Quiere restaurar esta revisión? Esto sobrescribirá el título actual y el contenido de la nota con esta revisión.",
|
||||
"delete_button": "Eliminar",
|
||||
"confirm_delete": "¿Quieres eliminar esta revisión?",
|
||||
"revisions_deleted": "Se han eliminado las revisiones de nota.",
|
||||
"revision_restored": "Se ha restaurado la revisión de nota.",
|
||||
"revision_deleted": "Se ha eliminado la revisión de la nota.",
|
||||
"snapshot_interval": "Intervalo de respaldo de revisiones de nota: {{seconds}}s.",
|
||||
"maximum_revisions": "Máximo de revisiones para la nota actual: {{number}}.",
|
||||
"settings": "Ajustes para revisiones de nota",
|
||||
"download_button": "Descargar",
|
||||
"mime": "MIME: ",
|
||||
"file_size": "Tamaño del archivo:",
|
||||
"preview_not_available": "La vista previa no está disponible para este tipo de notas.",
|
||||
"diff_off": "Mostrar contenido",
|
||||
"diff_on": "Mostrar diferencia",
|
||||
"diff_off_hint": "Haga clic para mostrar el contenido de la nota",
|
||||
"diff_not_available": "Diferencias no disponibles.",
|
||||
"diff_on_hint": "Haga clic para ver las diferencias"
|
||||
},
|
||||
"sort_child_notes": {
|
||||
"sort_children_by": "Ordenar hijos por...",
|
||||
"sorting_criteria": "Criterios de ordenamiento",
|
||||
@@ -368,7 +342,7 @@
|
||||
"calendar_root": "marca la nota que debe usarse como raíz para las notas del día. Sólo uno debe estar marcado como tal.",
|
||||
"archived": "las notas con esta etiqueta no serán visibles de forma predeterminada en los resultados de búsqueda (tampoco en los cuadros de diálogo Saltar a, Agregar vínculo, etc.).",
|
||||
"exclude_from_export": "las notas (con su subárbol) no se incluirán en ninguna exportación de notas",
|
||||
"run": "define en qué eventos debe ejecutarse el script. Los valores posibles son:\n<ul>\n<li>frontendStartup - cuando Trilium frontend se inicia (o se actualiza), pero no en móvil.</li>\n<li>mobileStartup - cuando Trilium frontend se inicia (o se actualiza), en móvil.</li>\n<li>backendStartup - cuando Trilium backend se inicia</li>\n<li>hourly - se ejecuta una vez por hora. Se puede usar la etiqueta adicional <code>runAtHour</code> para especificar a qué hora.</li>\n<li>daily - se ejecuta una vez al día</li>\n</ul>",
|
||||
"run": "define en qué eventos debe ejecutarse el script. Los valores posibles son:\n<ul>\n<li>frontendStartup - cuando el frontend de Trilium se inicia (o se actualiza), pero no en móvil.</li>\n<li>mobileStartup - cuando el frontend de Trilium se inicia (o se actualiza), en móvil.</li>\n<li>backendStartup - cuando el backend de Trilium se inicia</li>\n<li>hourly - se ejecuta una vez por hora. Se puede usar la etiqueta adicional <code>runAtHour</code> para especificar a qué hora.</li>\n<li>daily - se ejecuta una vez al día</li>\n</ul>",
|
||||
"run_on_instance": "Definir en qué instancia de Trilium se debe ejecutar esto. Predeterminado para todas las instancias.",
|
||||
"run_at_hour": "¿A qué hora debería funcionar? Debe usarse junto con <code>#run=hourly</code>. Se puede definir varias veces para varias ejecuciones durante el día.",
|
||||
"disable_inclusion": "los scripts con esta etiqueta no se incluirán en la ejecución del script principal.",
|
||||
@@ -446,7 +420,10 @@
|
||||
"and_more": "... y {{count}} más.",
|
||||
"print_landscape": "Al exportar a PDF, cambia la orientación de la página a paisaje en lugar de retrato.",
|
||||
"print_page_size": "Al exportar a PDF, cambia el tamaño de la página. Valores soportados: <code>A0</code>, <code>A1</code>, <code>A2</code>, <code>A3</code>, <code>A4</code>, <code>A5</code>, <code>A6</code>, <code>Legal</code>, <code>Letter</code>, <code>Tabloid</code>, <code>Ledger</code>.",
|
||||
"color_type": "Color"
|
||||
"color_type": "Color",
|
||||
"textarea": "Texto multilínea",
|
||||
"print_scale": "Al exportar a PDF, cambia la escala del contenido renderizado. Los valores varían de 0.1 (10%) a 2 (200%), por defecto es 1 (100%).",
|
||||
"print_margins": "Al exportar a PDF, establece márgenes de página. Use <code>default</code>, <code>none</code>, <code>minimum</code>, o valores personalizados como <code>top,right,bottom,left</code> en milímetros."
|
||||
},
|
||||
"attribute_editor": {
|
||||
"help_text_body1": "Para agregar una etiqueta, simplemente escriba, por ejemplo. <code>#rock</code> o si desea agregar también valor, p.e. <code>#año = 2020</code>",
|
||||
@@ -708,7 +685,12 @@
|
||||
"export_as_image": "Exportar como imagen",
|
||||
"export_as_image_png": "PNG (ráster)",
|
||||
"export_as_image_svg": "SVG (vectorial)",
|
||||
"note_map": "Mapa de la nota"
|
||||
"note_map": "Mapa de la nota",
|
||||
"view_ocr_text": "Ver texto OCR",
|
||||
"word_wrap_auto": "Automático",
|
||||
"word_wrap_auto_description": "Seguir el ajuste global",
|
||||
"word_wrap_on": "Encendido",
|
||||
"word_wrap_off": "Apagado"
|
||||
},
|
||||
"onclick_button": {
|
||||
"no_click_handler": "El widget de botón '{{componentId}}' no tiene un controlador de clics definido"
|
||||
@@ -806,7 +788,13 @@
|
||||
"expand_first_level": "Expandir hijos inmediatos",
|
||||
"expand_nth_level": "Expandir {{depth}} niveles",
|
||||
"expand_all_levels": "Expandir todos los niveles",
|
||||
"hide_child_notes": "Ocultar subnotas en el árbol"
|
||||
"hide_child_notes": "Ocultar subnotas en el árbol",
|
||||
"open_all_in_tabs": "Abrir todo",
|
||||
"open_all_in_tabs_tooltip": "Abrir todos los resultados en nuevas pestañas",
|
||||
"open_all_confirm": "Esto abrirá {{count}} notas en nuevas pestañas. ¿Continuar?",
|
||||
"open_all_too_one": " ",
|
||||
"open_all_too_many": " ",
|
||||
"open_all_too_other": " "
|
||||
},
|
||||
"edited_notes": {
|
||||
"no_edited_notes_found": "Aún no hay notas editadas en este día...",
|
||||
@@ -860,7 +848,8 @@
|
||||
"collapse": "Contraer al tamaño normal",
|
||||
"title": "Mapa de notas",
|
||||
"fix-nodes": "Fijar nodos",
|
||||
"link-distance": "Distancia de enlace"
|
||||
"link-distance": "Distancia de enlace",
|
||||
"too-many-notes": "Este subárbol contiene {{count}} notas, lo que excede el límite de {{max}} que se puede mostrar en el mapa de notas."
|
||||
},
|
||||
"note_paths": {
|
||||
"title": "Rutas de nota",
|
||||
@@ -1065,7 +1054,8 @@
|
||||
"note_already_in_diagram": "La nota \"{{title}}\" ya está en el diagrama.",
|
||||
"enter_title_of_new_note": "Ingrese el título de la nueva nota",
|
||||
"default_new_note_title": "nueva nota",
|
||||
"click_on_canvas_to_place_new_note": "Haga clic en el lienzo para colocar una nueva nota"
|
||||
"click_on_canvas_to_place_new_note": "Haga clic en el lienzo para colocar una nueva nota",
|
||||
"rename_relation": "Renombrar relación"
|
||||
},
|
||||
"backend_log": {
|
||||
"refresh": "Refrescar"
|
||||
@@ -1074,15 +1064,17 @@
|
||||
"title": "Comprobación de coherencia",
|
||||
"find_and_fix_button": "Buscar y solucionar problemas de coherencia",
|
||||
"finding_and_fixing_message": "Buscando y solucionando problemas de coherencia...",
|
||||
"issues_fixed_message": "Los problemas de coherencia han sido solucionados."
|
||||
"issues_fixed_message": "Los problemas de coherencia han sido solucionados.",
|
||||
"find_and_fix_label": "Buscar y solucionar problemas de coherencia",
|
||||
"find_and_fix_description": "Escanear y reparar automáticamente cualquier problema de consistencia de datos en la base de datos."
|
||||
},
|
||||
"database_anonymization": {
|
||||
"title": "Anonimización de bases de datos",
|
||||
"full_anonymization": "Anonimización total",
|
||||
"full_anonymization_description": "Esta acción creará una nueva copia de la base de datos y la anonimizará (eliminará todo el contenido de las notas y dejará solo la estructura y algunos metadatos no confidenciales) para compartirla en línea con fines de depuración sin temor a filtrar sus datos personales.",
|
||||
"full_anonymization_description": "Crea una copia de la base de datos con todo el contenido eliminado, dejando solo la estructura y algunos metadatos no confidenciales. Seguro para compartirla en línea con fines de depuración de problemas.",
|
||||
"save_fully_anonymized_database": "Guarde la base de datos completamente anónima",
|
||||
"light_anonymization": "Anonimización ligera",
|
||||
"light_anonymization_description": "Esta acción creará una nueva copia de la base de datos y realizará una ligera anonimización en ella; específicamente, solo se eliminará el contenido de todas las notas, pero los títulos y atributos permanecerán. Además, se mantendrán las notas de script JS frontend/backend personalizadas y los widgets personalizados. Esto proporciona más contexto para depurar los problemas.",
|
||||
"light_anonymization_description": "Crea una copia con el contenido de las notas eliminado, excepto los títulos, atributos y scripts/widgets personalizados que permanecerán. Esto proporciona más contexto para el depurado.",
|
||||
"choose_anonymization": "Puede decidir usted mismo si desea proporcionar una base de datos total o ligeramente anónima. Incluso una base de datos totalmente anónima es muy útil; sin embargo, en algunos casos, una base de datos ligeramente anónima puede acelerar el proceso de identificación y corrección de errores.",
|
||||
"save_lightly_anonymized_database": "Guarde una base de datos ligeramente anónima",
|
||||
"existing_anonymized_databases": "Bases de datos anónimas existentes",
|
||||
@@ -1091,15 +1083,17 @@
|
||||
"error_creating_anonymized_database": "No se pudo crear una base de datos anónima; consulte los registros de backend para obtener más detalles",
|
||||
"successfully_created_fully_anonymized_database": "Se creó una base de datos completamente anónima en {{anonymizedFilePath}}",
|
||||
"successfully_created_lightly_anonymized_database": "Se creó una base de datos ligeramente anónima en {{anonymizedFilePath}}",
|
||||
"no_anonymized_database_yet": "Aún no hay base de datos anónima."
|
||||
"no_anonymized_database_yet": "Aún no hay base de datos anónima.",
|
||||
"description": "Crear una copia anónima de su base de datos para compartir con los desarrolladores cuando depuren problemas, sin exponer datos personales."
|
||||
},
|
||||
"database_integrity_check": {
|
||||
"title": "Verificación de integridad de la base de datos",
|
||||
"description": "Esto verificará que la base de datos no esté dañada en el nivel SQLite. Puede que tarde algún tiempo, dependiendo del tamaño de la base de datos.",
|
||||
"check_button": "Verificar la integridad de la base de datos",
|
||||
"checking_integrity": "Comprobando la integridad de la base de datos...",
|
||||
"integrity_check_succeeded": "La verificación de integridad fue exitosa; no se encontraron problemas.",
|
||||
"integrity_check_failed": "La verificación de integridad falló: {{results}}"
|
||||
"integrity_check_failed": "La verificación de integridad falló: {{results}}",
|
||||
"check_integrity_label": "Verificar la integridad de la base de datos",
|
||||
"check_integrity_description": "Verifcar que la base de datos no está dañada en el nivel SQLite."
|
||||
},
|
||||
"sync": {
|
||||
"title": "Sincronizar",
|
||||
@@ -1109,7 +1103,10 @@
|
||||
"filling_entity_changes": "Rellenar filas de cambios de entidad...",
|
||||
"sync_rows_filled_successfully": "Sincronizar filas completadas correctamente",
|
||||
"finished-successfully": "La sincronización finalizó exitosamente.",
|
||||
"failed": "La sincronización falló: {{message}}"
|
||||
"failed": "La sincronización falló: {{message}}",
|
||||
"force_full_sync_label": "Forzar sincronización completa",
|
||||
"force_full_sync_description": "Activa una sincronización completa con el servidor de sincronización, resubiendo todos los cambios.",
|
||||
"fill_entity_changes_label": "Llenar cambios de entidad"
|
||||
},
|
||||
"vacuum_database": {
|
||||
"title": "Limpiar base de datos",
|
||||
@@ -1127,10 +1124,7 @@
|
||||
"note_tree_font": "Fuente del árbol de notas",
|
||||
"note_detail_font": "Fuente de detalle de nota",
|
||||
"monospace_font": "Fuente Monospace (código)",
|
||||
"note_tree_and_detail_font_sizing": "Tenga en cuenta que el tamaño de fuente del árbol y de los detalles es relativo a la configuración del tamaño de fuente principal.",
|
||||
"not_all_fonts_available": "Es posible que no todas las fuentes enumeradas estén disponibles en su sistema.",
|
||||
"apply_font_changes": "Para aplicar cambios de fuente, haga clic en",
|
||||
"reload_frontend": "recargar la interfaz",
|
||||
"not_all_fonts_available": "Es posible que no todas las fuentes enumeradas estén disponibles en su sistema",
|
||||
"generic-fonts": "Fuentes genéricas",
|
||||
"sans-serif-system-fonts": "Fuentes Sans-serif del sistema",
|
||||
"serif-system-fonts": "Fuentes Serif del sistema",
|
||||
@@ -1203,18 +1197,20 @@
|
||||
},
|
||||
"images": {
|
||||
"images_section_title": "Imágenes",
|
||||
"download_images_automatically": "Descargar imágenes automáticamente para usarlas sin conexión.",
|
||||
"download_images_automatically": "Descargar imágenes automáticamente",
|
||||
"download_images_description": "El HTML pegado puede contener referencias a imágenes en línea; Trilium encontrará esas referencias y descargará las imágenes para que estén disponibles sin conexión.",
|
||||
"enable_image_compression": "Habilitar la compresión de imágenes",
|
||||
"max_image_dimensions": "Ancho/alto máximo de una imagen en píxeles (la imagen cambiará de tamaño si excede esta configuración).",
|
||||
"max_image_dimensions": "Dimensiones máximas de imagen",
|
||||
"max_image_dimensions_unit": "píxeles",
|
||||
"jpeg_quality_description": "Calidad JPEG (10 - peor calidad, 100 - mejor calidad, se recomienda 50 - 85)"
|
||||
"jpeg_quality_description": "Se recomienda un rango 50-85. Valores más pequeños reducen el tamaño del archivo, valores más altos preservan los detalles.",
|
||||
"enable_image_compression_description": "Comprimir y ajustar el tamaño de las imágenes cuando son subidas o pegadas.",
|
||||
"max_image_dimensions_description": "Las imágenes que excedan el límite de tamaño serán ajustadas automáticamente.",
|
||||
"jpeg_quality": "Calidad JPEG"
|
||||
},
|
||||
"attachment_erasure_timeout": {
|
||||
"attachment_erasure_timeout": "Tiempo de espera para borrar archivos adjuntos",
|
||||
"attachment_auto_deletion_description": "Los archivos adjuntos se eliminan (y borran) automáticamente si ya no se hace referencia a ellos en su nota después de un tiempo de espera definido.",
|
||||
"erase_attachments_after": "Borrar archivos adjuntos después de:",
|
||||
"manual_erasing_description": "También puede activar el borrado manualmente (sin considerar el tiempo de espera definido anteriormente):",
|
||||
"manual_erasing_description": "Activar el borrado manualmente, ignorando el tiempo de espera definido anteriormente.",
|
||||
"erase_unused_attachments_now": "Borrar ahora los archivos adjuntos no utilizados en la nota",
|
||||
"unused_attachments_erased": "Los archivos adjuntos no utilizados se han eliminado."
|
||||
},
|
||||
@@ -1224,9 +1220,8 @@
|
||||
},
|
||||
"note_erasure_timeout": {
|
||||
"note_erasure_timeout_title": "Tiempo de espera de borrado de notas",
|
||||
"note_erasure_description": "Las notas eliminadas (y los atributos, las revisiones ...) en principio solo están marcadas como eliminadas y es posible recuperarlas del diálogo de Notas recientes. Después de un período de tiempo, las notas eliminadas son \" borradas\", lo que significa que su contenido ya no es recuperable. Esta configuración le permite configurar la longitud del período entre eliminar y borrar la nota.",
|
||||
"erase_notes_after": "Borrar notas después de:",
|
||||
"manual_erasing_description": "También puede activar el borrado manualmente (sin considerar el tiempo de espera definido anteriormente):",
|
||||
"manual_erasing_description": "Activar el borrado manualmente, ignorando el tiempo de espera definido anteriormente.",
|
||||
"erase_deleted_notes_now": "Borrar notas eliminadas ahora",
|
||||
"deleted_notes_erased": "Las notas eliminadas han sido borradas."
|
||||
},
|
||||
@@ -1245,7 +1240,7 @@
|
||||
},
|
||||
"search_engine": {
|
||||
"title": "Motor de búsqueda",
|
||||
"custom_search_engine_info": "El motor de búsqueda personalizado requiere que se establezcan un nombre y una URL. Si alguno de estos no está configurado, DuckDuckGo se utilizará como motor de búsqueda predeterminado.",
|
||||
"custom_search_engine_info": "Utilizado al buscar la web para el texto seleccionado. Si no está configurado, DuckDuckGo será utilizado.",
|
||||
"predefined_templates_label": "Plantillas de motor de búsqueda predefinidas",
|
||||
"bing": "Bing",
|
||||
"baidu": "Baidu",
|
||||
@@ -1309,7 +1304,6 @@
|
||||
"first-week-contains-first-thursday": "Primer semana que contiene al primer jueves del año",
|
||||
"first-week-has-minimum-days": "Primer semana que contiene un mínimo de días",
|
||||
"min-days-in-first-week": "Días mínimos en la primer semana",
|
||||
"first-week-info": "Primer semana que contiene al primer jueves del año está basado en el estándar<a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a>.",
|
||||
"first-week-warning": "Cambiar las opciones de primer semana puede causar duplicados con las Notas Semanales existentes y las Notas Semanales existentes no serán actualizadas respectivamente.",
|
||||
"formatting-locale": "Fecha y formato de número",
|
||||
"tuesday": "Martes",
|
||||
@@ -1332,7 +1326,8 @@
|
||||
"date-and-time": "Fecha y hora",
|
||||
"path": "Ruta",
|
||||
"database_backed_up_to": "Se ha realizado una copia de seguridad de la base de datos en {{backupFilePath}}",
|
||||
"no_backup_yet": "no hay copia de seguridad todavía"
|
||||
"no_backup_yet": "no hay copia de seguridad todavía",
|
||||
"download": "Descargar"
|
||||
},
|
||||
"etapi": {
|
||||
"title": "ETAPI",
|
||||
@@ -1432,20 +1427,13 @@
|
||||
"description": "Estas opciones se aplican sólo para compilaciones de escritorio; los navegadores utilizarán su corrector ortográfico nativo.",
|
||||
"enable": "Habilitar corrector ortográfico",
|
||||
"language_code_label": "Código(s) de idioma",
|
||||
"language_code_placeholder": "por ejemplo \"en-US\", \"de-AT\"",
|
||||
"multiple_languages_info": "Múltiples idiomas se pueden separar por coma, por ejemplo \"en-US, de-DE, cs\". ",
|
||||
"available_language_codes_label": "Códigos de idioma disponibles:",
|
||||
"restart-required": "Los cambios en las opciones de corrección ortográfica entrarán en vigor después del reinicio de la aplicación."
|
||||
},
|
||||
"sync_2": {
|
||||
"config_title": "Configuración de sincronización",
|
||||
"server_address": "Dirección de la instancia del servidor",
|
||||
"timeout": "Tiempo de espera de sincronización (milisegundos)",
|
||||
"timeout_unit": "milisegundos",
|
||||
"proxy_label": "Sincronizar servidor proxy (opcional)",
|
||||
"note": "Nota",
|
||||
"note_description": "Si deja la configuración del proxy en blanco, se utilizará el proxy del sistema (se aplica únicamente a la compilación de escritorio/electron).",
|
||||
"special_value_description": "Otro valor especial es <code>noproxy</code> que obliga a ignorar incluso al proxy del sistema y respeta <code>NODE_TLS_REJECT_UNAUTHORIZED</code>.",
|
||||
"save": "Guardar",
|
||||
"help": "Ayuda",
|
||||
"test_title": "Prueba de sincronización",
|
||||
@@ -1627,7 +1615,7 @@
|
||||
"note_detail": {
|
||||
"could_not_find_typewidget": "No se pudo encontrar typeWidget para el tipo '{{type}}'",
|
||||
"printing": "Impresión en curso...",
|
||||
"printing_pdf": "Exportando a PDF en curso..",
|
||||
"printing_pdf": "Preparando vista preliminar de impresión...",
|
||||
"print_report_collection_content_one": "{{count}} nota en la colección no se puede imprimir porque no son compatibles o está protegida.",
|
||||
"print_report_collection_content_many": "{{count}} notas en la colección no se pueden imprimir porque no son compatibles o están protegidas.",
|
||||
"print_report_collection_content_other": "{{count}} notas en la colección no se pueden imprimir porque no son compatibles o están protegidas.",
|
||||
@@ -1772,7 +1760,7 @@
|
||||
"title": "Fijo",
|
||||
"description": "las herramientas de edición aparecen en la pestaña de la cinta \"Formato\")."
|
||||
},
|
||||
"multiline-toolbar": "Mostrar la barra de herramientas en múltiples líneas si no cabe."
|
||||
"multiline-toolbar": "Mostrar la barra de herramientas en múltiples líneas si no cabe"
|
||||
}
|
||||
},
|
||||
"electron_context_menu": {
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "درباره Trilium Notes",
|
||||
"homepage": "صفحه اصلی:",
|
||||
"app_version": "نسخه برنامه:",
|
||||
"db_version": "نسخه پایگاه داده:",
|
||||
"sync_version": "نسخه منطبق:",
|
||||
"build_date": "تاریخ ساخت:",
|
||||
"build_revision": "نسخه بازنگری شده:",
|
||||
"data_directory": "دایرکتوری داده:"
|
||||
},
|
||||
"toast": {
|
||||
|
||||
@@ -1,13 +1,6 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "Lisätietoja Trilium Notes:ista",
|
||||
"homepage": "Kotisivu:",
|
||||
"app_version": "Sovelluksen versio:",
|
||||
"db_version": "Tietokannan versio:",
|
||||
"build_date": "Koontipäivämäärä:",
|
||||
"data_directory": "Datakansio:",
|
||||
"sync_version": "Synkronoinnin versio:",
|
||||
"build_revision": "Sovelluksen versio:"
|
||||
"data_directory": "Datakansio:"
|
||||
},
|
||||
"toast": {
|
||||
"critical-error": {
|
||||
@@ -62,12 +55,10 @@
|
||||
"also_delete_note": "Poista myös muistio"
|
||||
},
|
||||
"delete_notes": {
|
||||
"delete_notes_preview": "Poista muistion esikatselu",
|
||||
"close": "Sulje",
|
||||
"notes_to_be_deleted": "Seuraavat muistiot tullaan poistamaan ({{notesCount}})",
|
||||
"no_note_to_delete": "Muistioita ei poisteta (vain kopiot).",
|
||||
"cancel": "Peruuta",
|
||||
"ok": "OK"
|
||||
"cancel": "Peruuta"
|
||||
},
|
||||
"export": {
|
||||
"export_note_title": "Vie muistio",
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "À propos de Trilium Notes",
|
||||
"homepage": "Page d'accueil :",
|
||||
"app_version": "Version de l'application :",
|
||||
"db_version": "Version de la base de données :",
|
||||
"sync_version": "Version de la synchronisation :",
|
||||
"build_date": "Date du build :",
|
||||
"build_revision": "Version de build :",
|
||||
"data_directory": "Répertoire des données :"
|
||||
},
|
||||
"toast": {
|
||||
@@ -28,7 +21,10 @@
|
||||
},
|
||||
"widget-render-error": {
|
||||
"title": "Rendu impossible d'un widget React custom"
|
||||
}
|
||||
},
|
||||
"widget-missing-parent": "Le widget personnalisé ne comprend pas de propriété '{{property}}' définie\n\nSi ce script est prévu pour être exécuté sans fonctionnalité UI, utilisez '#run=frontendStartup' plutôt.",
|
||||
"open-script-note": "Ouvrir une note script",
|
||||
"scripting-error": "Échec du script personnalisé : {{title}}"
|
||||
},
|
||||
"add_link": {
|
||||
"add_link": "Ajouter un lien",
|
||||
@@ -46,7 +42,7 @@
|
||||
"prefix": "Préfixe : ",
|
||||
"save": "Sauvegarder",
|
||||
"branch_prefix_saved": "Le préfixe de la branche a été enregistré.",
|
||||
"edit_branch_prefix_multiple": "Modifier le préfixe de branche pour {{count}} branches",
|
||||
"edit_branch_prefix_multiple": "Modifier le préfixe pour {{count}} branches",
|
||||
"branch_prefix_saved_multiple": "Le préfixe de la branche a été sauvegardé pour {{count}} branches.",
|
||||
"affected_branches": "Branches impactées ({{count}}):"
|
||||
},
|
||||
@@ -85,7 +81,6 @@
|
||||
"also_delete_note": "Supprimer également la note"
|
||||
},
|
||||
"delete_notes": {
|
||||
"delete_notes_preview": "Supprimer la note",
|
||||
"close": "Fermer",
|
||||
"delete_all_clones_description": "Supprimer aussi les clones (peut être annulé dans des modifications récentes)",
|
||||
"erase_notes_description": "La suppression normale (douce) marque uniquement les notes comme supprimées et elles peuvent être restaurées (dans la boîte de dialogue des Modifications récentes) dans un délai donné. Cocher cette option effacera les notes immédiatement et il ne sera pas possible de les restaurer.",
|
||||
@@ -94,8 +89,9 @@
|
||||
"no_note_to_delete": "Aucune note ne sera supprimée (uniquement les clones).",
|
||||
"broken_relations_to_be_deleted": "Les relations suivantes seront rompues et supprimées ({{ relationCount}})",
|
||||
"cancel": "Annuler",
|
||||
"ok": "OK",
|
||||
"deleted_relation_text": "Note {{- note}} (à supprimer) est référencée dans la relation {{- relation}} provenant de {{- source}}."
|
||||
"title": "Notes supprimées",
|
||||
"clones_label": "Clone",
|
||||
"erase_notes_label": "Supprimer définitivement"
|
||||
},
|
||||
"export": {
|
||||
"export_note_title": "Exporter la note",
|
||||
@@ -114,7 +110,7 @@
|
||||
"export_in_progress": "Exportation en cours : {{progressCount}}",
|
||||
"export_finished_successfully": "L'exportation s'est terminée avec succès.",
|
||||
"format_pdf": "PDF - pour l'impression ou le partage de documents.",
|
||||
"share-format": "HTML pour la publication Web - utilise le même thème que celui utilisé pour les notes partagées, mais peut être publié sous forme de site Web statique."
|
||||
"share-format": "HTML pour la publication Web : utilise le même thème que celui utilisé pour les notes partagées, mais peut être publié sous forme de site Web statique."
|
||||
},
|
||||
"help": {
|
||||
"noteNavigation": "Navigation dans les notes",
|
||||
@@ -267,33 +263,6 @@
|
||||
"undelete_link": "annuler la suppression",
|
||||
"confirm_undelete": "Voulez-vous restaurer cette note et ses sous-notes ?"
|
||||
},
|
||||
"revisions": {
|
||||
"note_revisions": "Versions de la note",
|
||||
"delete_all_revisions": "Supprimer toutes les versions de cette note",
|
||||
"delete_all_button": "Supprimer toutes les versions",
|
||||
"help_title": "Aide sur les versions de notes",
|
||||
"confirm_delete_all": "Voulez-vous supprimer toutes les versions de cette note ?",
|
||||
"no_revisions": "Aucune version pour cette note pour l'instant...",
|
||||
"confirm_restore": "Voulez-vous restaurer cette version ? Le titre et le contenu actuels de la note seront écrasés par cette version.",
|
||||
"confirm_delete": "Voulez-vous supprimer cette version ?",
|
||||
"revisions_deleted": "Les versions de notes ont été supprimées.",
|
||||
"revision_restored": "La version de la note a été restaurée.",
|
||||
"revision_deleted": "La version de la note a été supprimée.",
|
||||
"snapshot_interval": "Délai d'enregistrement automatique des versions de notes : {{seconds}}s.",
|
||||
"maximum_revisions": "Nombre maximal de versions : {{number}}.",
|
||||
"settings": "Paramètres des versions de notes",
|
||||
"download_button": "Télécharger",
|
||||
"mime": "MIME : ",
|
||||
"file_size": "Taille du fichier :",
|
||||
"preview_not_available": "L'aperçu n'est pas disponible pour ce type de note.",
|
||||
"restore_button": "Restaurer",
|
||||
"delete_button": "Supprimer",
|
||||
"diff_on": "Afficher les différences",
|
||||
"diff_off": "Afficher le contenu",
|
||||
"diff_on_hint": "Cliquer pour afficher les différences avec la note d'origine",
|
||||
"diff_off_hint": "Cliquer pour afficher le contenu de la note",
|
||||
"diff_not_available": "La comparaison n'est pas disponible."
|
||||
},
|
||||
"sort_child_notes": {
|
||||
"sort_children_by": "Trier les enfants par...",
|
||||
"sorting_criteria": "Critères de tri",
|
||||
@@ -443,7 +412,8 @@
|
||||
"and_more": "... et {{count}} plus.",
|
||||
"print_landscape": "Lors de l'exportation en PDF, change l'orientation de la page en paysage au lieu de portrait.",
|
||||
"print_page_size": "Lors de l'exportation en PDF, change la taille de la page. Valeurs supportées : <code>A0</code>, <code>A1</code>, <code>A2</code>, <code>A3</code>, <code>A4</code>, <code>A5</code>, <code>A6</code>, <code>Legal</code>, <code>Letter</code>, <code>Tabloid</code>, <code>Ledger</code>.",
|
||||
"color_type": "Couleur"
|
||||
"color_type": "Couleur",
|
||||
"textarea": "Texte multiligne"
|
||||
},
|
||||
"attribute_editor": {
|
||||
"help_text_body1": "Pour ajouter un label, tapez simplement par ex. <code>#rock</code>, ou si vous souhaitez également ajouter une valeur, tapez par ex. <code>#année = 2020</code>",
|
||||
@@ -659,7 +629,8 @@
|
||||
"show-cheatsheet": "Afficher l'aide rapide",
|
||||
"toggle-zen-mode": "Zen Mode",
|
||||
"new-version-available": "Nouvelle mise à jour disponible",
|
||||
"download-update": "Obtenir la version {{latestVersion}}"
|
||||
"download-update": "Obtenir la version {{latestVersion}}",
|
||||
"search_notes": "Rechercher notes"
|
||||
},
|
||||
"zen_mode": {
|
||||
"button_exit": "Sortir du Zen mode"
|
||||
@@ -703,7 +674,8 @@
|
||||
"advanced": "Avancé",
|
||||
"export_as_image": "Exporter en tant qu'image",
|
||||
"export_as_image_png": "PNG",
|
||||
"export_as_image_svg": "SVG (vectoriel)"
|
||||
"export_as_image_svg": "SVG (vectoriel)",
|
||||
"note_map": "Note Carte"
|
||||
},
|
||||
"onclick_button": {
|
||||
"no_click_handler": "Le widget bouton '{{componentId}}' n'a pas de gestionnaire de clic défini"
|
||||
@@ -741,23 +713,25 @@
|
||||
"button_title": "Exporter le diagramme au format SVG"
|
||||
},
|
||||
"relation_map_buttons": {
|
||||
"create_child_note_title": "Créer une nouvelle note enfant et l'ajouter à cette carte de relation",
|
||||
"create_child_note_title": "Créer une note enfant et l'ajouter à la carte",
|
||||
"reset_pan_zoom_title": "Réinitialiser le panoramique et le zoom aux coordonnées et à la position initiales",
|
||||
"zoom_in_title": "Zoomer",
|
||||
"zoom_out_title": "Zoom arrière"
|
||||
},
|
||||
"zpetne_odkazy": {
|
||||
"relation": "relation",
|
||||
"backlink_one": "{{count}} Lien inverse",
|
||||
"backlink_many": "",
|
||||
"backlink_other": "{{count}} Liens inverses"
|
||||
"backlink_one": "{{count}} Rétrolien",
|
||||
"backlink_many": "{{count}} Rétroliens",
|
||||
"backlink_other": "{{count}} Rétrolien"
|
||||
},
|
||||
"mobile_detail_menu": {
|
||||
"insert_child_note": "Insérer une note enfant",
|
||||
"delete_this_note": "Supprimer cette note",
|
||||
"error_cannot_get_branch_id": "Impossible d'obtenir branchId pour notePath '{{notePath}}'",
|
||||
"error_unrecognized_command": "Commande non reconnue {{command}}",
|
||||
"note_revisions": "Révision de la note"
|
||||
"note_revisions": "Révision de la note",
|
||||
"backlinks": "Rétro-liens",
|
||||
"content_language_switcher": "Langue du contenu: {{language}}"
|
||||
},
|
||||
"note_icon": {
|
||||
"change_note_icon": "Changer l'icône de note",
|
||||
@@ -766,7 +740,12 @@
|
||||
"filter": "Filtre",
|
||||
"filter-none": "Toutes les icônes",
|
||||
"filter-default": "Icônes par défaut",
|
||||
"icon_tooltip": "{{name}}\nPack d'icônes : {{iconPack}}"
|
||||
"icon_tooltip": "{{name}}\nPack d'icônes : {{iconPack}}",
|
||||
"no_results": "Aucune icône trouvée.",
|
||||
"search_placeholder_one": "{{number}} icône recherchées parmi {{count}} packs.",
|
||||
"search_placeholder_many": "{{number}} icônes recherchées parmi {{count}} packs.",
|
||||
"search_placeholder_other": "{{number}} icônes recherchées parmi {{count}} packs.",
|
||||
"search_placeholder_filtered": "Rechercher {{number}} icônes dans {{name}}"
|
||||
},
|
||||
"basic_properties": {
|
||||
"note_type": "Type de note",
|
||||
@@ -782,7 +761,7 @@
|
||||
"collapse_all_notes": "Réduire toutes les notes",
|
||||
"collapse": "Réduire",
|
||||
"expand": "Développer",
|
||||
"invalid_view_type": "Type de vue non valide '{{type}}'",
|
||||
"invalid_view_type": "Type de vue '{{type}}' non valide",
|
||||
"calendar": "Calendrier",
|
||||
"book_properties": "Propriétés de la collection",
|
||||
"table": "Tableau",
|
||||
@@ -793,7 +772,8 @@
|
||||
"expand_tooltip": "Développe les éléments enfants directs de cette collection (à un niveau). Pour plus d'options, appuyez sur la flèche à droite.",
|
||||
"expand_first_level": "Développer les enfants directs",
|
||||
"expand_nth_level": "Développer sur {{depth}} niveaux",
|
||||
"expand_all_levels": "Développer tous les niveaux"
|
||||
"expand_all_levels": "Développer tous les niveaux",
|
||||
"hide_child_notes": "Masquer les notes enfants dans l’arborescence"
|
||||
},
|
||||
"edited_notes": {
|
||||
"no_edited_notes_found": "Aucune note modifiée ce jour-là...",
|
||||
@@ -806,7 +786,7 @@
|
||||
"file_type": "Type de fichier",
|
||||
"file_size": "Taille du fichier",
|
||||
"download": "Télécharger",
|
||||
"open": "Ouvrir",
|
||||
"open": "Ouvrir dans une nouvelle fenêtre",
|
||||
"upload_new_revision": "Téléverser une nouvelle version",
|
||||
"upload_success": "Une nouvelle version de fichier a été téléversée.",
|
||||
"upload_failed": "Le téléversement d'une nouvelle version de fichier a échoué.",
|
||||
@@ -826,7 +806,8 @@
|
||||
},
|
||||
"inherited_attribute_list": {
|
||||
"title": "Attributs hérités",
|
||||
"no_inherited_attributes": "Aucun attribut hérité."
|
||||
"no_inherited_attributes": "Aucun attribut hérité.",
|
||||
"none": "aucun"
|
||||
},
|
||||
"note_info_widget": {
|
||||
"note_id": "Identifiant de la note",
|
||||
@@ -903,7 +884,8 @@
|
||||
"unknown_search_option": "Option de recherche inconnue {{searchOptionName}}",
|
||||
"search_note_saved": "La note de recherche a été enregistrée dans {{- notePathTitle}}",
|
||||
"actions_executed": "Les actions ont été exécutées.",
|
||||
"view_options": "Afficher les options:"
|
||||
"view_options": "Afficher les options:",
|
||||
"option": "option"
|
||||
},
|
||||
"similar_notes": {
|
||||
"title": "Notes similaires",
|
||||
@@ -997,7 +979,7 @@
|
||||
"no_attachments": "Cette note ne contient aucune pièce jointe."
|
||||
},
|
||||
"book": {
|
||||
"no_children_help": "Cette note de type Livre n'a aucune note enfant, donc il n'y a rien à afficher. Consultez le <a href=\"https://triliumnext.github.io/Docs/Wiki/book-note.html\">wiki</a> pour plus de détails.",
|
||||
"no_children_help": "Cette collection ne contient pas de notes enfants, il n'y a donc rien à afficher.",
|
||||
"drag_locked_title": "Edition verrouillée",
|
||||
"drag_locked_message": "Le glisser-déposer n'est pas autorisé car l'édition de cette collection est verrouillé."
|
||||
},
|
||||
@@ -1080,7 +1062,6 @@
|
||||
},
|
||||
"database_integrity_check": {
|
||||
"title": "Vérification de l'intégrité de la base de données",
|
||||
"description": "Vérifiera que la base de données n'est pas corrompue au niveau SQLite. Cela peut prendre un certain temps, en fonction de la taille de la base de données.",
|
||||
"check_button": "Vérifier l'intégrité de la base de données",
|
||||
"checking_integrity": "Vérification de l'intégrité de la base de données...",
|
||||
"integrity_check_succeeded": "Le contrôle d'intégrité a réussi - aucun problème détecté.",
|
||||
@@ -1112,10 +1093,7 @@
|
||||
"note_tree_font": "Police de l'arborescence",
|
||||
"note_detail_font": "Police du contenu des notes",
|
||||
"monospace_font": "Police Monospace (code)",
|
||||
"note_tree_and_detail_font_sizing": "Notez que la taille de la police de l’arborescence et du contenu est relative au paramètre de taille de police principal.",
|
||||
"not_all_fonts_available": "Toutes les polices répertoriées peuvent ne pas être disponibles sur votre système.",
|
||||
"apply_font_changes": "Pour appliquer les modifications de police, cliquez sur",
|
||||
"reload_frontend": "recharger l'interface",
|
||||
"generic-fonts": "Polices génériques",
|
||||
"sans-serif-system-fonts": "Polices système sans serif",
|
||||
"serif-system-fonts": "Polices système Serif",
|
||||
@@ -1171,8 +1149,8 @@
|
||||
},
|
||||
"code_mime_types": {
|
||||
"title": "Types MIME disponibles dans la liste déroulante",
|
||||
"tooltip_syntax_highlighting": "Souligner la syntaxe",
|
||||
"tooltip_code_block_syntax": "Blocs de code dans les notes de texte",
|
||||
"tooltip_syntax_highlighting": "Mise en évidence de la syntaxe",
|
||||
"tooltip_code_block_syntax": "Blocs de code dans les notes textuelles",
|
||||
"tooltip_code_note_syntax": "Notes de code"
|
||||
},
|
||||
"vim_key_bindings": {
|
||||
@@ -1194,8 +1172,7 @@
|
||||
},
|
||||
"attachment_erasure_timeout": {
|
||||
"attachment_erasure_timeout": "Délai d'effacement des pièces jointes",
|
||||
"attachment_auto_deletion_description": "Les pièces jointes sont automatiquement supprimées (et effacées) si elles ne sont plus référencées par leur note après un certain délai.",
|
||||
"erase_attachments_after": "Effacer les pièces jointes inutilisées après :",
|
||||
"erase_attachments_after": "Effacer les pièces jointes inutilisées après :",
|
||||
"manual_erasing_description": "Vous pouvez également déclencher l'effacement manuellement (sans tenir compte du délai défini ci-dessus) :",
|
||||
"erase_unused_attachments_now": "Effacez maintenant les pièces jointes inutilisées",
|
||||
"unused_attachments_erased": "Les pièces jointes inutilisées ont été effacées."
|
||||
@@ -1206,7 +1183,6 @@
|
||||
},
|
||||
"note_erasure_timeout": {
|
||||
"note_erasure_timeout_title": "Délai d'effacement des notes",
|
||||
"note_erasure_description": "Les notes supprimées (et les attributs, versions...) sont seulement marquées comme supprimées et il est possible de les récupérer à partir de la boîte de dialogue Notes récentes. Après un certain temps, les notes supprimées sont « effacées », ce qui signifie que leur contenu n'est plus récupérable. Ce paramètre vous permet de configurer la durée entre la suppression et l'effacement de la note.",
|
||||
"erase_notes_after": "Effacer les notes après :",
|
||||
"manual_erasing_description": "Vous pouvez également déclencher l'effacement manuellement (sans tenir compte de la durée définie ci-dessus) :",
|
||||
"erase_deleted_notes_now": "Effacer les notes supprimées maintenant",
|
||||
@@ -1290,7 +1266,6 @@
|
||||
"first-week-contains-first-thursday": "La première semaine contient le premier jeudi de l'année",
|
||||
"first-week-has-minimum-days": "La première semaine a un nombre minimum de jours",
|
||||
"min-days-in-first-week": "Nombre minimum de jours dans la première semaine",
|
||||
"first-week-info": "La première semaine contient le premier jeudi de l'année et est basée sur la norme <a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a> .",
|
||||
"first-week-warning": "La modification des options de la première semaine peut entraîner des doublons avec les notes de semaine existantes et les notes de semaine existantes ne seront pas mises à jour en conséquence.",
|
||||
"formatting-locale": "Format de date et de nombre",
|
||||
"formatting-locale-auto": "En fonction de la langue de l'application"
|
||||
@@ -1367,16 +1342,14 @@
|
||||
"description": "Description",
|
||||
"reload_app": "Recharger l'application pour appliquer les modifications",
|
||||
"set_all_to_default": "Réinitialiser aux valeurs par défaut",
|
||||
"confirm_reset": "Voulez-vous vraiment réinitialiser tous les raccourcis clavier par défaut ?"
|
||||
"confirm_reset": "Voulez-vous vraiment réinitialiser tous les raccourcis clavier par défaut ?",
|
||||
"no_results": "Aucun raccourci correspondant à '{{filter}}'"
|
||||
},
|
||||
"spellcheck": {
|
||||
"title": "Vérification orthographique",
|
||||
"description": "Ces options s'appliquent uniquement aux versions de bureau, les navigateurs utiliseront leur propre vérification orthographique native.",
|
||||
"enable": "Activer la vérification orthographique",
|
||||
"language_code_label": "Code(s) de langue",
|
||||
"language_code_placeholder": "par exemple \"fr-FR\", \"en-US\", \"de-AT\"",
|
||||
"multiple_languages_info": "Plusieurs langues peuvent être séparées par une virgule, par ex. \"fr-FR, en-US, de-DE, cs\". ",
|
||||
"available_language_codes_label": "Codes de langue disponibles :",
|
||||
"restart-required": "Les modifications apportées aux options de vérification orthographique prendront effet après le redémarrage de l'application."
|
||||
},
|
||||
"sync_2": {
|
||||
@@ -1384,16 +1357,12 @@
|
||||
"server_address": "Adresse de l'instance du serveur",
|
||||
"timeout": "Délai d'expiration de la synchronisation (millisecondes)",
|
||||
"proxy_label": "Serveur proxy de synchronisation (facultatif)",
|
||||
"note": "Note",
|
||||
"note_description": "Si vous laissez le paramètre de proxy vide, le proxy système sera utilisé (applicable uniquement à la version de bureau/électronique).",
|
||||
"special_value_description": "Une autre valeur spéciale est <code>noproxy</code> qui oblige à ignorer même le proxy système et respecte <code>NODE_TLS_REJECT_UNAUTHORIZED</code>.",
|
||||
"save": "Sauvegarder",
|
||||
"help": "Aide",
|
||||
"test_title": "Test de synchronisation",
|
||||
"test_description": "Testera la connexion et la prise de contact avec le serveur de synchronisation. Si le serveur de synchronisation n'est pas initialisé, cela le configurera pour qu'il se synchronise avec le document local.",
|
||||
"test_button": "Tester la synchronisation",
|
||||
"handshake_failed": "Échec de la négociation avec le serveur de synchronisation, erreur : {{message}}",
|
||||
"timeout_unit": "millisecondes"
|
||||
"handshake_failed": "Échec de la négociation avec le serveur de synchronisation, erreur : {{message}}"
|
||||
},
|
||||
"api_log": {
|
||||
"close": "Fermer"
|
||||
@@ -1402,7 +1371,7 @@
|
||||
"will_be_deleted_in": "Cette pièce jointe sera automatiquement supprimée dans {{time}}",
|
||||
"will_be_deleted_soon": "Cette pièce jointe sera bientôt supprimée automatiquement",
|
||||
"deletion_reason": ", car la pièce jointe n'est pas liée dans le contenu de la note. Pour empêcher la suppression, ajoutez à nouveau le lien de la pièce jointe dans le contenu d'une note ou convertissez la pièce jointe en note.",
|
||||
"role_and_size": "Rôle : {{role}}, Taille : {{size}}",
|
||||
"role_and_size": "Rôle : {{role}}, Taille : {{size}}, MIME: {{- mimeType}}",
|
||||
"link_copied": "Lien de pièce jointe copié dans le presse-papiers.",
|
||||
"unrecognized_role": "Rôle de pièce jointe « {{role}} » non reconnu."
|
||||
},
|
||||
@@ -1453,10 +1422,13 @@
|
||||
"import-into-note": "Importer dans la note",
|
||||
"apply-bulk-actions": "Appliquer des Actions groupées",
|
||||
"converted-to-attachments": "Les notes {{count}} ont été converties en pièces jointes.",
|
||||
"convert-to-attachment-confirm": "Êtes-vous sûr de vouloir convertir les notes sélectionnées en pièces jointes de leurs notes parentes ?",
|
||||
"convert-to-attachment-confirm": "Êtes-vous sûr de vouloir convertir les notes sélectionnées en pièces jointes de leurs notes parentales ? Cette opération s'applique uniquement aux notes d'image, les autres notes seront ignorées.",
|
||||
"archive": "Archive",
|
||||
"unarchive": "Désarchiver",
|
||||
"open-in-popup": "Modification rapide"
|
||||
"open-in-popup": "Modification rapide",
|
||||
"open-in-a-new-window": "Ouvrir dans une nouvelle fenêtre",
|
||||
"hide-subtree": "Masquer le sous-arbre",
|
||||
"show-subtree": "Afficher le sous-arbre"
|
||||
},
|
||||
"shared_info": {
|
||||
"shared_publicly": "Cette note est partagée publiquement sur {{- link}}.",
|
||||
@@ -1485,7 +1457,10 @@
|
||||
"task-list": "Liste de tâches",
|
||||
"book": "Collection",
|
||||
"new-feature": "Nouveau",
|
||||
"collections": "Collections"
|
||||
"collections": "Collections",
|
||||
"ai-chat": "Chat IA",
|
||||
"llm-chat": "Chat AI",
|
||||
"spreadsheet": "Feuille de calcul"
|
||||
},
|
||||
"protect_note": {
|
||||
"toggle-on": "Protéger la note",
|
||||
@@ -1516,7 +1491,13 @@
|
||||
},
|
||||
"highlights_list_2": {
|
||||
"title": "Accentuations",
|
||||
"options": "Options"
|
||||
"options": "Options",
|
||||
"title_with_count_one": "{{count}} mise en évidence",
|
||||
"title_with_count_many": "{{count}} mises en évidence",
|
||||
"title_with_count_other": "{{count}} mises en évidence",
|
||||
"modal_title": "Configurer les mises en évidence",
|
||||
"menu_configure": "Configuration des mises en évidence...",
|
||||
"no_highlights": "Aucune mise en évidence."
|
||||
},
|
||||
"quick-search": {
|
||||
"placeholder": "Recherche rapide",
|
||||
@@ -1540,7 +1521,17 @@
|
||||
"create-child-note": "Créer une note enfant",
|
||||
"unhoist": "Désactiver le focus",
|
||||
"toggle-sidebar": "Basculer la barre latérale",
|
||||
"dropping-not-allowed": "Lâcher des notes à cet endroit n'est pas autorisé"
|
||||
"dropping-not-allowed": "Déplacer des notes à cet emplacement n'est pas autorisé.",
|
||||
"clone-indicator-tooltip": "Cette note a {{- count}} parents: {{- parents}}",
|
||||
"clone-indicator-tooltip-single": "Cette note est clonée (1 parent supplémentaire: {{- parent}})",
|
||||
"shared-indicator-tooltip": "Cette note est partagée publiquement",
|
||||
"shared-indicator-tooltip-with-url": "Cette note est partagée publiquement sur: {{- url}}",
|
||||
"subtree-hidden-tooltip_one": "{{count}} note enfant cachée de l'arbre",
|
||||
"subtree-hidden-tooltip_many": "{{count}} notes enfants cachées de l'arbre",
|
||||
"subtree-hidden-tooltip_other": "{{count}} notes enfants cachées de l'arbre",
|
||||
"subtree-hidden-moved-title": "Ajouté à {{title}}",
|
||||
"subtree-hidden-moved-description-collection": "Cette collection cache ses notes enfants dans l'arbre.",
|
||||
"subtree-hidden-moved-description-other": "Les notes enfants sont cachées dans l'arbre pour cette note."
|
||||
},
|
||||
"title_bar_buttons": {
|
||||
"window-on-top": "Épingler cette fenêtre au premier plan"
|
||||
@@ -1551,7 +1542,12 @@
|
||||
"printing_pdf": "Export au format PDF en cours...",
|
||||
"print_report_title": "Imprimer le rapport",
|
||||
"print_report_collection_details_button": "Consulter les détails",
|
||||
"print_report_collection_details_ignored_notes": "Notes ignorées"
|
||||
"print_report_collection_details_ignored_notes": "Notes ignorées",
|
||||
"print_report_error_title": "Échec de l'impression",
|
||||
"print_report_stack_trace": "Trace de la pile",
|
||||
"print_report_collection_content_one": "La {{count}} note de la collection n'a pas pu être imprimée car elle n'est pas prises en charge ou est protégée.",
|
||||
"print_report_collection_content_many": "Les {{count}} notes de la collection n'ont pas pu être imprimées car elles ne sont pas prises en charge ou sont protégées.",
|
||||
"print_report_collection_content_other": "Les {{count}} notes de la collection n'ont pas pu être imprimées car elles ne sont pas prises en charge ou sont protégées."
|
||||
},
|
||||
"note_title": {
|
||||
"placeholder": "saisir le titre de la note ici...",
|
||||
@@ -1560,17 +1556,24 @@
|
||||
"note_type_switcher_label": "Basculer de {{type}} à :",
|
||||
"note_type_switcher_others": "Autre type de note",
|
||||
"note_type_switcher_templates": "Modèle",
|
||||
"note_type_switcher_collection": "Collection"
|
||||
"note_type_switcher_collection": "Collection",
|
||||
"edited_notes": "Notes éditées ce jour",
|
||||
"promoted_attributes": "Attributs promus"
|
||||
},
|
||||
"search_result": {
|
||||
"no_notes_found": "Aucune note n'a été trouvée pour les paramètres de recherche donnés.",
|
||||
"search_not_executed": "La recherche n'a pas encore été exécutée. Cliquez sur le bouton \"Rechercher\" ci-dessus pour voir les résultats."
|
||||
"search_not_executed": "La recherche n'a pas encore été exécutée.",
|
||||
"search_now": "Recherche maintenant"
|
||||
},
|
||||
"spacer": {
|
||||
"configure_launchbar": "Configurer la Barre de raccourcis"
|
||||
},
|
||||
"sql_result": {
|
||||
"no_rows": "Aucune ligne n'a été renvoyée pour cette requête"
|
||||
"no_rows": "Aucune ligne n'a été renvoyée pour cette requête",
|
||||
"not_executed": "La requête n'a pas encore été exécutée.",
|
||||
"failed": "L'exécution de requêtes SQL a échoué",
|
||||
"statement_result": "Résultat de la déclaration",
|
||||
"execute_now": "Exécuter maintenant"
|
||||
},
|
||||
"sql_table_schemas": {
|
||||
"tables": "Tableaux"
|
||||
@@ -1693,7 +1696,7 @@
|
||||
"paste": "Coller",
|
||||
"paste-as-plain-text": "Coller comme texte brut",
|
||||
"search_online": "Rechercher «{{term}}» avec {{searchEngine}}",
|
||||
"search_in_trilium": "Rechercher \"{{term}}\" dans Trilium"
|
||||
"search_in_trilium": "Rechercher « {{term}} » dans Trilium"
|
||||
},
|
||||
"image_context_menu": {
|
||||
"copy_reference_to_clipboard": "Copier la référence dans le presse-papiers",
|
||||
@@ -1703,14 +1706,15 @@
|
||||
"open_note_in_new_tab": "Ouvrir la note dans un nouvel onglet",
|
||||
"open_note_in_new_split": "Ouvrir la note dans une nouvelle division",
|
||||
"open_note_in_new_window": "Ouvrir la note dans une nouvelle fenêtre",
|
||||
"open_note_in_popup": "Édition rapide"
|
||||
"open_note_in_popup": "Édition rapide",
|
||||
"open_note_in_other_split": "Ouvrir la note dans l'autre volet"
|
||||
},
|
||||
"electron_integration": {
|
||||
"desktop-application": "Application de bureau",
|
||||
"native-title-bar": "Barre de titre native",
|
||||
"native-title-bar-description": "Sous Windows et macOS, désactiver la barre de titre native rend l'application plus compacte. Sous Linux, le maintien de la barre de titre native permet une meilleure intégration avec le reste du système.",
|
||||
"background-effects": "Activer les effets d'arrière-plan (Windows 11 uniquement)",
|
||||
"background-effects-description": "L'effet Mica ajoute un fond flou et élégant aux fenêtres de l'application, créant une profondeur et un style moderne.",
|
||||
"background-effects": "Activer les effets d'arrière-plan",
|
||||
"background-effects-description": "Ajoute un arrière-plan flou et élégant aux fenêtres d'application, créant de la profondeur et un style moderne. La « barre de titre native » doit être désactivée.",
|
||||
"restart-app-button": "Redémarrez l'application pour afficher les modifications",
|
||||
"zoom-factor": "Facteur de zoom"
|
||||
},
|
||||
@@ -1729,7 +1733,8 @@
|
||||
"geo-map": {
|
||||
"create-child-note-title": "Créer une nouvelle note enfant et l'ajouter à la carte",
|
||||
"create-child-note-instruction": "Cliquez sur la carte pour créer une nouvelle note à cet endroit ou appuyez sur Échap pour la supprimer.",
|
||||
"unable-to-load-map": "Impossible de charger la carte."
|
||||
"unable-to-load-map": "Impossible de charger la carte.",
|
||||
"create-child-note-text": "Ajouter le marqueur"
|
||||
},
|
||||
"geo-map-context": {
|
||||
"open-location": "Ouvrir la position",
|
||||
@@ -1834,12 +1839,13 @@
|
||||
"book_properties_config": {
|
||||
"hide-weekends": "Masquer les week-ends",
|
||||
"display-week-numbers": "Afficher les numéros de semaine",
|
||||
"map-style": "Style de carte :",
|
||||
"map-style": "Style de carte",
|
||||
"max-nesting-depth": "Profondeur d'imbrication maximale :",
|
||||
"raster": "Trame",
|
||||
"vector_light": "Vecteur (clair)",
|
||||
"vector_dark": "Vecteur (foncé)",
|
||||
"show-scale": "Afficher l'échelle"
|
||||
"show-scale": "Afficher l'échelle",
|
||||
"show-labels": "Afficher les noms des marqueurs"
|
||||
},
|
||||
"table_context_menu": {
|
||||
"delete_row": "Supprimer la ligne"
|
||||
@@ -1860,7 +1866,7 @@
|
||||
"add-column-placeholder": "Entrez le nom de la colonne...",
|
||||
"edit-note-title": "Cliquez pour modifier le titre de la note",
|
||||
"edit-column-title": "Cliquez pour modifier le titre de la colonne",
|
||||
"column-already-exists": "Cette colonne existe déjà dans le tableau."
|
||||
"column-already-exists": "Cette colonne existe déjà sur le tableau."
|
||||
},
|
||||
"presentation_view": {
|
||||
"edit-slide": "Modifier cette diapositive",
|
||||
@@ -1890,22 +1896,30 @@
|
||||
"next_theme_message": "Vous utilisez actuellement le thème hérité de l'ancienne version, souhaitez-vous essayer le nouveau thème ?",
|
||||
"next_theme_button": "Essayez le nouveau thème",
|
||||
"background_effects_title": "Les effets d'arrière-plan sont désormais stables",
|
||||
"background_effects_message": "Sur les appareils Windows, les effets d'arrière-plan sont désormais parfaitement stables. Ils ajoutent une touche de couleur à l'interface utilisateur en floutant l'arrière-plan. Cette technique est également utilisée dans d'autres applications comme l'Explorateur Windows.",
|
||||
"background_effects_message": "Sur les appareils Windows et macOS les effets d'arrière-plan sont désormais stables. Ils ajoutent une touche de couleur à l'interface utilisateur en floutant l'arrière-plan.",
|
||||
"background_effects_button": "Activer les effets d'arrière-plan",
|
||||
"dismiss": "Rejeter"
|
||||
"dismiss": "Rejeter",
|
||||
"new_layout_title": "Nouvelle mise en page",
|
||||
"new_layout_message": "Nous avons introduit une mise en page modernisée pour Trilium. Le ruban a été supprimé et intégré de manière transparente dans l'interface principale, avec une nouvelle barre d'état et des sections extensibles (telles que les attributs promus) reprenant les fonctions clés.\n\nLa nouvelle mise en page est activée par défaut et peut être temporairement désactivée via Options → Apparence.",
|
||||
"new_layout_button": "Plus d'infos"
|
||||
},
|
||||
"settings": {
|
||||
"related_settings": "Paramètres associés"
|
||||
},
|
||||
"settings_appearance": {
|
||||
"related_code_blocks": "Schéma de coloration syntaxique pour les blocs de code dans les notes de texte",
|
||||
"related_code_notes": "Schéma de couleurs pour les notes de code"
|
||||
"related_code_notes": "Schéma de couleurs pour les notes de code",
|
||||
"ui": "Interface utilisateur",
|
||||
"ui_old_layout": "Ancienne mise en page",
|
||||
"ui_new_layout": "Nouvelle mise en page"
|
||||
},
|
||||
"units": {
|
||||
"percentage": "%"
|
||||
},
|
||||
"pagination": {
|
||||
"total_notes": "{{count}} notes"
|
||||
"total_notes": "{{count}} notes",
|
||||
"prev_page": "Page précédente",
|
||||
"next_page": "Page suivante"
|
||||
},
|
||||
"collections": {
|
||||
"rendering_error": "Impossible d'afficher le contenu en raison d'une erreur."
|
||||
@@ -1924,8 +1938,9 @@
|
||||
"unknown_widget": "Widget inconnu pour « {{id}} »."
|
||||
},
|
||||
"note_language": {
|
||||
"not_set": "Non défini",
|
||||
"configure-languages": "Configurer les langues..."
|
||||
"not_set": "Langage non défini",
|
||||
"configure-languages": "Configurer les langues...",
|
||||
"help-on-languages": "Aide sur les langues de contenu..."
|
||||
},
|
||||
"content_language": {
|
||||
"title": "Contenu des langues",
|
||||
@@ -1973,14 +1988,288 @@
|
||||
"title": "Options expérimentales",
|
||||
"disclaimer": "Ces options sont expérimentales et peuvent provoquer une instabilité. Utilisez avec prudence.",
|
||||
"new_layout_name": "Nouvelle mise en page",
|
||||
"new_layout_description": "Essayez la nouvelle mise en page pour un look plus moderne et un usage améliorée. Sous réserve de changements importants dans les prochaines versions."
|
||||
"new_layout_description": "Essayez la nouvelle mise en page pour un look plus moderne et un usage améliorée. Sous réserve de changements importants dans les prochaines versions.",
|
||||
"llm_name": "AI / LLM Chat",
|
||||
"llm_description": "Activer la barre de chat AI et les notes de chat LLM alimentées par de grands modèles de langage."
|
||||
},
|
||||
"read-only-info": {
|
||||
"read-only-note": "Vous consultez actuellement une note en lecture seule.",
|
||||
"auto-read-only-note": "Cette note s'affiche en mode lecture seule pour un chargement plus rapide.",
|
||||
"edit-note": "Editer la note"
|
||||
"edit-note": "Modifier la note"
|
||||
},
|
||||
"calendar_view": {
|
||||
"delete_note": "Effacer la note..."
|
||||
"delete_note": "Supprimer la note..."
|
||||
},
|
||||
"media": {
|
||||
"play": "Lire (Espace)",
|
||||
"pause": "Pause (Espace)",
|
||||
"back-10s": "Retour arrière 10s (flèche gauche)",
|
||||
"forward-30s": "Avance 30s",
|
||||
"mute": "Silence (M)",
|
||||
"unmute": "Réactiver le son (M)",
|
||||
"playback-speed": "Vitesse de lecture",
|
||||
"loop": "Boucle",
|
||||
"disable-loop": "Désactiver la boucle",
|
||||
"rotate": "Rotation",
|
||||
"picture-in-picture": "Image dans l'image",
|
||||
"exit-picture-in-picture": "Sortir de Image dans l'image",
|
||||
"fullscreen": "Plein-écran (F)",
|
||||
"exit-fullscreen": "Sortir du mode plein-écran",
|
||||
"unsupported-format": "L'aperçu multimédia n'est pas disponible pour ce format de fichier:\n{{mime}}",
|
||||
"zoom-to-fit": "Zoom pour remplir",
|
||||
"zoom-reset": "Annuler zoom pour remplir"
|
||||
},
|
||||
"render": {
|
||||
"setup_title": "Afficher du HTML personnalisé ou Preact JSX dans cette note",
|
||||
"setup_create_sample_preact": "Créer un exemple de note avec Preact",
|
||||
"setup_create_sample_html": "Créer un exemple de note avec HTML",
|
||||
"setup_sample_created": "Un exemple de note a été créé en tant que note enfant.",
|
||||
"disabled_description": "Ces notes de rendu proviennent d'une source externe. Pour vous protéger de contenu malveillant, elle n'est pas activée par défaut. Assurez-vous de faire confiance à la source avant de l’activer.",
|
||||
"disabled_button_enable": "Activer la note de rendu"
|
||||
},
|
||||
"web_view_setup": {
|
||||
"title": "Créez la vue de la page Web directement dans Trilium",
|
||||
"url_placeholder": "Entrez ou collez l'adresse du site Web, par exemple https://triliumnotes.org",
|
||||
"create_button": "Créer une vue Web",
|
||||
"invalid_url_title": "Adresse invalide",
|
||||
"invalid_url_message": "Insérer une adresse Web valide, par exemple https://triliumnotes.org.",
|
||||
"disabled_description": "Cette vue Web a été importée à partir d'une source externe. Pour vous protéger du phishing ou du contenu malveillant, elle ne se charge pas automatiquement. Vous pouvez l'activer si vous faites confiance à la source.",
|
||||
"disabled_button_enable": "Activer la vue Web"
|
||||
},
|
||||
"llm_chat": {
|
||||
"placeholder": "Tapez un message...",
|
||||
"send": "Envoyer",
|
||||
"sending": "Envoi...",
|
||||
"empty_state": "Démarrez une conversation en tapant un message ci-dessous.",
|
||||
"searching_web": "Recherche sur le Web...",
|
||||
"web_search": "Recherche sur le Web",
|
||||
"note_tools": "Accès aux notes",
|
||||
"sources": "Sources",
|
||||
"extended_thinking": "Réflexion étendue",
|
||||
"legacy_models": "Modèles hérités",
|
||||
"thinking": "Réflexion...",
|
||||
"thought_process": "Processus de réflexion",
|
||||
"tool_calls": "{{count}} appel(s) d'outil",
|
||||
"input": "Entrée",
|
||||
"result": "Résultat",
|
||||
"error": "Erreur",
|
||||
"tool_error": "échoué",
|
||||
"total_tokens": "{{total}} jetons",
|
||||
"tokens_detail": "{{prompt}} prompt + {{completion}} achèvement",
|
||||
"tokens_used": "{{prompt}} prompt + {{completion}} achèvement = {{total}} jetons",
|
||||
"tokens_used_with_cost": "{{prompt}} prompt + {{completion}} achèvement = {{total}} jetons (~${{cost}})",
|
||||
"tokens_used_with_model": "{{model}}: {{prompt}} prompt + {{completion}} achèvement = {{total}} jetons",
|
||||
"tokens_used_with_model_and_cost": "{{model}}: {{prompt}} prompt + {{completion}} achèvement = {{total}} jetons (~${{cost}})",
|
||||
"tokens": "jetons",
|
||||
"context_used": "{{percentage}}% utilisé",
|
||||
"note_context_enabled": "Cliquez pour désactiver le contexte de la note : {{title}}",
|
||||
"note_context_disabled": "Cliquez pour inclure la note actuelle dans le contexte",
|
||||
"no_provider_message": "Aucun fournisseur d'IA configuré. Ajoutez en un pour commencer à discuter.",
|
||||
"add_provider": "Ajouter un fournisseur d'IA"
|
||||
},
|
||||
"sidebar_chat": {
|
||||
"title": "discussion IA",
|
||||
"launcher_title": "Ouvrir la discussion IA",
|
||||
"new_chat": "Démarrer une nouvelle discussion",
|
||||
"save_chat": "Enregistrer la discussion dans les notes",
|
||||
"empty_state": "Démarrer une conversation",
|
||||
"history": "Historique des discussions",
|
||||
"recent_chats": "Discussions récentes",
|
||||
"no_chats": "Pas de discussions précédentes"
|
||||
},
|
||||
"note-color": {
|
||||
"clear-color": "Retirer la couleur de la note",
|
||||
"set-color": "Définir la couleur de la note",
|
||||
"set-custom-color": "Définir la couleur personnalisée de la note"
|
||||
},
|
||||
"popup-editor": {
|
||||
"maximize": "Basculer sur l'éditeur complet"
|
||||
},
|
||||
"server": {
|
||||
"unknown_http_error_title": "Erreur de communication avec le serveur",
|
||||
"unknown_http_error_content": "Code de statut: {{statusCode}}\nURL: {{method}} {{url}}\nMessage: {{message}}",
|
||||
"traefik_blocks_requests": "Si vous utilisez le reverse proxy Traefik, celui-ci a introduit un changement de rupture qui affecte la communication avec le serveur."
|
||||
},
|
||||
"tab_history_navigation_buttons": {
|
||||
"go-back": "Revenir à la note précédente",
|
||||
"go-forward": "Aller vers la note suivante"
|
||||
},
|
||||
"breadcrumb": {
|
||||
"hoisted_badge": "Remonté",
|
||||
"hoisted_badge_title": "Redescendu",
|
||||
"workspace_badge": "Espace de travail",
|
||||
"scroll_to_top_title": "Aller au début de la note",
|
||||
"create_new_note": "Créer une nouvelle note enfant",
|
||||
"empty_hide_archived_notes": "Cacher les notes archivées"
|
||||
},
|
||||
"breadcrumb_badges": {
|
||||
"read_only_explicit": "Lecture seule",
|
||||
"read_only_explicit_description": "Cette note a été paramétrée manuellement en lecture seule.\nCliquer pour temporairement l'éditer.",
|
||||
"read_only_auto": "Lecture seule automatique",
|
||||
"read_only_auto_description": "Cette note a été réglée automatiquement en mode lecture seule pour des raisons de performances. Cette limite automatique est réglable à partir des paramètres.\n\nCliquez pour la modifier temporairement.",
|
||||
"read_only_temporarily_disabled": "Temporairement modifiable",
|
||||
"read_only_temporarily_disabled_description": "Cette note est actuellement modifiable, mais elle est normalement en lecture seule. La note redeviendra en lecture seule dès que vous accéderez à une autre note.\n\nCliquez pour réactiver le mode lecture seule.",
|
||||
"shared_publicly": "Partagés publiquement",
|
||||
"shared_locally": "Partagé localement",
|
||||
"shared_copy_to_clipboard": "Copier le lien vers le presse-papier",
|
||||
"shared_open_in_browser": "Ouvrir le lien dans le navigateur",
|
||||
"shared_unshare": "Supprimer le partage",
|
||||
"clipped_note": "Clip Web",
|
||||
"clipped_note_description": "Cette note a été initialement construite depuis l'url {{url}}.\n\nCliquez pour accéder à la page Web source.",
|
||||
"execute_script": "Exécuter le script",
|
||||
"execute_script_description": "Cette note est une note de script. Cliquez pour exécuter le script.",
|
||||
"execute_sql": "Exécuter la commande SQL",
|
||||
"execute_sql_description": "Cette note est une note SQL. Cliquer pour exécuter la requête SQL.",
|
||||
"save_status_saved": "Enregister",
|
||||
"save_status_saving": "Enregistrement...",
|
||||
"save_status_unsaved": "Non sauvée",
|
||||
"save_status_error": "La sauvegarde a échoué",
|
||||
"save_status_saving_tooltip": "Les modifications sont enregistrées.",
|
||||
"save_status_unsaved_tooltip": "Il y a des changements non enregistrés. Ils seront enregistrés automatiquement dans un instant.",
|
||||
"save_status_error_tooltip": "Une erreur s'est produite lors de l'enregistrement de la note. Si possible, essayez de copier le contenu de la note ailleurs et de recharger l'application."
|
||||
},
|
||||
"right_pane": {
|
||||
"toggle": "Basculer le panneau de droite",
|
||||
"custom_widget_go_to_source": "Aller sur le code source",
|
||||
"empty_message": "Rien à afficher pour cette note",
|
||||
"empty_button": "Cacher le panneau"
|
||||
},
|
||||
"pdf": {
|
||||
"attachments_one": "{{count}} pièce jointe",
|
||||
"attachments_many": "{{count}} pièces jointes",
|
||||
"attachments_other": "{{count}} pièces jointes",
|
||||
"layers_one": "{{count}} couche",
|
||||
"layers_many": "{{count}} couches",
|
||||
"layers_other": "{{count}} couches",
|
||||
"pages_one": "{{count}} page",
|
||||
"pages_many": "{{count}} pages",
|
||||
"pages_other": "{{count}} pages",
|
||||
"pages_alt": "Page {{pageNumber}}",
|
||||
"pages_loading": "Chargement..."
|
||||
},
|
||||
"platform_indicator": {
|
||||
"available_on": "Disponible sur {{platform}}"
|
||||
},
|
||||
"mobile_tab_switcher": {
|
||||
"title_one": "{{count}} onglet",
|
||||
"title_many": "{{count}} onglets",
|
||||
"title_other": "{{count}} onglets",
|
||||
"more_options": "Autres options"
|
||||
},
|
||||
"bookmark_buttons": {
|
||||
"bookmarks": "Signets"
|
||||
},
|
||||
"active_content_badges": {
|
||||
"type_icon_pack": "pack d'icônes",
|
||||
"type_backend_script": "Script backend",
|
||||
"type_frontend_script": "Script frontend",
|
||||
"type_widget": "Widget",
|
||||
"type_app_css": "CSS personnalisé",
|
||||
"type_render_note": "Note de rendu",
|
||||
"type_web_view": "Vue Web",
|
||||
"type_app_theme": "Thème personnalisé",
|
||||
"toggle_tooltip_enable_tooltip": "Cliquer pour activer {{type}}.",
|
||||
"toggle_tooltip_disable_tooltip": "Cliquer pour désactiver ce {{type}}.",
|
||||
"menu_docs": "Ouvrir la documentation",
|
||||
"menu_execute_now": "Exécuter le script maintenant",
|
||||
"menu_run": "Démarrer automatiquement",
|
||||
"menu_run_disabled": "Manuellement",
|
||||
"menu_run_backend_startup": "Lorsque le backend commence",
|
||||
"menu_run_hourly": "Horaire",
|
||||
"menu_run_daily": "Quotidien",
|
||||
"menu_run_frontend_startup": "Lorsque le frontend du bureau démarre",
|
||||
"menu_run_mobile_startup": "Lorsque le frontend mobile démarre",
|
||||
"menu_change_to_widget": "Passer au widget",
|
||||
"menu_change_to_frontend_script": "Passer au script frontend",
|
||||
"menu_theme_base": "Thème de base"
|
||||
},
|
||||
"setup_form": {
|
||||
"more_info": "En savoir plus"
|
||||
},
|
||||
"mermaid": {
|
||||
"placeholder": "Tapez le contenu de votre diagramme Mermaid ou utilisez l'un des diagrammes de l'échantillon ci-dessous.",
|
||||
"sample_diagrams": "Diagrammes d 'exemple:",
|
||||
"sample_flowchart": "Organigramme",
|
||||
"sample_class": "Classe",
|
||||
"sample_sequence": "Séquence",
|
||||
"sample_entity_relationship": "Entité relationnelle",
|
||||
"sample_state": "État",
|
||||
"sample_mindmap": "Carte mentale",
|
||||
"sample_architecture": "Architecture",
|
||||
"sample_block": "Bloc",
|
||||
"sample_c4": "C4",
|
||||
"sample_gantt": "Gantt",
|
||||
"sample_git": "Git",
|
||||
"sample_kanban": "Kanban",
|
||||
"sample_packet": "Paquet",
|
||||
"sample_pie": "Camembert",
|
||||
"sample_quadrant": "Quadrant",
|
||||
"sample_radar": "Radar",
|
||||
"sample_requirement": "Exigence",
|
||||
"sample_sankey": "Sankey",
|
||||
"sample_timeline": "Chronologie",
|
||||
"sample_treemap": "Arborescence",
|
||||
"sample_user_journey": "Utilisateur Journey",
|
||||
"sample_xy": "XY",
|
||||
"sample_venn": "Venn",
|
||||
"sample_ishikawa": "Ishikawa"
|
||||
},
|
||||
"mind-map": {
|
||||
"addChild": "Ajouter un enfant",
|
||||
"addParent": "Ajouter parent",
|
||||
"addSibling": "Ajouter un frère",
|
||||
"removeNode": "Supprimer le nœud",
|
||||
"focus": "Mode Focus",
|
||||
"cancelFocus": "Annuler le mode Focus",
|
||||
"moveUp": "Monter",
|
||||
"moveDown": "Descendre",
|
||||
"link": "Lien",
|
||||
"linkBidirectional": "Lien bidirectionnel",
|
||||
"clickTips": "Cliquer sur le nœud cible",
|
||||
"summary": "Résumé"
|
||||
},
|
||||
"llm": {
|
||||
"settings_title": "AI / LLM",
|
||||
"settings_description": "Configurer les intégrations AI et les LLM (Large Language Model).",
|
||||
"add_provider": "Ajouter le fournisseur",
|
||||
"add_provider_title": "Ajouter le fournisseur d'IA",
|
||||
"configured_providers": "Fournisseurs configurés",
|
||||
"no_providers_configured": "Aucun fournisseur n'est encore configuré.",
|
||||
"provider_name": "Nom",
|
||||
"provider_type": "Fournisseur",
|
||||
"actions": "Actions",
|
||||
"delete_provider": "Supprimer",
|
||||
"delete_provider_confirmation": "Êtes-vous sûr de vouloir supprimer le fournisseur \"{{name}}\" ?",
|
||||
"api_key": "Clé API",
|
||||
"api_key_placeholder": "Entrer votre clé API",
|
||||
"cancel": "Annuler"
|
||||
},
|
||||
"status_bar": {
|
||||
"language_title": "Changer de langue",
|
||||
"note_info_title": "Afficher les informations sur les notes (par exemple, dates, taille des notes)",
|
||||
"backlinks_one": "{{count}} rétrolien",
|
||||
"backlinks_many": "{{count}} rétroliens",
|
||||
"backlinks_other": "{{count}} rétroliens",
|
||||
"backlinks_title_one": "voir le rétrolien",
|
||||
"backlinks_title_many": "voir les rétroliens",
|
||||
"backlinks_title_other": "voir les rétroliens",
|
||||
"attachments_one": "{{count}} pièce-jointe",
|
||||
"attachments_many": "{{count}} pièces-jointes",
|
||||
"attachments_other": "{{count}} pièces-jointes",
|
||||
"attachments_title_one": "Voir la pièce-jointe dans un nouvel onglet",
|
||||
"attachments_title_many": "Voir les pièces-jointes dans un nouvel onglet",
|
||||
"attachments_title_other": "Voir les pièces-jointes dans un nouvel onglet",
|
||||
"attributes_one": "{{count}} attribut",
|
||||
"attributes_many": "{{count}} attributs",
|
||||
"attributes_other": "{{count}} attributs",
|
||||
"attributes_title": "Attributs propres et attributs hérités",
|
||||
"note_paths_one": "{{count}} chemin",
|
||||
"note_paths_many": "{{count}} chemins",
|
||||
"note_paths_other": "{{count}} chemins",
|
||||
"note_paths_title": "Chemins de la note",
|
||||
"code_note_switcher": "Changer de langue"
|
||||
},
|
||||
"attributes_panel": {
|
||||
"title": "Attributs de la note"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,13 +31,6 @@
|
||||
"search_notes": "Cuardaigh nótaí"
|
||||
},
|
||||
"about": {
|
||||
"title": "Maidir le Trilium Notes",
|
||||
"homepage": "Leathanach baile:",
|
||||
"app_version": "Leagan an aip:",
|
||||
"db_version": "Leagan DB:",
|
||||
"sync_version": "Leagan sioncrónaithe:",
|
||||
"build_date": "Dáta tógála:",
|
||||
"build_revision": "Athbhreithniú tógála:",
|
||||
"data_directory": "Eolaire sonraí:"
|
||||
},
|
||||
"toast": {
|
||||
@@ -72,7 +65,9 @@
|
||||
"link_title_mirrors": "Léiríonn teideal an naisc teideal reatha an nóta",
|
||||
"link_title_arbitrary": "is féidir teideal an naisc a athrú go treallach",
|
||||
"link_title": "Teideal an naisc",
|
||||
"button_add_link": "Cuir nasc leis"
|
||||
"button_add_link": "Cuir nasc leis",
|
||||
"anchor": "Ancaire (roghnach)",
|
||||
"anchor_none": "Dada (nasc chuig nóta)"
|
||||
},
|
||||
"branch_prefix": {
|
||||
"edit_branch_prefix": "Cuir réimír na brainse in eagar",
|
||||
@@ -119,17 +114,26 @@
|
||||
"also_delete_note": "Scrios an nóta freisin"
|
||||
},
|
||||
"delete_notes": {
|
||||
"delete_notes_preview": "Réamhamharc ar scriosadh nótaí",
|
||||
"close": "Dún",
|
||||
"delete_all_clones_description": "Scrios gach clón freisin (is féidir é seo a chealú in athruithe le déanaí)",
|
||||
"erase_notes_description": "Ní mharcálann scriosadh gnáth (bog) ach na nótaí mar scriosta agus is féidir iad a dhíscriosadh (sa dialóg athruithe le déanaí) laistigh de thréimhse ama. Scriosfar na nótaí láithreach má sheiceálann tú an rogha seo agus ní bheidh sé indéanta na nótaí a dhíscriosadh.",
|
||||
"erase_notes_description": "Scrios nótaí láithreach in ionad scriosadh bog. Ní féidir é seo a chealú agus cuirfidh sé iallach ort an feidhmchlár a athlódáil.",
|
||||
"erase_notes_warning": "Scrios nótaí go buan (ní féidir é seo a chealú), lena n-áirítear na clónanna go léir. Cuirfidh sé seo iallach ar an bhfeidhmchlár athlódáil.",
|
||||
"notes_to_be_deleted": "Scriosfar na nótaí seo a leanas ({{notesCount}})",
|
||||
"notes_to_be_deleted": "Nótaí le scriosadh ({{notesCount}})",
|
||||
"no_note_to_delete": "Ní scriosfar aon nóta (clóin amháin).",
|
||||
"broken_relations_to_be_deleted": "Brisfear agus scriosfar na caidrimh seo a leanas ({{ relationCount}})",
|
||||
"broken_relations_to_be_deleted": "Caidrimh bhriste ({{relationCount}})",
|
||||
"cancel": "Cealaigh",
|
||||
"ok": "Ceart go leor",
|
||||
"deleted_relation_text": "Tá tagairt don nóta {{- note}} (le scriosadh) le gaol {{- relation}} a thagann ó {{- source}}."
|
||||
"title": "Scrios nótaí",
|
||||
"clones_label": "Clóin",
|
||||
"delete_clones_description_one": "Scrios {{count}} clón eile freisin. Is féidir é seo a chealú sna hathruithe is déanaí.",
|
||||
"delete_clones_description_two": "Scrios {{count}} clóin eile freisin. Is féidir é seo a chealú sna hathruithe is déanaí.",
|
||||
"delete_clones_description_few": "Scrios {{count}} clóin eile freisin. Is féidir é seo a chealú sna hathruithe is déanaí.",
|
||||
"delete_clones_description_many": "Scrios {{count}} clóin eile freisin. Is féidir é seo a chealú sna hathruithe is déanaí.",
|
||||
"delete_clones_description_other": "Scrios {{count}} clóin eile freisin. Is féidir é seo a chealú sna hathruithe is déanaí.",
|
||||
"erase_notes_label": "Scrios go buan",
|
||||
"table_note_with_relation": "Nóta le gaol",
|
||||
"table_relation": "Gaol",
|
||||
"table_points_to": "Pointí chuig (scriosta)",
|
||||
"delete": "Scrios"
|
||||
},
|
||||
"export": {
|
||||
"export_note_title": "Nóta easpórtála",
|
||||
@@ -240,7 +244,8 @@
|
||||
"box_size_small": "beag (~ 10 líne)",
|
||||
"box_size_medium": "meánach (~ 30 líne)",
|
||||
"box_size_full": "lán (taispeánann an bosca an téacs iomlán)",
|
||||
"button_include": "Cuir nóta san áireamh"
|
||||
"button_include": "Cuir nóta san áireamh",
|
||||
"box_size_expandable": "inleathnaithe (fillte de réir réamhshocraithe)"
|
||||
},
|
||||
"info": {
|
||||
"modalTitle": "Teachtaireacht eolais",
|
||||
@@ -301,33 +306,6 @@
|
||||
"undelete_link": "díscriosadh",
|
||||
"confirm_undelete": "Ar mhaith leat an nóta seo agus a fho-nótaí a athscriosadh?"
|
||||
},
|
||||
"revisions": {
|
||||
"note_revisions": "Athbhreithnithe Nótaí",
|
||||
"delete_all_revisions": "Scrios gach athbhreithniú ar an nóta seo",
|
||||
"delete_all_button": "Scrios gach athbhreithniú",
|
||||
"help_title": "Cabhair le hathbhreithnithe nótaí",
|
||||
"confirm_delete_all": "Ar mhaith leat gach athbhreithniú ar an nóta seo a scriosadh?",
|
||||
"no_revisions": "Gan aon athbhreithnithe don nóta seo go fóill...",
|
||||
"restore_button": "Athchóirigh",
|
||||
"diff_on": "Taispeáin an difríocht",
|
||||
"diff_off": "Taispeáin ábhar",
|
||||
"diff_on_hint": "Cliceáil chun difríocht foinse an nóta a thaispeáint",
|
||||
"diff_off_hint": "Cliceáil chun ábhar an nóta a thaispeáint",
|
||||
"diff_not_available": "Níl an difríocht ar fáil.",
|
||||
"confirm_restore": "Ar mhaith leat an t-athbhreithniú seo a athbhunú? Scríobhfaidh sé seo teideal agus ábhar reatha an nóta leis an athbhreithniú seo.",
|
||||
"delete_button": "Delete",
|
||||
"confirm_delete": "Ar mhaith leat an t-athbhreithniú seo a scriosadh?",
|
||||
"revisions_deleted": "Scriosadh athbhreithnithe nótaí.",
|
||||
"revision_restored": "Tá athbhreithniú an nóta athchóirithe.",
|
||||
"revision_deleted": "Scriosadh athbhreithniú an nóta.",
|
||||
"snapshot_interval": "Eatramh Léirmheasa ar Nóta: {{seconds}}s.",
|
||||
"maximum_revisions": "Teorainn maidir le hathbhreithniú nóta: {{number}}.",
|
||||
"settings": "Socruithe Athbhreithnithe Nóta",
|
||||
"download_button": "Íoslódáil",
|
||||
"mime": "MIME: ",
|
||||
"file_size": "Méid comhaid:",
|
||||
"preview_not_available": "Níl réamhamharc ar fáil don chineál nóta seo."
|
||||
},
|
||||
"sort_child_notes": {
|
||||
"sort_children_by": "Sórtáil páistí de réir...",
|
||||
"sorting_criteria": "Critéir sórtála",
|
||||
@@ -399,7 +377,7 @@
|
||||
"calendar_root": "nóta marcáilte ar cheart a úsáid mar fhréamh do nótaí lae. Níor cheart ach ceann amháin a mharcáil mar sin.",
|
||||
"archived": "Ní bheidh nótaí leis an lipéad seo le feiceáil de réir réamhshocraithe i dtorthaí cuardaigh (i ndialóga Léim Chuig, Cuir Nasc Leis srl. chomh maith).",
|
||||
"exclude_from_export": "ní chuirfear nótaí (lena bhfo-chrann) san áireamh in aon onnmhairiú nótaí",
|
||||
"run": "Sainmhíníonn sé seo cé na himeachtaí ar cheart don script rith orthu. Is iad seo a leanas na luachanna féideartha:\n<ul>\n<li>frontendStartup - nuair a thosaíonn (nó a athnuachan) tosaigh Trilium, ach ní ar fhóin phóca.</li>\n<li>mobileStartup - nuair a thosaíonn (nó a athnuachan) tosaigh Trilium, ar fhóin phóca.</li>\n<li>backendStartup - nuair a thosaíonn cúltaca Trilium</li>\n<li>uair an chloig - rith uair san uair. Is féidir leat lipéad breise <code>runAtHour</code> a úsáid chun a shonrú cén uair a ritheann sé.</li>\n<li>daily - rith uair sa lá</li>\n</ul>",
|
||||
"run": "Sainmhíníonn sé seo cé na himeachtaí ar cheart don script rith orthu. Is iad seo a leanas na luachanna féideartha:\n<ul>\n<li>frontendStartup - nuair a thosaíonn (nó a athnuachan) tosaigh Trilium, ach ní ar fhóin phóca.</li>\n<li>mobileStartup - nuair a thosaíonn (nó a athnuachan) tosaigh Trilium, ar fhóin phóca.</li>\n<li>backendStartup - nuair a thosaíonn cúltaca Trilium.</li>\n<li>hourly - rith uair san uair. Is féidir leat lipéad breise <code>runAtHour</code> a úsáid chun a shonrú cén uair a ritheann sé.</li>\n<li>daily - rith uair sa lá.</li>\n</ul>",
|
||||
"run_on_instance": "Sainmhínigh cén sampla de Trilium ba chóir é seo a rith air. Réamhshocrú do gach sampla.",
|
||||
"run_at_hour": "Cén uair ar cheart é seo a rith? Ba cheart é a úsáid i dteannta <code>#run=hourly</code>. Is féidir é seo a shainiú arís agus arís eile le haghaidh níos mó ritheanna i rith an lae.",
|
||||
"disable_inclusion": "Ní chuirfear scripteanna leis an lipéad seo san áireamh i bhforghníomhú an scripte tuismitheora.",
|
||||
@@ -478,7 +456,9 @@
|
||||
"print_landscape": "Agus é á onnmhairiú go PDF, athraítear treoshuíomh an leathanaigh go tírdhreach seachas portráid.",
|
||||
"print_page_size": "Agus é á easpórtáil go PDF, athraítear méid an leathanaigh. Luachanna tacaithe: <code>A0</code>, <code>A1</code>, <code>A2</code>, <code>A3</code>, <code>A4</code>, <code>A5</code>, <code>A6</code>, <code>Legal</code>, <code>Letter</code>, <code>Tabloid</code>, <code>Ledger</code>.",
|
||||
"color_type": "Dath",
|
||||
"textarea": "Téacs Il-líne"
|
||||
"textarea": "Téacs Il-líne",
|
||||
"print_scale": "Agus é á onnmhairiú go PDF, athraítear scála an ábhair rindreáilte. Tá na luachanna idir 0.1 (10%) agus 2 (200%), is é 1 (100%) an réamhshocrú.",
|
||||
"print_margins": "Agus é á onnmhairiú go PDF, socraítear corrlaigh leathanaigh. Úsáid luachanna <code>réamhshocraithe</code>, <code>gan aon cheann</code>, <code>íosmhéid</code>, nó luachanna saincheaptha mar <code>barr, deas, bun, clé</code> i milliméadair."
|
||||
},
|
||||
"attribute_editor": {
|
||||
"help_text_body1": "Chun lipéad a chur leis, clóscríobh m.sh. <code>#rock</code> nó más mian leat luach a chur leis freisin ansin m.sh. <code>#year = 2020</code>",
|
||||
@@ -709,7 +689,14 @@
|
||||
"export_as_image": "Easpórtáil mar íomhá",
|
||||
"export_as_image_png": "PNG (rastar)",
|
||||
"export_as_image_svg": "SVG (veicteoir)",
|
||||
"note_map": "Léarscáil nótaí"
|
||||
"note_map": "Léarscáil nótaí",
|
||||
"view_ocr_text": "Féach ar théacs OCR",
|
||||
"word_wrap": "Timfhill focal",
|
||||
"word_wrap_auto": "Uathoibríoch",
|
||||
"word_wrap_auto_description": "Lean an suíomh domhanda",
|
||||
"word_wrap_on": "Ar",
|
||||
"word_wrap_off": "As",
|
||||
"save_named_revision": "Sábháil athbhreithniú ainmnithe..."
|
||||
},
|
||||
"onclick_button": {
|
||||
"no_click_handler": "Níl aon láimhseálaí cliceáil sainithe ag an ngiuirléid cnaipe '{{componentId}}'"
|
||||
@@ -811,7 +798,10 @@
|
||||
"board": "Bord",
|
||||
"presentation": "Cur i Láthair",
|
||||
"include_archived_notes": "Taispeáin nótaí cartlannaithe",
|
||||
"hide_child_notes": "Folaigh nótaí leanaí sa chrann"
|
||||
"hide_child_notes": "Folaigh nótaí leanaí sa chrann",
|
||||
"open_all_in_tabs": "Oscail gach rud",
|
||||
"open_all_in_tabs_tooltip": "Oscail na torthaí go léir i gcluaisíní nua",
|
||||
"open_all_confirm": "Osclóidh sé seo {{count}} nótaí i gcluaisíní nua. Lean ar aghaidh?"
|
||||
},
|
||||
"edited_notes": {
|
||||
"no_edited_notes_found": "Gan aon nótaí eagarthóireachta ar an lá seo go fóill...",
|
||||
@@ -865,7 +855,8 @@
|
||||
"collapse": "Laghdaigh go dtí an gnáthmhéid",
|
||||
"title": "Léarscáil Nótaí",
|
||||
"fix-nodes": "Deisigh nóid",
|
||||
"link-distance": "Fad naisc"
|
||||
"link-distance": "Fad naisc",
|
||||
"too-many-notes": "Tá {{count}} nótaí sa fho-chrann seo, rud a sháraíonn an teorainn {{max}} is féidir a thaispeáint sa léarscáil nótaí."
|
||||
},
|
||||
"note_paths": {
|
||||
"title": "Cosáin Nótaí",
|
||||
@@ -1070,7 +1061,8 @@
|
||||
"note_already_in_diagram": "Tabhair faoi deara go bhfuil \"{{title}}\" sa léaráid cheana féin.",
|
||||
"enter_title_of_new_note": "Cuir isteach teideal an nóta nua",
|
||||
"default_new_note_title": "nóta nua",
|
||||
"click_on_canvas_to_place_new_note": "Cliceáil ar chanbhás chun nóta nua a chur"
|
||||
"click_on_canvas_to_place_new_note": "Cliceáil ar chanbhás chun nóta nua a chur",
|
||||
"rename_relation": "Athainmnigh an gaol"
|
||||
},
|
||||
"backend_log": {
|
||||
"refresh": "Athnuachan"
|
||||
@@ -1079,15 +1071,17 @@
|
||||
"title": "Seiceálacha Comhsheasmhachta",
|
||||
"find_and_fix_button": "Fadhbanna comhsheasmhachta a aimsiú agus a shocrú",
|
||||
"finding_and_fixing_message": "Fadhbanna comhsheasmhachta a aimsiú agus a shocrú...",
|
||||
"issues_fixed_message": "Tá aon fhadhb chomhsheasmhachta a d'fhéadfadh a bheith aimsithe socraithe anois."
|
||||
"issues_fixed_message": "Tá aon fhadhb chomhsheasmhachta a d'fhéadfadh a bheith aimsithe socraithe anois.",
|
||||
"find_and_fix_label": "Fadhbanna comhsheasmhachta a aimsiú agus a shocrú",
|
||||
"find_and_fix_description": "Déan scanadh le haghaidh aon fhadhbanna comhsheasmhachta sonraí sa bhunachar sonraí agus déan iad a dheisiú go huathoibríoch."
|
||||
},
|
||||
"database_anonymization": {
|
||||
"title": "Anaithnidiú Bunachar Sonraí",
|
||||
"full_anonymization": "Anaithnidiú Iomlán",
|
||||
"full_anonymization_description": "Cruthóidh an gníomh seo cóip nua den bhunachar sonraí agus déanfaidh sé anaithnidiú air (bainfear gach ábhar nótaí agus fágfar struchtúr agus roinnt meiteashonraí neamhíogaire amháin) le go mbeidh sé in ann é a roinnt ar líne chun críocha dífhabhtaithe gan eagla go sceithfidh tú do shonraí pearsanta.",
|
||||
"full_anonymization": "Anaithnidiú iomlán",
|
||||
"full_anonymization_description": "Cruthaíonn sé cóip den bhunachar sonraí agus gach ábhar nótaí bainte, rud a fhágann struchtúr agus meiteashonraí neamhíogaire amháin. Sábháilte le roinnt ar líne agus fadhbanna dífhabhtaithe á ndífhabhtú.",
|
||||
"save_fully_anonymized_database": "Sábháil bunachar sonraí lán-anaithnid",
|
||||
"light_anonymization": "Anaithnidiú Éadrom",
|
||||
"light_anonymization_description": "Cruthóidh an gníomh seo cóip nua den bhunachar sonraí agus déanfaidh sé beagán anaithnidithe air — go sonrach ní bhainfear ach ábhar na nótaí go léir, ach fanfaidh teidil agus tréithe. Ina theannta sin, fanfaidh nótaí scripte tosaigh/cúil JS saincheaptha agus giuirléidí saincheaptha. Soláthraíonn sé seo níos mó comhthéacs chun na fadhbanna a dhífhabhtú.",
|
||||
"light_anonymization": "Anaithnidiú éadrom",
|
||||
"light_anonymization_description": "Cruthaíonn sé cóip agus ábhar na nótaí bainte de, ach fanann teidil, tréithe, agus scripteanna/giuirléidí saincheaptha ann. Soláthraíonn sé níos mó comhthéacs le haghaidh dífhabhtaithe.",
|
||||
"choose_anonymization": "Is féidir leat cinneadh a dhéanamh duit féin an mian leat bunachar sonraí atá anaithnid go hiomlán nó beagán gan ainm a sholáthar. Tá fiú bunachar sonraí atá anaithnid go hiomlán an-úsáideach, ach i gcásanna áirithe is féidir le bunachar sonraí atá anaithnid go héadrom an próiseas chun fabhtanna a aithint agus a shocrú a bhrostú.",
|
||||
"save_lightly_anonymized_database": "Sábháil bunachar sonraí atá anaithnidithe go héadrom",
|
||||
"existing_anonymized_databases": "Bunachair shonraí gan ainm atá ann cheana féin",
|
||||
@@ -1096,15 +1090,17 @@
|
||||
"error_creating_anonymized_database": "Níorbh fhéidir bunachar sonraí gan ainm a chruthú, seiceáil logaí an chúltaca le haghaidh sonraí",
|
||||
"successfully_created_fully_anonymized_database": "Cruthaíodh bunachar sonraí lán-anaithnid i {{anonymizedFilePath}}",
|
||||
"successfully_created_lightly_anonymized_database": "Cruthaíodh bunachar sonraí atá beagán anaithnid i {{anonymizedFilePath}}",
|
||||
"no_anonymized_database_yet": "Gan aon bhunachar sonraí anaithnidithe go fóill."
|
||||
"no_anonymized_database_yet": "Gan aon bhunachar sonraí anaithnidithe go fóill.",
|
||||
"description": "Cruthaigh cóip gan ainm de do bhunachar sonraí le roinnt le forbróirí agus fadhbanna á ndífhabhtú, gan sonraí pearsanta a nochtadh."
|
||||
},
|
||||
"database_integrity_check": {
|
||||
"title": "Seiceáil Ionracais Bunachar Sonraí",
|
||||
"description": "Déanfaidh sé seo seiceáil nach bhfuil an bunachar sonraí truaillithe ar leibhéal SQLite. D’fhéadfadh sé go dtógfadh sé tamall, ag brath ar mhéid an bhunachair shonraí.",
|
||||
"check_button": "Seiceáil sláine an bhunachair shonraí",
|
||||
"checking_integrity": "Ag seiceáil sláine an bhunachair shonraí...",
|
||||
"integrity_check_succeeded": "D’éirigh leis an tseiceáil ionracais - níor aimsíodh aon fhadhbanna.",
|
||||
"integrity_check_failed": "Theip ar an tseiceáil ionracais: {{results}}"
|
||||
"integrity_check_failed": "Theip ar an tseiceáil ionracais: {{results}}",
|
||||
"check_integrity_label": "Seiceáil sláine an bhunachair shonraí",
|
||||
"check_integrity_description": "Fíoraigh nach bhfuil an bunachar sonraí truaillithe ar leibhéal SQLite."
|
||||
},
|
||||
"sync": {
|
||||
"title": "Sioncrónaigh",
|
||||
@@ -1114,34 +1110,39 @@
|
||||
"filling_entity_changes": "Líonadh sraitheanna athruithe eintiteas...",
|
||||
"sync_rows_filled_successfully": "Líontar na sraitheanna sioncrónaithe go rathúil",
|
||||
"finished-successfully": "Críochnaíodh an sioncrónú go rathúil.",
|
||||
"failed": "Theip ar an sioncrónú: {{message}}"
|
||||
"failed": "Theip ar an sioncrónú: {{message}}",
|
||||
"force_full_sync_label": "Fórsaigh sioncrónú iomlán",
|
||||
"force_full_sync_description": "Spreag sioncrónú iomlán leis an bhfreastalaí sioncrónaithe, ag ath-uaslódáil na hathruithe go léir.",
|
||||
"fill_entity_changes_label": "Athruithe eintitis líonta",
|
||||
"fill_entity_changes_description": "Athchruthaigh taifid athraithe eintitis. Bain úsáid as seo má tá roinnt athruithe ar iarraidh sa sioncrónú."
|
||||
},
|
||||
"vacuum_database": {
|
||||
"title": "Bunachar Sonraí Folúis",
|
||||
"description": "Déanfaidh sé seo an bunachar sonraí a atógáil agus de ghnáth beidh comhad bunachar sonraí níos lú mar thoradh air. Ní athrófar aon sonraí i ndáiríre.",
|
||||
"button_text": "Bunachar sonraí folúis",
|
||||
"vacuuming_database": "Bunachar sonraí folúsghlanadh...",
|
||||
"database_vacuumed": "Tá an bunachar sonraí folúsghlanaithe"
|
||||
"database_vacuumed": "Tá an bunachar sonraí folúsghlanaithe",
|
||||
"vacuum_label": "Bunachar sonraí folúis",
|
||||
"vacuum_description": "Athchruthaigh an bunachar sonraí chun méid an chomhaid a laghdú. Ní athrófar aon sonraí."
|
||||
},
|
||||
"experimental_features": {
|
||||
"title": "Roghanna Turgnamhacha",
|
||||
"disclaimer": "Is roghanna turgnamhacha iad seo agus d’fhéadfadh éagobhsaíocht a bheith mar thoradh orthu. Bain úsáid astu go cúramach.",
|
||||
"new_layout_name": "Leagan Amach Nua",
|
||||
"new_layout_description": "Bain triail as an leagan amach nua le haghaidh cuma níos nua-aimseartha agus inúsáidteachta feabhsaithe. Tá sé faoi réir athruithe móra sna heisiúintí atá le teacht."
|
||||
"new_layout_description": "Bain triail as an leagan amach nua le haghaidh cuma níos nua-aimseartha agus inúsáidteachta feabhsaithe. Tá sé faoi réir athruithe móra sna heisiúintí atá le teacht.",
|
||||
"llm_name": "Comhrá AI / LLM",
|
||||
"llm_description": "Cumasaigh an taobhbharra comhrá AI agus nótaí comhrá LLM faoi thiomáint ag samhlacha teanga móra."
|
||||
},
|
||||
"fonts": {
|
||||
"theme_defined": "Téama sainmhínithe",
|
||||
"fonts": "Clónna",
|
||||
"main_font": "Príomhchló",
|
||||
"main_font": "Téacs comhéadain",
|
||||
"font_family": "Teaghlach clónna",
|
||||
"size": "Méid",
|
||||
"note_tree_font": "Cló Crann Nótaí",
|
||||
"note_detail_font": "Cló Sonraí Nóta",
|
||||
"monospace_font": "Cló Aonspáis (cód)",
|
||||
"note_tree_and_detail_font_sizing": "Tabhair faoi deara go bhfuil méid an chló crainn agus mionsonraí i gcoibhneas leis an bpríomhshocrú méid cló.",
|
||||
"not_all_fonts_available": "B’fhéidir nach bhfuil na clónna uile atá liostaithe ar fáil ar do chóras.",
|
||||
"apply_font_changes": "Chun athruithe cló a chur i bhfeidhm, cliceáil ar",
|
||||
"reload_frontend": "athlódáil tosaigh",
|
||||
"note_tree_font": "Téacs crann nótaí",
|
||||
"note_detail_font": "Téacs an doiciméid",
|
||||
"monospace_font": "Téacs aonspáis",
|
||||
"not_all_fonts_available": "B’fhéidir nach bhfuil na clónna uile atá liostaithe ar fáil ar do chóras",
|
||||
"generic-fonts": "Clónna ginearálta",
|
||||
"sans-serif-system-fonts": "Clónna córais Sans-serif",
|
||||
"serif-system-fonts": "Clónna córais Serif",
|
||||
@@ -1150,7 +1151,12 @@
|
||||
"serif": "Serif",
|
||||
"sans-serif": "Sans Serif",
|
||||
"monospace": "Aonspás",
|
||||
"system-default": "Réamhshocrú an chórais"
|
||||
"system-default": "Réamhshocrú an chórais",
|
||||
"custom_fonts": "Úsáid clónna saincheaptha",
|
||||
"preview": "Réamhamharc",
|
||||
"monospace_font_description": "Úsáidte le haghaidh nótaí cóid agus bloic cóid",
|
||||
"size_relative_to_general": "Tá an méid i gcoibhneas leis an méid cló ginearálta",
|
||||
"apply_changes": "Athlódáil chun na hathruithe a chur i bhfeidhm"
|
||||
},
|
||||
"max_content_width": {
|
||||
"title": "Leithead an Ábhair",
|
||||
@@ -1170,28 +1176,31 @@
|
||||
"edited_notes_message": "Osclófar an cluaisín ribín Nótaí Eagarthóireachta go huathoibríoch ar nótaí lae"
|
||||
},
|
||||
"theme": {
|
||||
"title": "Téama an Iarratais",
|
||||
"theme_label": "Téama",
|
||||
"title": "Comhéadan Úsáideora",
|
||||
"theme_label": "Téama an iarratais",
|
||||
"override_theme_fonts_label": "Sáraigh clónna téama",
|
||||
"auto_theme": "Seanchóras (Lean scéim dathanna an chórais)",
|
||||
"light_theme": "Oidhreacht (Éadrom)",
|
||||
"dark_theme": "Oidhreacht (Dorcha)",
|
||||
"triliumnext": "Trilium (Lean scéim dathanna an chórais)",
|
||||
"triliumnext-light": "Trilium (Éadrom)",
|
||||
"triliumnext-dark": "Trilium (Dorcha)",
|
||||
"auto_theme": "Lean scéim dathanna an chórais",
|
||||
"light_theme": "Solas",
|
||||
"dark_theme": "Dorcha",
|
||||
"triliumnext": "Lean scéim dathanna an chórais",
|
||||
"triliumnext-light": "Solas",
|
||||
"triliumnext-dark": "Dorcha",
|
||||
"layout": "Leagan Amach",
|
||||
"layout-vertical-title": "Ingearach",
|
||||
"layout-horizontal-title": "Cothrománach",
|
||||
"layout-vertical-description": "tá barra lainseála ar chlé (réamhshocraithe)",
|
||||
"layout-horizontal-description": "Tá barra an lainseálaí faoin mbarra cluaisín, tá an barra cluaisín lánleithead anois."
|
||||
"layout-horizontal-description": "Tá barra an lainseálaí faoin mbarra cluaisín, tá an barra cluaisín lánleithead anois.",
|
||||
"modern_themes": "Nua-Aimseartha",
|
||||
"legacy_themes": "Oidhreacht",
|
||||
"custom_themes": "Saincheaptha"
|
||||
},
|
||||
"ui-performance": {
|
||||
"title": "Feidhmíocht",
|
||||
"enable-motion": "Cumasaigh aistrithe agus beochana",
|
||||
"enable-shadows": "Cumasaigh scáthanna",
|
||||
"enable-backdrop-effects": "Cumasaigh éifeachtaí cúlra do bhiachláir, fuinneoga aníos agus painéil",
|
||||
"enable-smooth-scroll": "Cumasaigh scrollú réidh",
|
||||
"app-restart-required": "(tá atosú an fheidhmchláir ag teastáil chun an t-athrú a chur i bhfeidhm)"
|
||||
"enable-motion": "Aistrithe agus beochana",
|
||||
"enable-shadows": "Scáthanna",
|
||||
"enable-backdrop-effects": "Éifeachtaí cúlra do bhiachláir, fuinneoga aníos agus painéil",
|
||||
"enable-smooth-scroll": "Scrolláil réidh",
|
||||
"app-restart-required": "Éilíonn atosú an aip"
|
||||
},
|
||||
"zoom_factor": {
|
||||
"title": "Fachtóir Súmáil (leagan deisce amháin)",
|
||||
@@ -1200,11 +1209,13 @@
|
||||
"code_auto_read_only_size": {
|
||||
"title": "Méid Uathoibríoch Léite Amháin",
|
||||
"description": "Is é méid uathoibríoch nótaí inléite amháin an méid tar éis a dtaispeánfar nótaí i mód inléite amháin (ar chúiseanna feidhmíochta).",
|
||||
"label": "Méid inléite amháin uathoibríoch (nótaí cóid)",
|
||||
"label": "Méid inléite amháin uathoibríoch",
|
||||
"unit": "carachtair"
|
||||
},
|
||||
"code-editor-options": {
|
||||
"title": "Eagarthóir"
|
||||
"title": "Eagarthóir",
|
||||
"tab_width": "Leithead an chluaisín",
|
||||
"tab_width_unit": "spásanna"
|
||||
},
|
||||
"code_mime_types": {
|
||||
"title": "Cineálacha MIME atá ar fáil sa roghchlár anuas",
|
||||
@@ -1222,69 +1233,94 @@
|
||||
},
|
||||
"images": {
|
||||
"images_section_title": "Íomhánna",
|
||||
"download_images_automatically": "Íoslódáil íomhánna go huathoibríoch le húsáid as líne.",
|
||||
"download_images_description": "Is féidir tagairtí d’íomhánna ar líne a bheith i HTML greamaithe, aimseoidh Trilium na tagairtí sin agus íoslódálfaidh sé na híomhánna ionas go mbeidh siad ar fáil as líne.",
|
||||
"enable_image_compression": "Cumasaigh comhbhrú íomhá",
|
||||
"max_image_dimensions": "Uasleithead/airde íomhá (athrófar méid na híomhá má sháraíonn sí an socrú seo).",
|
||||
"download_images_automatically": "Íomhánna a íoslódáil go huathoibríoch",
|
||||
"download_images_description": "Íoslódáil íomhánna tagartha ar líne ó HTML greamaithe ionas go mbeidh siad ar fáil as líne.",
|
||||
"enable_image_compression": "Comhbhrú íomhá",
|
||||
"max_image_dimensions": "Uasmhéid toisí íomhá",
|
||||
"max_image_dimensions_unit": "picteilíní",
|
||||
"jpeg_quality_description": "Cáilíocht JPEG (10 - an caighdeán is measa, 100 - an caighdeán is fearr, moltar 50 - 85)"
|
||||
"jpeg_quality_description": "Is é an raon molta ná 50–85. Laghdaíonn luachanna níos ísle méid an chomhaid, agus coinníonn luachanna níos airde sonraí.",
|
||||
"enable_image_compression_description": "Comhbhrúigh agus athraigh méid íomhánna nuair a uaslódálfar nó a ghreamaítear iad.",
|
||||
"max_image_dimensions_description": "Athrófar méid íomhánna a sháraíonn an méid seo go huathoibríoch.",
|
||||
"jpeg_quality": "Cáilíocht JPEG",
|
||||
"ocr_section_title": "Eastóscadh Téacs (OCR)",
|
||||
"ocr_related_content_languages": "Teangacha ábhair (a úsáidtear le haghaidh eastóscadh téacs)",
|
||||
"ocr_auto_process": "Próiseáil comhaid nua go huathoibríoch",
|
||||
"ocr_auto_process_description": "Bain téacs go huathoibríoch as comhaid atá uaslódáilte nó greamaithe le déanaí.",
|
||||
"ocr_min_confidence": "Íosmhuinín",
|
||||
"ocr_confidence_description": "Ná bain ach téacs os cionn an tairsí muiníne seo. Cuimsíonn luachanna níos ísle níos mó téacs ach d'fhéadfadh siad a bheith níos lú cruinn.",
|
||||
"batch_ocr_title": "Próiseáil Comhaid atá ann cheana",
|
||||
"batch_ocr_description": "Bain téacs as na híomhánna, na PDFanna agus na doiciméid Office go léir atá i do nótaí. D’fhéadfadh sé seo roinnt ama a thógáil ag brath ar líon na gcomhad.",
|
||||
"batch_ocr_start": "Tosaigh Próiseáil Bhaisc",
|
||||
"batch_ocr_starting": "Ag tosú próiseáil bhaisc...",
|
||||
"batch_ocr_progress": "Ag próiseáil {{processed}} de {{total}} comhad...",
|
||||
"batch_ocr_completed": "Próiseáil bhaisc críochnaithe! Próiseáladh {{processed}} comhad.",
|
||||
"batch_ocr_error": "Earráid le linn próiseála baisce: {{error}}"
|
||||
},
|
||||
"attachment_erasure_timeout": {
|
||||
"attachment_erasure_timeout": "Am Teorann Scriosadh Ceangaltáin",
|
||||
"attachment_auto_deletion_description": "Scriostar ceangaltáin go huathoibríoch (agus scriostar iad) mura ndéantar tagairt dóibh ina nóta a thuilleadh tar éis tréimhse ama socraithe.",
|
||||
"erase_attachments_after": "Scrios ceangaltáin neamhúsáidte tar éis:",
|
||||
"manual_erasing_description": "Is féidir leat scriosadh a spreagadh de láimh freisin (gan an t-am críochnaithe a shainmhínítear thuas a chur san áireamh):",
|
||||
"erase_unused_attachments_now": "Scrios nótaí ceangaltáin neamhúsáidte anois",
|
||||
"unused_attachments_erased": "Scriosadh ceangaltáin neamhúsáidte."
|
||||
"attachment_erasure_timeout": "Ceangaltáin Neamhúsáidte",
|
||||
"erase_attachments_after": "Scrios ceangaltáin neamhúsáidte ina dhiaidh sin",
|
||||
"manual_erasing_description": "Spreag scriosadh de láimh, ag neamhaird den am scoir thuas.",
|
||||
"erase_unused_attachments_now": "Scrios ceangaltáin neamhúsáidte anois",
|
||||
"unused_attachments_erased": "Scriosadh ceangaltáin neamhúsáidte.",
|
||||
"description": "Meastar nach n-úsáidtear ceangaltáin nach ndéantar tagairt dóibh a thuilleadh in aon nóta agus is féidir iad a scriosadh go huathoibríoch tar éis tréimhse ama.",
|
||||
"erase_attachments_after_description": "Am sula scriostar ceangaltáin neamhúsáidte go buan."
|
||||
},
|
||||
"network_connections": {
|
||||
"network_connections_title": "Naisc Líonra",
|
||||
"check_for_updates": "Seiceáil le haghaidh nuashonruithe go huathoibríoch"
|
||||
"network_connections_title": "Líonra",
|
||||
"check_for_updates": "Seiceáil le haghaidh nuashonruithe go huathoibríoch",
|
||||
"check_for_updates_description": "Seiceálann sé le haghaidh leaganacha nua ar GitHub agus taispeánann sé fógra sa roghchlár domhanda nuair a bhíonn sé ar fáil."
|
||||
},
|
||||
"note_erasure_timeout": {
|
||||
"note_erasure_timeout_title": "Am Scriosadh Nótaí",
|
||||
"note_erasure_description": "Ní dhéantar nótaí scriosta (agus tréithe, athbhreithnithe...) a mharcáil ach mar scriosta ar dtús agus is féidir iad a aisghabháil ón dialóg Nótaí Le Déanaí. Tar éis tamaill, déantar nótaí scriosta a \"scriosadh\" rud a chiallaíonn nach féidir a n-ábhar a aisghabháil a thuilleadh. Ligeann an socrú seo duit fad na tréimhse idir an nóta a scriosadh agus a scriosadh a chumrú.",
|
||||
"erase_notes_after": "Scrios nótaí tar éis:",
|
||||
"manual_erasing_description": "Is féidir leat scriosadh a spreagadh de láimh freisin (gan an t-am críochnaithe a shainmhínítear thuas a chur san áireamh):",
|
||||
"note_erasure_timeout_title": "Nótaí Scriosta",
|
||||
"erase_notes_after": "Scrios nótaí ina dhiaidh",
|
||||
"manual_erasing_description": "Spreag scriosadh de láimh, ag neamhaird den am scoir thuas.",
|
||||
"erase_deleted_notes_now": "Scrios nótaí scriosta anois",
|
||||
"deleted_notes_erased": "Tá nótaí scriosta scriosta."
|
||||
"deleted_notes_erased": "Tá nótaí scriosta scriosta.",
|
||||
"description": "Ní dhéantar nótaí scriosta a mharcáil ach mar scriosta ar dtús agus is féidir iad a aisghabháil ó Nótaí Le Déanaí. Tar éis tamaill, scriostar go buan iad.",
|
||||
"erase_notes_after_description": "An t-am sula scriostar nótaí scriosta go buan."
|
||||
},
|
||||
"revisions_snapshot_interval": {
|
||||
"note_revisions_snapshot_interval_title": "Eatramh Léirmheasa ar Nóta",
|
||||
"note_revisions_snapshot_description": "Is é an t-eatramh pictiúr athbhreithnithe nóta an t-am ina dhiaidh a chruthófar athbhreithniú nóta nua don nóta. Féach <doc>vicí</doc> le haghaidh tuilleadh eolais.",
|
||||
"snapshot_time_interval_label": "Eatramh ama pictiúr athbhreithnithe nóta:"
|
||||
"snapshot_time_interval_label": "Eatramh pictiúr",
|
||||
"note_revisions_snapshot_description_short": "An t-am a gcruthófar athbhreithniú nóta nua ina dhiaidh."
|
||||
},
|
||||
"revisions_snapshot_limit": {
|
||||
"note_revisions_snapshot_limit_title": "Teorainn ar Ghrianghraf Athbhreithnithe Nóta",
|
||||
"note_revisions_snapshot_limit_description": "Tagraíonn an teorainn ar líon na n-athbhreithnithe nótaí don líon uasta athbhreithnithe is féidir a shábháil do gach nóta. Ciallaíonn -1 gan aon teorainn, ciallaíonn 0 scriosadh na hathbhreithnithe go léir. Is féidir leat an líon uasta athbhreithnithe a shocrú do nóta aonair tríd an lipéad #versioningLimit.",
|
||||
"snapshot_number_limit_label": "Teorainn líon na n-íomhánna athbhreithnithe nóta:",
|
||||
"snapshot_number_limit_label": "Uasmhéid athbhreithnithe",
|
||||
"snapshot_number_limit_unit": "léargais",
|
||||
"erase_excess_revision_snapshots": "Scrios na léargais athbhreithnithe breise anois",
|
||||
"erase_excess_revision_snapshots_prompt": "Scriosadh na léargais bhreise athbhreithnithe."
|
||||
"erase_excess_revision_snapshots_prompt": "Scriosadh na léargais bhreise athbhreithnithe.",
|
||||
"note_revisions_snapshot_limit_description_short": "Uasmhéid athbhreithnithe in aghaidh an nóta. Úsáid -1 le haghaidh neamhtheoranta, 0 le díchumasú.",
|
||||
"erase_excess_revision_snapshots_description": "Scrios athbhreithnithe a sháraíonn an teorainn do na nótaí uile."
|
||||
},
|
||||
"search_engine": {
|
||||
"title": "Inneall Cuardaigh",
|
||||
"custom_search_engine_info": "Éilíonn inneall cuardaigh saincheaptha go socrófar ainm agus URL araon. Mura socraítear ceachtar acu seo, úsáidfear DuckDuckGo mar an t-inneall cuardaigh réamhshocraithe.",
|
||||
"predefined_templates_label": "Teimpléid inneall cuardaigh réamhshainithe",
|
||||
"custom_search_engine_info": "Úsáidtear é seo agus téacs roghnaithe á chuardach ar an ngréasán. Mura bhfuil sé cumraithe, úsáidfear DuckDuckGo.",
|
||||
"predefined_templates_label": "Réamhshocruithe",
|
||||
"bing": "Bing",
|
||||
"baidu": "Baidu",
|
||||
"duckduckgo": "DuckDuckGo",
|
||||
"google": "Google",
|
||||
"custom_name_label": "Ainm innill chuardaigh saincheaptha",
|
||||
"custom_name_placeholder": "Saincheap ainm an innill chuardaigh",
|
||||
"custom_url_label": "Ba chóir go mbeadh {keyword} san áireamh mar áitchoinneálaí don téarma cuardaigh i URL inneall cuardaigh saincheaptha.",
|
||||
"custom_url_placeholder": "Saincheap url an innill chuardaigh",
|
||||
"save_button": "Sábháil"
|
||||
"custom_name_label": "Ainm",
|
||||
"custom_name_placeholder": "Ainm an innill chuardaigh",
|
||||
"custom_url_label": "URL",
|
||||
"custom_url_placeholder": "URL inneall cuardaigh",
|
||||
"save_button": "Sábháil",
|
||||
"custom_url_description": "Úsáid {keyword} mar áitchoinneálaí don téarma cuardaigh."
|
||||
},
|
||||
"tray": {
|
||||
"title": "Tráidire an Chórais",
|
||||
"enable_tray": "Cumasaigh an tráidire (ní mór Trilium a atosú le go dtiocfaidh an t-athrú seo i bhfeidhm)"
|
||||
"enable_tray": "Deilbhín tráidire",
|
||||
"enable_tray_description": "Caithfear Trilium a atosú chun go dtiocfaidh an t-athrú seo i bhfeidhm."
|
||||
},
|
||||
"heading_style": {
|
||||
"title": "Stíl Ceannteidil",
|
||||
"title": "Stíl ceannteidil",
|
||||
"plain": "Simplí",
|
||||
"underline": "Folínigh",
|
||||
"markdown": "Stíl marcála síos"
|
||||
"markdown": "Stíl marcála síos",
|
||||
"description": "Stíl amhairc do cheannteidil i nótaí téacs."
|
||||
},
|
||||
"highlights_list": {
|
||||
"title": "Liosta Buaicphointí",
|
||||
@@ -1308,14 +1344,16 @@
|
||||
"text_auto_read_only_size": {
|
||||
"title": "Méid Uathoibríoch Léite Amháin",
|
||||
"description": "Is é méid uathoibríoch nótaí inléite amháin an méid tar éis a dtaispeánfar nótaí i mód inléite amháin (ar chúiseanna feidhmíochta).",
|
||||
"label": "Méid inléite amháin uathoibríoch (nótaí téacs)",
|
||||
"label": "Méid inléite amháin uathoibríoch",
|
||||
"unit": "carachtair"
|
||||
},
|
||||
"custom_date_time_format": {
|
||||
"title": "Formáid Dáta/Am Saincheaptha",
|
||||
"title": "Formáid dáta/ama",
|
||||
"description": "Saincheap formáid an dáta agus an ama a chuirtear isteach trí <shortcut /> nó an barra uirlisí. Féach ar <doc>doiciméid Day.js</doc> le haghaidh na gcomharthaí formáide atá ar fáil.",
|
||||
"format_string": "Formáid teaghrán:",
|
||||
"formatted_time": "Dáta/am formáidithe:"
|
||||
"format_string": "Formáid teaghrán",
|
||||
"formatted_time": "Dáta/am formáidithe",
|
||||
"description_short": "Saincheap formáid an dáta agus an ama a chuirtear isteach tríd an mbarra uirlisí.",
|
||||
"preview": "Réamhamharc: {{preview}}"
|
||||
},
|
||||
"i18n": {
|
||||
"title": "Logánú",
|
||||
@@ -1330,20 +1368,19 @@
|
||||
"sunday": "Dé Domhnaigh",
|
||||
"first-week-of-the-year": "An chéad seachtain den bhliain",
|
||||
"first-week-contains-first-day": "Tá an chéad lá den bhliain sa chéad seachtain",
|
||||
"first-week-contains-first-thursday": "Tá an chéad Déardaoin den bhliain sa chéad seachtain",
|
||||
"first-week-contains-first-thursday": "Tá an chéad Déardaoin sa chéad seachtain (ISO 8601)",
|
||||
"first-week-has-minimum-days": "Tá an chéad seachtain ag an íosmhéid laethanta",
|
||||
"min-days-in-first-week": "Íosmhéid laethanta sa chéad seachtain",
|
||||
"first-week-info": "Tá an chéad seachtain ina bhfuil an chéad Déardaoin den bhliain bunaithe ar chaighdeán <a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a>.",
|
||||
"first-week-warning": "D’fhéadfadh sé go mbeadh dúblach le Nótaí Seachtaine atá ann cheana féin mar thoradh ar athrú roghanna na chéad seachtaine agus ní dhéanfar na Nótaí Seachtaine atá ann cheana a nuashonrú dá réir.",
|
||||
"first-week-warning": "D’fhéadfadh sé go mbeadh dúblaigh le Nótaí Seachtaine atá ann cheana féin mar thoradh ar athrú seo.",
|
||||
"formatting-locale": "Formáid dáta agus uimhreach",
|
||||
"formatting-locale-auto": "Bunaithe ar theanga an fheidhmchláir"
|
||||
},
|
||||
"backup": {
|
||||
"automatic_backup": "Cúltaca uathoibríoch",
|
||||
"automatic_backup_description": "Is féidir le Trilium cúltaca den bhunachar sonraí a dhéanamh go huathoibríoch:",
|
||||
"enable_daily_backup": "Cumasaigh cúltaca laethúil",
|
||||
"enable_weekly_backup": "Cumasaigh cúltaca seachtainiúil",
|
||||
"enable_monthly_backup": "Cumasaigh cúltaca míosúil",
|
||||
"enable_daily_backup": "Cúltaca laethúil",
|
||||
"enable_weekly_backup": "Cúltaca seachtainiúil",
|
||||
"enable_monthly_backup": "Cúltaca míosúil",
|
||||
"backup_recommendation": "Moltar an cúltaca a choinneáil casta air, ach is féidir leis seo moill a chur ar thosú feidhmchlár le bunachair shonraí móra agus/nó gléasanna stórála mall.",
|
||||
"backup_now": "Cúltaca anois",
|
||||
"backup_database_now": "Cúltaca bunachar sonraí anois",
|
||||
@@ -1351,7 +1388,9 @@
|
||||
"date-and-time": "Dáta & am",
|
||||
"path": "Cosán",
|
||||
"database_backed_up_to": "Tá cúltaca déanta den bhunachar sonraí chuig {{backupFilePath}}",
|
||||
"no_backup_yet": "gan aon chúltaca fós"
|
||||
"no_backup_yet": "gan aon chúltaca fós",
|
||||
"download": "Íoslódáil",
|
||||
"title": "Cúltaca"
|
||||
},
|
||||
"etapi": {
|
||||
"title": "ETAPI",
|
||||
@@ -1386,18 +1425,22 @@
|
||||
"new_password": "Pasfhocal nua",
|
||||
"new_password_confirmation": "Deimhniú pasfhocail nua",
|
||||
"change_password": "Athraigh an focal faire",
|
||||
"protected_session_timeout": "Am Teorann Seisiúin Chosanta",
|
||||
"protected_session_timeout_description": "Is tréimhse ama í an t-am scoir seisiúin chosanta a scriostar an seisiún cosanta ó chuimhne an bhrabhsálaí ina dhiaidh. Déantar é seo a thomhas ón idirghníomhaíocht dheireanach le nótaí cosanta. Féach",
|
||||
"protected_session_timeout": "Seisiún faoi Chosaint",
|
||||
"protected_session_timeout_description": "Am neamhghníomhaíochta sula nglanfar an seisiún ó chuimhne an bhrabhsálaí. Féach",
|
||||
"wiki": "vicí",
|
||||
"for_more_info": "le haghaidh tuilleadh eolais.",
|
||||
"protected_session_timeout_label": "Am scoir seisiúin faoi chosaint:",
|
||||
"protected_session_timeout_label": "Dún seisiún go huathoibríoch ina dhiaidh sin",
|
||||
"reset_confirmation": "Trí an focal faire a athshocrú caillfidh tú rochtain go deo ar do nótaí cosanta go léir atá ann cheana féin. An bhfuil tú cinnte gur mhaith leat an focal faire a athshocrú?",
|
||||
"reset_success_message": "Athshocraíodh an focal faire. Socraigh focal faire nua le do thoil",
|
||||
"change_password_heading": "Athraigh Pasfhocal",
|
||||
"set_password_heading": "Socraigh Pasfhocal",
|
||||
"set_password": "Socraigh Pasfhocal",
|
||||
"password_mismatch": "Ní hionann pasfhocail nua.",
|
||||
"password_changed_success": "Athraíodh an focal faire. Athlódálfar Trilium tar éis duit brúigh OK."
|
||||
"password_changed_success": "Athraíodh an focal faire. Athlódálfar Trilium tar éis duit brúigh OK.",
|
||||
"change_password_description": "Nuashonraigh do phasfhocal reatha",
|
||||
"reset_password": "Athshocraigh an focal faire",
|
||||
"reset_password_description": "Caill rochtain ar nótaí faoi chosaint go buan",
|
||||
"cancel": "Cealaigh"
|
||||
},
|
||||
"multi_factor_authentication": {
|
||||
"title": "Fíordheimhniú Ilfhachtóireach",
|
||||
@@ -1449,28 +1492,30 @@
|
||||
"spellcheck": {
|
||||
"title": "Seiceáil Litrithe",
|
||||
"description": "Ní bhaineann na roghanna seo ach le leaganacha deisce, úsáidfidh brabhsálaithe a seiceáil litrithe dúchasach féin.",
|
||||
"enable": "Cumasaigh seiceáil litrithe",
|
||||
"language_code_label": "Cód(anna) teanga",
|
||||
"language_code_placeholder": "mar shampla \"en-US\", \"de-AT\"",
|
||||
"multiple_languages_info": "Is féidir camóg a úsáid chun teangacha iolracha a dheighilt óna chéile, m.sh. \"en-US, de-DE, cs\". ",
|
||||
"available_language_codes_label": "Cóid teanga atá ar fáil:",
|
||||
"restart-required": "Tiocfaidh athruithe ar na roghanna seiceála litrithe i bhfeidhm tar éis atosú an fheidhmchláir."
|
||||
"enable": "Seiceáil litriú",
|
||||
"language_code_label": "Seiceáil Litrithe Teangacha",
|
||||
"restart-required": "Tiocfaidh athruithe ar na roghanna seiceála litrithe i bhfeidhm tar éis atosú an fheidhmchláir.",
|
||||
"custom_dictionary_title": "Foclóir Saincheaptha",
|
||||
"custom_dictionary_description": "Déantar focail a chuirtear leis an bhfoclóir a sioncrónú ar fud do ghléasanna go léir.",
|
||||
"custom_dictionary_edit": "Focail saincheaptha",
|
||||
"custom_dictionary_edit_description": "Cuir an liosta focal in eagar nach ceart don seiceálaí litrithe a mharcáil. Beidh athruithe le feiceáil tar éis atosaithe.",
|
||||
"custom_dictionary_open": "Cuir an foclóir in eagar",
|
||||
"related_description": "Cumraigh teangacha seiceála litrithe agus foclóir saincheaptha."
|
||||
},
|
||||
"sync_2": {
|
||||
"config_title": "Cumraíocht Sioncrónaithe",
|
||||
"server_address": "Seoladh sampla an fhreastalaí",
|
||||
"timeout": "Am scoir sioncrónaithe",
|
||||
"timeout_unit": "milleasoicindí",
|
||||
"proxy_label": "Sioncrónaigh freastalaí seachfhreastalaí (roghnach)",
|
||||
"note": "Nóta",
|
||||
"note_description": "Má fhágann tú an socrú seachfhreastalaí bán, úsáidfear seachfhreastalaí an chórais (baineann sé le tógáil deisce/leictreon amháin).",
|
||||
"special_value_description": "Luach speisialta eile is ea <code>noproxy</code> a chuireann iallach neamhaird a dhéanamh fiú ar an seachfhreastalaí córais agus a thugann meas ar <code>NODE_TLS_REJECT_UNAUTHORIZED</code>.",
|
||||
"config_title": "Freastalaí Sioncrónaithe",
|
||||
"server_address": "Seoladh an fhreastalaí",
|
||||
"timeout": "Am críochnaithe nasc",
|
||||
"proxy_label": "Freastalaí seachfhreastalaí",
|
||||
"save": "Sábháil",
|
||||
"help": "Cabhair",
|
||||
"test_title": "Tástáil Sioncrónaithe",
|
||||
"test_description": "Déanfaidh sé seo tástáil ar an nasc agus ar an gcroitheadh láimhe leis an bhfreastalaí sioncrónaithe. Mura bhfuil an freastalaí sioncrónaithe tosaithe, socróidh sé seo é chun sioncrónú leis an doiciméad áitiúil.",
|
||||
"test_title": "Tástáil Ceangal",
|
||||
"test_description": "Déan tástáil ar an nasc leis an bhfreastalaí sioncrónaithe. Mura ndéantar é a thosú, socróidh sé seo sioncrónú.",
|
||||
"test_button": "Tástáil sioncrónaithe",
|
||||
"handshake_failed": "Theip ar chroitheadh láimhe an fhreastalaí sioncrónaithe, earráid: {{message}}"
|
||||
"handshake_failed": "Theip ar chroitheadh láimhe an fhreastalaí sioncrónaithe, earráid: {{message}}",
|
||||
"timeout_description": "Am fanacht sula dtugann tú suas ar nasc mall.",
|
||||
"server_address_description": "URL an fhreastalaí Trilium le sioncrónú leis.",
|
||||
"proxy_description": "Fág bán chun seachfhreastalaí córais a úsáid (deasc amháin). Bain úsáid as \"noproxy\" chun na seachfhreastalaithe go léir a sheachaint."
|
||||
},
|
||||
"api_log": {
|
||||
"close": "Dún"
|
||||
@@ -1572,7 +1617,9 @@
|
||||
"task-list": "Liosta Tascanna",
|
||||
"new-feature": "Nua",
|
||||
"collections": "Bailiúcháin",
|
||||
"spreadsheet": "Scarbhileog"
|
||||
"spreadsheet": "Scarbhileog",
|
||||
"llm-chat": "Comhrá AI",
|
||||
"markdown": "Markdown"
|
||||
},
|
||||
"protect_note": {
|
||||
"toggle-on": "Cosain an nóta",
|
||||
@@ -1655,7 +1702,7 @@
|
||||
"note_detail": {
|
||||
"could_not_find_typewidget": "Níorbh fhéidir typeWidget a aimsiú don chineál '{{type}}'",
|
||||
"printing": "Priontáil ar siúl...",
|
||||
"printing_pdf": "Ag easpórtáil go PDF ar siúl...",
|
||||
"printing_pdf": "Réamhamharc priontála á ullmhú...",
|
||||
"print_report_title": "Tuarascáil a phriontáil",
|
||||
"print_report_collection_content_one": "Níorbh fhéidir nóta {{count}} sa bhailiúchán a phriontáil mar nach dtacaítear leo nó mar go bhfuil siad faoi chosaint.",
|
||||
"print_report_collection_content_two": "Níorbh fhéidir {{count}} nótaí sa bhailiúchán a phriontáil mar nach dtacaítear leo nó mar go bhfuil siad faoi chosaint.",
|
||||
@@ -1737,7 +1784,9 @@
|
||||
"entrypoints": {
|
||||
"note-revision-created": "Cruthaíodh athbhreithniú nóta.",
|
||||
"note-executed": "Nóta curtha i gcrích.",
|
||||
"sql-error": "Tharla earráid agus fiosrúchán SQL á fhorghníomhú: {{message}}"
|
||||
"sql-error": "Tharla earráid agus fiosrúchán SQL á fhorghníomhú: {{message}}",
|
||||
"save-named-revision-title": "Sábháil athbhreithniú ainmnithe",
|
||||
"save-named-revision-message": "Cuir isteach ainm don athbhreithniú seo (fág folamh mura bhfuil ainm ar bith ann):"
|
||||
},
|
||||
"branches": {
|
||||
"cannot-move-notes-here": "Ní féidir nótaí a bhogadh anseo.",
|
||||
@@ -1783,7 +1832,10 @@
|
||||
"theme_none": "Gan aon aibhsiú comhréire",
|
||||
"theme_group_light": "Téamaí éadroma",
|
||||
"theme_group_dark": "Téamaí dorcha",
|
||||
"copy_title": "Cóipeáil chuig an ghearrthaisce"
|
||||
"copy_title": "Cóipeáil chuig an ghearrthaisce",
|
||||
"click_to_copy": "Cliceáil chun cóipeáil",
|
||||
"tab_width": "Leithead an chluaisín",
|
||||
"tab_width_unit": "spásanna"
|
||||
},
|
||||
"classic_editor_toolbar": {
|
||||
"title": "Formáidiú"
|
||||
@@ -1802,7 +1854,8 @@
|
||||
"title": "Seasta",
|
||||
"description": "Feictear uirlisí eagarthóireachta sa chluaisín ribín \"Formáidiú\"."
|
||||
},
|
||||
"multiline-toolbar": "Taispeáin an barra uirlisí ar illínte mura n-oireann sé."
|
||||
"multiline-toolbar": "Taispeáin an barra uirlisí ar illínte mura n-oireann sé",
|
||||
"toolbar_style": "Stíl an bharra uirlisí"
|
||||
}
|
||||
},
|
||||
"electron_context_menu": {
|
||||
@@ -1869,7 +1922,7 @@
|
||||
"days": "Laethanta"
|
||||
},
|
||||
"share": {
|
||||
"title": "Socruithe Comhroinnte",
|
||||
"title": "Comhroinn",
|
||||
"redirect_bare_domain": "Atreoraigh fearann lom chuig an leathanach Comhroinnte",
|
||||
"redirect_bare_domain_description": "Atreoraigh úsáideoirí gan ainm chuig an leathanach Comhroinnte in ionad Logáil Isteach a thaispeáint",
|
||||
"show_login_link": "Taispeáin nasc Logála Isteach sa téama Comhroinnte",
|
||||
@@ -1900,7 +1953,7 @@
|
||||
},
|
||||
"content_language": {
|
||||
"title": "Teangacha ábhair",
|
||||
"description": "Roghnaigh teanga amháin nó níos mó ar cheart dóibh a bheith le feiceáil sa rogha teanga sa rannán Airíonna Bunúsacha de nóta téacs inléite amháin nó in-eagarthóireachta. Ceadóidh sé seo gnéithe ar nós seiceáil litrithe nó tacaíocht ó dheis go clé."
|
||||
"description": "Roghnaigh teanga amháin nó níos mó ar cheart dóibh a bheith le feiceáil sa rogha teanga sa rannán Airíonna Bunúsacha de nóta téacs inléite amháin nó in-eagarthóireachta. Ceadaíonn sé seo gnéithe ar nós seiceáil litrithe, tacaíocht ó dheis go clé agus eastóscadh téacs (OCR)."
|
||||
},
|
||||
"switch_layout_button": {
|
||||
"title_vertical": "Bog an painéal eagarthóireachta go dtí an bun",
|
||||
@@ -1933,12 +1986,12 @@
|
||||
},
|
||||
"editorfeatures": {
|
||||
"title": "Gnéithe",
|
||||
"emoji_completion_enabled": "Cumasaigh uath-chomhlánú Emoji",
|
||||
"emoji_completion_description": "Más cumasaithe é, is féidir emojis a chur isteach i dtéacs go héasca trí `:` a chlóscríobh, agus ainm emoji ina dhiaidh sin.",
|
||||
"note_completion_enabled": "Cumasaigh uath-chríochnú nótaí",
|
||||
"note_completion_description": "Más cumasaithe é, is féidir naisc chuig nótaí a chruthú trí `@` a chlóscríobh agus teideal an nóta ina dhiaidh sin.",
|
||||
"slash_commands_enabled": "Cumasaigh orduithe slaise",
|
||||
"slash_commands_description": "Más cumasaithe é, is féidir orduithe eagarthóireachta amhail briseadh líne nó ceannteidil a chur isteach a athrú trí `/` a chlóscríobh."
|
||||
"emoji_completion_enabled": "Uath-chomhlánú emoji",
|
||||
"emoji_completion_description": "Uath-líonadh emoji Is féidir emojis a chur isteach i dtéacs go héasca trí `:` a chlóscríobh, agus ainm emoji ina dhiaidh sin.",
|
||||
"note_completion_enabled": "Uath-chomhlánú nótaí",
|
||||
"note_completion_description": "Is féidir naisc chuig nótaí a chruthú trí `@` a chlóscríobh agus teideal an nóta ina dhiaidh sin.",
|
||||
"slash_commands_enabled": "Orduithe slaise",
|
||||
"slash_commands_description": "Is féidir orduithe eagarthóireachta amhail briseadh líne nó ceannteidil a chur isteach a athrú trí `/` a chlóscríobh."
|
||||
},
|
||||
"table_view": {
|
||||
"new-row": "Sraith nua",
|
||||
@@ -2042,7 +2095,9 @@
|
||||
"related_code_notes": "Scéim dathanna le haghaidh nótaí cóid",
|
||||
"ui": "Comhéadan úsáideora",
|
||||
"ui_old_layout": "Leagan amach sean",
|
||||
"ui_new_layout": "Leagan amach nua"
|
||||
"ui_new_layout": "Leagan amach nua",
|
||||
"ui_layout_style": "Stíl leagan amach",
|
||||
"ui_layout_orientation": "Treoshuíomh an bharra lainseálaí"
|
||||
},
|
||||
"units": {
|
||||
"percentage": "%"
|
||||
@@ -2141,7 +2196,19 @@
|
||||
"note_paths_many": "{{count}} cosáin",
|
||||
"note_paths_other": "{{count}} cosáin",
|
||||
"note_paths_title": "Cosáin nótaí",
|
||||
"code_note_switcher": "Athraigh mód teanga"
|
||||
"code_note_switcher": "Athraigh mód teanga",
|
||||
"tab_width": "Leithead an Chluaisín: {{width}}",
|
||||
"tab_width_title": "Athraigh leithead an chluaisín",
|
||||
"tab_width_spaces": "{{count}} spásanna",
|
||||
"tab_width_spaces_short": "Spásanna: {{width}}",
|
||||
"tab_width_tabs": "Cluaisíní: {{width}}",
|
||||
"tab_width_use_default": "Úsáid an réamhshocrú ({{width}})",
|
||||
"tab_width_use_default_style": "Úsáid réamhshocraithe ({{style}})",
|
||||
"tab_width_display_header": "Leithead taispeána",
|
||||
"tab_width_reindent_header": "Ath-eangaigh ábhar go",
|
||||
"tab_width_style_header": "Líon isteach ag baint úsáide as",
|
||||
"tab_width_style_spaces": "Spásanna",
|
||||
"tab_width_style_tabs": "Cluaisíní"
|
||||
},
|
||||
"attributes_panel": {
|
||||
"title": "Tréithe Nóta"
|
||||
@@ -2274,6 +2341,247 @@
|
||||
"sample_user_journey": "Turas Úsáideora",
|
||||
"sample_xy": "XY",
|
||||
"sample_venn": "Venn",
|
||||
"sample_ishikawa": "Ishikawa"
|
||||
"sample_ishikawa": "Ishikawa",
|
||||
"sample_treeview": "Radharc Crann",
|
||||
"sample_wardley": "Léarscáil Wardley"
|
||||
},
|
||||
"llm_chat": {
|
||||
"placeholder": "Clóscríobh teachtaireacht...",
|
||||
"send": "Seol",
|
||||
"sending": "Ag seoladh...",
|
||||
"empty_state": "Tosaigh comhrá trí theachtaireacht a chlóscríobh thíos.",
|
||||
"searching_web": "Ag cuardach an ghréasáin...",
|
||||
"web_search": "Cuardach gréasáin",
|
||||
"note_tools": "Rochtain nótaí",
|
||||
"sources": "Foinsí",
|
||||
"extended_thinking": "Smaointeoireacht leathnaithe",
|
||||
"legacy_models": "Samhlacha oidhreachta",
|
||||
"thinking": "Ag smaoineamh...",
|
||||
"thought_process": "Próiseas smaointeoireachta",
|
||||
"tool_calls": "{{count}} glao(í) uirlisí",
|
||||
"input": "Ionchur",
|
||||
"result": "Toradh",
|
||||
"error": "Earráid",
|
||||
"tool_error": "theip",
|
||||
"total_tokens": "{{total}} comharthaí",
|
||||
"tokens_detail": "leid {{prompt}} + críochnú {{completion}}",
|
||||
"tokens_used": "{{prompt}} leid + {{completion}} críochnú = {{total}} comharthaí",
|
||||
"tokens_used_with_cost": "{{prompt}} leid + {{completion}} críochnú = {{total}} comharthaí (~${{cost}})",
|
||||
"tokens_used_with_model": "{{model}}: {{prompt}} leid + {{completion}} críochnú = {{total}} comharthaí",
|
||||
"tokens_used_with_model_and_cost": "{{model}}: leid {{prompt}} + críochnú {{completion}} = {{total}} comharthaí (~${{cost}})",
|
||||
"tokens": "comharthaí",
|
||||
"context_used": "Úsáideadh {{percentage}}%",
|
||||
"note_context_enabled": "Cliceáil chun comhthéacs nótaí a dhíchumasú: {{title}}",
|
||||
"note_context_disabled": "Cliceáil chun an nóta reatha a chur san áireamh i gcomhthéacs",
|
||||
"no_provider_message": "Níl aon soláthraí AI cumraithe. Cuir ceann leis chun comhrá a thosú.",
|
||||
"add_provider": "Cuir Soláthraí AI leis",
|
||||
"sources_summary": "{{count}} foinsí ó {{sites}} suíomhanna",
|
||||
"stop": "Stop"
|
||||
},
|
||||
"sidebar_chat": {
|
||||
"title": "Comhrá AI",
|
||||
"launcher_title": "Oscail Comhrá AI",
|
||||
"new_chat": "Tosaigh comhrá nua",
|
||||
"save_chat": "Sábháil comhrá sna nótaí",
|
||||
"empty_state": "Tosaigh comhrá",
|
||||
"history": "Stair chomhrá",
|
||||
"recent_chats": "Comhráite le déanaí",
|
||||
"no_chats": "Gan aon chomhráite roimhe seo"
|
||||
},
|
||||
"mind-map": {
|
||||
"addChild": "Cuir páiste leis",
|
||||
"addParent": "Cuir tuismitheoir leis",
|
||||
"addSibling": "Cuir deartháir nó deirfiúr leis",
|
||||
"removeNode": "Bain nód",
|
||||
"focus": "Mód Fócais",
|
||||
"cancelFocus": "Cealaigh Mód Fócais",
|
||||
"moveUp": "Bog suas",
|
||||
"moveDown": "Bog síos",
|
||||
"link": "Nasc",
|
||||
"linkBidirectional": "Nasc Déthreoch",
|
||||
"clickTips": "Cliceáil ar an nód sprice le do thoil",
|
||||
"summary": "Achoimre"
|
||||
},
|
||||
"llm": {
|
||||
"settings_title": "AI / LLM",
|
||||
"settings_description": "Cumraigh comhtháthú idir Intleacht Shaorga agus Múnla Teanga Mór.",
|
||||
"add_provider": "Cuir Soláthraí leis",
|
||||
"add_provider_title": "Cuir Soláthraí AI leis",
|
||||
"configured_providers": "Soláthraithe Cumraithe",
|
||||
"no_providers_configured": "Níl aon soláthraithe cumraithe fós.",
|
||||
"provider_name": "Ainm",
|
||||
"provider_type": "Soláthraí",
|
||||
"actions": "Gníomhartha",
|
||||
"delete_provider": "Scrios",
|
||||
"delete_provider_confirmation": "An bhfuil tú cinnte gur mian leat an soláthraí \"{{name}}\" a scriosadh?",
|
||||
"api_key": "Eochair API",
|
||||
"api_key_placeholder": "Cuir isteach d'eochair API",
|
||||
"cancel": "Cealaigh",
|
||||
"feature_not_enabled": "Cumasaigh an ghné turgnamhach LLM i Socruithe → Ardleibhéil → Gnéithe turgnamhacha chun comhtháthú AI a úsáid.",
|
||||
"mcp_title": "MCP (Prótacal Comhthéacs Múnla)",
|
||||
"mcp_enabled": "Freastalaí MCP",
|
||||
"mcp_enabled_description": "Nochtaigh críochphointe Prótacal Comhthéacs Múnla (MCP) ionas gur féidir le cúntóirí códaithe AI (m.sh. Claude Code, GitHub Copilot) do nótaí a léamh agus a mhodhnú. Ní féidir rochtain a fháil ar an gcríochphointe ach ó localhost.",
|
||||
"mcp_endpoint_title": "URL críochphointe",
|
||||
"mcp_endpoint_description": "Cuir an URL seo le cumraíocht MCP do chúntóra AI",
|
||||
"tools": {
|
||||
"search_notes": "Cuardaigh nótaí",
|
||||
"get_note": "Faigh nóta",
|
||||
"get_note_content": "Faigh ábhar nótaí",
|
||||
"update_note_content": "Nuashonraigh ábhar an nóta",
|
||||
"append_to_note": "Cuir leis an nóta",
|
||||
"create_note": "Cruthaigh nóta",
|
||||
"get_attributes": "Faigh tréithe",
|
||||
"get_attribute": "Faigh tréith",
|
||||
"set_attribute": "Socraigh tréith",
|
||||
"delete_attribute": "Scrios tréith",
|
||||
"get_child_notes": "Faigh nótaí leanaí",
|
||||
"get_subtree": "Faigh fo-chrann",
|
||||
"load_skill": "Luchtaigh scileanna",
|
||||
"web_search": "Cuardach gréasáin",
|
||||
"note_in_parent": "<Note/> i <Parent/>",
|
||||
"get_attachment": "Faigh ceangaltán",
|
||||
"get_attachment_content": "Léigh ábhar an cheangail",
|
||||
"rename_note": "Athainmnigh an nóta",
|
||||
"delete_note": "Scrios nóta",
|
||||
"move_note": "Bog nóta",
|
||||
"clone_note": "Clónáil nóta"
|
||||
}
|
||||
},
|
||||
"ocr": {
|
||||
"extracted_text": "Téacs Bainte (OCR)",
|
||||
"extracted_text_title": "Téacs Bainte (OCR)",
|
||||
"loading_text": "Ag lódáil téacs OCR...",
|
||||
"no_text_available": "Níl aon téacs OCR ar fáil",
|
||||
"no_text_explanation": "Níor próiseáladh an nóta seo le haghaidh eastóscadh téacs OCR nó níor aimsíodh aon téacs.",
|
||||
"failed_to_load": "Theip ar lódáil téacs OCR",
|
||||
"process_now": "Próiseas OCR",
|
||||
"processing": "Ag próiseáil...",
|
||||
"processing_started": "Tá próiseáil OCR tosaithe. Fan nóiméad agus athnuachan le do thoil.",
|
||||
"processing_failed": "Theip ar phróiseáil OCR a thosú",
|
||||
"view_extracted_text": "Féach ar théacs eastósctha (OCR)",
|
||||
"processing_complete": "Próiseáil OCR críochnaithe.",
|
||||
"text_filtered_low_confidence": "Bhraith OCR téacs le muinín {{confidence}}%, ach caitheadh leis é mar is é {{threshold}}% an tairseach íosta atá agat.",
|
||||
"open_media_settings": "Oscail Socruithe"
|
||||
},
|
||||
"database": {
|
||||
"title": "Bunachar Sonraí"
|
||||
},
|
||||
"search": {
|
||||
"title": "Cuardaigh",
|
||||
"fuzzy_matching_label": "Caoinfhulaingt clóscríofa sa chuardach",
|
||||
"fuzzy_matching_description": "Bíonn tionchar aige ar chuardach tapa agus ar chuardach iomlán. Faightear focail chomhchosúla nuair nach leor na meaitseáil chruinne.",
|
||||
"autocomplete_fuzzy_label": "Caoinfhulaingt clóscríofa in uathchríochnú",
|
||||
"autocomplete_fuzzy_description": "Bíonn tionchar aige ar léim-go-nóta agus ar roghnóirí nótaí. Níos moille ach glactar le clóscríobh."
|
||||
},
|
||||
"text_editor": {
|
||||
"title": "Eagarthóir"
|
||||
},
|
||||
"link": {
|
||||
"failed_to_open": "Theip ar oscailt an nasc '{{- href}}': {{- message}}"
|
||||
},
|
||||
"print_preview": {
|
||||
"title": "Réamhamharc priontála",
|
||||
"close": "Dún",
|
||||
"save": "Sábháil mar PDF",
|
||||
"print": "Priontáil",
|
||||
"export_pdf": "Easpórtáil mar PDF",
|
||||
"system_print": "Priontáil ag baint úsáide as dialóg an chórais",
|
||||
"destination": "Ceann Scríbe",
|
||||
"destination_pdf": "Sábháil mar PDF",
|
||||
"destination_printers": "Printéirí",
|
||||
"destination_default": "Réamhshocrú",
|
||||
"orientation": "Treoshuíomh",
|
||||
"portrait": "Portráid",
|
||||
"landscape": "Tírdhreach",
|
||||
"page_size": "Méid leathanaigh",
|
||||
"scale": "Scála",
|
||||
"margins": "Imill",
|
||||
"render_error": "Ní féidir PDF a rindreáil leis na socruithe reatha. Seiceáil na corrlaigh agus an scála le do thoil.",
|
||||
"margins_default": "Réamhshocrú",
|
||||
"margins_none": "Dada",
|
||||
"margins_minimum": "Íosmhéid",
|
||||
"margins_custom": "Saincheaptha",
|
||||
"margin_top": "Barr",
|
||||
"margin_right": "Ar dheis",
|
||||
"margin_bottom": "Bun",
|
||||
"margin_left": "Ar chlé",
|
||||
"page_ranges": "Leathanaigh",
|
||||
"page_ranges_hint": "Fág folamh chun na leathanaigh go léir a phriontáil.",
|
||||
"page_ranges_invalid": "Formáid neamhbhailí. Úsáid m.sh. 1-5, 8, 11-13.",
|
||||
"page_ranges_placeholder": "m.sh. 1-5, 8, 11-13"
|
||||
},
|
||||
"revisions": {
|
||||
"note_revisions": "Athbhreithnithe Nótaí",
|
||||
"delete_all_revisions": "Scrios gach athbhreithniú ar an nóta seo",
|
||||
"delete_all_button": "Scrios gach athbhreithniú",
|
||||
"help_title": "Cabhair le hathbhreithnithe nótaí",
|
||||
"confirm_delete_all": "Ar mhaith leat gach athbhreithniú ar an nóta seo a scriosadh?",
|
||||
"no_revisions": "Gan aon athbhreithnithe don nóta seo go fóill...",
|
||||
"restore_button": "Athchóirigh",
|
||||
"highlight_changes": "Aibhsigh athruithe",
|
||||
"diff_on": "Taispeáin an difríocht",
|
||||
"diff_off": "Taispeáin ábhar",
|
||||
"diff_on_hint": "Cliceáil chun difríocht foinse an nóta a thaispeáint",
|
||||
"diff_off_hint": "Cliceáil chun ábhar an nóta a thaispeáint",
|
||||
"diff_not_available": "Níl an difríocht ar fáil.",
|
||||
"confirm_restore": "Ar mhaith leat an t-athbhreithniú seo a athbhunú? Scríobhfaidh sé seo teideal agus ábhar reatha an nóta leis an athbhreithniú seo.",
|
||||
"delete_button": "Scrios",
|
||||
"confirm_delete": "Ar mhaith leat an t-athbhreithniú seo a scriosadh?",
|
||||
"revisions_deleted": "Scriosadh athbhreithnithe nótaí.",
|
||||
"revision_restored": "Tá athbhreithniú an nóta athchóirithe.",
|
||||
"revision_deleted": "Scriosadh athbhreithniú an nóta.",
|
||||
"snapshot_interval": "Eatramh Léirmheasa ar Nóta: {{seconds}}s.",
|
||||
"maximum_revisions": "Teorainn maidir le hathbhreithniú nóta: {{number}}.",
|
||||
"save_revision_now": "Sábháil athbhreithniú anois",
|
||||
"save_named_revision": "Sábháil athbhreithniú ainmnithe...",
|
||||
"snapshot_header": "Léargas athbhreithnithe nóta",
|
||||
"snapshot_interval_value": "Eatramh: {{seconds}}s",
|
||||
"snapshot_limit_value": "Teorainn: {{number}}",
|
||||
"settings": "Socruithe Athbhreithnithe Nóta",
|
||||
"menu_tooltip": "Roghanna athbhreithnithe",
|
||||
"download_button": "Íoslódáil",
|
||||
"mime": "MIME: ",
|
||||
"file_size": "Méid comhaid:",
|
||||
"preview_not_available": "Níl réamhamharc ar fáil don chineál nóta seo.",
|
||||
"save_revision": "Sábháil athbhreithniú",
|
||||
"save_revision_tooltip": "Sábháil pictiúr den nóta reatha de láimh",
|
||||
"description_placeholder": "Ainmnigh an t-athbhreithniú seo",
|
||||
"revision_saved": "Tá athbhreithniú an nóta sábháilte.",
|
||||
"edit_description": "Cuir ainm in eagar",
|
||||
"description_updated": "Tá ainm an athbhreithnithe nuashonraithe.",
|
||||
"source_auto": "Uath-shábháil",
|
||||
"source_manual": "Sábháil de láimh",
|
||||
"source_etapi": "ETAPI",
|
||||
"source_llm": "LLM",
|
||||
"source_restore": "Athchóirigh",
|
||||
"source_unknown": "Roghbhlúire",
|
||||
"date_today": "Inniu",
|
||||
"date_yesterday": "Inné",
|
||||
"date_this_week": "An tseachtain seo",
|
||||
"date_this_month": "An mhí seo",
|
||||
"source_description_auto": "Sábháilte go huathoibríoch ag an gcóras ag eatraimh rialta",
|
||||
"source_description_manual": "Sábháilte de láimh ag an úsáideoir",
|
||||
"source_description_etapi": "Cruthaithe tríd an API Seachtrach Trilium",
|
||||
"source_description_llm": "Cruthaithe ag an gcúntóir AI",
|
||||
"source_description_restore": "Sábháilte roimh athchóiriú an athbhreithnithe roimhe seo",
|
||||
"source_description_unknown": "Foinse gan fáil"
|
||||
},
|
||||
"auto_link_attribute_list": {
|
||||
"title": "Tréithe an Chórais"
|
||||
},
|
||||
"revisions_snapshot": {
|
||||
"title": "Athbhreithnithe Nótaí"
|
||||
},
|
||||
"launcher_button_context_menu": {
|
||||
"remove_from_launch_bar": "Bain den bharra lainseála"
|
||||
},
|
||||
"display_mode": {
|
||||
"source": "Radharc foinse",
|
||||
"split": "Radharc scoilte",
|
||||
"preview": "Réamhamharc"
|
||||
},
|
||||
"common": {
|
||||
"save": "Sábháil",
|
||||
"cancel": "Cealaigh"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "ट्रिलियम नोट्स के बारें में",
|
||||
"build_date": "निर्माण की तारीख:",
|
||||
"app_version": "ऐप वर्ज़न:",
|
||||
"db_version": "DB वर्ज़न:",
|
||||
"build_revision": "बिल्ड रिविज़न:",
|
||||
"homepage": "मुखपृष्ठ:",
|
||||
"sync_version": "सिंक वर्शन:",
|
||||
"data_directory": "डेटा डायरेक्टरी:"
|
||||
},
|
||||
"toast": {
|
||||
@@ -94,7 +87,6 @@
|
||||
"if_you_dont_check": "अगर आप इसे चेक नहीं करते हैं, तो नोट केवल रिलेशन मैप से हटाया जाएगा।"
|
||||
},
|
||||
"delete_notes": {
|
||||
"delete_notes_preview": "नोट्स प्रिव्यू डिलीट करें",
|
||||
"close": "बंद करें",
|
||||
"delete_all_clones_description": "सभी क्लोन भी डिलीट करें (हाल के बदलावों में वापस ला सकते हैं)",
|
||||
"erase_notes_description": "सामान्य (सॉफ्ट) डिलीट करने पर नोट केवल 'डिलीटेड' मार्क होते हैं और उन्हें एक निश्चित समय के भीतर (हाल के बदलावों वाले डायलॉग में) वापस लाया जा सकता है। इस विकल्प को चुनने पर नोट तुरंत पूरी तरह मिटा दिए जाएंगे और उन्हें वापस लाना संभव नहीं होगा।",
|
||||
@@ -102,9 +94,7 @@
|
||||
"notes_to_be_deleted": "निम्नलिखित नोट डिलीट कर दिए जाएंगे ({{notesCount}})",
|
||||
"no_note_to_delete": "कोई भी नोट डिलीट नहीं होगा (केवल क्लोन हटाए जाएंगे)।",
|
||||
"broken_relations_to_be_deleted": "निम्नलिखित रिलेशन टूट जाएंगे और डिलीट हो जाएंगे ({{relationCount}})",
|
||||
"cancel": "रद्द करें",
|
||||
"ok": "ठीक है",
|
||||
"deleted_relation_text": "नोट {{- note}} (जिसे डिलीट किया जाना है) का संदर्भ {{- source}} से शुरू होने वाले रिलेशन {{- relation}} में दिया गया है।"
|
||||
"cancel": "रद्द करें"
|
||||
},
|
||||
"branch_prefix": {
|
||||
"edit_branch_prefix": "ब्रांच प्रीफ़िक्स एडिट करें",
|
||||
@@ -286,33 +276,6 @@
|
||||
"undelete_link": "वापस लाएं",
|
||||
"confirm_undelete": "क्या आप इस नोट और इसके सब-नोट्स को वापस लाना चाहते हैं?"
|
||||
},
|
||||
"revisions": {
|
||||
"note_revisions": "नोट रिविज़न",
|
||||
"delete_all_revisions": "इस नोट के सभी रिविज़न डिलीट करें",
|
||||
"delete_all_button": "सभी रिविज़न डिलीट करें",
|
||||
"help_title": "नोट रिविज़न पर मदद",
|
||||
"confirm_delete_all": "क्या आप इस नोट के सभी रिविज़न डिलीट करना चाहते हैं?",
|
||||
"no_revisions": "इस नोट के लिए अभी तक कोई रिविज़न नहीं है..।",
|
||||
"restore_button": "रिस्टोर करें",
|
||||
"diff_on": "Diff दिखाएं",
|
||||
"diff_off": "कंटेंट दिखाएं",
|
||||
"diff_on_hint": "नोट सोर्स का अंतर (diff) देखने के लिए क्लिक करें",
|
||||
"diff_off_hint": "नोट कंटेंट देखने के लिए क्लिक करें",
|
||||
"diff_not_available": "Diff उपलब्ध नहीं है।",
|
||||
"confirm_restore": "क्या आप इस रिविज़न को रिस्टोर करना चाहते हैं? इससे नोट का मौजूदा टाइटल और कंटेंट इस रिविज़न से बदल जाएगा।",
|
||||
"delete_button": "डिलीट करें",
|
||||
"confirm_delete": "क्या आप इस रिविज़न को डिलीट करना चाहते हैं?",
|
||||
"revisions_deleted": "नोट रिविज़न डिलीट कर दिए गए हैं।",
|
||||
"revision_restored": "नोट रिविज़न रिस्टोर कर दिया गया है।",
|
||||
"revision_deleted": "नोट रिविज़न डिलीट कर दिया गया है।",
|
||||
"snapshot_interval": "नोट रिविज़न स्नैपशॉट अंतराल: {{seconds}}s।",
|
||||
"maximum_revisions": "नोट रिविज़न स्नैपशॉट लिमिट: {{number}}।",
|
||||
"settings": "नोट रिविज़न सेटिंग्स",
|
||||
"download_button": "डाउनलोड करें",
|
||||
"mime": "MIME: ",
|
||||
"file_size": "फ़ाइल साइज़:",
|
||||
"preview_not_available": "इस नोट टाइप के लिए प्रिव्यू उपलब्ध नहीं है।"
|
||||
},
|
||||
"sort_child_notes": {
|
||||
"sort_children_by": "सब-नोट्स को इसके अनुसार सॉर्ट करें..।",
|
||||
"sorting_criteria": "सॉर्टिंग का आधार",
|
||||
@@ -1110,7 +1073,6 @@
|
||||
},
|
||||
"database_integrity_check": {
|
||||
"title": "डेटाबेस इंटीग्रिटी चेक (Database Integrity Check)",
|
||||
"description": "यह चेक करेगा कि डेटाबेस SQLite लेवल पर खराब तो नहीं हुआ है। डेटाबेस के साइज़ के हिसाब से इसमें कुछ समय लग सकता है।",
|
||||
"check_button": "डेटाबेस इंटीग्रिटी चेक करें",
|
||||
"checking_integrity": "डेटाबेस इंटीग्रिटी चेक की जा रही है..।",
|
||||
"integrity_check_succeeded": "इंटीग्रिटी चेक सफल रहा - कोई समस्या नहीं मिली।",
|
||||
@@ -1148,10 +1110,7 @@
|
||||
"note_tree_font": "नोट ट्री फ़ॉन्ट",
|
||||
"note_detail_font": "नोट डिटेल फ़ॉन्ट",
|
||||
"monospace_font": "मोनोस्पेस (कोड) फ़ॉन्ट",
|
||||
"note_tree_and_detail_font_sizing": "ध्यान दें कि ट्री और डिटेल फ़ॉन्ट का साइज़ मुख्य फ़ॉन्ट साइज़ के हिसाब से होता है।",
|
||||
"not_all_fonts_available": "हो सकता है कि लिस्ट में दिए गए सभी फ़ॉन्ट्स आपके सिस्टम पर न हों।",
|
||||
"apply_font_changes": "फ़ॉन्ट के बदलाव लागू करने के लिए, यहाँ क्लिक करें",
|
||||
"reload_frontend": "फ्रंटेंड रीलोड करें",
|
||||
"generic-fonts": "सामान्य फ़ॉन्ट्स",
|
||||
"sans-serif-system-fonts": "Sans-serif सिस्टम फ़ॉन्ट्स",
|
||||
"serif-system-fonts": "Serif सिस्टम फ़ॉन्ट्स",
|
||||
@@ -1241,7 +1200,6 @@
|
||||
},
|
||||
"attachment_erasure_timeout": {
|
||||
"attachment_erasure_timeout": "अटैचमेंट मिटाने का समय (Erasure Timeout)",
|
||||
"attachment_auto_deletion_description": "अगर अटैचमेंट का उनके नोट में कोई लिंक नहीं बचता, तो वे तय समय के बाद अपने-आप डिलीट (और मिटा) दिए जाते हैं।",
|
||||
"erase_attachments_after": "इतने समय बाद बिना इस्तेमाल वाले अटैचमेंट्स मिटाएं:",
|
||||
"manual_erasing_description": "आप इसे खुद भी मिटा सकते हैं (बिना ऊपर दिए समय का इंतज़ार किए):",
|
||||
"erase_unused_attachments_now": "बिना इस्तेमाल वाले अटैचमेंट नोट्स अभी मिटाएं",
|
||||
@@ -1253,7 +1211,6 @@
|
||||
},
|
||||
"note_erasure_timeout": {
|
||||
"note_erasure_timeout_title": "नोट मिटाने का समय (Erasure Timeout)",
|
||||
"note_erasure_description": "डिलीट किए गए नोट्स (और एट्रीब्यूट्स, रिवीजन्स...) पहले सिर्फ 'डिलीट' मार्क किए जाते हैं और उन्हें 'Recent Notes' से वापस लाया जा सकता है। कुछ समय बाद ये नोट्स 'मिटा' (erase) दिए जाते हैं जिसके बाद इन्हें वापस नहीं लाया जा सकता। यह सेटिंग डिलीट और मिटाने के बीच के समय को तय करती है।",
|
||||
"erase_notes_after": "इतने समय बाद नोट्स मिटाएं:",
|
||||
"manual_erasing_description": "आप नोट्स को खुद भी मिटा सकते हैं (बिना ऊपर दिए समय का इंतज़ार किए):",
|
||||
"erase_deleted_notes_now": "डिलीट किए गए नोट्स अभी मिटाएं",
|
||||
@@ -1343,7 +1300,6 @@
|
||||
"first-week-contains-first-thursday": "पहले हफ्ते में साल का पहला गुरुवार शामिल है",
|
||||
"first-week-has-minimum-days": "पहले हफ्ते में कम-से-कम इतने दिन हों",
|
||||
"min-days-in-first-week": "पहले हफ्ते में न्यूनतम दिन",
|
||||
"first-week-info": "\"पहले हफ्ते में साल का पहला गुरुवार\" ISO 8601 स्टैण्डर्ड पर आधारित है।",
|
||||
"first-week-warning": "पहले हफ्ते की सेटिंग्स बदलने से पुराने 'Week Notes' में गड़बड़ी हो सकती है।",
|
||||
"formatting-locale": "तारीख और नंबर फॉर्मेट",
|
||||
"formatting-locale-auto": "ऐप की भाषा के अनुसार"
|
||||
@@ -1461,20 +1417,13 @@
|
||||
"description": "ये विकल्प सिर्फ़ डेस्कटॉप वर्जन के लिए हैं, ब्राउज़र अपना स्पेल चेक इस्तेमाल करेंगे।",
|
||||
"enable": "स्पेल चेक चालू करें",
|
||||
"language_code_label": "भाषा कोड (Language code)",
|
||||
"language_code_placeholder": "जैसे \"en-US\", \"hi-IN\"",
|
||||
"multiple_languages_info": "कई भाषाओं को कॉमा से अलग किया जा सकता है, जैसे \"en-US, hi-IN\"। ",
|
||||
"available_language_codes_label": "उपलब्ध भाषा कोड:",
|
||||
"restart-required": "स्पेल चेक में बदलाव ऐप रीस्टार्ट करने के बाद ही दिखेंगे।"
|
||||
},
|
||||
"sync_2": {
|
||||
"config_title": "सिंक कॉन्फ़िगरेशन",
|
||||
"server_address": "सर्वर एड्रेस (Address)",
|
||||
"timeout": "सिंक समय-सीमा (Timeout)",
|
||||
"timeout_unit": "मिलीसेकंड (milliseconds)",
|
||||
"proxy_label": "सिंक प्रॉक्सी सर्वर (वैकल्पिक)",
|
||||
"note": "नोट",
|
||||
"note_description": "अगर आप प्रॉक्सी खाली छोड़ते हैं, तो सिस्टम प्रॉक्सी का इस्तेमाल होगा।",
|
||||
"special_value_description": "एक खास वैल्यू <code>noproxy</code> भी है जो सिस्टम प्रॉक्सी को नज़रअंदाज़ करने के लिए मजबूर करती है।",
|
||||
"save": "सेव करें",
|
||||
"help": "मदद",
|
||||
"test_title": "सिंक टेस्ट",
|
||||
|
||||
@@ -1,13 +1,6 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "A Trilium Notes-ról",
|
||||
"homepage": "Kezdőlap:",
|
||||
"app_version": "Alkalmazás verziója:",
|
||||
"db_version": "Adatbázis verzió:",
|
||||
"sync_version": "Verzió szinkronizálás :",
|
||||
"build_revision": "Build revízió:",
|
||||
"data_directory": "Adatkönyvtár:",
|
||||
"build_date": "Build dátum:"
|
||||
"data_directory": "Adatkönyvtár:"
|
||||
},
|
||||
"toast": {
|
||||
"critical-error": {
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "Tentang Trilium Notes",
|
||||
"homepage": "Halaman utama:",
|
||||
"app_version": "Versi Aplikasi:",
|
||||
"db_version": "Versi DB:",
|
||||
"sync_version": "Versi sinkronisasi:",
|
||||
"build_date": "Tanggal pembuatan:",
|
||||
"build_revision": "Revisi pembuatan:",
|
||||
"data_directory": "Direktori data:"
|
||||
},
|
||||
"toast": {
|
||||
@@ -76,7 +69,6 @@
|
||||
"confirmation": "Konfirmasi"
|
||||
},
|
||||
"delete_notes": {
|
||||
"delete_notes_preview": "Hapus pratinjau catatan",
|
||||
"close": "Tutup",
|
||||
"delete_all_clones_description": "Hapus seluruh duplikat (bisa dikembalikan di menu revisi)",
|
||||
"erase_notes_description": "Penghapusan normal hanya menandai catatan sebagai dihapus dan dapat dipulihkan (melalui dialog versi revisi) dalam jangka waktu tertentu. Mencentang opsi ini akan menghapus catatan secara permanen seketika dan catatan tidak akan bisa dipulihkan kembali.",
|
||||
@@ -84,9 +76,7 @@
|
||||
"notes_to_be_deleted": "Catatan-catatan berikut akan dihapuskan ({{notesCount}})",
|
||||
"no_note_to_delete": "Tidak ada Catatan yang akan dihapus (hanya duplikat).",
|
||||
"broken_relations_to_be_deleted": "Hubungan berikut akan diputus dan dihapus ({{ relationCount}})",
|
||||
"cancel": "Batalkan",
|
||||
"ok": "Setuju",
|
||||
"deleted_relation_text": "Catatan {{- note}} (yang akan dihapus) dirujuk oleh relasi {{- relation}} yang berasal dari {{- source}}."
|
||||
"cancel": "Batalkan"
|
||||
},
|
||||
"clone_to": {
|
||||
"clone_notes_to": "Duplikat catatan ke…",
|
||||
|
||||
@@ -1,13 +1,6 @@
|
||||
{
|
||||
"about": {
|
||||
"app_version": "Versione dell'app:",
|
||||
"db_version": "Versione DB:",
|
||||
"sync_version": "Versione Sync:",
|
||||
"data_directory": "Cartella dati:",
|
||||
"title": "Informazioni su Trilium Notes",
|
||||
"build_date": "Data della build:",
|
||||
"build_revision": "Revisione della build:",
|
||||
"homepage": "Homepage:"
|
||||
"data_directory": "Cartella dati:"
|
||||
},
|
||||
"toast": {
|
||||
"critical-error": {
|
||||
@@ -88,17 +81,24 @@
|
||||
"also_delete_note": "Rimuove anche la nota"
|
||||
},
|
||||
"delete_notes": {
|
||||
"ok": "OK",
|
||||
"close": "Chiudi",
|
||||
"delete_notes_preview": "Anteprima di eliminazione delle note",
|
||||
"delete_all_clones_description": "Elimina anche tutti i cloni (può essere ripristinato nella sezione cambiamenti recenti)",
|
||||
"erase_notes_description": "L'eliminazione normale (soft) marca le note come eliminate e potranno essere recuperate entro un certo lasso di tempo (dalla finestra dei cambiamenti recenti). Selezionando questa opzione le note si elimineranno immediatamente e non sarà possibile recuperarle.",
|
||||
"erase_notes_description": "Cancella immediatamente le note invece di effettuare una cancellazione temporanea. Questa operazione non può essere annullata e comporterà il riavvio dell'applicazione.",
|
||||
"erase_notes_warning": "Elimina le note in modo permanente (non potrà essere disfatto), compresi tutti i cloni. Ciò forzerà un nuovo caricamento dell'applicazione.",
|
||||
"cancel": "Annulla",
|
||||
"notes_to_be_deleted": "Le seguenti note saranno eliminate ({{notesCount}})",
|
||||
"notes_to_be_deleted": "Note da eliminare ({{notesCount}})",
|
||||
"no_note_to_delete": "Nessuna nota sarà eliminata (solo i cloni).",
|
||||
"broken_relations_to_be_deleted": "Le seguenti relazioni saranno interrotte ed eliminate ({{relationCount}})",
|
||||
"deleted_relation_text": "La nota {{- note}} (da eliminare) è referenziata dalla relazione {{- relation}} originata da {{- source}}."
|
||||
"broken_relations_to_be_deleted": "Relazioni interrotte ({{relationCount}})",
|
||||
"title": "Eliminazione note",
|
||||
"clones_label": "Cloni",
|
||||
"delete_clones_description_one": "Elimina anche {{count}} altro clone. L'operazione può essere annullata nella pagina delle modifiche recenti.",
|
||||
"delete_clones_description_many": "Elimina anche {{count}} altri cloni. L'operazione può essere annullata nella pagina delle modifiche recenti.",
|
||||
"delete_clones_description_other": "Elimina anche {{count}} altri cloni. L'operazione può essere annullata nella pagina delle modifiche recenti.",
|
||||
"erase_notes_label": "Elimina definitivamente",
|
||||
"table_note_with_relation": "Nota relativa a",
|
||||
"table_relation": "Relazione",
|
||||
"table_points_to": "Punti verso (eliminato)",
|
||||
"delete": "Eliminazione"
|
||||
},
|
||||
"info": {
|
||||
"okButton": "OK",
|
||||
@@ -463,7 +463,8 @@
|
||||
"enable_daily_backup": "Abilita i backup giornalieri",
|
||||
"no_backup_yet": "Ancora nessuna archiviazione",
|
||||
"automatic_backup": "Backup Automatico",
|
||||
"automatic_backup_description": "Trilium può eseguire automaticamente il backup del database:"
|
||||
"automatic_backup_description": "Trilium può eseguire automaticamente il backup del database:",
|
||||
"download": "Scarica"
|
||||
},
|
||||
"backend_log": {
|
||||
"refresh": "Aggiorna"
|
||||
@@ -478,7 +479,6 @@
|
||||
"check_button": "Controllo dell'integrità del database",
|
||||
"checking_integrity": "Controllo dell'integrità del database in corso...",
|
||||
"title": "Controllo di Integrità del database",
|
||||
"description": "Controllerà che il database non sia corrotto a livello SQLite. Può durare un po' di tempo, a seconda della grandezza del DB.",
|
||||
"integrity_check_failed": "Controllo di integrità fallito: {{results}}",
|
||||
"integrity_check_succeeded": "Controllo di integrità riuscito: nessun problema riscontrato."
|
||||
},
|
||||
@@ -497,16 +497,13 @@
|
||||
"proxy_label": "Server Proxy per la sincronizzazione (opzionale)",
|
||||
"test_title": "Test di sincronizzazione",
|
||||
"timeout": "Timeout per la sincronizzazione",
|
||||
"timeout_unit": "millisecondi",
|
||||
"save": "Salva",
|
||||
"help": "Aiuto",
|
||||
"server_address": "Indirizzo dell'istanza del server",
|
||||
"note": "Nota",
|
||||
"note_description": "Se si lascia vuota l'impostazione del proxy, verrà utilizzato il proxy di sistema (valido solo per le build desktop/electron).",
|
||||
"special_value_description": "Un altro valore speciale è <code>noproxy</code> che forza l'ignoramento anche del proxy di sistema e rispetta <code>NODE_TLS_REJECT_UNAUTHORIZED</code>.",
|
||||
"test_description": "Questo testerà la connessione e l'handshake con il server di sincronizzazione. Se il server di sincronizzazione non è inizializzato, questo lo imposterà per la sincronizzazione con il documento locale.",
|
||||
"test_button": "Test di sincronizzazione",
|
||||
"handshake_failed": "Handshake del server di sincronizzazione non riuscito, errore: {{message}}"
|
||||
"handshake_failed": "Handshake del server di sincronizzazione non riuscito, errore: {{message}}",
|
||||
"timeout_description": "Quanto tempo aspettare prima di rinunciare con una connessione lenta. Aumenta questo intervallo se hai una rete instabile."
|
||||
},
|
||||
"search_engine": {
|
||||
"save_button": "Salva",
|
||||
@@ -520,7 +517,7 @@
|
||||
"custom_name_label": "Nome del motore di ricerca personalizzato",
|
||||
"custom_name_placeholder": "Personalizza il nome del motore di ricerca",
|
||||
"custom_url_label": "L'URL del motore di ricerca personalizzato deve includere {keyword} come segnaposto per il termine di ricerca.",
|
||||
"custom_url_placeholder": "Personalizza indirizzo url del motore di ricerca"
|
||||
"custom_url_placeholder": "Personalizza indirizzo URL del motore di ricerca"
|
||||
},
|
||||
"sql_table_schemas": {
|
||||
"tables": "Tabelle"
|
||||
@@ -538,12 +535,12 @@
|
||||
"new_tab": "Nuova scheda"
|
||||
},
|
||||
"toc": {
|
||||
"table_of_contents": "Sommario",
|
||||
"table_of_contents": "Tabella dei Contenuti",
|
||||
"options": "Opzioni",
|
||||
"no_headings": "Nessun titolo."
|
||||
},
|
||||
"table_of_contents": {
|
||||
"title": "Sommario",
|
||||
"title": "Tabella dei Contenuti",
|
||||
"description": "L'indice apparirà nelle note di testo quando la nota contiene più di un numero definito di titoli. È possibile personalizzare questo numero:",
|
||||
"unit": "titoli",
|
||||
"disable_info": "È anche possibile utilizzare questa opzione per disattivare efficacemente l'indice impostando un numero molto alto.",
|
||||
@@ -593,7 +590,7 @@
|
||||
"collapseExpand": "collassa/espande il nodo",
|
||||
"notSet": "non impostato",
|
||||
"goBackForwards": "indietro/avanti nella cronologia",
|
||||
"showJumpToNoteDialog": "mostra <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/note-navigation.html#jump-to-note\">finestra \"Vai a\"</a>",
|
||||
"showJumpToNoteDialog": "mostra <a class=\"external\" href=\"https://triliumnext.github.io/Docs/Wiki/note-navigation.html#jump-to-note\">\"Vai a\"</a>",
|
||||
"title": "Scheda riassuntiva",
|
||||
"noteNavigation": "Nota navigazione",
|
||||
"scrollToActiveNote": "scorri fino alla nota attiva",
|
||||
@@ -651,7 +648,6 @@
|
||||
"first-week-contains-first-thursday": "La prima settimana contiene il primo giovedì dell'anno",
|
||||
"first-week-has-minimum-days": "La prima settimana ha giorni ridotti",
|
||||
"min-days-in-first-week": "Giorni minimi nella prima settimana",
|
||||
"first-week-info": "La prima settimana che contiene il primo giovedì dell'anno si basa su <a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a> standard.",
|
||||
"first-week-warning": "La modifica delle opzioni della prima settimana può causare duplicati con le note settimanali esistenti e queste ultime non verranno aggiornate di conseguenza.",
|
||||
"formatting-locale": "Formato data e numero",
|
||||
"formatting-locale-auto": "In base alla lingua dell'applicazione",
|
||||
@@ -699,7 +695,8 @@
|
||||
"box_size_small": "piccola (~ 10 righe)",
|
||||
"box_size_medium": "media (~ 30 righe)",
|
||||
"box_size_full": "completa (la casella mostra il testo completo)",
|
||||
"button_include": "Includi nota"
|
||||
"button_include": "Includi nota",
|
||||
"box_size_expandable": "espandibile (nascosto per impostazione predefinita)"
|
||||
},
|
||||
"jump_to_note": {
|
||||
"search_placeholder": "Cerca una nota per nome oppure digita > per i comandi...",
|
||||
@@ -741,33 +738,6 @@
|
||||
"undelete_link": "ripristinare",
|
||||
"confirm_undelete": "Vuoi ripristinare questa nota e le sue sotto-note?"
|
||||
},
|
||||
"revisions": {
|
||||
"note_revisions": "Note Revisioni",
|
||||
"delete_all_revisions": "Elimina tutte le revisioni di questa nota",
|
||||
"delete_all_button": "Elimina tutte le revisioni",
|
||||
"help_title": "Aiuto sulle revisioni delle note",
|
||||
"confirm_delete_all": "Vuoi eliminare tutte le revisioni di questa nota?",
|
||||
"no_revisions": "Ancora nessuna revisione per questa nota...",
|
||||
"restore_button": "Ripristina",
|
||||
"diff_on": "Mostra differenze",
|
||||
"diff_off": "Mostra contenuto",
|
||||
"diff_on_hint": "Clicca per mostrare la fonte della nota diff",
|
||||
"diff_off_hint": "Clicca per visualizzare il contenuto della nota",
|
||||
"diff_not_available": "Diff non è disponibile.",
|
||||
"confirm_restore": "Vuoi ripristinare questa revisione? Questo sovrascriverà il titolo e il contenuto attuali della nota con questa revisione.",
|
||||
"delete_button": "Elimina",
|
||||
"confirm_delete": "Vuoi eliminare questa revisione?",
|
||||
"revisions_deleted": "Le revisioni delle note sono state eliminate.",
|
||||
"revision_restored": "La revisione della nota è stata ripristinata.",
|
||||
"revision_deleted": "La revisione della nota è stata eliminata.",
|
||||
"snapshot_interval": "Nota Intervallo di revisione istantanea: {{seconds}}.",
|
||||
"maximum_revisions": "Nota Limite istantaneo di revisione: {{number}}.",
|
||||
"settings": "Nota Impostazioni di revisione",
|
||||
"download_button": "Scarica",
|
||||
"mime": "MIME: ",
|
||||
"file_size": "Dimensione del file:",
|
||||
"preview_not_available": "L'anteprima non è disponibile per questo tipo di nota."
|
||||
},
|
||||
"sort_child_notes": {
|
||||
"sort_children_by": "Ordina i bambini per...",
|
||||
"sorting_criteria": "Criteri di ordinamento",
|
||||
@@ -853,7 +823,7 @@
|
||||
"archived": "Le note con questa etichetta non saranno visibili per impostazione predefinita nei risultati di ricerca (anche nelle finestre di dialogo Vai a, Aggiungi collegamento ecc.).",
|
||||
"run_on_instance": "Definire su quale istanza di Trilium eseguire questa operazione. L'impostazione predefinita è tutte le istanze.",
|
||||
"exclude_from_export": "le note (con la loro sottostruttura) non saranno incluse in nessuna esportazione di note",
|
||||
"run": "definisce su quali eventi deve essere eseguito lo script. I valori possibili sono:\n<ul>\n<li>frontendStartup - quando il frontend Trilium viene avviato (o aggiornato), ma non su dispositivi mobili.</li>\n<li>mobileStartup - quando il frontend Trilium viene avviato (o aggiornato) su dispositivi mobili.</li>\n<li>backendStartup - quando viene avviato il backend Trilium</li>\n<li>hourly - eseguire una volta all'ora. È possibile utilizzare l'etichetta aggiuntiva <code>runAtHour</code> per specificare a che ora.</li>\n<li>daily - eseguire una volta al giorno</li>\n</ul>",
|
||||
"run": "definisce su quali eventi deve essere eseguito lo script. I valori possibili sono:\n<ul>\n<li>frontendStartup - quando il frontend Trilium viene avviato (o aggiornato), ma non su dispositivi mobili.</li>\n<li>mobileStartup - quando il frontend Trilium viene avviato (o aggiornato) su dispositivi mobili.</li>\n<li>backendStartup - quando viene avviato il backend Trilium.</li>\n<li>hourly - eseguire una volta all'ora. È possibile utilizzare l'etichetta aggiuntiva <code>runAtHour</code> per specificare a che ora.</li>\n<li>daily - eseguire una volta al giorno.</li>\n</ul>",
|
||||
"run_at_hour": "A che ora deve essere eseguito. Deve essere utilizzato insieme a <code>#run=hourly</code>. Può essere definito più volte per più esecuzioni durante il giorno.",
|
||||
"disable_inclusion": "gli script con questa etichetta non saranno inclusi nell'esecuzione dello script principale.",
|
||||
"sorted": "mantiene le note figlie ordinate alfabeticamente per titolo",
|
||||
@@ -1100,7 +1070,7 @@
|
||||
"show_help": "Mostra aiuto",
|
||||
"about": "Informazioni su Trilium Notes",
|
||||
"logout": "Esci",
|
||||
"show-cheatsheet": "Mostra il foglietto illustrativo",
|
||||
"show-cheatsheet": "Mostra la scheda riassuntiva",
|
||||
"toggle-zen-mode": "Modalità Zen",
|
||||
"new-version-available": "Nuovo aggiornamento disponibile",
|
||||
"download-update": "Ottieni la versione {{latestVersion}}",
|
||||
@@ -1149,7 +1119,8 @@
|
||||
"export_as_image": "Esporta come immagine",
|
||||
"export_as_image_png": "PNG (raster)",
|
||||
"export_as_image_svg": "SVG (vector)",
|
||||
"note_map": "Mappa"
|
||||
"note_map": "Mappa",
|
||||
"view_ocr_text": "Visualizza il testo OCR"
|
||||
},
|
||||
"onclick_button": {
|
||||
"no_click_handler": "Il widget pulsante '{{componentId}}' non ha un gestore di clic definito"
|
||||
@@ -1247,7 +1218,10 @@
|
||||
"expand_first_level": "Espandi figli diretti",
|
||||
"expand_nth_level": "Espandi {{depth}} livelli",
|
||||
"expand_all_levels": "Espandi tutti i livelli",
|
||||
"hide_child_notes": "Nascondi note secondarie nell'albero"
|
||||
"hide_child_notes": "Nascondi note secondarie nell'albero",
|
||||
"open_all_in_tabs": "Apri tutto",
|
||||
"open_all_in_tabs_tooltip": "Apri tutti i risultati in nuove schede",
|
||||
"open_all_confirm": "Verranno aperte {{count}} note in nuove schede. Vuoi continuare?"
|
||||
},
|
||||
"edited_notes": {
|
||||
"no_edited_notes_found": "Nessuna nota modificata per questo giorno...",
|
||||
@@ -1301,7 +1275,8 @@
|
||||
"collapse": "Ritorna alle dimensioni normali",
|
||||
"title": "Nota Mappa",
|
||||
"fix-nodes": "Fissare i nodi",
|
||||
"link-distance": "Distanza del collegamento"
|
||||
"link-distance": "Distanza del collegamento",
|
||||
"too-many-notes": "Questo sottoalbero contiene {{count}} note, un numero superiore al limite di {{max}} che può essere visualizzato nella mappa delle note."
|
||||
},
|
||||
"note_paths": {
|
||||
"title": "Percorsi delle note",
|
||||
@@ -1439,7 +1414,8 @@
|
||||
"note_already_in_diagram": "Nota che \"{{title}}\" è già presente nel diagramma.",
|
||||
"enter_title_of_new_note": "Inserisci il titolo della nuova nota",
|
||||
"default_new_note_title": "nuova nota",
|
||||
"click_on_canvas_to_place_new_note": "Clicca sulla tela per inserire una nuova nota"
|
||||
"click_on_canvas_to_place_new_note": "Clicca sulla tela per inserire una nuova nota",
|
||||
"rename_relation": "Rinomina relazione"
|
||||
},
|
||||
"vacuum_database": {
|
||||
"title": "Pulizia del database",
|
||||
@@ -1457,10 +1433,7 @@
|
||||
"note_tree_font": "Carattere dell'albero delle note",
|
||||
"note_detail_font": "Nota Dettaglio Carattere",
|
||||
"monospace_font": "Monospace (codice) Font",
|
||||
"note_tree_and_detail_font_sizing": "Si noti che le dimensioni dei caratteri dell'albero e dei dettagli sono relative all'impostazione della dimensione del carattere principale.",
|
||||
"not_all_fonts_available": "Non tutti i font elencati potrebbero essere disponibili sul tuo sistema.",
|
||||
"apply_font_changes": "Per applicare le modifiche al carattere, fare clic su",
|
||||
"reload_frontend": "ricarica frontend",
|
||||
"generic-fonts": "Caratteri generici",
|
||||
"sans-serif-system-fonts": "Caratteri di sistema sans-serif",
|
||||
"serif-system-fonts": "Caratteri di sistema Serif",
|
||||
@@ -1541,16 +1514,31 @@
|
||||
},
|
||||
"images": {
|
||||
"images_section_title": "Immagini",
|
||||
"download_images_automatically": "Scarica automaticamente le immagini per l'utilizzo offline.",
|
||||
"download_images_description": "L'HTML incollato può contenere riferimenti a immagini online; Trilium troverà tali riferimenti e scaricherà le immagini in modo che siano disponibili offline.",
|
||||
"enable_image_compression": "Abilita la compressione delle immagini",
|
||||
"max_image_dimensions": "Larghezza/altezza massima di un'immagine (l'immagine verrà ridimensionata se supera questa impostazione).",
|
||||
"download_images_automatically": "Scarica automaticamente le immagini",
|
||||
"download_images_description": "Scarica le immagini online a cui si fa riferimento nel codice HTML incollato, in modo che siano disponibili offline.",
|
||||
"enable_image_compression": "Compressione delle immagini",
|
||||
"max_image_dimensions": "Dimensioni massime dell'immagine",
|
||||
"max_image_dimensions_unit": "pixel",
|
||||
"jpeg_quality_description": "Qualità JPEG (10 - qualità peggiore, 100 - qualità migliore, 50 - 85 è consigliato)"
|
||||
"jpeg_quality_description": "Il range consigliato è compreso tra 50 e 85. Valori più bassi riducono le dimensioni del file, mentre valori più alti preservano i dettagli.",
|
||||
"enable_image_compression_description": "Comprimi e ridimensiona le immagini al momento del caricamento o dell'inserimento.",
|
||||
"max_image_dimensions_description": "Le immagini che superano queste dimensioni verranno ridimensionate automaticamente.",
|
||||
"jpeg_quality": "Qualità JPEG",
|
||||
"ocr_section_title": "Estrazione di testo (OCR)",
|
||||
"ocr_related_content_languages": "Lingue dei contenuti (utilizzate per l'estrazione del testo)",
|
||||
"ocr_auto_process": "Elaborazione automatica dei nuovi file",
|
||||
"ocr_auto_process_description": "Estrai automaticamente il testo dai file appena caricati o incollati.",
|
||||
"ocr_min_confidence": "Livello minimo di confidenza",
|
||||
"ocr_confidence_description": "Estrai solo il testo che supera questa soglia di affidabilità. Valori inferiori includono più testo, ma potrebbero risultare meno accurati.",
|
||||
"batch_ocr_title": "Elabora i file esistenti",
|
||||
"batch_ocr_description": "Estrai il testo da tutte le immagini, i PDF e i documenti Office presenti nei tuoi appunti. L'operazione potrebbe richiedere un po' di tempo a seconda del numero di file.",
|
||||
"batch_ocr_start": "Avvia l'elaborazione in batch",
|
||||
"batch_ocr_starting": "Avvio dell'elaborazione in batch...",
|
||||
"batch_ocr_progress": "Elaborazione di {{processed}} su {{total}} file...",
|
||||
"batch_ocr_completed": "Elaborazione in batch completata! Sono stati elaborati {{processed}} file.",
|
||||
"batch_ocr_error": "Errore durante l'elaborazione in batch: {{error}}"
|
||||
},
|
||||
"attachment_erasure_timeout": {
|
||||
"attachment_erasure_timeout": "Timeout cancellazione allegato",
|
||||
"attachment_auto_deletion_description": "Gli allegati vengono eliminati (e cancellati) automaticamente se non vengono più menzionati nella nota dopo un timeout definito.",
|
||||
"erase_attachments_after": "Cancella gli allegati non utilizzati dopo:",
|
||||
"manual_erasing_description": "È anche possibile attivare la cancellazione manualmente (senza considerare il timeout definito sopra):",
|
||||
"erase_unused_attachments_now": "Cancella subito le note degli allegati non utilizzati",
|
||||
@@ -1562,7 +1550,6 @@
|
||||
},
|
||||
"note_erasure_timeout": {
|
||||
"note_erasure_timeout_title": "Timeout cancellazione nota",
|
||||
"note_erasure_description": "Le note eliminate (e gli attributi, le revisioni...) vengono inizialmente contrassegnate come eliminate ed è possibile recuperarle dalla finestra di dialogo Note recenti. Dopo un certo periodo di tempo, le note eliminate vengono \"cancellate\", il che significa che il loro contenuto non è più recuperabile. Questa impostazione consente di configurare l'intervallo di tempo tra l'eliminazione e la cancellazione definitiva della nota.",
|
||||
"erase_notes_after": "Cancella le note dopo:",
|
||||
"manual_erasing_description": "È anche possibile attivare la cancellazione manualmente (senza considerare il timeout definito sopra):",
|
||||
"erase_deleted_notes_now": "Cancella subito le note eliminate",
|
||||
@@ -1654,12 +1641,15 @@
|
||||
"spellcheck": {
|
||||
"title": "Controllo ortografico",
|
||||
"description": "Queste opzioni sono valide solo per le versioni desktop; i browser utilizzeranno il proprio controllo ortografico nativo.",
|
||||
"enable": "Abilita il controllo ortografico",
|
||||
"language_code_label": "Codice/i della lingua",
|
||||
"language_code_placeholder": "ad esempio \"en-US\", \"de-AT\"",
|
||||
"multiple_languages_info": "È possibile separare più lingue con una virgola, ad esempio \"en-US, de-DE, cs\". ",
|
||||
"available_language_codes_label": "Codici lingua disponibili:",
|
||||
"restart-required": "Le modifiche alle opzioni di controllo ortografico avranno effetto dopo il riavvio dell'applicazione."
|
||||
"enable": "Controlla l'ortografia",
|
||||
"language_code_label": "Lingue del controllo ortografico",
|
||||
"restart-required": "Le modifiche alle opzioni di controllo ortografico avranno effetto dopo il riavvio dell'applicazione.",
|
||||
"custom_dictionary_title": "Dizionario personalizzato",
|
||||
"custom_dictionary_description": "Le parole aggiunte al dizionario vengono sincronizzate su tutti i tuoi dispositivi.",
|
||||
"custom_dictionary_edit": "Parole personalizzate",
|
||||
"custom_dictionary_edit_description": "Modifica l'elenco delle parole che non devono essere segnalate dal correttore ortografico. Le modifiche saranno visibili dopo il riavvio.",
|
||||
"custom_dictionary_open": "Modifica il dizionario",
|
||||
"related_description": "Configura le lingue del controllo ortografico e il dizionario personalizzato."
|
||||
},
|
||||
"api_log": {
|
||||
"close": "Vicino"
|
||||
@@ -1718,7 +1708,8 @@
|
||||
"new-feature": "Nuovo",
|
||||
"collections": "Collezioni",
|
||||
"ai-chat": "Chat con IA",
|
||||
"spreadsheet": "Foglio di calcolo"
|
||||
"spreadsheet": "Foglio di calcolo",
|
||||
"llm-chat": "Chat con IA"
|
||||
},
|
||||
"protect_note": {
|
||||
"toggle-on": "Proteggi la nota",
|
||||
@@ -1879,7 +1870,8 @@
|
||||
"theme_none": "Nessuna evidenziazione della sintassi",
|
||||
"theme_group_light": "Temi chiari",
|
||||
"theme_group_dark": "Temi scuri",
|
||||
"copy_title": "Copia negli appunti"
|
||||
"copy_title": "Copia negli appunti",
|
||||
"click_to_copy": "Clicca per copiare"
|
||||
},
|
||||
"classic_editor_toolbar": {
|
||||
"title": "Formattazione"
|
||||
@@ -1939,7 +1931,7 @@
|
||||
},
|
||||
"content_language": {
|
||||
"title": "Lingue dei contenuti",
|
||||
"description": "Seleziona una o più lingue che desideri visualizzare nella sezione \"Proprietà di base\" di una nota di testo di sola lettura o modificabile. Ciò consentirà funzionalità come il controllo ortografico o il supporto per la scrittura da destra a sinistra."
|
||||
"description": "Seleziona una o più lingue che devono comparire nell'elenco di selezione delle lingue nella sezione \"Proprietà di base\" di una nota di testo in sola lettura o modificabile. Ciò consentirà di utilizzare funzioni quali il controllo ortografico, il supporto per la scrittura da destra a sinistra e l'estrazione del testo (OCR)."
|
||||
},
|
||||
"switch_layout_button": {
|
||||
"title_vertical": "Sposta il riquadro di modifica in basso",
|
||||
@@ -2051,7 +2043,9 @@
|
||||
"title": "Opzioni sperimentali",
|
||||
"disclaimer": "Queste opzioni sono sperimentali e potrebbero causare instabilità. Usare con cautela.",
|
||||
"new_layout_name": "Nuovo layout",
|
||||
"new_layout_description": "Prova il nuovo layout per un look più moderno e una maggiore usabilità. Soggetto a modifiche significative nelle prossime versioni."
|
||||
"new_layout_description": "Prova il nuovo layout per un look più moderno e una maggiore usabilità. Soggetto a modifiche significative nelle prossime versioni.",
|
||||
"llm_name": "Chat con IA / LLM",
|
||||
"llm_description": "Attiva la barra laterale della chat con IA e le note della chat LLM basate su modelli linguistici di grandi dimensioni."
|
||||
},
|
||||
"server": {
|
||||
"unknown_http_error_title": "Errore di comunicazione con il server",
|
||||
@@ -2244,6 +2238,133 @@
|
||||
"sample_user_journey": "Percorso dell'utente",
|
||||
"sample_xy": "XY",
|
||||
"sample_venn": "Venn",
|
||||
"sample_ishikawa": "Ishikawa"
|
||||
"sample_ishikawa": "Ishikawa",
|
||||
"sample_treeview": "TreeView",
|
||||
"sample_wardley": "Mappa di Wardley"
|
||||
},
|
||||
"llm_chat": {
|
||||
"placeholder": "Scrivi un messaggio...",
|
||||
"send": "Invia",
|
||||
"sending": "Invio in corso...",
|
||||
"empty_state": "Inizia una conversazione scrivendo un messaggio qui sotto.",
|
||||
"searching_web": "Ricerca sul web...",
|
||||
"web_search": "Ricerca sul web",
|
||||
"note_tools": "Nota di accesso",
|
||||
"sources": "Fonti",
|
||||
"extended_thinking": "Riflessioni approfondite",
|
||||
"legacy_models": "Modelli precedenti",
|
||||
"thinking": "Sto riflettendo...",
|
||||
"thought_process": "Processo mentale",
|
||||
"tool_calls": "{{count}} chiamata/e di funzione",
|
||||
"input": "Dati in ingresso",
|
||||
"result": "Risultato",
|
||||
"error": "Errore",
|
||||
"tool_error": "fallito",
|
||||
"total_tokens": "{{total}} gettoni",
|
||||
"tokens_detail": "{{prompt}} prompt + {{completion}} completamento",
|
||||
"tokens_used": "{{prompt}} prompt + {{completion}} completamento = {{total}} token",
|
||||
"tokens_used_with_cost": "{{prompt}} prompt + {{completion}} completamento = {{total}} token (~${{cost}})",
|
||||
"tokens_used_with_model": "{{model}}: {{prompt}} prompt + {{completion}} completamento = {{total}} token",
|
||||
"tokens_used_with_model_and_cost": "{{model}}: {{prompt}} prompt + {{completion}} completamento = {{total}} token (~${{cost}})",
|
||||
"tokens": "tokens",
|
||||
"context_used": "{{percentage}}% utilizzato",
|
||||
"note_context_enabled": "Clicca qui per disattivare il contesto della nota: {{title}}",
|
||||
"note_context_disabled": "Clicca per includere la nota corrente nel contesto",
|
||||
"no_provider_message": "Non è stato configurato alcun fornitore di IA. Aggiungine uno per iniziare a chattare.",
|
||||
"add_provider": "Aggiungi un fornitore di IA",
|
||||
"sources_summary": "{{count}} fonti provenienti da {{sites}} siti",
|
||||
"stop": "Stop"
|
||||
},
|
||||
"sidebar_chat": {
|
||||
"title": "Chat AI",
|
||||
"launcher_title": "Apri Chat AI",
|
||||
"new_chat": "Inizia una nuova chat",
|
||||
"save_chat": "Salva la chat negli appunti",
|
||||
"empty_state": "Avvia una conversazione",
|
||||
"history": "Cronologia delle chat",
|
||||
"recent_chats": "Conversazioni recenti",
|
||||
"no_chats": "Nessuna conversazione precedente"
|
||||
},
|
||||
"llm": {
|
||||
"settings_title": "AI / LLM",
|
||||
"settings_description": "Configurare le integrazioni con l'intelligenza artificiale e i modelli linguistici di grandi dimensioni.",
|
||||
"add_provider": "Aggiungi fornitore",
|
||||
"add_provider_title": "Aggiungi un fornitore di IA",
|
||||
"configured_providers": "Fornitori configurati",
|
||||
"no_providers_configured": "Non sono stati ancora configurati fornitori.",
|
||||
"provider_name": "Nome",
|
||||
"provider_type": "Fornitore",
|
||||
"actions": "Azioni",
|
||||
"delete_provider": "Elimina",
|
||||
"delete_provider_confirmation": "Sei sicuro di voler eliminare il provider \"{{name}}\"?",
|
||||
"api_key": "Chiave API",
|
||||
"api_key_placeholder": "Inserisci la tua chiave API",
|
||||
"cancel": "Annulla",
|
||||
"feature_not_enabled": "Abilita la funzione sperimentale LLM in Impostazioni → Avanzate → Funzioni sperimentali per utilizzare le integrazioni basate sull'intelligenza artificiale.",
|
||||
"mcp_title": "MCP (Model Context Protocol)",
|
||||
"mcp_enabled": "Server MCP",
|
||||
"mcp_enabled_description": "Rendi pubblico un endpoint MCP (Model Context Protocol) in modo che gli assistenti di programmazione basati sull'intelligenza artificiale (ad esempio Claude Code, GitHub Copilot) possano leggere e modificare le tue note. L'endpoint è accessibile solo da localhost.",
|
||||
"mcp_endpoint_title": "URL dell'endpoint",
|
||||
"mcp_endpoint_description": "Aggiungi questo URL alla configurazione MCP del tuo assistente AI",
|
||||
"tools": {
|
||||
"search_notes": "Cerca nelle note",
|
||||
"get_note": "Prendi nota",
|
||||
"get_note_content": "Visualizza il contenuto della nota",
|
||||
"update_note_content": "Aggiorna il contenuto della nota",
|
||||
"append_to_note": "Aggiungi alla nota",
|
||||
"create_note": "Crea nota",
|
||||
"get_attributes": "Recupera gli attributi",
|
||||
"get_attribute": "Ottieni attributo",
|
||||
"set_attribute": "Imposta attributo",
|
||||
"delete_attribute": "Elimina attributo",
|
||||
"get_child_notes": "Recupera le note relative ai figli",
|
||||
"get_subtree": "Ottieni sottostruttura",
|
||||
"load_skill": "Carica skill",
|
||||
"web_search": "Ricerca sul web",
|
||||
"note_in_parent": "<Note/> in <Parent/>",
|
||||
"get_attachment": "Scarica l'allegato",
|
||||
"get_attachment_content": "Leggi il contenuto dell'allegato",
|
||||
"rename_note": "Rinomina nota",
|
||||
"delete_note": "Elimina nota",
|
||||
"move_note": "Sposta nota",
|
||||
"clone_note": "Clona nota"
|
||||
}
|
||||
},
|
||||
"ocr": {
|
||||
"extracted_text": "Testo estratto (OCR)",
|
||||
"extracted_text_title": "Testo estratto (OCR)",
|
||||
"loading_text": "Caricamento del testo OCR in corso...",
|
||||
"no_text_available": "Non è disponibile alcun testo OCR",
|
||||
"no_text_explanation": "Questo documento non è stato sottoposto a elaborazione OCR per l'estrazione del testo oppure non è stato trovato alcun testo.",
|
||||
"failed_to_load": "Impossibile caricare il testo OCR",
|
||||
"process_now": "Elaborazione OCR",
|
||||
"processing": "Elaborazione in corso...",
|
||||
"processing_started": "L'elaborazione OCR è stata avviata. Attendere qualche istante e aggiorna.",
|
||||
"processing_complete": "Elaborazione OCR completata.",
|
||||
"processing_failed": "Impossibile avviare l'elaborazione OCR",
|
||||
"text_filtered_low_confidence": "L'OCR ha rilevato il testo con un livello di affidabilità del {{confidence}}%, ma è stato scartato perché la soglia minima impostata è del {{threshold}}%.",
|
||||
"open_media_settings": "Apri Impostazioni",
|
||||
"view_extracted_text": "Visualizza il testo estratto (OCR)"
|
||||
},
|
||||
"mind-map": {
|
||||
"addChild": "Aggiungi figlio",
|
||||
"addParent": "Aggiungi genitore",
|
||||
"addSibling": "Aggiungi un fratello o una sorella",
|
||||
"removeNode": "Rimuovi nodo",
|
||||
"focus": "Modalità Focus",
|
||||
"cancelFocus": "Annulla modalità Focus",
|
||||
"moveUp": "Sposta su",
|
||||
"moveDown": "Sposta giù",
|
||||
"link": "Collegamento",
|
||||
"linkBidirectional": "Collegamento bidirezionale",
|
||||
"clickTips": "Clicca sul nodo di destinazione",
|
||||
"summary": "Sommario"
|
||||
},
|
||||
"search": {
|
||||
"title": "Cerca",
|
||||
"fuzzy_matching_label": "Tolleranza agli errori di battitura nella ricerca",
|
||||
"fuzzy_matching_description": "Si applica alla ricerca rapida e alla ricerca completa. Trova parole simili quando non ci sono corrispondenze esatte.",
|
||||
"autocomplete_fuzzy_label": "Tolleranza agli errori di battitura nel completamento automatico",
|
||||
"autocomplete_fuzzy_description": "Influisce sui comandi \"Vai alla nota\" e sui selettori di note. È più lento, ma tollera gli errori di digitazione."
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,12 +1,5 @@
|
||||
{
|
||||
"about": {
|
||||
"title": "Trilium Notesについて",
|
||||
"homepage": "ホームページ:",
|
||||
"app_version": "アプリのバージョン:",
|
||||
"db_version": "データベースのバージョン:",
|
||||
"sync_version": "同期のバージョン:",
|
||||
"build_date": "Build の日時:",
|
||||
"build_revision": "Build のバージョン:",
|
||||
"data_directory": "データの場所:"
|
||||
},
|
||||
"toast": {
|
||||
@@ -41,7 +34,9 @@
|
||||
"help_on_links": "リンクに関するヘルプ",
|
||||
"search_note": "ノート名で検索",
|
||||
"link_title_mirrors": "リンクタイトルはノートタイトルの変更を反映します",
|
||||
"link_title_arbitrary": "リンクタイトルは自由に変更可能"
|
||||
"link_title_arbitrary": "リンクタイトルは自由に変更可能",
|
||||
"anchor": "アンカー(任意)",
|
||||
"anchor_none": "なし(ノートへのリンク)"
|
||||
},
|
||||
"branch_prefix": {
|
||||
"save": "保存",
|
||||
@@ -106,16 +101,21 @@
|
||||
},
|
||||
"delete_notes": {
|
||||
"delete_all_clones_description": "すべてのクローンも削除(最近の変更では元に戻すことができる)",
|
||||
"erase_notes_description": "通常の(ソフト)削除では、ノートは削除されたものとしてマークされ、一定期間内に(最近の変更で)削除を取り消すことができます。このオプションをオンにすると、ノートは即座に削除され、削除を取り消すことはできません。",
|
||||
"erase_notes_description": "ノートを一時保存せずに完全に削除します。この操作は元に戻すことができず、アプリケーションが再読み込みされます。",
|
||||
"erase_notes_warning": "すべてのクローンを含め、ノートを完全に消去します(元に戻せません)。これにより、アプリケーションは強制的にリロードされます。",
|
||||
"notes_to_be_deleted": "以下のノートが削除されます ({{notesCount}})",
|
||||
"notes_to_be_deleted": "削除対象のノート ({{notesCount}})",
|
||||
"no_note_to_delete": "ノートは削除されません(クローンのみ)。",
|
||||
"cancel": "キャンセル",
|
||||
"ok": "OK",
|
||||
"close": "閉じる",
|
||||
"delete_notes_preview": "ノートのプレビューを削除",
|
||||
"broken_relations_to_be_deleted": "次のリレーション ({{relationCount}})は壊れているので消去されます",
|
||||
"deleted_relation_text": "削除予定のノート{{- note}}は{{- source}}からリレーション{{- relation}}によって参照されています."
|
||||
"broken_relations_to_be_deleted": "壊れたリレーション ({{relationCount}})",
|
||||
"title": "ノートを削除",
|
||||
"clones_label": "クローン",
|
||||
"delete_clones_description_other": "他の {{count}} 件のクローンも削除します。最近の変更履歴から元に戻すことができます。",
|
||||
"erase_notes_label": "完全に消去",
|
||||
"table_note_with_relation": "リレーションがあるノート",
|
||||
"table_relation": "リレーション",
|
||||
"table_points_to": "参照先 (削除済み)",
|
||||
"delete": "削除"
|
||||
},
|
||||
"calendar": {
|
||||
"mon": "月",
|
||||
@@ -178,11 +178,10 @@
|
||||
"monday": "月曜日",
|
||||
"first-week-of-the-year": "年の最初の週",
|
||||
"first-week-contains-first-day": "最初の週には、元日が含まれる",
|
||||
"first-week-contains-first-thursday": "最初の週には、その年の最初の木曜日が含まれる",
|
||||
"first-week-contains-first-thursday": "最初の週には、最初の木曜日が含まれる(ISO 8601)",
|
||||
"first-week-has-minimum-days": "最初の週は最低日数",
|
||||
"min-days-in-first-week": "最初の週の最低日数",
|
||||
"first-week-info": "最初の週は、その年の最初の木曜日を含む週を指し、<a href=\"https://en.wikipedia.org/wiki/ISO_week_date#First_week\">ISO 8601</a>規格に基づいています。",
|
||||
"first-week-warning": "最初の週のオプションを変更すると、既存のウィークノートと重複する可能性があり、既存のウィークノートはそれに応じて更新されません。",
|
||||
"first-week-warning": "この設定を変更すると、既存のウィークノートと重複が発生する可能性があります。",
|
||||
"formatting-locale": "日付と数値のフォーマット",
|
||||
"formatting-locale-auto": "アプリケーションの言語に基づいて",
|
||||
"tuesday": "火曜日",
|
||||
@@ -486,7 +485,14 @@
|
||||
"advanced": "高度",
|
||||
"export_as_image": "画像としてエクスポート",
|
||||
"export_as_image_png": "PNG (raster)",
|
||||
"export_as_image_svg": "SVG (vector)"
|
||||
"export_as_image_svg": "SVG (vector)",
|
||||
"view_ocr_text": "OCR テキストを表示",
|
||||
"word_wrap": "行の折り返し",
|
||||
"word_wrap_auto": "自動",
|
||||
"word_wrap_auto_description": "グローバル設定に従う",
|
||||
"word_wrap_on": "オン",
|
||||
"word_wrap_off": "オフ",
|
||||
"save_named_revision": "名前を付けて変更履歴を保存..."
|
||||
},
|
||||
"command_palette": {
|
||||
"export_note_title": "ノートをエクスポート",
|
||||
@@ -575,7 +581,10 @@
|
||||
"expand_first_level": "直下の子を展開",
|
||||
"expand_nth_level": "{{depth}} 階層下まで展開",
|
||||
"expand_all_levels": "すべての階層を展開",
|
||||
"hide_child_notes": "ツリー内の子ノートを非表示"
|
||||
"hide_child_notes": "ツリー内の子ノートを非表示",
|
||||
"open_all_in_tabs": "すべて開く",
|
||||
"open_all_in_tabs_tooltip": "すべての結果を新しいタブで開く",
|
||||
"open_all_confirm": "{{count}} 件のノートが新しいタブで開かれます。続行しますか?"
|
||||
},
|
||||
"note_types": {
|
||||
"geo-map": "ジオマップ",
|
||||
@@ -601,7 +610,9 @@
|
||||
"new-feature": "New",
|
||||
"collections": "コレクション",
|
||||
"ai-chat": "AI チャット",
|
||||
"spreadsheet": "スプレッドシート"
|
||||
"spreadsheet": "スプレッドシート",
|
||||
"llm-chat": "AI チャット",
|
||||
"markdown": "Markdown"
|
||||
},
|
||||
"edited_notes": {
|
||||
"no_edited_notes_found": "この日の編集されたノートはまだありません...",
|
||||
@@ -645,33 +656,6 @@
|
||||
"upload_success": "新しい画像の変更がアップロードされました。",
|
||||
"upload_failed": "新しい画像の変更のアップロードに失敗しました: {{message}}"
|
||||
},
|
||||
"revisions": {
|
||||
"download_button": "ダウンロード",
|
||||
"delete_button": "削除",
|
||||
"note_revisions": "ノートの変更履歴",
|
||||
"delete_all_revisions": "このノートの変更履歴をすべて削除",
|
||||
"delete_all_button": "変更履歴をすべて削除",
|
||||
"help_title": "変更履歴のヘルプ",
|
||||
"confirm_delete_all": "このノートのすべての変更履歴を削除しますか?",
|
||||
"no_revisions": "このノートに変更履歴はまだありません...",
|
||||
"restore_button": "復元",
|
||||
"confirm_restore": "この変更を復元しますか?現在のノートのタイトルとコンテンツはこの変更で上書きされます。",
|
||||
"confirm_delete": "この変更履歴を削除しますか?",
|
||||
"revisions_deleted": "ノートの変更履歴は削除されました。",
|
||||
"revision_restored": "ノートの変更が復元されました。",
|
||||
"revision_deleted": "ノートの変更履歴は削除されました。",
|
||||
"settings": "ノートの変更履歴の設定",
|
||||
"file_size": "ファイルサイズ:",
|
||||
"preview_not_available": "このノートタイプではプレビューは利用できません。",
|
||||
"diff_on": "差分を表示",
|
||||
"diff_off": "内容を表示",
|
||||
"diff_on_hint": "クリックしてノートソースとの差分を表示",
|
||||
"diff_off_hint": "クリックしてノートの内容を表示",
|
||||
"diff_not_available": "差分は利用できません。",
|
||||
"snapshot_interval": "ノートの変更履歴の記録間隔: {{seconds}} 秒。",
|
||||
"maximum_revisions": "ノートの変更履歴の記録制限: {{number}}.",
|
||||
"mime": "MIME: "
|
||||
},
|
||||
"attachments_actions": {
|
||||
"download": "ダウンロード",
|
||||
"open_externally": "外部で開く",
|
||||
@@ -807,7 +791,8 @@
|
||||
"label_note": "ノート",
|
||||
"box_size_small": "スモール (~ 10 行)",
|
||||
"box_size_medium": "ミディアム (~ 30 行)",
|
||||
"box_size_full": "フル (ボックスに全文が表示されます)"
|
||||
"box_size_full": "フル (ボックスに全文が表示されます)",
|
||||
"box_size_expandable": "展開可能 (デフォルトでは折りたたまれています)"
|
||||
},
|
||||
"ancestor": {
|
||||
"placeholder": "ノート名で検索",
|
||||
@@ -839,20 +824,21 @@
|
||||
"filling_entity_changes": "エンティティ変更行を入力中...",
|
||||
"sync_rows_filled_successfully": "同期行が正常に入力されました",
|
||||
"finished-successfully": "同期が正常に完了しました。",
|
||||
"failed": "同期に失敗しました: {{message}}"
|
||||
"failed": "同期に失敗しました: {{message}}",
|
||||
"force_full_sync_label": "強制的な完全同期",
|
||||
"force_full_sync_description": "同期サーバーとの完全同期を実行し、すべての変更を再アップロードします。",
|
||||
"fill_entity_changes_label": "エンティティの変更を反映",
|
||||
"fill_entity_changes_description": "エンティティの変更履歴を再構築します。同期処理で一部の変更が反映されていない場合に使用してください。"
|
||||
},
|
||||
"fonts": {
|
||||
"fonts": "フォント",
|
||||
"main_font": "メインフォント",
|
||||
"main_font": "インターフェース テキスト",
|
||||
"font_family": "フォントファミリー",
|
||||
"size": "サイズ",
|
||||
"note_tree_font": "ノートツリーフォント",
|
||||
"note_detail_font": "ノート詳細フォント",
|
||||
"monospace_font": "等幅(コード)フォント",
|
||||
"note_tree_and_detail_font_sizing": "ツリーと詳細のフォントサイズは、メインのフォントサイズに対して相対的であることに注意してください。",
|
||||
"not_all_fonts_available": "リストされているすべてのフォントが、お使いのシステムで利用できるとは限りません。",
|
||||
"apply_font_changes": "フォントの変更を適用するには、クリックしてください",
|
||||
"reload_frontend": "フロントエンドをリロード",
|
||||
"note_tree_font": "ノートツリー テキスト",
|
||||
"note_detail_font": "ドキュメント テキスト",
|
||||
"monospace_font": "等幅フォント",
|
||||
"not_all_fonts_available": "リストにあるすべてのフォントが、お使いのシステムで利用できるとは限りません",
|
||||
"generic-fonts": "一般的なフォント",
|
||||
"sans-serif-system-fonts": "サンセリフのシステムフォント",
|
||||
"serif-system-fonts": "セリフのシステムフォント",
|
||||
@@ -862,7 +848,12 @@
|
||||
"sans-serif": "サンセリフ",
|
||||
"monospace": "等幅",
|
||||
"system-default": "システムのデフォルト",
|
||||
"theme_defined": "テーマが定義されました"
|
||||
"theme_defined": "テーマが定義されました",
|
||||
"custom_fonts": "カスタムフォントを使用",
|
||||
"preview": "プレビュー",
|
||||
"monospace_font_description": "コードノートとコードブロックに使用されます",
|
||||
"size_relative_to_general": "サイズは一般的なフォントサイズを基準としています",
|
||||
"apply_changes": "変更を適用するには再読み込みしてください"
|
||||
},
|
||||
"max_content_width": {
|
||||
"title": "コンテンツ幅",
|
||||
@@ -872,20 +863,23 @@
|
||||
"centerContent": "コンテンツを中央に配置"
|
||||
},
|
||||
"theme": {
|
||||
"title": "アプリのテーマ",
|
||||
"theme_label": "テーマ",
|
||||
"title": "ユーザーインターフェース",
|
||||
"theme_label": "アプリケーションのテーマ",
|
||||
"override_theme_fonts_label": "テーマのフォントを上書き",
|
||||
"auto_theme": "レガシー(システムの配色に従う)",
|
||||
"light_theme": "レガシー(ライト)",
|
||||
"dark_theme": "レガシー(ダーク)",
|
||||
"triliumnext": "Trilium(システムの配色に従う)",
|
||||
"triliumnext-light": "Trilium(ライト)",
|
||||
"triliumnext-dark": "Trilium(ダーク)",
|
||||
"auto_theme": "システムの配色に従う",
|
||||
"light_theme": "ライト",
|
||||
"dark_theme": "ダーク",
|
||||
"triliumnext": "システムの配色に従う",
|
||||
"triliumnext-light": "ライト",
|
||||
"triliumnext-dark": "ダーク",
|
||||
"layout": "レイアウト",
|
||||
"layout-vertical-title": "垂直",
|
||||
"layout-horizontal-title": "水平",
|
||||
"layout-vertical-description": "ランチャーバーは左側(デフォルト)",
|
||||
"layout-horizontal-description": "ランチャーバーはタブバーの下にあり、タブバーは全幅に。"
|
||||
"layout-horizontal-description": "ランチャーバーはタブバーの下にあり、タブバーは全幅に。",
|
||||
"modern_themes": "モダン",
|
||||
"legacy_themes": "レガシー",
|
||||
"custom_themes": "カスタム"
|
||||
},
|
||||
"vim_key_bindings": {
|
||||
"use_vim_keybindings_in_code_notes": "Vimキーバインド",
|
||||
@@ -897,36 +891,55 @@
|
||||
},
|
||||
"images": {
|
||||
"images_section_title": "画像",
|
||||
"download_images_automatically": "画像を自動的にダウンロードしてオフラインで使用可能にする。",
|
||||
"download_images_description": "貼り付けられたHTMLにはオンライン画像への参照が含まれていることがありますが、Triliumはそれらの参照を見つけて画像をダウンロードし、オフラインで利用できるようにします。",
|
||||
"enable_image_compression": "画像の圧縮を有効にする",
|
||||
"max_image_dimensions": "画像の最大幅/高さ(この設定を超えると画像はリサイズされます)。",
|
||||
"download_images_automatically": "画像を自動的にダウンロードする。",
|
||||
"download_images_description": "貼り付けた HTML 内の参照画像をダウンロードし、オフラインでも利用できるようにする。",
|
||||
"enable_image_compression": "画像の圧縮",
|
||||
"max_image_dimensions": "画像の最大サイズ",
|
||||
"max_image_dimensions_unit": "ピクセル",
|
||||
"jpeg_quality_description": "JPEGの品質(10 - 最低品質、100 - 最高品質、50 - 80を推奨)"
|
||||
"jpeg_quality_description": "推奨範囲は50~85です。値が低いほどファイルサイズが小さくなり、値が高いほどディテールが保持されます。",
|
||||
"enable_image_compression_description": "画像をアップロードまたは貼り付ける際に、画像を圧縮およびサイズ変更します。",
|
||||
"max_image_dimensions_description": "このサイズを超える画像は自動的にサイズ変更されます",
|
||||
"jpeg_quality": "JPEG 画質",
|
||||
"ocr_section_title": "テキスト抽出(OCR)",
|
||||
"ocr_related_content_languages": "コンテンツ言語(テキスト抽出に使用)",
|
||||
"ocr_auto_process": "新しいファイルを自動処理",
|
||||
"ocr_auto_process_description": "新しくアップロードまたは貼り付けられたファイルからテキストを自動的に抽出します。",
|
||||
"ocr_min_confidence": "最低限の信頼度",
|
||||
"ocr_confidence_description": "この信頼度閾値以上のテキストのみを抽出します。信頼度が低いほど抽出されるテキストの量は増えますが、精度が低下する可能性があります。",
|
||||
"batch_ocr_title": "既存ファイルの処理",
|
||||
"batch_ocr_description": "ノート内の既存の画像、PDF、Office 文書からテキストを抽出します。ファイル数によっては時間がかかる場合があります。",
|
||||
"batch_ocr_start": "バッチ処理を開始します",
|
||||
"batch_ocr_starting": "バッチ処理を開始しています...",
|
||||
"batch_ocr_progress": "{{total}} ファイルのうち {{processed}} ファイルを処理中...",
|
||||
"batch_ocr_completed": "バッチ処理が完了しました!{{processed}} ファイルを処理しました。",
|
||||
"batch_ocr_error": "バッチ処理中にエラーが発生しました: {{error}}"
|
||||
},
|
||||
"search_engine": {
|
||||
"title": "検索エンジン",
|
||||
"custom_search_engine_info": "カスタム検索エンジンは、名前とURLの両方を設定する必要があります。どちらも設定されていない場合、DuckDuckGoがデフォルトの検索エンジンとして使用されます。",
|
||||
"predefined_templates_label": "定義済みの検索エンジンのテンプレート",
|
||||
"custom_search_engine_info": "選択したテキストをウェブ上で検索する際に使用します。設定されていない場合は、DuckDuckGo が使用されます。",
|
||||
"predefined_templates_label": "プリセット",
|
||||
"bing": "Bing",
|
||||
"baidu": "Baidu",
|
||||
"duckduckgo": "DuckDuckGo",
|
||||
"google": "Google",
|
||||
"custom_name_label": "カスタム検索エンジンの名前",
|
||||
"custom_name_placeholder": "カスタム検索エンジンの名前",
|
||||
"custom_url_label": "カスタム検索エンジンのURLには、検索語句のプレースホルダーとして {keyword} を含める必要があります。",
|
||||
"custom_url_placeholder": "カスタム検索エンジンのurl",
|
||||
"save_button": "保存"
|
||||
"custom_name_label": "名前",
|
||||
"custom_name_placeholder": "検索エンジン名",
|
||||
"custom_url_label": "URL",
|
||||
"custom_url_placeholder": "検索エンジンの URL",
|
||||
"save_button": "保存",
|
||||
"custom_url_description": "検索語句の代わりに {keyword} を使用してください。"
|
||||
},
|
||||
"tray": {
|
||||
"title": "システムトレイ",
|
||||
"enable_tray": "トレイを有効にする (この変更を適用にするには、Triliumを再起動する必要があります)"
|
||||
"enable_tray": "トレイアイコン",
|
||||
"enable_tray_description": "この変更を有効にするには、Trilium を再起動する必要があります。"
|
||||
},
|
||||
"heading_style": {
|
||||
"title": "見出しのスタイル",
|
||||
"plain": "プレーン",
|
||||
"underline": "下線",
|
||||
"markdown": "Markdownスタイル"
|
||||
"markdown": "Markdownスタイル",
|
||||
"description": "テキストノート内の見出しの表示スタイル。"
|
||||
},
|
||||
"highlights_list": {
|
||||
"title": "ハイライトリスト",
|
||||
@@ -955,20 +968,22 @@
|
||||
"text_auto_read_only_size": {
|
||||
"title": "自動読み取り専用のサイズ",
|
||||
"description": "自動読み取り専用のノートサイズは、ノートが読み取り専用モード(パフォーマンス上の理由)で表示されるようになるサイズです。",
|
||||
"label": "自動読み取り専用のサイズ(テキストノート)",
|
||||
"label": "自動で読み取り専用になるサイズ",
|
||||
"unit": "文字"
|
||||
},
|
||||
"code_auto_read_only_size": {
|
||||
"title": "自動読み取り専用のサイズ",
|
||||
"description": "自動読み取り専用のノートサイズは、ノートが読み取り専用モード(パフォーマンス上の理由)で表示されるようになるサイズです。",
|
||||
"unit": "文字",
|
||||
"label": "自動読み取り専用のサイズ(コードノート)"
|
||||
"label": "自動で読み取り専用になるサイズ"
|
||||
},
|
||||
"custom_date_time_format": {
|
||||
"title": "日付/時刻フォーマットのカスタム",
|
||||
"title": "日付/時刻の形式",
|
||||
"description": "<shortcut />またはツールバーから挿入される日付と時刻のフォーマットをカスタマイズする。 利用可能なトークンについては <doc>Day.js ドキュメント</doc> を参照してください。",
|
||||
"format_string": "文字列形式:",
|
||||
"formatted_time": "日付/時刻形式:"
|
||||
"format_string": "書式文字列",
|
||||
"formatted_time": "日付/時刻の形式",
|
||||
"description_short": "ツールバーから挿入する日付と時刻の形式をカスタマイズできます。",
|
||||
"preview": "プレビュー: {{preview}}"
|
||||
},
|
||||
"backup": {
|
||||
"automatic_backup": "自動バックアップ",
|
||||
@@ -983,7 +998,9 @@
|
||||
"date-and-time": "日時",
|
||||
"path": "パス",
|
||||
"database_backed_up_to": "データベースは{{backupFilePath}}にバックアップされました",
|
||||
"no_backup_yet": "バックアップがありません"
|
||||
"no_backup_yet": "バックアップがありません",
|
||||
"download": "ダウンロード",
|
||||
"title": "バックアップ"
|
||||
},
|
||||
"password": {
|
||||
"wiki": "wiki",
|
||||
@@ -995,42 +1012,48 @@
|
||||
"new_password_confirmation": "新パスワードの確認",
|
||||
"change_password": "パスワードの変更",
|
||||
"change_password_heading": "パスワードの変更",
|
||||
"protected_session_timeout": "保護されたセッションのタイムアウト",
|
||||
"protected_session_timeout_description": "保護されたセッションのタイムアウトは、保護されたセッションがブラウザのメモリから消去される時間です。これは、保護されたノートとの最後のやり取りから測定されます。参照",
|
||||
"protected_session_timeout": "保護されたセッション",
|
||||
"protected_session_timeout_description": "ブラウザのメモリからセッションが削除されるまでの非アクティブ時間。詳細はこちら",
|
||||
"for_more_info": "詳細はこちら。",
|
||||
"protected_session_timeout_label": "保護されたセッションのタイムアウト:",
|
||||
"protected_session_timeout_label": "セッションが自動で終了するまでの時間",
|
||||
"reset_confirmation": "パスワードをリセットすると、保護されているすべてのノートにアクセスできなくなります。本当にパスワードをリセットしますか?",
|
||||
"reset_success_message": "パスワードがリセットされました。新しいパスワードを設定してください",
|
||||
"set_password_heading": "パスワードの設定",
|
||||
"set_password": "パスワードの設定",
|
||||
"password_mismatch": "新しいパスワードが同じではありません。",
|
||||
"password_changed_success": "パスワードが変更されました。OKを押すとTriliumがリロードされます。"
|
||||
"password_changed_success": "パスワードが変更されました。OKを押すとTriliumがリロードされます。",
|
||||
"change_password_description": "現在のパスワードを更新",
|
||||
"reset_password": "パスワードをリセット",
|
||||
"reset_password_description": "保護されたノートへのアクセス権を完全に失います",
|
||||
"cancel": "キャンセル"
|
||||
},
|
||||
"spellcheck": {
|
||||
"title": "スペルチェック",
|
||||
"description": "これらのオプションはデスクトップビルドにのみ適用され、ブラウザはそれぞれのネイティブスペルチェックを使用します。",
|
||||
"enable": "スペルチェックを有効",
|
||||
"language_code_label": "言語コード",
|
||||
"language_code_placeholder": "例えば \"en-US\", \"de-AT\"",
|
||||
"multiple_languages_info": "複数の言語はカンマで区切ることができます。例: \"en-US, de-DE, cs\"。 ",
|
||||
"available_language_codes_label": "使用可能な言語コード:",
|
||||
"restart-required": "スペルチェックオプションの変更は、アプリケーションの再起動後に有効になります。"
|
||||
"enable": "スペルチェック",
|
||||
"language_code_label": "スペルチェック対応言語",
|
||||
"restart-required": "スペルチェックオプションの変更は、アプリケーションの再起動後に有効になります。",
|
||||
"custom_dictionary_title": "カスタム辞書",
|
||||
"custom_dictionary_description": "辞書に追加した単語は、すべてのデバイス間で同期されます。",
|
||||
"custom_dictionary_edit": "カスタム単語",
|
||||
"custom_dictionary_edit_description": "スペルチェッカーでエラーとして検出されないようにする単語リストを編集します。変更は再起動後に反映されます。",
|
||||
"custom_dictionary_open": "辞書の編集",
|
||||
"related_description": "スペルチェック対応言語とカスタム辞書を設定します。"
|
||||
},
|
||||
"sync_2": {
|
||||
"config_title": "同期設定",
|
||||
"server_address": "サーバーインスタンスのアドレス",
|
||||
"timeout": "同期タイムアウト",
|
||||
"timeout_unit": "ミリ秒",
|
||||
"proxy_label": "同期プロキシサーバー(任意)",
|
||||
"note": "注",
|
||||
"note_description": "プロキシ設定を空白のままにすると、システムプロキシが使用されます(デスクトップ/electronビルドにのみ適用されます)。",
|
||||
"special_value_description": "もう一つの特別な値は <code>noproxy</code> で、これはシステムプロキシさえも無視して、 <code>NODE_TLS_REJECT_UNAUTHORIZED</code> を尊重するように強制します。",
|
||||
"config_title": "同期サーバー",
|
||||
"server_address": "サーバーアドレス",
|
||||
"timeout": "接続タイムアウト",
|
||||
"proxy_label": "プロキシサーバー",
|
||||
"save": "保存",
|
||||
"help": "ヘルプ",
|
||||
"test_title": "同期のテスト",
|
||||
"test_description": "これは同期サーバとの接続とハンドシェイクをテストします。同期サーバーが初期化されていない場合、ローカルドキュメントと同期するように設定します。",
|
||||
"test_title": "接続テスト",
|
||||
"test_description": "同期サーバーへの接続をテストします。初期化されていない場合は、同期の設定を行います。",
|
||||
"test_button": "同期試行",
|
||||
"handshake_failed": "同期サーバーのハンドシェイクに失敗しました。エラー: {{message}}"
|
||||
"handshake_failed": "同期サーバーのハンドシェイクに失敗しました。エラー: {{message}}",
|
||||
"timeout_description": "接続が遅い場合に接続を断念するまでの待機時間。",
|
||||
"server_address_description": "同期先の Trilium サーバーの URL。",
|
||||
"proxy_description": "システムのプロキシを使用する場合は空欄のままにしてください(デスクトップ版のみ)。すべてのプロキシをバイパスするには \"noproxy\" を使用してください。"
|
||||
},
|
||||
"api_log": {
|
||||
"close": "閉じる"
|
||||
@@ -1102,7 +1125,7 @@
|
||||
"calendar_root": "dayノートのルートとして使用するノートをマークします。このようにマークできるのは 1 つだけです。",
|
||||
"archived": "このラベルの付いたノートは、デフォルトでは検索結果に表示されません (ジャンプ先、リンクの追加ダイアログなどにも表示されません)。",
|
||||
"exclude_from_export": "ノート(サブツリーを含む)はノートのエクスポートには含まれません",
|
||||
"run": "どのイベントでスクリプトを実行するかを定義します。可能な値は次の通り:\n<ul>\n<li>frontendStartup - Trilium フロントエンドが起動(または更新)されたとき。モバイルは除く</li>\n<li>mobileStartup - モバイルで Trilium フロントエンドが起動(または更新)されたとき。</li>\n<li>backendStartup - Trilium バックエンドが起動したとき</li>\n<li>hourly - 1時間に1回実行します。 <code>runAtHour</code> というラベルを追加して、実行時刻を指定できます。</li>\n<li>daily - 1日に1回実行</li>\n</ul>",
|
||||
"run": "スクリプトを実行するイベントを定義します。指定可能な値は以下の通りです:\n<ul>\n<li>frontendStartup - Trilium フロントエンドの起動時(または更新時)に実行されます。モバイルでは実行されません。</li>\n<li>mobileStartup - モバイルでの Trilium フロントエンドの起動時(または更新時)に実行されます。</li>\n<li>backendStartup - Trilium バックエンドの起動時。</li>\n<li>hourly - 1時間ごとに実行。 <code>runAtHour</code> というラベルを追加することで、実行時刻を指定できます。</li>\n<li>daily - 1日に1回実行。</li>\n</ul>",
|
||||
"run_on_instance": "どの Trilium インスタンスでこれを実行するかを定義します。デフォルトはすべてのインスタンスです。",
|
||||
"run_at_hour": "何時に実行するかを指定します。 <code>#run=hourly</code> と併用してください。1日に複数回実行したい場合は、複数回定義できます。",
|
||||
"disable_inclusion": "このラベルが付いたスクリプトは親スクリプトの実行には含まれません。",
|
||||
@@ -1181,7 +1204,9 @@
|
||||
"and_more": "...その他 {{count}} 件。",
|
||||
"print_landscape": "PDF にエクスポートするときに、ページの向きを縦向きではなく横向きに変更します。",
|
||||
"print_page_size": "PDF にエクスポートするときに、ページのサイズを変更します。サポートされる値: <code>A0</code>, <code>A1</code>, <code>A2</code>, <code>A3</code>, <code>A4</code>, <code>A5</code>, <code>A6</code>, <code>Legal</code>, <code>Letter</code>, <code>Tabloid</code>, <code>Ledger</code>。",
|
||||
"textarea": "複数行テキスト"
|
||||
"textarea": "複数行テキスト",
|
||||
"print_scale": "PDF にエクスポートする際に、レンダリングされるコンテンツの縮尺を変更します。値の範囲は 0.1(10%)から 2(200%)までで、デフォルト値は 1(100%)です。",
|
||||
"print_margins": "PDF に書き出す際に、ページ余白を設定します。<code>デフォルト</code>, <code>なし</code>, <code>最小</code>, または <code>上、右、下、左</code> のようなカスタム値をミリメートル単位で指定できます。"
|
||||
},
|
||||
"link_context_menu": {
|
||||
"open_note_in_popup": "クイック編集",
|
||||
@@ -1332,7 +1357,10 @@
|
||||
"theme_none": "シンタックスハイライトなし",
|
||||
"theme_group_light": "ライトテーマ",
|
||||
"theme_group_dark": "ダークテーマ",
|
||||
"copy_title": "クリップボードにコピー"
|
||||
"copy_title": "クリップボードにコピー",
|
||||
"click_to_copy": "クリックしてコピー",
|
||||
"tab_width": "タブ幅",
|
||||
"tab_width_unit": "スペース"
|
||||
},
|
||||
"editor": {
|
||||
"title": "エディター"
|
||||
@@ -1348,7 +1376,8 @@
|
||||
"title": "固定",
|
||||
"description": "編集ツールは「書式設定」のリボンタブに表示されます。"
|
||||
},
|
||||
"multiline-toolbar": "ツールバーが収まりきらない場合は、複数行で表示する。"
|
||||
"multiline-toolbar": "ツールバーが収まりきらない場合は複数行で表示",
|
||||
"toolbar_style": "ツールバーのスタイル"
|
||||
}
|
||||
},
|
||||
"electron_context_menu": {
|
||||
@@ -1369,7 +1398,7 @@
|
||||
"days": "日"
|
||||
},
|
||||
"share": {
|
||||
"title": "共有設定",
|
||||
"title": "共有",
|
||||
"redirect_bare_domain": "ネイキッドドメインを共有ページにリダイレクト",
|
||||
"redirect_bare_domain_description": "匿名のユーザーをログイン画面ではなく共有ページにリダイレクトします",
|
||||
"show_login_link_description": "共有ページの下部にログインリンクを追加",
|
||||
@@ -1390,7 +1419,7 @@
|
||||
},
|
||||
"content_language": {
|
||||
"title": "コンテンツの言語",
|
||||
"description": "読み取り専用または編集可能なテキストノートの基本プロパティセクションの言語選択に表示する言語を 1 つ以上選択します。これにより、スペルチェックや右から左へのサポートなどの機能が利用できるようになります。"
|
||||
"description": "読み取り専用または編集可能なテキストノートの基本プロパティセクションの言語選択に表示する言語を 1 つ以上選択してください。これにより、スペルチェック、右から左へのサポート、テキスト抽出(OCR)などの機能が利用できるようになります。"
|
||||
},
|
||||
"png_export_button": {
|
||||
"button_title": "図をPNG形式でエクスポート"
|
||||
@@ -1414,12 +1443,12 @@
|
||||
"message_macos": "TriliumNext は現在、Rosetta 2による翻訳環境で実行されています。つまり、Apple Silicon MacではIntel (x64)バージョンを使用していることになります。これはパフォーマンスとバッテリー寿命に重大な影響を及ぼします。"
|
||||
},
|
||||
"editorfeatures": {
|
||||
"emoji_completion_enabled": "絵文字のオートコンプリートを有効",
|
||||
"note_completion_enabled": "ノートのオートコンプリートを有効",
|
||||
"emoji_completion_description": "有効にすると、「:」に続けて絵文字の名前を入力することで、テキストに絵文字を簡単に挿入できます。",
|
||||
"note_completion_description": "有効にすると、「@」 に続けてノートのタイトルを入力することで、ノートへのリンクを作成できます。",
|
||||
"slash_commands_enabled": "スラッシュコマンドを有効",
|
||||
"slash_commands_description": "有効にすると、改行や見出しの挿入などの編集コマンドは、「/」 と入力して切り替えることができます。",
|
||||
"emoji_completion_enabled": "絵文字のオートコンプリート",
|
||||
"note_completion_enabled": "ノートのオートコンプリート",
|
||||
"emoji_completion_description": "絵文字は \":\" の後に絵文字の名前を入力することで、テキストに絵文字を簡単に挿入できます。",
|
||||
"note_completion_description": "ノートへのリンクは \"@\" の後にノートのタイトルを入力することで作成できます。",
|
||||
"slash_commands_enabled": "スラッシュコマンド",
|
||||
"slash_commands_description": "改行や見出しの挿入などの編集コマンドは \"/\" を入力して切り替えることができます。",
|
||||
"title": "機能"
|
||||
},
|
||||
"table_context_menu": {
|
||||
@@ -1521,7 +1550,8 @@
|
||||
"collapse": "通常サイズに折りたたむ",
|
||||
"title": "ノートマップ",
|
||||
"link-distance": "リンク距離",
|
||||
"fix-nodes": "ノードを修正"
|
||||
"fix-nodes": "ノードを修正",
|
||||
"too-many-notes": "このサブツリーには {{count}} 件のノートが含まれており、ノートマップに表示できる {{max}} の上限を超えています。"
|
||||
},
|
||||
"owned_attribute_list": {
|
||||
"owned_attributes": "所有属性"
|
||||
@@ -1552,15 +1582,16 @@
|
||||
"click_on_canvas_to_place_new_note": "キャンバスをクリックして新しいノートを配置",
|
||||
"connection_exists": "これらのノート間の接続 '{{name}}' は既に存在します。",
|
||||
"start_dragging_relations": "ここからリレーションをドラッグして、別のノートにドロップします。",
|
||||
"note_already_in_diagram": "ノート「{{title}}」はすでに図に含まれています。"
|
||||
"note_already_in_diagram": "ノート「{{title}}」はすでに図に含まれています。",
|
||||
"rename_relation": "リレーション名の変更"
|
||||
},
|
||||
"database_anonymization": {
|
||||
"title": "データベースの匿名化",
|
||||
"full_anonymization": "完全匿名化",
|
||||
"full_anonymization_description": "この操作により、データベースの新しいコピーが作成され、匿名化されます(すべてのノートの内容を削除し、構造と一部の非機密メタデータのみを残します)。これにより、個人データが漏洩する心配なく、デバッグ目的でオンライン共有できます。",
|
||||
"full_anonymization": "完全な匿名化",
|
||||
"full_anonymization_description": "ノートの内容をすべて削除し、構造と機密性の低いメタデータのみを残したデータベースのコピーを作成します。問題のデバッグ時にオンラインで共有しても安全です。",
|
||||
"save_fully_anonymized_database": "完全に匿名化されたデータベースを保存",
|
||||
"light_anonymization": "軽い匿名化",
|
||||
"light_anonymization_description": "この操作により、データベースの新しいコピーが作成され、軽い匿名化が適用されます。具体的には、すべてのノートの内容のみが削除され、タイトルと属性はそのまま残ります。さらに、カスタムJSフロントエンド/バックエンドスクリプトノートとカスタムウィジェットもそのまま残ります。これにより、問題のデバッグのためのコンテキストがより多く提供されます。",
|
||||
"light_anonymization_description": "ノートの内容は削除しますが、タイトル、属性、カスタムスクリプト/ウィジェットは残します。デバッグのためのコンテキストがより多く提供されます。",
|
||||
"choose_anonymization": "完全に匿名化したデータベースを提供するか、軽く匿名化したデータベースを提供するかは、あなた自身が決めることができます。完全に匿名化されたDBであっても非常に有用ですが、場合によっては軽く匿名化されたDBの方がバグの特定と修正のプロセスを速めることができます。",
|
||||
"save_lightly_anonymized_database": "軽く匿名化されたデータベースを保存",
|
||||
"existing_anonymized_databases": "既存の匿名化データベース",
|
||||
@@ -1569,18 +1600,22 @@
|
||||
"error_creating_anonymized_database": "匿名化データベースの作成に失敗しました。詳細はバックエンドログを確認してください",
|
||||
"successfully_created_fully_anonymized_database": "完全に匿名化されたデータベースを {{anonymizedFilePath}} に作成",
|
||||
"successfully_created_lightly_anonymized_database": "軽く匿名化されたデータベースを {{anonymizedFilePath}} に作成",
|
||||
"no_anonymized_database_yet": "匿名化されたデータベースはまだありません。"
|
||||
"no_anonymized_database_yet": "匿名化されたデータベースはまだありません。",
|
||||
"description": "問題のデバッグ時に開発者と共有するために、個人データを公開することなく、データベースの匿名化されたコピーを作成します。"
|
||||
},
|
||||
"database_integrity_check": {
|
||||
"title": "データベースの整合性チェック",
|
||||
"description": "これは、データベースがSQLiteレベルで破損がないかをチェックします。DBのサイズによっては時間がかかる場合があります。",
|
||||
"check_button": "データベースの整合性をチェック",
|
||||
"checking_integrity": "データベースの整合性をチェックしています...",
|
||||
"integrity_check_succeeded": "整合性チェックに成功 - 問題は見つかりませんでした。",
|
||||
"integrity_check_failed": "整合性チェックに失敗: {{results}}"
|
||||
"integrity_check_failed": "整合性チェックに失敗: {{results}}",
|
||||
"check_integrity_label": "データベースの整合性チェック",
|
||||
"check_integrity_description": "SQLite レベルでデータベースが破損していないことを確認します。"
|
||||
},
|
||||
"code-editor-options": {
|
||||
"title": "エディター"
|
||||
"title": "エディター",
|
||||
"tab_width": "タブ幅",
|
||||
"tab_width_unit": "スペース"
|
||||
},
|
||||
"search_string": {
|
||||
"title_column": "文字列検索:",
|
||||
@@ -1724,14 +1759,18 @@
|
||||
"find_and_fix_button": "一貫性の問題を見つけて修正する",
|
||||
"finding_and_fixing_message": "一貫性の問題を見つけて修正中…",
|
||||
"title": "一貫性をチェック",
|
||||
"issues_fixed_message": "発見された可能性のある一貫性の問題はすべて修正されました。"
|
||||
"issues_fixed_message": "発見された可能性のある一貫性の問題はすべて修正されました。",
|
||||
"find_and_fix_label": "整合性の問題を検出して修正",
|
||||
"find_and_fix_description": "データベース内のデータ整合性の問題をスキャンし、自動的に修復します。"
|
||||
},
|
||||
"vacuum_database": {
|
||||
"title": "データベースのバキューム",
|
||||
"description": "これによりデータベースが再構築され、通常はデータベースファイルのサイズが小さくなります。実際のデータは変更されません。",
|
||||
"button_text": "データベースをバキューム",
|
||||
"vacuuming_database": "データベースのバキュームを実行中...",
|
||||
"database_vacuumed": "データベースのバキューム処理が完了しました"
|
||||
"database_vacuumed": "データベースのバキューム処理が完了しました",
|
||||
"vacuum_label": "データベースのバキューム",
|
||||
"vacuum_description": "データベースを再構築してファイルサイズを削減します。データは変更されません。"
|
||||
},
|
||||
"ribbon": {
|
||||
"promoted_attributes_message": "プロモート属性がノートに存在する場合、プロモート属性のリボンタブが自動的に開きます",
|
||||
@@ -1739,12 +1778,12 @@
|
||||
"widgets": "リボンウィジェット"
|
||||
},
|
||||
"ui-performance": {
|
||||
"enable-motion": "トランジションとアニメーションを有効にする",
|
||||
"enable-shadows": "影を有効にする",
|
||||
"enable-backdrop-effects": "メニュー、ポップアップ、パネルの背景効果を有効にする",
|
||||
"enable-motion": "画面遷移とアニメーション",
|
||||
"enable-shadows": "影",
|
||||
"enable-backdrop-effects": "メニュー、ポップアップ、パネルの背景効果",
|
||||
"title": "パフォーマンス",
|
||||
"enable-smooth-scroll": "スムーズスクロールを有効にする",
|
||||
"app-restart-required": "(変更を有効にするにはアプリケーションの再起動が必要です)"
|
||||
"enable-smooth-scroll": "スムーズスクロール",
|
||||
"app-restart-required": "アプリの再起動が必要です"
|
||||
},
|
||||
"code_mime_types": {
|
||||
"title": "ドロップダウンで利用可能なMIMEタイプ",
|
||||
@@ -1753,37 +1792,43 @@
|
||||
"tooltip_code_note_syntax": "コードノート"
|
||||
},
|
||||
"attachment_erasure_timeout": {
|
||||
"attachment_erasure_timeout": "添付ファイル消去のタイムアウト",
|
||||
"attachment_auto_deletion_description": "定義されたタイムアウト後にノートによって参照されなくなった場合、添付ファイルは自動的に削除 (および消去) されます。",
|
||||
"erase_attachments_after": "使用されていない添付ファイルを消去する期間:",
|
||||
"manual_erasing_description": "手動で消去をトリガーすることもできます (上記で定義したタイムアウトを考慮せずに):",
|
||||
"erase_unused_attachments_now": "使用されていない添付ノートを今すぐ消去",
|
||||
"unused_attachments_erased": "使用されていない添付ファイルは削除されました。"
|
||||
"attachment_erasure_timeout": "未使用の添付ファイル",
|
||||
"erase_attachments_after": "未使用の添付ファイルを削除するまでの期間",
|
||||
"manual_erasing_description": "上記のタイムアウト設定を無視して、手動で削除を実行する。",
|
||||
"erase_unused_attachments_now": "未使用の添付ノートを今すぐ削除",
|
||||
"unused_attachments_erased": "使用されていない添付ファイルは削除されました。",
|
||||
"description": "どのノートからも参照されていない添付ファイルは未使用とみなされ、一定期間経過後に自動的に削除されます。",
|
||||
"erase_attachments_after_description": "未使用の添付ファイルが完全に削除されるまでの時間。"
|
||||
},
|
||||
"network_connections": {
|
||||
"network_connections_title": "ネットワーク接続",
|
||||
"check_for_updates": "アップデートを自動的に確認する"
|
||||
"network_connections_title": "ネットワーク",
|
||||
"check_for_updates": "アップデートを自動的に確認する",
|
||||
"check_for_updates_description": "GitHub で新しいバージョンをチェックし、利用可能な場合はグローバルメニューに通知を表示します。"
|
||||
},
|
||||
"note_erasure_timeout": {
|
||||
"note_erasure_timeout_title": "ノート消去のタイムアウト",
|
||||
"note_erasure_description": "削除されたノート(および属性、変更履歴など)最初は削除済みとしてマークされるだけで、「最近の変更」ダイアログから復元できます。一定期間が経過すると、削除されたノートは「消去」され、内容は復元できなくなります。この設定では、ノートを削除してから消去するまでの期間を設定できます。",
|
||||
"erase_notes_after": "ノートを消去する間隔:",
|
||||
"manual_erasing_description": "手動で消去をトリガーすることもできます (上記で定義したタイムアウトを考慮せずに):",
|
||||
"note_erasure_timeout_title": "削除されたノート",
|
||||
"erase_notes_after": "ノートを削除するまでの期間",
|
||||
"manual_erasing_description": "上記のタイムアウト設定を無視して、手動で削除を実行する。",
|
||||
"erase_deleted_notes_now": "削除したノートを今すぐ消去",
|
||||
"deleted_notes_erased": "削除されたノートは消去されました。"
|
||||
"deleted_notes_erased": "削除されたノートは消去されました。",
|
||||
"description": "削除されたノートは、最初は削除済みとしてマークされるだけで最近の変更から復元できます。一定期間が経過すると、完全に削除されます。",
|
||||
"erase_notes_after_description": "削除されたノートが完全に削除されるまでの時間。"
|
||||
},
|
||||
"revisions_snapshot_interval": {
|
||||
"note_revisions_snapshot_interval_title": "ノートの変更履歴の記録間隔",
|
||||
"note_revisions_snapshot_description": "ノートの変更履歴の記録間隔は、そのノートに対して新しい変更が作成されるまでの時間です。詳細については、<doc>wiki</doc> をご覧ください。",
|
||||
"snapshot_time_interval_label": "ノートの変更履歴が記憶される時間:"
|
||||
"snapshot_time_interval_label": "スナップショットの間隔",
|
||||
"note_revisions_snapshot_description_short": "新しいノートの変更履歴が作成されるまでの時間。"
|
||||
},
|
||||
"revisions_snapshot_limit": {
|
||||
"note_revisions_snapshot_limit_title": "ノートの変更履歴の記録制限",
|
||||
"note_revisions_snapshot_limit_description": "ノートの変更履歴の記録制限とは、各ノートに保存できる変更履歴の最大数を指します。-1 は制限なし、0 はすべての変更履歴を削除することを意味します。#versioningLimit ラベルを使用して、1 つのノートの最大変更数を設定できます。",
|
||||
"snapshot_number_limit_label": "ノートの変更履歴の記録数の制限:",
|
||||
"snapshot_number_limit_label": "最大変更履歴数",
|
||||
"snapshot_number_limit_unit": "スナップショット",
|
||||
"erase_excess_revision_snapshots": "余分な変更履歴を今すぐ消去",
|
||||
"erase_excess_revision_snapshots_prompt": "余分な変更履歴が消去されました。"
|
||||
"erase_excess_revision_snapshots_prompt": "余分な変更履歴が消去されました。",
|
||||
"note_revisions_snapshot_limit_description_short": "ノートごとの最大変更履歴数。無制限の場合は -1、無効にする場合は 0 を指定してください。",
|
||||
"erase_excess_revision_snapshots_description": "すべてのノートで、制限を超えた変更履歴を削除します。"
|
||||
},
|
||||
"editability_select": {
|
||||
"note_is_read_only": "ノートは読み取り専用ですが、ボタンをクリックすると編集できます。",
|
||||
@@ -1807,7 +1852,7 @@
|
||||
"note_detail": {
|
||||
"could_not_find_typewidget": "タイプ {{type}} の typeWidget が見つかりませんでした",
|
||||
"printing": "印刷中です...",
|
||||
"printing_pdf": "PDF へのエクスポート中です...",
|
||||
"printing_pdf": "印刷プレビューを準備中...",
|
||||
"print_report_title": "レポートを印刷",
|
||||
"print_report_collection_content_other": "コレクション内の {{count}} 件のノートは、サポートされていないか保護されているため、印刷できませんでした。",
|
||||
"print_report_collection_details_button": "詳細を見る",
|
||||
@@ -1827,7 +1872,9 @@
|
||||
"entrypoints": {
|
||||
"note-revision-created": "ノートの改訂版が作成されました。",
|
||||
"sql-error": "SQL クエリの実行中にエラーが発生しました: {{message}}",
|
||||
"note-executed": "ノートが実行されました。"
|
||||
"note-executed": "ノートが実行されました。",
|
||||
"save-named-revision-title": "名前を付けて変更履歴を保存",
|
||||
"save-named-revision-message": "この変更履歴の名前を入力してください(名前なしの場合は空欄のままにしてください):"
|
||||
},
|
||||
"branches": {
|
||||
"cannot-move-notes-here": "ここにノートを移動することはできません。",
|
||||
@@ -1919,7 +1966,9 @@
|
||||
"related_code_notes": "コードノートの配色",
|
||||
"ui": "ユーザーインターフェース",
|
||||
"ui_old_layout": "旧レイアウト",
|
||||
"ui_new_layout": "新しいレイアウト"
|
||||
"ui_new_layout": "新しいレイアウト",
|
||||
"ui_layout_style": "レイアウトスタイル",
|
||||
"ui_layout_orientation": "ランチャーバーの方向"
|
||||
},
|
||||
"units": {
|
||||
"percentage": "%"
|
||||
@@ -2050,7 +2099,9 @@
|
||||
"title": "実験オプション",
|
||||
"disclaimer": "これらのオプションは試験的なもので、動作が不安定になる可能性があります。注意してご使用ください。",
|
||||
"new_layout_name": "新しいレイアウト",
|
||||
"new_layout_description": "よりモダンな外観と使いやすさが向上した新しいレイアウトをお試しください。今後のリリースで大幅な変更が加えられる可能性があります。"
|
||||
"new_layout_description": "よりモダンな外観と使いやすさが向上した新しいレイアウトをお試しください。今後のリリースで大幅な変更が加えられる可能性があります。",
|
||||
"llm_name": "AI / LLM チャット",
|
||||
"llm_description": "大規模言語モデルを活用した AI チャットサイドバーと LLM チャットノートを有効にします。"
|
||||
},
|
||||
"breadcrumb_badges": {
|
||||
"read_only_explicit": "読み取り専用",
|
||||
@@ -2089,7 +2140,19 @@
|
||||
"code_note_switcher": "言語モードを変更",
|
||||
"backlinks_other": "{{count}} バックリンク",
|
||||
"attachments_other": "{{count}} 件の添付ファイル",
|
||||
"note_paths_other": "{{count}} 個のパス"
|
||||
"note_paths_other": "{{count}} 個のパス",
|
||||
"tab_width": "タブ幅: {{width}}",
|
||||
"tab_width_title": "タブ幅を変更",
|
||||
"tab_width_spaces": "{{count}} スペース",
|
||||
"tab_width_spaces_short": "スペース: {{width}}",
|
||||
"tab_width_tabs": "タブ: {{width}}",
|
||||
"tab_width_use_default": "デフォルトを使用 ({{width}})",
|
||||
"tab_width_use_default_style": "デフォルトを使用 ({{style}})",
|
||||
"tab_width_display_header": "表示幅",
|
||||
"tab_width_reindent_header": "コンテンツのインデントを再設定",
|
||||
"tab_width_style_header": "インデントを使用",
|
||||
"tab_width_style_spaces": "スペース",
|
||||
"tab_width_style_tabs": "タブ"
|
||||
},
|
||||
"breadcrumb": {
|
||||
"hoisted_badge": "ホイスト",
|
||||
@@ -2214,6 +2277,247 @@
|
||||
"sample_user_journey": "ユーザージャーニー図",
|
||||
"sample_xy": "XY チャート",
|
||||
"sample_venn": "ベン図",
|
||||
"sample_ishikawa": "石川図"
|
||||
"sample_ishikawa": "石川図",
|
||||
"sample_treeview": "ツリービュー",
|
||||
"sample_wardley": "ウォードリーマップ"
|
||||
},
|
||||
"llm_chat": {
|
||||
"placeholder": "メッセージを入力してください…",
|
||||
"send": "送信",
|
||||
"sending": "送信中...",
|
||||
"empty_state": "下記にメッセージを入力して会話を始めましょう。",
|
||||
"searching_web": "ウェブ検索中…",
|
||||
"web_search": "ウェブ検索",
|
||||
"note_tools": "ノートへのアクセス",
|
||||
"sources": "ソース",
|
||||
"extended_thinking": "思考を拡張",
|
||||
"legacy_models": "レガシーモデル",
|
||||
"thinking": "思考中...",
|
||||
"thought_process": "思考プロセス",
|
||||
"tool_calls": "{{count}} 回のツール呼び出し",
|
||||
"input": "入力",
|
||||
"result": "結果",
|
||||
"error": "エラー",
|
||||
"tool_error": "失敗",
|
||||
"total_tokens": "{{total}} トークン",
|
||||
"tokens_detail": "{{prompt}} プロンプト + {{completion}} コンプリーション",
|
||||
"tokens_used": "{{prompt}} プロンプト + {{completion}} コンプリーション = {{total}} トークン",
|
||||
"tokens_used_with_cost": "{{prompt}} プロンプト + {{completion}} コンプリーション = {{total}} トークン (~${{cost}})",
|
||||
"tokens_used_with_model": "{{model}}: {{prompt}} プロンプト + {{completion}} コンプリーション = {{total}} トークン",
|
||||
"tokens_used_with_model_and_cost": "{{model}}: {{prompt}} プロンプト + {{completion}} コンプリーション = {{total}} トークン (~${{cost}})",
|
||||
"tokens": "トークン",
|
||||
"context_used": "{{percentage}} % 使用済み",
|
||||
"note_context_enabled": "クリックしてノートのコンテキストを無効にする: {{title}}",
|
||||
"note_context_disabled": "クリックして現在のノートをコンテキストに含める",
|
||||
"no_provider_message": "AI プロバイダーが設定されていません。チャットを開始するには、プロバイダーを追加してください。",
|
||||
"add_provider": "AI プロバイダーを追加",
|
||||
"sources_summary": "{{count}} 件のソースを {{sites}} サイトから取得",
|
||||
"stop": "停止"
|
||||
},
|
||||
"sidebar_chat": {
|
||||
"title": "AI チャット",
|
||||
"launcher_title": "AI チャットを開く",
|
||||
"new_chat": "新しいチャットを開始",
|
||||
"save_chat": "チャットをノートに保存",
|
||||
"empty_state": "会話を開始",
|
||||
"history": "チャット履歴",
|
||||
"recent_chats": "最近のチャット",
|
||||
"no_chats": "過去のチャットはありません"
|
||||
},
|
||||
"mind-map": {
|
||||
"addChild": "子ノードを追加",
|
||||
"addParent": "親ノードを追加",
|
||||
"addSibling": "兄弟ノードを追加",
|
||||
"removeNode": "ノードを削除",
|
||||
"focus": "フォーカスモード",
|
||||
"cancelFocus": "フォーカスモードを解除",
|
||||
"moveUp": "上に移動",
|
||||
"moveDown": "下に移動",
|
||||
"link": "リンク",
|
||||
"linkBidirectional": "双方向リンク",
|
||||
"clickTips": "対象ノードをクリックしてください",
|
||||
"summary": "概要"
|
||||
},
|
||||
"llm": {
|
||||
"settings_title": "AI / LLM",
|
||||
"settings_description": "AI と大規模言語モデルの連携設定をします。",
|
||||
"add_provider": "プロバイダーを追加",
|
||||
"add_provider_title": "AI プロバイダーを追加",
|
||||
"configured_providers": "設定済みプロバイダー",
|
||||
"no_providers_configured": "まだプロバイダーが設定されていません。",
|
||||
"provider_name": "名前",
|
||||
"provider_type": "プロバイダー",
|
||||
"actions": "アクション",
|
||||
"delete_provider": "削除",
|
||||
"delete_provider_confirmation": "プロバイダー \"{{name}}\" を削除してもよろしいですか?",
|
||||
"api_key": "API キー",
|
||||
"api_key_placeholder": "API キーを入力してください",
|
||||
"cancel": "キャンセル",
|
||||
"feature_not_enabled": "AI 連携機能を使用するには、「設定」→「高度」→「実験的機能」で LLM 実験的機能を有効にしてください。",
|
||||
"mcp_title": "MCP(モデル コンテキスト プロトコル)",
|
||||
"mcp_enabled": "MCP サーバー",
|
||||
"mcp_enabled_description": "AI コーディングアシスタント(例:Claude Code、GitHub Copilot)がノートを読み取って変更できるように、モデルコンテキストプロトコル(MCP)エンドポイントを公開します。このエンドポイントは localhost からのみアクセス可能です。",
|
||||
"mcp_endpoint_title": "エンドポイント URL",
|
||||
"mcp_endpoint_description": "この URL を AI アシスタントの MCP 設定に追加してください",
|
||||
"tools": {
|
||||
"search_notes": "ノートを検索",
|
||||
"get_note": "ノートを取得",
|
||||
"get_note_content": "ノートの内容を取得",
|
||||
"update_note_content": "ノートの内容を更新",
|
||||
"append_to_note": "ノートに追記",
|
||||
"create_note": "ノートを作成",
|
||||
"get_attributes": "複数の属性を取得",
|
||||
"get_attribute": "属性を取得",
|
||||
"set_attribute": "属性を設定",
|
||||
"delete_attribute": "属性を削除",
|
||||
"get_child_notes": "子ノートを取得",
|
||||
"get_subtree": "サブツリーを取得",
|
||||
"load_skill": "スキルを読み込む",
|
||||
"web_search": "Web 検索",
|
||||
"note_in_parent": "<Note/> を <Parent/>",
|
||||
"get_attachment": "添付ファイルを取得",
|
||||
"get_attachment_content": "添付ファイルの内容を読み取る",
|
||||
"rename_note": "ノート名を変更",
|
||||
"delete_note": "ノートを削除",
|
||||
"move_note": "ノートを移動",
|
||||
"clone_note": "ノートをクローン"
|
||||
}
|
||||
},
|
||||
"ocr": {
|
||||
"extracted_text": "抽出されたテキスト(OCR)",
|
||||
"extracted_text_title": "抽出されたテキスト(OCR)",
|
||||
"loading_text": "OCR テキストを読み込んでいます…",
|
||||
"no_text_available": "OCR テキストが見つかりません",
|
||||
"no_text_explanation": "このノートは OCR テキスト抽出処理が行われなかったか、テキストが見つかりませんでした。",
|
||||
"failed_to_load": "OCR テキストの読み込みに失敗しました",
|
||||
"process_now": "OCR 処理",
|
||||
"processing": "処理中…",
|
||||
"processing_started": "OCR 処理が開始されました。しばらくお待ちいただき、ページを更新してください。",
|
||||
"processing_failed": "OCR 処理の開始に失敗しました",
|
||||
"view_extracted_text": "抽出されたテキスト(OCR)を表示",
|
||||
"processing_complete": "OCR 処理が完了しました。",
|
||||
"text_filtered_low_confidence": "OCR は {{confidence}}% の信頼度でテキストを検出しましたが、最小しきい値が {{threshold}}% であるため、破棄されました。",
|
||||
"open_media_settings": "設定を開く"
|
||||
},
|
||||
"database": {
|
||||
"title": "データベース"
|
||||
},
|
||||
"search": {
|
||||
"title": "検索",
|
||||
"fuzzy_matching_label": "検索時の入力ミス許容度",
|
||||
"fuzzy_matching_description": "クイック検索とフル検索に影響します。完全一致しない場合でも類似語を検索します。",
|
||||
"autocomplete_fuzzy_label": "オートコンプリート時の入力ミス許容度",
|
||||
"autocomplete_fuzzy_description": "ノートへのジャンプとノートの選択に影響します。処理速度は低下しますが、入力ミスを許容します。"
|
||||
},
|
||||
"text_editor": {
|
||||
"title": "エディター"
|
||||
},
|
||||
"link": {
|
||||
"failed_to_open": "'{{- href}}' のリンクを開けなせんでした: {{- message}}"
|
||||
},
|
||||
"print_preview": {
|
||||
"title": "印刷プレビュー",
|
||||
"close": "閉じる",
|
||||
"save": "PDF として保存",
|
||||
"orientation": "向き",
|
||||
"portrait": "縦向き",
|
||||
"landscape": "横向き",
|
||||
"page_size": "ページサイズ",
|
||||
"scale": "縮尺",
|
||||
"margins": "余白",
|
||||
"render_error": "現在の設定では PDF を生成できません。余白と縮尺を確認してください。",
|
||||
"margins_default": "デフォルト",
|
||||
"margins_none": "なし",
|
||||
"margins_minimum": "最小",
|
||||
"margins_custom": "カスタム",
|
||||
"margin_top": "上",
|
||||
"margin_right": "右",
|
||||
"margin_bottom": "下",
|
||||
"margin_left": "左",
|
||||
"page_ranges": "ページ",
|
||||
"page_ranges_hint": "全ページを印刷する場合は空欄のままにしてください。",
|
||||
"page_ranges_invalid": "無効な形式です。例: 1-5, 8, 11-13 のように指定してください。",
|
||||
"page_ranges_placeholder": "例: 1-5, 8, 11-13",
|
||||
"print": "印刷",
|
||||
"export_pdf": "PDF としてエクスポート",
|
||||
"system_print": "システムダイアログを使用して印刷",
|
||||
"destination": "出力先",
|
||||
"destination_pdf": "PDF として保存",
|
||||
"destination_printers": "プリンター",
|
||||
"destination_default": "デフォルト"
|
||||
},
|
||||
"revisions": {
|
||||
"note_revisions": "ノートの変更履歴",
|
||||
"delete_all_revisions": "このノートのすべての変更履歴を削除",
|
||||
"delete_all_button": "すべての変更履歴を削除",
|
||||
"help_title": "ノートの変更履歴に関するヘルプ",
|
||||
"confirm_delete_all": "このノートのすべての変更履歴を削除しますか?",
|
||||
"no_revisions": "このノートにはまだ変更履歴がありません...",
|
||||
"restore_button": "復元",
|
||||
"diff_on": "差分を表示",
|
||||
"diff_off": "内容を表示",
|
||||
"diff_on_hint": "クリックしてノートのソース差分を表示",
|
||||
"diff_off_hint": "クリックしてノートの内容を表示",
|
||||
"diff_not_available": "差分は利用できません。",
|
||||
"confirm_restore": "この変更履歴を復元しますか? 復元すると、ノートの現在のタイトルと内容がこの変更履歴で上書きされます。",
|
||||
"delete_button": "削除",
|
||||
"confirm_delete": "この変更履歴を削除しますか?",
|
||||
"revisions_deleted": "ノートの変更履歴が削除されました。",
|
||||
"revision_restored": "ノートの変更履歴が復元されました。",
|
||||
"revision_deleted": "ノートの変更履歴が削除されました。",
|
||||
"snapshot_interval": "ノートの変更履歴スナップショット間隔: {{seconds}} 秒。",
|
||||
"maximum_revisions": "ノートの変更履歴スナップショット制限: {{number}}。",
|
||||
"settings": "ノートの変更履歴設定",
|
||||
"download_button": "ダウンロード",
|
||||
"mime": "MIME: ",
|
||||
"file_size": "ファイルサイズ:",
|
||||
"preview_not_available": "このノートタイプではプレビューは利用できません。",
|
||||
"highlight_changes": "変更箇所をハイライト",
|
||||
"save_revision_now": "今すぐ変更履歴を保存",
|
||||
"save_named_revision": "名前を付けた変更履歴を保存...",
|
||||
"snapshot_header": "ノートの変更履歴スナップショット",
|
||||
"snapshot_interval_value": "間隔: {{seconds}} 秒",
|
||||
"snapshot_limit_value": "制限: {{number}}",
|
||||
"menu_tooltip": "変更履歴オプション",
|
||||
"save_revision": "変更履歴を保存",
|
||||
"save_revision_tooltip": "現在のノートのスナップショットを手動で保存",
|
||||
"description_placeholder": "この変更履歴に名前を付ける",
|
||||
"revision_saved": "ノートの変更履歴が保存されました。",
|
||||
"edit_description": "名前を編集",
|
||||
"description_updated": "変更履歴名が更新されました。",
|
||||
"source_auto": "自動保存",
|
||||
"source_manual": "手動保存",
|
||||
"source_etapi": "ETAPI",
|
||||
"source_llm": "LLM",
|
||||
"source_restore": "復元",
|
||||
"source_unknown": "スナップショット",
|
||||
"date_today": "今日",
|
||||
"date_yesterday": "昨日",
|
||||
"date_this_week": "今週",
|
||||
"date_this_month": "今月",
|
||||
"source_description_auto": "システムにより定期的に自動保存",
|
||||
"source_description_manual": "ユーザーにより手動保存",
|
||||
"source_description_etapi": "外部 Trilium API 経由で作成",
|
||||
"source_description_llm": "AI アシスタントにより作成",
|
||||
"source_description_restore": "以前の変更履歴を復元する前に保存しました",
|
||||
"source_description_unknown": "ソースが利用できません"
|
||||
},
|
||||
"revisions_snapshot": {
|
||||
"title": "ノートの変更履歴"
|
||||
},
|
||||
"launcher_button_context_menu": {
|
||||
"remove_from_launch_bar": "ランチャーバーから削除"
|
||||
},
|
||||
"display_mode": {
|
||||
"source": "ソースビュー",
|
||||
"split": "分割ビュー",
|
||||
"preview": "プレビュー"
|
||||
},
|
||||
"auto_link_attribute_list": {
|
||||
"title": "システム属性"
|
||||
},
|
||||
"common": {
|
||||
"save": "保存",
|
||||
"cancel": "キャンセル"
|
||||
}
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user