mirror of
https://github.com/Flow-Launcher/Flow.Launcher.git
synced 2026-03-11 08:54:32 +00:00
Compare commits
591 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e8353f7648 | ||
|
|
8d042d2134 | ||
|
|
a406eb83e1 | ||
|
|
531b45210a | ||
|
|
319db64393 | ||
|
|
24f6c90f72 | ||
|
|
3e493263c3 | ||
|
|
916b4ff091 | ||
|
|
dad8f3e695 | ||
|
|
7a46fac41a | ||
|
|
79f3bfab96 | ||
|
|
0d9cc7ef83 | ||
|
|
0ddcc5c1c6 | ||
|
|
5ef6a2b688 | ||
|
|
7766d7053d | ||
|
|
36e15d3809 | ||
|
|
ed14c45fd2 | ||
|
|
12c4b4d711 | ||
|
|
1bdc1164f8 | ||
|
|
71944ab6cd | ||
|
|
984b3dabdc | ||
|
|
9abf136ea2 | ||
|
|
a2f224225e | ||
|
|
6566871b15 | ||
|
|
dda900041a | ||
|
|
cce80ac5aa | ||
|
|
036a3761ea | ||
|
|
48878d2d8c | ||
|
|
dca90916fe | ||
|
|
ba1908d605 | ||
|
|
590bf20204 | ||
|
|
b02a5a265d | ||
|
|
b1b18ee215 | ||
|
|
8e4f7258ff | ||
|
|
2e0db3b90f | ||
|
|
54dc790cb6 | ||
|
|
ed6fe34192 | ||
|
|
10fcbb9990 | ||
|
|
980c1a1060 | ||
|
|
cd9825380d | ||
|
|
3b3a59fd62 | ||
|
|
73f657f84e | ||
|
|
c9baab7ac9 | ||
|
|
72269db8e6 | ||
|
|
ffa974b4e5 | ||
|
|
727aac4b82 | ||
|
|
9e66f71774 | ||
|
|
d511872c00 | ||
|
|
c46a52d1ca | ||
|
|
c04da3ab83 | ||
|
|
cb60492657 | ||
|
|
118d6e2a73 | ||
|
|
918eb0f4a9 | ||
|
|
11e0f8c3a4 | ||
|
|
a99b8399fe | ||
|
|
7e9a626891 | ||
|
|
cecd90e675 | ||
|
|
2d7d025682 | ||
|
|
12fc597b56 | ||
|
|
886cd75ad2 | ||
|
|
2b50c4faae | ||
|
|
9c3dfcd09f | ||
|
|
cb52fa6ab7 | ||
|
|
faeba8119a | ||
|
|
89b338fb86 | ||
|
|
60ef8e648c | ||
|
|
498913e71d | ||
|
|
6c1f7fade8 | ||
|
|
0f829d0b91 | ||
|
|
0717933459 | ||
|
|
516059e390 | ||
|
|
d4f472a64e | ||
|
|
97d7eab1a7 | ||
|
|
6c8add051f | ||
|
|
248da93d05 | ||
|
|
e9dcd8b7ba | ||
|
|
935d41dc26 | ||
|
|
0f0ee9ffde | ||
|
|
b703bcdd52 | ||
|
|
8e127d0339 | ||
|
|
add111fe3f | ||
|
|
bf44637400 | ||
|
|
657e6ae7d3 | ||
|
|
4ddb164bbd | ||
|
|
5c241d7491 | ||
|
|
90360022a4 | ||
|
|
ca5f5cf0e3 | ||
|
|
befcc9b37c | ||
|
|
a46350c76a | ||
|
|
d72a15937d | ||
|
|
56c1b92316 | ||
|
|
91cd27298d | ||
|
|
98bb98c265 | ||
|
|
e970bb4d4e | ||
|
|
ed83da5669 | ||
|
|
7e7f85352b | ||
|
|
013622a2a7 | ||
|
|
fb4da697a2 | ||
|
|
4e56cb4e74 | ||
|
|
649b142b46 | ||
|
|
34257cad60 | ||
|
|
382a77d2c5 | ||
|
|
3745c44455 | ||
|
|
9d9ab1ffd2 | ||
|
|
938a87ceca | ||
|
|
583bf74724 | ||
|
|
26e4529f27 | ||
|
|
e404d02965 | ||
|
|
c610100c13 | ||
|
|
8d4e03bdb8 | ||
|
|
77b631be87 | ||
|
|
e403c41530 | ||
|
|
5b2fb1fb38 | ||
|
|
cf4268d1c3 | ||
|
|
e6a91a9959 | ||
|
|
f22b6449d4 | ||
|
|
58d910dc57 | ||
|
|
11645fdc9a | ||
|
|
177e60739c | ||
|
|
5f992352ee | ||
|
|
216b6f536f | ||
|
|
1e176151a0 | ||
|
|
604fd2be44 | ||
|
|
27c4d35a9b | ||
|
|
a9e6a68369 | ||
|
|
6c1c9fe600 | ||
|
|
af9050c34b | ||
|
|
4c46e16160 | ||
|
|
590b4c82d2 | ||
|
|
19fa107fea | ||
|
|
ea7a2d271d | ||
|
|
55673cdb4b | ||
|
|
25037e3f5f | ||
|
|
94ebbab68a | ||
|
|
4174b5e1e4 | ||
|
|
101e5e6ff1 | ||
|
|
669f3ef404 | ||
|
|
4c7cbadc2f | ||
|
|
2176553b26 | ||
|
|
024eeaf6bf | ||
|
|
83883c4b05 | ||
|
|
b062fc056f | ||
|
|
3e32fca356 | ||
|
|
9c2f2398f1 | ||
|
|
6d6003fd80 | ||
|
|
f9df44a2cd | ||
|
|
7c670de7c2 | ||
|
|
20854ba5d7 | ||
|
|
2e8bb357fc | ||
|
|
810725cc6b | ||
|
|
8d7fa1d397 | ||
|
|
6b6a9a9935 | ||
|
|
8e80c3bde6 | ||
|
|
de0d022268 | ||
|
|
8092a440f4 | ||
|
|
d78d313372 | ||
|
|
1a7957bee6 | ||
|
|
23caeb477c | ||
|
|
2856803371 | ||
|
|
ffb37d3e12 | ||
|
|
bb1dfcde9b | ||
|
|
1594683191 | ||
|
|
0d4775bb7d | ||
|
|
a08a45640d | ||
|
|
d1518a490f | ||
|
|
f95d41e093 | ||
|
|
a07af87cb1 | ||
|
|
e634e2cbff | ||
|
|
c8cebc2b18 | ||
|
|
e01869afda | ||
|
|
b4ec480405 | ||
|
|
12ab11a4e4 | ||
|
|
bb3c8fbe0c | ||
|
|
20930617bb | ||
|
|
0f34829dab | ||
|
|
4221797569 | ||
|
|
437b7da0f7 | ||
|
|
31f5698437 | ||
|
|
666d525243 | ||
|
|
9066913710 | ||
|
|
ebc1a85190 | ||
|
|
4c44877af4 | ||
|
|
c03c778efb | ||
|
|
b6339d38fa | ||
|
|
42e04d459b | ||
|
|
769179d04b | ||
|
|
a7c67bbb35 | ||
|
|
b869eb8d1d | ||
|
|
7d9de4b0d2 | ||
|
|
a49eb464c8 | ||
|
|
48f67b1886 | ||
|
|
ce4a37b292 | ||
|
|
5623bf253b | ||
|
|
38c0fae064 | ||
|
|
28065f7231 | ||
|
|
bb841fcc3b | ||
|
|
1c29fb2db3 | ||
|
|
229987ee90 | ||
|
|
533a58d083 | ||
|
|
7958b17968 | ||
|
|
a773b51ada | ||
|
|
05f15d9831 | ||
|
|
c6c413202c | ||
|
|
f1b80ab90f | ||
|
|
558240279f | ||
|
|
3492aac2c0 | ||
|
|
fc93d0904e | ||
|
|
2adbc334a2 | ||
|
|
05c8dd2fe1 | ||
|
|
88fd1e56d0 | ||
|
|
49f89e33b5 | ||
|
|
d0a47c84b9 | ||
|
|
bfaff5cca5 | ||
|
|
30d7f67d42 | ||
|
|
7e332fa615 | ||
|
|
3d8fd1d352 | ||
|
|
db0c86d50c | ||
|
|
6e17d5d756 | ||
|
|
e2ac32139c | ||
|
|
348a83a1d9 | ||
|
|
4cf942ac3a | ||
|
|
f632a4b773 | ||
|
|
e2fa122362 | ||
|
|
6a65f8090f | ||
|
|
637d926f7a | ||
|
|
7f5efc5ca1 | ||
|
|
1885a48241 | ||
|
|
f0584ac853 | ||
|
|
0f269455b1 | ||
|
|
25aa5bf2af | ||
|
|
92551c58a5 | ||
|
|
1bfd147421 | ||
|
|
26ad473592 | ||
|
|
10d3ba268d | ||
|
|
7883e7a0a9 | ||
|
|
da4b961686 | ||
|
|
fb84cb03f3 | ||
|
|
c9e3c628e8 | ||
|
|
fbeaafa8d3 | ||
|
|
68454a8a6e | ||
|
|
bd880d304e | ||
|
|
386737acac | ||
|
|
3690042d2c | ||
|
|
c00d804073 | ||
|
|
e2abc1b265 | ||
|
|
3d9ef2c63f | ||
|
|
b13c29ab91 | ||
|
|
df4f08b071 | ||
|
|
83cab764a1 | ||
|
|
b784a14aee | ||
|
|
629c2eb4c6 | ||
|
|
c73689fbc3 | ||
|
|
1298b76b77 | ||
|
|
4b6ee4ea98 | ||
|
|
10d353defe | ||
|
|
9ca7c8431b | ||
|
|
a8d3cdf62c | ||
|
|
764c674350 | ||
|
|
f31abe83b0 | ||
|
|
4fe3b55720 | ||
|
|
8e96d1a461 | ||
|
|
9f652c33b4 | ||
|
|
d5a2695766 | ||
|
|
ced824d791 | ||
|
|
0131b92c7a | ||
|
|
a3d1c43580 | ||
|
|
66fe0b8245 | ||
|
|
adfd5425f0 | ||
|
|
8fde82a0eb | ||
|
|
787ccad384 | ||
|
|
693bae7631 | ||
|
|
f6d5a27e0b | ||
|
|
592440f2b1 | ||
|
|
b84ca9b283 | ||
|
|
7445d54d22 | ||
|
|
f37d4c47cc | ||
|
|
02a29c6af4 | ||
|
|
7fa78f0304 | ||
|
|
e3527f47ea | ||
|
|
e6c4cc25e5 | ||
|
|
1e3306ef28 | ||
|
|
6f17aa21c2 | ||
|
|
b8acead444 | ||
|
|
eb261f503b | ||
|
|
cc397d45a9 | ||
|
|
01bbb54054 | ||
|
|
2b7c2048ef | ||
|
|
b297f3d3a3 | ||
|
|
a3b7c6808b | ||
|
|
a1f82e1652 | ||
|
|
690d33ece3 | ||
|
|
d7579cce9e | ||
|
|
e468c48da4 | ||
|
|
e6cae1a79b | ||
|
|
95122e91f5 | ||
|
|
bf2acfec38 | ||
|
|
9e1b8c1a72 | ||
|
|
d7dd89d719 | ||
|
|
20a865f012 | ||
|
|
87676d2994 | ||
|
|
001dad9a79 | ||
|
|
a412c7978a | ||
|
|
8e8e9d35ac | ||
|
|
545c4208d9 | ||
|
|
50f5e850dd | ||
|
|
b9a43147dc | ||
|
|
ae3559ca74 | ||
|
|
1a373e1c40 | ||
|
|
d122276e71 | ||
|
|
156cb3055c | ||
|
|
6aa35d592e | ||
|
|
b290055e83 | ||
|
|
c051c5cd50 | ||
|
|
06711d3b8b | ||
|
|
4f2db28196 | ||
|
|
3681340587 | ||
|
|
9e182a2e47 | ||
|
|
e5736567f6 | ||
|
|
a2d12eb225 | ||
|
|
5ae159de5b | ||
|
|
8c98aedac2 | ||
|
|
7ba4f8de4a | ||
|
|
6f6292494c | ||
|
|
793476432b | ||
|
|
9d7ac851bd | ||
|
|
54e693d0e2 | ||
|
|
969b3ccbcd | ||
|
|
8a2edf274a | ||
|
|
171eb2dd8b | ||
|
|
76cc22d5af | ||
|
|
2be10eb4ca | ||
|
|
297cb5c3ef | ||
|
|
9a20b0e0de | ||
|
|
66fb1d7c60 | ||
|
|
5ed94c8abc | ||
|
|
6213193cda | ||
|
|
5b0a30774e | ||
|
|
d08ee30a7a | ||
|
|
167570559f | ||
|
|
e376da4482 | ||
|
|
1b7a475631 | ||
|
|
5fcd01224c | ||
|
|
bc1f9d3734 | ||
|
|
c0369e6e76 | ||
|
|
3cc4f13f4d | ||
|
|
c27817eaf0 | ||
|
|
f239866c68 | ||
|
|
7f0851bcb1 | ||
|
|
652ec40d82 | ||
|
|
d56d85b702 | ||
|
|
9be546d6c7 | ||
|
|
aab213a6b9 | ||
|
|
89505fce30 | ||
|
|
d106c5144b | ||
|
|
175571a130 | ||
|
|
d363cf8137 | ||
|
|
ec41ec2377 | ||
|
|
64e9150f11 | ||
|
|
08bf147559 | ||
|
|
ca94ef58e8 | ||
|
|
b34851bd12 | ||
|
|
5b6ea73513 | ||
|
|
2d00ab1d3e | ||
|
|
e068104253 | ||
|
|
5e2536c129 | ||
|
|
f72e4692e4 | ||
|
|
a76e2fea7f | ||
|
|
09425e1c43 | ||
|
|
ba7de5d33d | ||
|
|
2770dfde56 | ||
|
|
9b2d36b78a | ||
|
|
3bd6906c80 | ||
|
|
ac62ebadf0 | ||
|
|
54622d6759 | ||
|
|
0a7ed3b52f | ||
|
|
0e366a6269 | ||
|
|
7350c1d4d5 | ||
|
|
d87650de08 | ||
|
|
4865224458 | ||
|
|
49d5cd36df | ||
|
|
130033cf4b | ||
|
|
c293a273ca | ||
|
|
90c73e5e3d | ||
|
|
fbc88bb4cd | ||
|
|
1e8819af0c | ||
|
|
763fee0c14 | ||
|
|
71b8144c3c | ||
|
|
bfd10f6903 | ||
|
|
10c79da35c | ||
|
|
d7d88a9ebb | ||
|
|
a32b9ca8c0 | ||
|
|
7de420e32b | ||
|
|
dc1f0f1095 | ||
|
|
18a3ae7bff | ||
|
|
35867a0a00 | ||
|
|
a05e09908c | ||
|
|
6fca1c919e | ||
|
|
d7e1ad73cc | ||
|
|
7e56c8a011 | ||
|
|
d6bc053950 | ||
|
|
813be4af2b | ||
|
|
df1a272090 | ||
|
|
f1ae421853 | ||
|
|
99b7bdab27 | ||
|
|
fbb9e09237 | ||
|
|
21a6fdd100 | ||
|
|
2f52c1aa1b | ||
|
|
56d6234f1c | ||
|
|
81dcadb959 | ||
|
|
89d726de2a | ||
|
|
9211fe476d | ||
|
|
3116f3d363 | ||
|
|
846cc65d8e | ||
|
|
7a7760c3dd | ||
|
|
78e5bf2a60 | ||
|
|
a2c11af82b | ||
|
|
89fca85ca8 | ||
|
|
536f1a392e | ||
|
|
5d843ecae8 | ||
|
|
bbc12ec041 | ||
|
|
72dae631fe | ||
|
|
245c492906 | ||
|
|
3a8c64b02d | ||
|
|
7a5e55e5f0 | ||
|
|
16895716e9 | ||
|
|
9030bffdbd | ||
|
|
4bea4101a1 | ||
|
|
ec182ade39 | ||
|
|
35a5e27e2d | ||
|
|
9a597f2b4d | ||
|
|
fc2e3fec63 | ||
|
|
0f6245a072 | ||
|
|
86581e6a00 | ||
|
|
330e6c09e7 | ||
|
|
6c695f09e7 | ||
|
|
b05c2c1e1a | ||
|
|
820304ce19 | ||
|
|
1017501153 | ||
|
|
256ae5c4b0 | ||
|
|
a03f62832a | ||
|
|
dd07baff59 | ||
|
|
647c55eaf7 | ||
|
|
1fea8edb74 | ||
|
|
2dd416028d | ||
|
|
3f0f118c8b | ||
|
|
e50a2772f8 | ||
|
|
354b04bea4 | ||
|
|
60ec9b5c49 | ||
|
|
83f02f5c91 | ||
|
|
5c16b86edf | ||
|
|
80c283a370 | ||
|
|
23d0b73e20 | ||
|
|
8bac530504 | ||
|
|
8321e400c1 | ||
|
|
552b6547db | ||
|
|
e10b9254ed | ||
|
|
6841ad5410 | ||
|
|
f7b3a7c812 | ||
|
|
3596f59430 | ||
|
|
43e3376d2e | ||
|
|
18c8a04cbc | ||
|
|
0355993b00 | ||
|
|
e204daa844 | ||
|
|
55f9857dec | ||
|
|
e571204a84 | ||
|
|
988db485a2 | ||
|
|
f3cb85ea59 | ||
|
|
5695200940 | ||
|
|
44ca9c3480 | ||
|
|
b5c860db1d | ||
|
|
ef69e329fc | ||
|
|
9321a7df14 | ||
|
|
684fafdfdd | ||
|
|
c2e797615d | ||
|
|
f9facda521 | ||
|
|
1906d68541 | ||
|
|
cea1402dde | ||
|
|
b07420a193 | ||
|
|
9be8b71f09 | ||
|
|
edc76faeb4 | ||
|
|
e990e0ff5b | ||
|
|
336e51d104 | ||
|
|
c79e4831e1 | ||
|
|
daf35a4972 | ||
|
|
495ace1246 | ||
|
|
51df66e362 | ||
|
|
11f5ea5074 | ||
|
|
c2fcf648e0 | ||
|
|
2ae57ae34c | ||
|
|
0e0ef0e5a2 | ||
|
|
d4a757be49 | ||
|
|
08a571f076 | ||
|
|
f3998a190c | ||
|
|
6eeef62568 | ||
|
|
e63c4f3b6e | ||
|
|
6462023d58 | ||
|
|
110f571b40 | ||
|
|
eaa90b31d8 | ||
|
|
29b675b26a | ||
|
|
889ed58f0c | ||
|
|
7fc30aea93 | ||
|
|
45275f0a2c | ||
|
|
15f31a1698 | ||
|
|
bd186e7fe1 | ||
|
|
190e0e179f | ||
|
|
103d3832a0 | ||
|
|
e1079396c3 | ||
|
|
ca164b37db | ||
|
|
f40255bc8a | ||
|
|
8e837b8e56 | ||
|
|
2d8c7a39ca | ||
|
|
8bc60e55e0 | ||
|
|
45bb6e94fc | ||
|
|
cf8096f276 | ||
|
|
b501e52f5d | ||
|
|
3f6bebd540 | ||
|
|
96d7d18f6d | ||
|
|
4f49077bee | ||
|
|
33aef7eb54 | ||
|
|
cdf3905a51 | ||
|
|
c17db8c9b4 | ||
|
|
34a58bc5da | ||
|
|
7ca37697d4 | ||
|
|
978b18570a | ||
|
|
1303ae5682 | ||
|
|
33a9654fe0 | ||
|
|
1dc1643071 | ||
|
|
48e845c0b1 | ||
|
|
5976ddeb72 | ||
|
|
2d5626b0cd | ||
|
|
c9ca9ad4ba | ||
|
|
f848d1b7b2 | ||
|
|
56bdfa72d1 | ||
|
|
6e873abc7b | ||
|
|
528687cf63 | ||
|
|
6b60373886 | ||
|
|
b07763ad05 | ||
|
|
922c3d5611 | ||
|
|
fb8daa4ed9 | ||
|
|
04bd9ddc2c | ||
|
|
9221435bad | ||
|
|
31c8e850cd | ||
|
|
f08466245a | ||
|
|
93af079316 | ||
|
|
97fb8d680f | ||
|
|
3221f930c4 | ||
|
|
e0240784b5 | ||
|
|
0f8553b45d | ||
|
|
269d21a4c0 | ||
|
|
566bd04e3f | ||
|
|
bef1feea0a | ||
|
|
f808469285 | ||
|
|
63f86613c3 | ||
|
|
067a51775e | ||
|
|
d9cc67ce6d | ||
|
|
59e4fb82b9 | ||
|
|
a9a705f118 | ||
|
|
6409c193c4 | ||
|
|
950a4a00a6 | ||
|
|
67c940f3a8 | ||
|
|
324b3eb081 | ||
|
|
d4a1953747 | ||
|
|
b348debc72 | ||
|
|
fc01ddbb1c | ||
|
|
7f797b1039 | ||
|
|
3bd76b2dfd | ||
|
|
8d03fcee2e | ||
|
|
9149e3f201 | ||
|
|
6d99416641 | ||
|
|
6e0f2fc4ce | ||
|
|
fe3339f645 | ||
|
|
11e05f73d9 | ||
|
|
566572b013 | ||
|
|
8b60d26f5e | ||
|
|
50924e4189 | ||
|
|
cc68183940 | ||
|
|
55164ef60f | ||
|
|
de568140d2 | ||
|
|
445a14278b | ||
|
|
1d3ab39dca | ||
|
|
35c8e39beb | ||
|
|
c3a598464f | ||
|
|
0a01d85f40 | ||
|
|
52bb909f0b | ||
|
|
59a7a2c807 | ||
|
|
6beeecb0f7 | ||
|
|
c2157e2df1 | ||
|
|
d4e672d630 | ||
|
|
f5f256809c | ||
|
|
aee46e8640 | ||
|
|
9ce911771e |
407 changed files with 12156 additions and 13108 deletions
2
.github/workflows/default_plugins.yml
vendored
2
.github/workflows/default_plugins.yml
vendored
|
|
@ -10,7 +10,7 @@ jobs:
|
|||
runs-on: windows-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
- name: Setup .NET
|
||||
uses: actions/setup-dotnet@v5
|
||||
with:
|
||||
|
|
|
|||
12
.github/workflows/dotnet.yml
vendored
12
.github/workflows/dotnet.yml
vendored
|
|
@ -20,7 +20,7 @@ jobs:
|
|||
NUGET_CERT_REVOCATION_MODE: offline
|
||||
BUILD_NUMBER: ${{ github.run_number }}
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
- name: Set Flow.Launcher.csproj version
|
||||
id: update
|
||||
uses: vers-one/dotnet-project-version-updater@v1.7
|
||||
|
|
@ -54,28 +54,28 @@ jobs:
|
|||
shell: powershell
|
||||
run: .\Scripts\post_build.ps1
|
||||
- name: Upload Plugin Nupkg
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: Plugin nupkg
|
||||
path: |
|
||||
Output\Release\Flow.Launcher.Plugin.*.nupkg
|
||||
compression-level: 0
|
||||
- name: Upload Setup
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: Flow Installer
|
||||
path: |
|
||||
Output\Packages\Flow-Launcher-*.exe
|
||||
compression-level: 0
|
||||
- name: Upload Portable Version
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: Portable Version
|
||||
path: |
|
||||
Output\Packages\Flow-Launcher-Portable.zip
|
||||
compression-level: 0
|
||||
- name: Upload Full Nupkg
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: Full nupkg
|
||||
path: |
|
||||
|
|
@ -83,7 +83,7 @@ jobs:
|
|||
|
||||
compression-level: 0
|
||||
- name: Upload Release Information
|
||||
uses: actions/upload-artifact@v4
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: RELEASES
|
||||
path: |
|
||||
|
|
|
|||
2
.github/workflows/pr_assignee.yml
vendored
2
.github/workflows/pr_assignee.yml
vendored
|
|
@ -14,4 +14,4 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Assign PR to creator
|
||||
uses: toshimaru/auto-author-assign@v2.1.1
|
||||
uses: toshimaru/auto-author-assign@v3.0.1
|
||||
|
|
|
|||
2
.github/workflows/release_pr.yml
vendored
2
.github/workflows/release_pr.yml
vendored
|
|
@ -11,7 +11,7 @@ jobs:
|
|||
update-pr:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/checkout@v6
|
||||
|
||||
- uses: actions/setup-python@v6
|
||||
with:
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
<Project>
|
||||
<PropertyGroup>
|
||||
<AccelerateBuildsInVisualStudio>true</AccelerateBuildsInVisualStudio>
|
||||
<!-- Work around https://github.com/dotnet/runtime/issues/109682 -->
|
||||
<!-- Workaround https://github.com/dotnet/runtime/issues/109682 -->
|
||||
<CETCompat>false</CETCompat>
|
||||
</PropertyGroup>
|
||||
</Project>
|
||||
|
|
@ -3,10 +3,8 @@ using System.IO;
|
|||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Windows;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.Infrastructure;
|
||||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
using Flow.Launcher.Plugin;
|
||||
using Flow.Launcher.Plugin.SharedCommands;
|
||||
using Microsoft.Win32;
|
||||
using Squirrel;
|
||||
|
|
@ -17,8 +15,6 @@ namespace Flow.Launcher.Core.Configuration
|
|||
{
|
||||
private static readonly string ClassName = nameof(Portable);
|
||||
|
||||
private readonly IPublicAPI API = Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
|
||||
/// <summary>
|
||||
/// As at Squirrel.Windows version 1.5.2, UpdateManager needs to be disposed after finish
|
||||
/// </summary>
|
||||
|
|
@ -45,13 +41,13 @@ namespace Flow.Launcher.Core.Configuration
|
|||
#endif
|
||||
IndicateDeletion(DataLocation.PortableDataPath);
|
||||
|
||||
API.ShowMsgBox(API.GetTranslation("restartToDisablePortableMode"));
|
||||
PublicApi.Instance.ShowMsgBox(Localize.restartToDisablePortableMode());
|
||||
|
||||
UpdateManager.RestartApp(Constant.ApplicationFileName);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
API.LogException(ClassName, "Error occurred while disabling portable mode", e);
|
||||
PublicApi.Instance.LogException(ClassName, "Error occurred while disabling portable mode", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -68,13 +64,13 @@ namespace Flow.Launcher.Core.Configuration
|
|||
#endif
|
||||
IndicateDeletion(DataLocation.RoamingDataPath);
|
||||
|
||||
API.ShowMsgBox(API.GetTranslation("restartToEnablePortableMode"));
|
||||
PublicApi.Instance.ShowMsgBox(Localize.restartToEnablePortableMode());
|
||||
|
||||
UpdateManager.RestartApp(Constant.ApplicationFileName);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
API.LogException(ClassName, "Error occurred while enabling portable mode", e);
|
||||
PublicApi.Instance.LogException(ClassName, "Error occurred while enabling portable mode", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -94,13 +90,13 @@ namespace Flow.Launcher.Core.Configuration
|
|||
|
||||
public void MoveUserDataFolder(string fromLocation, string toLocation)
|
||||
{
|
||||
FilesFolders.CopyAll(fromLocation, toLocation, (s) => API.ShowMsgBox(s));
|
||||
FilesFolders.CopyAll(fromLocation, toLocation, (s) => PublicApi.Instance.ShowMsgBox(s));
|
||||
VerifyUserDataAfterMove(fromLocation, toLocation);
|
||||
}
|
||||
|
||||
public void VerifyUserDataAfterMove(string fromLocation, string toLocation)
|
||||
{
|
||||
FilesFolders.VerifyBothFolderFilesEqual(fromLocation, toLocation, (s) => API.ShowMsgBox(s));
|
||||
FilesFolders.VerifyBothFolderFilesEqual(fromLocation, toLocation, (s) => PublicApi.Instance.ShowMsgBox(s));
|
||||
}
|
||||
|
||||
public void CreateShortcuts()
|
||||
|
|
@ -139,8 +135,8 @@ namespace Flow.Launcher.Core.Configuration
|
|||
public void PreStartCleanUpAfterPortabilityUpdate()
|
||||
{
|
||||
// Specify here so this method does not rely on other environment variables to initialise
|
||||
var portableDataDir = Path.Combine(Directory.GetParent(Assembly.GetExecutingAssembly().Location.NonNull()).ToString(), "UserData");
|
||||
var roamingDataDir = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FlowLauncher");
|
||||
var portableDataDir = DataLocation.PortableDataPath;
|
||||
var roamingDataDir = DataLocation.RoamingDataPath;
|
||||
|
||||
// Get full path to the .dead files for each case
|
||||
var portableDataDeleteFilePath = Path.Combine(portableDataDir, DataLocation.DeletionIndicatorFile);
|
||||
|
|
@ -150,12 +146,12 @@ namespace Flow.Launcher.Core.Configuration
|
|||
// delete it and prompt the user to pick the portable data location
|
||||
if (File.Exists(roamingDataDeleteFilePath))
|
||||
{
|
||||
FilesFolders.RemoveFolderIfExists(roamingDataDir, (s) => API.ShowMsgBox(s));
|
||||
FilesFolders.RemoveFolderIfExists(roamingDataDir, (s) => PublicApi.Instance.ShowMsgBox(s));
|
||||
|
||||
if (API.ShowMsgBox(API.GetTranslation("moveToDifferentLocation"),
|
||||
if (PublicApi.Instance.ShowMsgBox(Localize.moveToDifferentLocation(),
|
||||
string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.Yes)
|
||||
{
|
||||
FilesFolders.OpenPath(Constant.RootDirectory, (s) => API.ShowMsgBox(s));
|
||||
FilesFolders.OpenPath(Constant.RootDirectory, (s) => PublicApi.Instance.ShowMsgBox(s));
|
||||
|
||||
Environment.Exit(0);
|
||||
}
|
||||
|
|
@ -164,9 +160,9 @@ namespace Flow.Launcher.Core.Configuration
|
|||
// delete it and notify the user about it.
|
||||
else if (File.Exists(portableDataDeleteFilePath))
|
||||
{
|
||||
FilesFolders.RemoveFolderIfExists(portableDataDir, (s) => API.ShowMsgBox(s));
|
||||
FilesFolders.RemoveFolderIfExists(portableDataDir, (s) => PublicApi.Instance.ShowMsgBox(s));
|
||||
|
||||
API.ShowMsgBox(API.GetTranslation("shortcutsUninstallerCreated"));
|
||||
PublicApi.Instance.ShowMsgBox(Localize.shortcutsUninstallerCreated());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -177,8 +173,7 @@ namespace Flow.Launcher.Core.Configuration
|
|||
|
||||
if (roamingLocationExists && portableLocationExists)
|
||||
{
|
||||
API.ShowMsgBox(string.Format(API.GetTranslation("userDataDuplicated"),
|
||||
DataLocation.PortableDataPath, DataLocation.RoamingDataPath, Environment.NewLine));
|
||||
PublicApi.Instance.ShowMsgBox(Localize.userDataDuplicated(DataLocation.PortableDataPath, DataLocation.RoamingDataPath, Environment.NewLine));
|
||||
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@ using System.Text.Json;
|
|||
using System.Text.Json.Serialization;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.Infrastructure.Http;
|
||||
using Flow.Launcher.Plugin;
|
||||
|
||||
|
|
@ -18,13 +17,9 @@ namespace Flow.Launcher.Core.ExternalPlugins
|
|||
{
|
||||
private static readonly string ClassName = nameof(CommunityPluginSource);
|
||||
|
||||
// We should not initialize API in static constructor because it will create another API instance
|
||||
private static IPublicAPI api = null;
|
||||
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
|
||||
private string latestEtag = "";
|
||||
|
||||
private List<UserPlugin> plugins = new();
|
||||
private List<UserPlugin> plugins = [];
|
||||
|
||||
private static readonly JsonSerializerOptions PluginStoreItemSerializationOption = new()
|
||||
{
|
||||
|
|
@ -41,7 +36,7 @@ namespace Flow.Launcher.Core.ExternalPlugins
|
|||
/// </remarks>
|
||||
public async Task<List<UserPlugin>> FetchAsync(CancellationToken token)
|
||||
{
|
||||
API.LogInfo(ClassName, $"Loading plugins from {ManifestFileUrl}");
|
||||
PublicApi.Instance.LogInfo(ClassName, $"Loading plugins from {ManifestFileUrl}");
|
||||
|
||||
var request = new HttpRequestMessage(HttpMethod.Get, ManifestFileUrl);
|
||||
|
||||
|
|
@ -59,29 +54,40 @@ namespace Flow.Launcher.Core.ExternalPlugins
|
|||
.ConfigureAwait(false);
|
||||
latestEtag = response.Headers.ETag?.Tag;
|
||||
|
||||
API.LogInfo(ClassName, $"Loaded {plugins.Count} plugins from {ManifestFileUrl}");
|
||||
PublicApi.Instance.LogInfo(ClassName, $"Loaded {plugins.Count} plugins from {ManifestFileUrl}");
|
||||
return plugins;
|
||||
}
|
||||
else if (response.StatusCode == HttpStatusCode.NotModified)
|
||||
{
|
||||
API.LogInfo(ClassName, $"Resource {ManifestFileUrl} has not been modified.");
|
||||
PublicApi.Instance.LogInfo(ClassName, $"Resource {ManifestFileUrl} has not been modified.");
|
||||
return plugins;
|
||||
}
|
||||
else
|
||||
{
|
||||
API.LogWarn(ClassName, $"Failed to load resource {ManifestFileUrl} with response {response.StatusCode}");
|
||||
PublicApi.Instance.LogWarn(ClassName, $"Failed to load resource {ManifestFileUrl} with response {response.StatusCode}");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException) when (token.IsCancellationRequested)
|
||||
{
|
||||
PublicApi.Instance.LogDebug(ClassName, $"Fetching from {ManifestFileUrl} was cancelled by caller.");
|
||||
return null;
|
||||
}
|
||||
catch (TaskCanceledException)
|
||||
{
|
||||
// Likely an HttpClient timeout or external cancellation not requested by our token
|
||||
PublicApi.Instance.LogWarn(ClassName, $"Fetching from {ManifestFileUrl} timed out.");
|
||||
return null;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
if (e is HttpRequestException or WebException or SocketException || e.InnerException is TimeoutException)
|
||||
{
|
||||
API.LogException(ClassName, $"Check your connection and proxy settings to {ManifestFileUrl}.", e);
|
||||
PublicApi.Instance.LogException(ClassName, $"Check your connection and proxy settings to {ManifestFileUrl}.", e);
|
||||
}
|
||||
else
|
||||
{
|
||||
API.LogException(ClassName, "Error Occurred", e);
|
||||
PublicApi.Instance.LogException(ClassName, "Error Occurred", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ using System.IO;
|
|||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Forms;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
using Flow.Launcher.Plugin;
|
||||
using Flow.Launcher.Plugin.SharedCommands;
|
||||
|
|
@ -15,7 +14,7 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments
|
|||
{
|
||||
private static readonly string ClassName = nameof(AbstractPluginEnvironment);
|
||||
|
||||
protected readonly IPublicAPI API = Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
protected readonly IPublicAPI API = PublicApi.Instance;
|
||||
|
||||
internal abstract string Language { get; }
|
||||
|
||||
|
|
@ -58,15 +57,10 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments
|
|||
return SetPathForPluginPairs(PluginsSettingsFilePath, Language);
|
||||
}
|
||||
|
||||
var noRuntimeMessage = string.Format(
|
||||
API.GetTranslation("runtimePluginInstalledChooseRuntimePrompt"),
|
||||
Language,
|
||||
EnvName,
|
||||
Environment.NewLine
|
||||
);
|
||||
var noRuntimeMessage = Localize.runtimePluginInstalledChooseRuntimePrompt(Language, EnvName, Environment.NewLine);
|
||||
if (API.ShowMsgBox(noRuntimeMessage, string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.No)
|
||||
{
|
||||
var msg = string.Format(API.GetTranslation("runtimePluginChooseRuntimeExecutable"), EnvName);
|
||||
var msg = Localize.runtimePluginChooseRuntimeExecutable(EnvName);
|
||||
|
||||
var selectedFile = GetFileFromDialog(msg, FileDialogFilter);
|
||||
|
||||
|
|
@ -77,12 +71,7 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments
|
|||
// Nothing selected because user pressed cancel from the file dialog window
|
||||
else
|
||||
{
|
||||
var forceDownloadMessage = string.Format(
|
||||
API.GetTranslation("runtimeExecutableInvalidChooseDownload"),
|
||||
Language,
|
||||
EnvName,
|
||||
Environment.NewLine
|
||||
);
|
||||
var forceDownloadMessage = Localize.runtimeExecutableInvalidChooseDownload(Language, EnvName, Environment.NewLine);
|
||||
|
||||
// Let users select valid path or choose to download
|
||||
while (string.IsNullOrEmpty(selectedFile))
|
||||
|
|
@ -120,7 +109,7 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments
|
|||
}
|
||||
else
|
||||
{
|
||||
API.ShowMsgBox(string.Format(API.GetTranslation("runtimePluginUnableToSetExecutablePath"), Language));
|
||||
API.ShowMsgBox(Localize.runtimePluginUnableToSetExecutablePath(Language));
|
||||
API.LogError(ClassName,
|
||||
$"Not able to successfully set {EnvName} path, setting's plugin executable path variable is still an empty string.",
|
||||
$"{Language}Environment");
|
||||
|
|
@ -248,7 +237,7 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments
|
|||
private static string GetUpdatedEnvironmentPath(string filePath)
|
||||
{
|
||||
var index = filePath.IndexOf(DataLocation.PluginEnvironments);
|
||||
|
||||
|
||||
// get the substring after "Environments" because we can not determine it dynamically
|
||||
var executablePathSubstring = filePath[(index + DataLocation.PluginEnvironments.Length)..];
|
||||
return $"{DataLocation.PluginEnvironmentsPath}{executablePathSubstring}";
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments
|
|||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
API.ShowMsgError(API.GetTranslation("failToInstallPythonEnv"));
|
||||
API.ShowMsgError(Localize.failToInstallPythonEnv());
|
||||
API.LogException(ClassName, "Failed to install Python environment", e);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments
|
|||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
API.ShowMsgError(API.GetTranslation("failToInstallTypeScriptEnv"));
|
||||
API.ShowMsgError(Localize.failToInstallTypeScriptEnv());
|
||||
API.LogException(ClassName, "Failed to install TypeScript environment", e);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ namespace Flow.Launcher.Core.ExternalPlugins.Environments
|
|||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
API.ShowMsgError(API.GetTranslation("failToInstallTypeScriptEnv"));
|
||||
API.ShowMsgError(Localize.failToInstallTypeScriptEnv());
|
||||
API.LogException(ClassName, "Failed to install TypeScript environment", e);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -2,9 +2,8 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.Plugin;
|
||||
using Flow.Launcher.Infrastructure;
|
||||
using Flow.Launcher.Core.Plugin;
|
||||
|
||||
namespace Flow.Launcher.Core.ExternalPlugins
|
||||
{
|
||||
|
|
@ -23,17 +22,15 @@ namespace Flow.Launcher.Core.ExternalPlugins
|
|||
private static DateTime lastFetchedAt = DateTime.MinValue;
|
||||
private static readonly TimeSpan fetchTimeout = TimeSpan.FromMinutes(2);
|
||||
|
||||
// We should not initialize API in static constructor because it will create another API instance
|
||||
private static IPublicAPI api = null;
|
||||
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
|
||||
public static List<UserPlugin> UserPlugins { get; private set; }
|
||||
|
||||
public static async Task<bool> UpdateManifestAsync(bool usePrimaryUrlOnly = false, CancellationToken token = default)
|
||||
{
|
||||
bool lockAcquired = false;
|
||||
try
|
||||
{
|
||||
await manifestUpdateLock.WaitAsync(token).ConfigureAwait(false);
|
||||
lockAcquired = true;
|
||||
|
||||
if (UserPlugins == null || usePrimaryUrlOnly || DateTime.Now.Subtract(lastFetchedAt) >= fetchTimeout)
|
||||
{
|
||||
|
|
@ -44,11 +41,10 @@ namespace Flow.Launcher.Core.ExternalPlugins
|
|||
return false;
|
||||
|
||||
var updatedPluginResults = new List<UserPlugin>();
|
||||
var appVersion = SemanticVersioning.Version.Parse(Constant.Version);
|
||||
|
||||
for (int i = 0; i < results.Count; i++)
|
||||
{
|
||||
if (IsMinimumAppVersionSatisfied(results[i], appVersion))
|
||||
if (PluginManager.IsMinimumAppVersionSatisfied(results[i].Name, results[i].MinimumAppVersion))
|
||||
updatedPluginResults.Add(results[i]);
|
||||
}
|
||||
|
||||
|
|
@ -59,39 +55,21 @@ namespace Flow.Launcher.Core.ExternalPlugins
|
|||
return true;
|
||||
}
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
// Ignored
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
API.LogException(ClassName, "Http request failed", e);
|
||||
PublicApi.Instance.LogException(ClassName, "Http request failed", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
manifestUpdateLock.Release();
|
||||
// Only release the lock if it was acquired
|
||||
if (lockAcquired) manifestUpdateLock.Release();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static bool IsMinimumAppVersionSatisfied(UserPlugin plugin, SemanticVersioning.Version appVersion)
|
||||
{
|
||||
if (string.IsNullOrEmpty(plugin.MinimumAppVersion))
|
||||
return true;
|
||||
|
||||
try
|
||||
{
|
||||
if (appVersion >= SemanticVersioning.Version.Parse(plugin.MinimumAppVersion))
|
||||
return true;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
API.LogException(ClassName, $"Failed to parse the minimum app version {plugin.MinimumAppVersion} for plugin {plugin.Name}. "
|
||||
+ "Plugin excluded from manifest", e);
|
||||
return false;
|
||||
}
|
||||
|
||||
API.LogInfo(ClassName, $"Plugin {plugin.Name} requires minimum Flow Launcher version {plugin.MinimumAppVersion}, "
|
||||
+ $"but current version is {Constant.Version}. Plugin excluded from manifest.");
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0-windows</TargetFramework>
|
||||
|
|
@ -34,6 +34,7 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
<NoWarn>$(NoWarn);FLSG0007</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
@ -55,13 +56,26 @@
|
|||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Droplex" Version="1.7.0" />
|
||||
<PackageReference Include="FSharp.Core" Version="9.0.300" />
|
||||
<PackageReference Include="Meziantou.Framework.Win32.Jobs" Version="3.4.3" />
|
||||
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
||||
<PackageReference Include="FSharp.Core" Version="9.0.303" />
|
||||
<PackageReference Include="Meziantou.Framework.Win32.Jobs" Version="3.4.5" />
|
||||
<PackageReference Include="Microsoft.IO.RecyclableMemoryStream" Version="3.0.1" />
|
||||
<PackageReference Include="SemanticVersioning" Version="3.0.0" />
|
||||
<PackageReference Include="squirrel.windows" Version="1.5.2" NoWarn="NU1701" />
|
||||
<!-- Do not upgrade this to higher version since higher version removes UpdateManager instance -->
|
||||
<PackageReference Include="squirrel.windows" Version="1.9.0" NoWarn="NU1701" />
|
||||
<PackageReference Include="StreamJsonRpc" Version="2.22.11" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<FLLUseDependencyInjection>true</FLLUseDependencyInjection>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<AdditionalFiles Remove="Languages\en.xaml" />
|
||||
<AdditionalFiles Include="..\Flow.Launcher\Languages\en.xaml">
|
||||
<Link>Languages\en.xaml</Link>
|
||||
</AdditionalFiles>
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Flow.Launcher.Infrastructure\Flow.Launcher.Infrastructure.csproj" />
|
||||
|
|
|
|||
12
Flow.Launcher.Core/Plugin/IResultUpdateRegister.cs
Normal file
12
Flow.Launcher.Core/Plugin/IResultUpdateRegister.cs
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
using Flow.Launcher.Plugin;
|
||||
|
||||
namespace Flow.Launcher.Core.Plugin;
|
||||
|
||||
public interface IResultUpdateRegister
|
||||
{
|
||||
/// <summary>
|
||||
/// Register a plugin to receive results updated event.
|
||||
/// </summary>
|
||||
/// <param name="pair"></param>
|
||||
void RegisterResultsUpdatedEvent(PluginPair pair);
|
||||
}
|
||||
|
|
@ -27,6 +27,7 @@ namespace Flow.Launcher.Core.Plugin
|
|||
|
||||
private JsonStorage<ConcurrentDictionary<string, object?>> _storage = null!;
|
||||
|
||||
private static readonly double MainGridColumn0MaxWidthRatio = 0.6;
|
||||
private static readonly Thickness SettingPanelMargin = (Thickness)Application.Current.FindResource("SettingPanelMargin");
|
||||
private static readonly Thickness SettingPanelItemLeftMargin = (Thickness)Application.Current.FindResource("SettingPanelItemLeftMargin");
|
||||
private static readonly Thickness SettingPanelItemTopBottomMargin = (Thickness)Application.Current.FindResource("SettingPanelItemTopBottomMargin");
|
||||
|
|
@ -156,7 +157,7 @@ namespace Flow.Launcher.Core.Plugin
|
|||
{
|
||||
if (!NeedCreateSettingPanel()) return null!;
|
||||
|
||||
// Create main grid with two columns (Column 1: Auto, Column 2: *)
|
||||
// Create main grid with two columns (Column 0: Auto, Column 1: *)
|
||||
var mainPanel = new Grid { Margin = SettingPanelMargin, VerticalAlignment = VerticalAlignment.Center };
|
||||
mainPanel.ColumnDefinitions.Add(new ColumnDefinition()
|
||||
{
|
||||
|
|
@ -200,7 +201,7 @@ namespace Flow.Launcher.Core.Plugin
|
|||
{
|
||||
Text = attributes.Label,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
TextWrapping = TextWrapping.WrapWithOverflow
|
||||
TextWrapping = TextWrapping.Wrap
|
||||
};
|
||||
|
||||
// Create a text block for description
|
||||
|
|
@ -211,7 +212,7 @@ namespace Flow.Launcher.Core.Plugin
|
|||
{
|
||||
Text = attributes.Description,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
TextWrapping = TextWrapping.WrapWithOverflow
|
||||
TextWrapping = TextWrapping.Wrap
|
||||
};
|
||||
|
||||
desc.SetResourceReference(TextBlock.StyleProperty, "SettingPanelTextBlockDescriptionStyle"); // for theme change
|
||||
|
|
@ -247,7 +248,8 @@ namespace Flow.Launcher.Core.Plugin
|
|||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Margin = SettingPanelItemLeftTopBottomMargin,
|
||||
Text = Settings[attributes.Name] as string ?? string.Empty,
|
||||
ToolTip = attributes.Description
|
||||
ToolTip = attributes.Description,
|
||||
TextWrapping = TextWrapping.Wrap
|
||||
};
|
||||
|
||||
textBox.TextChanged += (_, _) =>
|
||||
|
|
@ -269,7 +271,8 @@ namespace Flow.Launcher.Core.Plugin
|
|||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Margin = SettingPanelItemLeftMargin,
|
||||
Text = Settings[attributes.Name] as string ?? string.Empty,
|
||||
ToolTip = attributes.Description
|
||||
ToolTip = attributes.Description,
|
||||
TextWrapping = TextWrapping.Wrap
|
||||
};
|
||||
|
||||
textBox.TextChanged += (_, _) =>
|
||||
|
|
@ -282,7 +285,7 @@ namespace Flow.Launcher.Core.Plugin
|
|||
HorizontalAlignment = HorizontalAlignment.Left,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Margin = SettingPanelItemLeftMargin,
|
||||
Content = API.GetTranslation("select")
|
||||
Content = Localize.select()
|
||||
};
|
||||
|
||||
Btn.Click += (_, _) =>
|
||||
|
|
@ -333,7 +336,7 @@ namespace Flow.Launcher.Core.Plugin
|
|||
HorizontalAlignment = HorizontalAlignment.Stretch,
|
||||
VerticalAlignment = VerticalAlignment.Center,
|
||||
Margin = SettingPanelItemLeftTopBottomMargin,
|
||||
TextWrapping = TextWrapping.WrapWithOverflow,
|
||||
TextWrapping = TextWrapping.Wrap,
|
||||
AcceptsReturn = true,
|
||||
Text = Settings[attributes.Name] as string ?? string.Empty,
|
||||
ToolTip = attributes.Description
|
||||
|
|
@ -488,6 +491,8 @@ namespace Flow.Launcher.Core.Plugin
|
|||
rowCount++;
|
||||
}
|
||||
|
||||
mainPanel.SizeChanged += MainPanel_SizeChanged;
|
||||
|
||||
// Wrap the main grid in a user control
|
||||
return new UserControl()
|
||||
{
|
||||
|
|
@ -495,6 +500,28 @@ namespace Flow.Launcher.Core.Plugin
|
|||
};
|
||||
}
|
||||
|
||||
private void MainPanel_SizeChanged(object sender, SizeChangedEventArgs e)
|
||||
{
|
||||
if (sender is not Grid grid) return;
|
||||
|
||||
var workingWidth = grid.ActualWidth;
|
||||
|
||||
if (workingWidth <= 0) return;
|
||||
|
||||
var constrainedWidth = MainGridColumn0MaxWidthRatio * workingWidth;
|
||||
|
||||
// Set MaxWidth of column 0 and its children
|
||||
// We must set MaxWidth of its children to make text wrapping work correctly
|
||||
grid.ColumnDefinitions[0].MaxWidth = constrainedWidth;
|
||||
foreach (var child in grid.Children)
|
||||
{
|
||||
if (child is FrameworkElement element && Grid.GetColumn(element) == 0 && Grid.GetColumnSpan(element) == 1)
|
||||
{
|
||||
element.MaxWidth = constrainedWidth;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static bool NeedSaveInSettings(string type)
|
||||
{
|
||||
return type != "textBlock" && type != "separator" && type != "hyperlink";
|
||||
|
|
|
|||
|
|
@ -100,11 +100,11 @@ namespace Flow.Launcher.Core.Plugin
|
|||
|
||||
RPC = new JsonRpc(handler, new JsonRPCPublicAPI(Context.API));
|
||||
|
||||
RPC.AddLocalRpcMethod("UpdateResults", new Action<string, JsonRPCQueryResponseModel>((rawQuery, response) =>
|
||||
RPC.AddLocalRpcMethod("UpdateResults", new Action<string, JsonRPCQueryResponseModel>((trimmedQuery, response) =>
|
||||
{
|
||||
var results = ParseResults(response);
|
||||
ResultsUpdated?.Invoke(this,
|
||||
new ResultUpdatedEventArgs { Query = new Query() { RawQuery = rawQuery }, Results = results });
|
||||
new ResultUpdatedEventArgs { Query = new Query() { TrimmedQuery = trimmedQuery }, Results = results });
|
||||
}));
|
||||
RPC.SynchronizationContext = null;
|
||||
RPC.StartListening();
|
||||
|
|
|
|||
|
|
@ -5,7 +5,8 @@ using System.IO;
|
|||
using Flow.Launcher.Infrastructure;
|
||||
using Flow.Launcher.Plugin;
|
||||
using System.Text.Json;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
using Flow.Launcher.Plugin.SharedCommands;
|
||||
|
||||
namespace Flow.Launcher.Core.Plugin
|
||||
{
|
||||
|
|
@ -13,10 +14,6 @@ namespace Flow.Launcher.Core.Plugin
|
|||
{
|
||||
private static readonly string ClassName = nameof(PluginConfig);
|
||||
|
||||
// We should not initialize API in static constructor because it will create another API instance
|
||||
private static IPublicAPI api = null;
|
||||
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
|
||||
/// <summary>
|
||||
/// Parse plugin metadata in the given directories
|
||||
/// </summary>
|
||||
|
|
@ -30,15 +27,26 @@ namespace Flow.Launcher.Core.Plugin
|
|||
// todo use linq when diable plugin is implmented since parallel.foreach + list is not thread saft
|
||||
foreach (var directory in directories)
|
||||
{
|
||||
if (File.Exists(Path.Combine(directory, "NeedDelete.txt")))
|
||||
if (File.Exists(Path.Combine(directory, DataLocation.PluginDeleteFile)))
|
||||
{
|
||||
try
|
||||
{
|
||||
Directory.Delete(directory, true);
|
||||
var fullyDeleted = FilesFolders.TryDeleteDirectoryRobust(directory, maxRetries: 3, retryDelayMs: 200);
|
||||
if (!fullyDeleted)
|
||||
{
|
||||
PublicApi.Instance.LogWarn(ClassName, $"Directory <{directory}> was not fully deleted.");
|
||||
|
||||
// Directory was not fully deleted, recreate the marker file so deletion will be retried on next startup
|
||||
var markerFilePath = Path.Combine(directory, DataLocation.PluginDeleteFile);
|
||||
if (!File.Exists(markerFilePath))
|
||||
{
|
||||
File.WriteAllText(markerFilePath, string.Empty);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
API.LogException(ClassName, $"Can't delete <{directory}>", e);
|
||||
PublicApi.Instance.LogException(ClassName, $"Can't delete <{directory}>", e);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
|
@ -55,7 +63,7 @@ namespace Flow.Launcher.Core.Plugin
|
|||
|
||||
duplicateList
|
||||
.ForEach(
|
||||
x => API.LogWarn(ClassName,
|
||||
x => PublicApi.Instance.LogWarn(ClassName,
|
||||
string.Format("Duplicate plugin name: {0}, id: {1}, version: {2} " +
|
||||
"not loaded due to version not the highest of the duplicates",
|
||||
x.Name, x.ID, x.Version),
|
||||
|
|
@ -107,7 +115,7 @@ namespace Flow.Launcher.Core.Plugin
|
|||
string configPath = Path.Combine(pluginDirectory, Constant.PluginMetadataFileName);
|
||||
if (!File.Exists(configPath))
|
||||
{
|
||||
API.LogError(ClassName, $"Didn't find config file <{configPath}>");
|
||||
PublicApi.Instance.LogError(ClassName, $"Didn't find config file <{configPath}>");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -123,19 +131,19 @@ namespace Flow.Launcher.Core.Plugin
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
API.LogException(ClassName, $"Invalid json for config <{configPath}>", e);
|
||||
PublicApi.Instance.LogException(ClassName, $"Invalid json for config <{configPath}>", e);
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!AllowedLanguage.IsAllowed(metadata.Language))
|
||||
{
|
||||
API.LogError(ClassName, $"Invalid language <{metadata.Language}> for config <{configPath}>");
|
||||
PublicApi.Instance.LogError(ClassName, $"Invalid language <{metadata.Language}> for config <{configPath}>");
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!File.Exists(metadata.ExecuteFilePath))
|
||||
{
|
||||
API.LogError(ClassName, $"Execute file path didn't exist <{metadata.ExecuteFilePath}> for conifg <{configPath}");
|
||||
PublicApi.Instance.LogError(ClassName, $"Execute file path didn't exist <{metadata.ExecuteFilePath}> for conifg <{configPath}");
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
|
|
@ -22,10 +22,6 @@ public static class PluginInstaller
|
|||
|
||||
private static readonly Settings Settings = Ioc.Default.GetRequiredService<Settings>();
|
||||
|
||||
// We should not initialize API in static constructor because it will create another API instance
|
||||
private static IPublicAPI api = null;
|
||||
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
|
||||
/// <summary>
|
||||
/// Installs a plugin and restarts the application if required by settings. Prompts user for confirmation and handles download if needed.
|
||||
/// </summary>
|
||||
|
|
@ -33,18 +29,16 @@ public static class PluginInstaller
|
|||
/// <returns>A Task representing the asynchronous install operation.</returns>
|
||||
public static async Task InstallPluginAndCheckRestartAsync(UserPlugin newPlugin)
|
||||
{
|
||||
if (API.PluginModified(newPlugin.ID))
|
||||
if (PublicApi.Instance.PluginModified(newPlugin.ID))
|
||||
{
|
||||
API.ShowMsgError(string.Format(API.GetTranslation("pluginModifiedAlreadyTitle"), newPlugin.Name),
|
||||
API.GetTranslation("pluginModifiedAlreadyMessage"));
|
||||
PublicApi.Instance.ShowMsgError(Localize.pluginModifiedAlreadyTitle(newPlugin.Name),
|
||||
Localize.pluginModifiedAlreadyMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
if (API.ShowMsgBox(
|
||||
string.Format(
|
||||
API.GetTranslation("InstallPromptSubtitle"),
|
||||
newPlugin.Name, newPlugin.Author, Environment.NewLine),
|
||||
API.GetTranslation("InstallPromptTitle"),
|
||||
if (PublicApi.Instance.ShowMsgBox(
|
||||
Localize.InstallPromptSubtitle(newPlugin.Name, newPlugin.Author, Environment.NewLine),
|
||||
Localize.InstallPromptTitle(),
|
||||
button: MessageBoxButton.YesNo) != MessageBoxResult.Yes) return;
|
||||
|
||||
try
|
||||
|
|
@ -61,7 +55,7 @@ public static class PluginInstaller
|
|||
if (!newPlugin.IsFromLocalInstallPath)
|
||||
{
|
||||
await DownloadFileAsync(
|
||||
$"{API.GetTranslation("DownloadingPlugin")} {newPlugin.Name}",
|
||||
$"{Localize.DownloadingPlugin()} {newPlugin.Name}",
|
||||
newPlugin.UrlDownload, filePath, cts);
|
||||
}
|
||||
else
|
||||
|
|
@ -80,7 +74,7 @@ public static class PluginInstaller
|
|||
throw new FileNotFoundException($"Plugin {newPlugin.ID} zip file not found at {filePath}", filePath);
|
||||
}
|
||||
|
||||
if (!API.InstallPlugin(newPlugin, filePath))
|
||||
if (!PublicApi.Instance.InstallPlugin(newPlugin, filePath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -92,23 +86,20 @@ public static class PluginInstaller
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
API.LogException(ClassName, "Failed to install plugin", e);
|
||||
API.ShowMsgError(API.GetTranslation("ErrorInstallingPlugin"));
|
||||
PublicApi.Instance.LogException(ClassName, "Failed to install plugin", e);
|
||||
PublicApi.Instance.ShowMsgError(Localize.ErrorInstallingPlugin());
|
||||
return; // do not restart on failure
|
||||
}
|
||||
|
||||
if (Settings.AutoRestartAfterChanging)
|
||||
{
|
||||
API.RestartApp();
|
||||
PublicApi.Instance.RestartApp();
|
||||
}
|
||||
else
|
||||
{
|
||||
API.ShowMsg(
|
||||
API.GetTranslation("installbtn"),
|
||||
string.Format(
|
||||
API.GetTranslation(
|
||||
"InstallSuccessNoRestart"),
|
||||
newPlugin.Name));
|
||||
PublicApi.Instance.ShowMsg(
|
||||
Localize.installbtn(),
|
||||
Localize.InstallSuccessNoRestart(newPlugin.Name));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -133,24 +124,23 @@ public static class PluginInstaller
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
API.LogException(ClassName, "Failed to validate zip file", e);
|
||||
API.ShowMsgError(API.GetTranslation("ZipFileNotHavePluginJson"));
|
||||
PublicApi.Instance.LogException(ClassName, "Failed to validate zip file", e);
|
||||
PublicApi.Instance.ShowMsgError(Localize.ZipFileNotHavePluginJson());
|
||||
return;
|
||||
}
|
||||
|
||||
if (API.PluginModified(plugin.ID))
|
||||
if (PublicApi.Instance.PluginModified(plugin.ID))
|
||||
{
|
||||
API.ShowMsgError(string.Format(API.GetTranslation("pluginModifiedAlreadyTitle"), plugin.Name),
|
||||
API.GetTranslation("pluginModifiedAlreadyMessage"));
|
||||
PublicApi.Instance.ShowMsgError(Localize.pluginModifiedAlreadyTitle(plugin.Name),
|
||||
Localize.pluginModifiedAlreadyMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
if (Settings.ShowUnknownSourceWarning)
|
||||
{
|
||||
if (!InstallSourceKnown(plugin.Website)
|
||||
&& API.ShowMsgBox(string.Format(
|
||||
API.GetTranslation("InstallFromUnknownSourceSubtitle"), Environment.NewLine),
|
||||
API.GetTranslation("InstallFromUnknownSourceTitle"),
|
||||
&& PublicApi.Instance.ShowMsgBox(Localize.InstallFromUnknownSourceSubtitle(Environment.NewLine),
|
||||
Localize.InstallFromUnknownSourceTitle(),
|
||||
MessageBoxButton.YesNo) == MessageBoxResult.No)
|
||||
return;
|
||||
}
|
||||
|
|
@ -165,51 +155,46 @@ public static class PluginInstaller
|
|||
/// <returns>A Task representing the asynchronous uninstall operation.</returns>
|
||||
public static async Task UninstallPluginAndCheckRestartAsync(PluginMetadata oldPlugin)
|
||||
{
|
||||
if (API.PluginModified(oldPlugin.ID))
|
||||
if (PublicApi.Instance.PluginModified(oldPlugin.ID))
|
||||
{
|
||||
API.ShowMsgError(string.Format(API.GetTranslation("pluginModifiedAlreadyTitle"), oldPlugin.Name),
|
||||
API.GetTranslation("pluginModifiedAlreadyMessage"));
|
||||
PublicApi.Instance.ShowMsgError(Localize.pluginModifiedAlreadyTitle(oldPlugin.Name),
|
||||
Localize.pluginModifiedAlreadyMessage());
|
||||
return;
|
||||
}
|
||||
|
||||
if (API.ShowMsgBox(
|
||||
string.Format(
|
||||
API.GetTranslation("UninstallPromptSubtitle"),
|
||||
oldPlugin.Name, oldPlugin.Author, Environment.NewLine),
|
||||
API.GetTranslation("UninstallPromptTitle"),
|
||||
if (PublicApi.Instance.ShowMsgBox(
|
||||
Localize.UninstallPromptSubtitle(oldPlugin.Name, oldPlugin.Author, Environment.NewLine),
|
||||
Localize.UninstallPromptTitle(),
|
||||
button: MessageBoxButton.YesNo) != MessageBoxResult.Yes) return;
|
||||
|
||||
var removePluginSettings = API.ShowMsgBox(
|
||||
API.GetTranslation("KeepPluginSettingsSubtitle"),
|
||||
API.GetTranslation("KeepPluginSettingsTitle"),
|
||||
var removePluginSettings = PublicApi.Instance.ShowMsgBox(
|
||||
Localize.KeepPluginSettingsSubtitle(),
|
||||
Localize.KeepPluginSettingsTitle(),
|
||||
button: MessageBoxButton.YesNo) == MessageBoxResult.No;
|
||||
|
||||
try
|
||||
{
|
||||
if (!await API.UninstallPluginAsync(oldPlugin, removePluginSettings))
|
||||
if (!await PublicApi.Instance.UninstallPluginAsync(oldPlugin, removePluginSettings))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
API.LogException(ClassName, "Failed to uninstall plugin", e);
|
||||
API.ShowMsgError(API.GetTranslation("ErrorUninstallingPlugin"));
|
||||
PublicApi.Instance.LogException(ClassName, "Failed to uninstall plugin", e);
|
||||
PublicApi.Instance.ShowMsgError(Localize.ErrorUninstallingPlugin());
|
||||
return; // don not restart on failure
|
||||
}
|
||||
|
||||
if (Settings.AutoRestartAfterChanging)
|
||||
{
|
||||
API.RestartApp();
|
||||
PublicApi.Instance.RestartApp();
|
||||
}
|
||||
else
|
||||
{
|
||||
API.ShowMsg(
|
||||
API.GetTranslation("uninstallbtn"),
|
||||
string.Format(
|
||||
API.GetTranslation(
|
||||
"UninstallSuccessNoRestart"),
|
||||
oldPlugin.Name));
|
||||
PublicApi.Instance.ShowMsg(
|
||||
Localize.uninstallbtn(),
|
||||
Localize.UninstallSuccessNoRestart(oldPlugin.Name));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -221,11 +206,9 @@ public static class PluginInstaller
|
|||
/// <returns>A Task representing the asynchronous update operation.</returns>
|
||||
public static async Task UpdatePluginAndCheckRestartAsync(UserPlugin newPlugin, PluginMetadata oldPlugin)
|
||||
{
|
||||
if (API.ShowMsgBox(
|
||||
string.Format(
|
||||
API.GetTranslation("UpdatePromptSubtitle"),
|
||||
oldPlugin.Name, oldPlugin.Author, Environment.NewLine),
|
||||
API.GetTranslation("UpdatePromptTitle"),
|
||||
if (PublicApi.Instance.ShowMsgBox(
|
||||
Localize.UpdatePromptSubtitle(oldPlugin.Name, oldPlugin.Author, Environment.NewLine),
|
||||
Localize.UpdatePromptTitle(),
|
||||
button: MessageBoxButton.YesNo) != MessageBoxResult.Yes) return;
|
||||
|
||||
try
|
||||
|
|
@ -237,7 +220,7 @@ public static class PluginInstaller
|
|||
if (!newPlugin.IsFromLocalInstallPath)
|
||||
{
|
||||
await DownloadFileAsync(
|
||||
$"{API.GetTranslation("DownloadingPlugin")} {newPlugin.Name}",
|
||||
$"{Localize.DownloadingPlugin()} {newPlugin.Name}",
|
||||
newPlugin.UrlDownload, filePath, cts);
|
||||
}
|
||||
else
|
||||
|
|
@ -251,30 +234,27 @@ public static class PluginInstaller
|
|||
return;
|
||||
}
|
||||
|
||||
if (!await API.UpdatePluginAsync(oldPlugin, newPlugin, filePath))
|
||||
if (!await PublicApi.Instance.UpdatePluginAsync(oldPlugin, newPlugin, filePath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
API.LogException(ClassName, "Failed to update plugin", e);
|
||||
API.ShowMsgError(API.GetTranslation("ErrorUpdatingPlugin"));
|
||||
PublicApi.Instance.LogException(ClassName, "Failed to update plugin", e);
|
||||
PublicApi.Instance.ShowMsgError(Localize.ErrorUpdatingPlugin());
|
||||
return; // do not restart on failure
|
||||
}
|
||||
|
||||
if (Settings.AutoRestartAfterChanging)
|
||||
{
|
||||
API.RestartApp();
|
||||
PublicApi.Instance.RestartApp();
|
||||
}
|
||||
else
|
||||
{
|
||||
API.ShowMsg(
|
||||
API.GetTranslation("updatebtn"),
|
||||
string.Format(
|
||||
API.GetTranslation(
|
||||
"UpdateSuccessNoRestart"),
|
||||
newPlugin.Name));
|
||||
PublicApi.Instance.ShowMsg(
|
||||
Localize.updatebtn(),
|
||||
Localize.UpdateSuccessNoRestart(newPlugin.Name));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -289,17 +269,17 @@ public static class PluginInstaller
|
|||
public static async Task CheckForPluginUpdatesAsync(Action<List<PluginUpdateInfo>> updateAllPlugins, bool silentUpdate = true, bool usePrimaryUrlOnly = false, CancellationToken token = default)
|
||||
{
|
||||
// Update the plugin manifest
|
||||
await API.UpdatePluginManifestAsync(usePrimaryUrlOnly, token);
|
||||
await PublicApi.Instance.UpdatePluginManifestAsync(usePrimaryUrlOnly, token);
|
||||
|
||||
// Get all plugins that can be updated
|
||||
var resultsForUpdate = (
|
||||
from existingPlugin in API.GetAllPlugins()
|
||||
join pluginUpdateSource in API.GetPluginManifest()
|
||||
from existingPlugin in PublicApi.Instance.GetAllPlugins()
|
||||
join pluginUpdateSource in PublicApi.Instance.GetPluginManifest()
|
||||
on existingPlugin.Metadata.ID equals pluginUpdateSource.ID
|
||||
where string.Compare(existingPlugin.Metadata.Version, pluginUpdateSource.Version,
|
||||
StringComparison.InvariantCulture) <
|
||||
0 // if current version precedes version of the plugin from update source (e.g. PluginsManifest)
|
||||
&& !API.PluginModified(existingPlugin.Metadata.ID)
|
||||
&& !PublicApi.Instance.PluginModified(existingPlugin.Metadata.ID)
|
||||
select
|
||||
new PluginUpdateInfo()
|
||||
{
|
||||
|
|
@ -314,25 +294,25 @@ public static class PluginInstaller
|
|||
}).ToList();
|
||||
|
||||
// No updates
|
||||
if (!resultsForUpdate.Any())
|
||||
if (resultsForUpdate.Count == 0)
|
||||
{
|
||||
if (!silentUpdate)
|
||||
{
|
||||
API.ShowMsg(API.GetTranslation("updateNoResultTitle"), API.GetTranslation("updateNoResultSubtitle"));
|
||||
PublicApi.Instance.ShowMsg(Localize.updateNoResultTitle(), Localize.updateNoResultSubtitle());
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// If all plugins are modified, just return
|
||||
if (resultsForUpdate.All(x => API.PluginModified(x.ID)))
|
||||
if (resultsForUpdate.All(x => PublicApi.Instance.PluginModified(x.ID)))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Show message box with button to update all plugins
|
||||
API.ShowMsgWithButton(
|
||||
API.GetTranslation("updateAllPluginsTitle"),
|
||||
API.GetTranslation("updateAllPluginsButtonContent"),
|
||||
PublicApi.Instance.ShowMsgWithButton(
|
||||
Localize.updateAllPluginsTitle(),
|
||||
Localize.updateAllPluginsButtonContent(),
|
||||
() =>
|
||||
{
|
||||
updateAllPlugins(resultsForUpdate);
|
||||
|
|
@ -357,7 +337,7 @@ public static class PluginInstaller
|
|||
using var cts = new CancellationTokenSource();
|
||||
|
||||
await DownloadFileAsync(
|
||||
$"{API.GetTranslation("DownloadingPlugin")} {plugin.PluginNewUserPlugin.Name}",
|
||||
$"{Localize.DownloadingPlugin()} {plugin.PluginNewUserPlugin.Name}",
|
||||
plugin.PluginNewUserPlugin.UrlDownload, downloadToFilePath, cts);
|
||||
|
||||
// check if user cancelled download before installing plugin
|
||||
|
|
@ -366,7 +346,7 @@ public static class PluginInstaller
|
|||
return;
|
||||
}
|
||||
|
||||
if (!await API.UpdatePluginAsync(plugin.PluginExistingMetadata, plugin.PluginNewUserPlugin, downloadToFilePath))
|
||||
if (!await PublicApi.Instance.UpdatePluginAsync(plugin.PluginExistingMetadata, plugin.PluginNewUserPlugin, downloadToFilePath))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
|
@ -375,8 +355,8 @@ public static class PluginInstaller
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
API.LogException(ClassName, "Failed to update plugin", e);
|
||||
API.ShowMsgError(API.GetTranslation("ErrorUpdatingPlugin"));
|
||||
PublicApi.Instance.LogException(ClassName, "Failed to update plugin", e);
|
||||
PublicApi.Instance.ShowMsgError(Localize.ErrorUpdatingPlugin());
|
||||
}
|
||||
}));
|
||||
|
||||
|
|
@ -384,13 +364,13 @@ public static class PluginInstaller
|
|||
|
||||
if (restart)
|
||||
{
|
||||
API.RestartApp();
|
||||
PublicApi.Instance.RestartApp();
|
||||
}
|
||||
else
|
||||
{
|
||||
API.ShowMsg(
|
||||
API.GetTranslation("updatebtn"),
|
||||
API.GetTranslation("PluginsUpdateSuccessNoRestart"));
|
||||
PublicApi.Instance.ShowMsg(
|
||||
Localize.updatebtn(),
|
||||
Localize.PluginsUpdateSuccessNoRestart());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -412,7 +392,7 @@ public static class PluginInstaller
|
|||
if (showProgress)
|
||||
{
|
||||
var exceptionHappened = false;
|
||||
await API.ShowProgressBoxAsync(progressBoxTitle,
|
||||
await PublicApi.Instance.ShowProgressBoxAsync(progressBoxTitle,
|
||||
async (reportProgress) =>
|
||||
{
|
||||
if (reportProgress == null)
|
||||
|
|
@ -424,18 +404,18 @@ public static class PluginInstaller
|
|||
}
|
||||
else
|
||||
{
|
||||
await API.HttpDownloadAsync(downloadUrl, filePath, reportProgress, cts.Token).ConfigureAwait(false);
|
||||
await PublicApi.Instance.HttpDownloadAsync(downloadUrl, filePath, reportProgress, cts.Token).ConfigureAwait(false);
|
||||
}
|
||||
}, cts.Cancel);
|
||||
|
||||
// if exception happened while downloading and user does not cancel downloading,
|
||||
// we need to redownload the plugin
|
||||
if (exceptionHappened && (!cts.IsCancellationRequested))
|
||||
await API.HttpDownloadAsync(downloadUrl, filePath, token: cts.Token).ConfigureAwait(false);
|
||||
await PublicApi.Instance.HttpDownloadAsync(downloadUrl, filePath, token: cts.Token).ConfigureAwait(false);
|
||||
}
|
||||
else
|
||||
{
|
||||
await API.HttpDownloadAsync(downloadUrl, filePath, token: cts.Token).ConfigureAwait(false);
|
||||
await PublicApi.Instance.HttpDownloadAsync(downloadUrl, filePath, token: cts.Token).ConfigureAwait(false);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -462,7 +442,7 @@ public static class PluginInstaller
|
|||
if (!Uri.TryCreate(url, UriKind.Absolute, out var uri) || uri.Host != acceptedHost)
|
||||
return false;
|
||||
|
||||
return API.GetAllPlugins().Any(x =>
|
||||
return PublicApi.Instance.GetAllPlugins().Any(x =>
|
||||
!string.IsNullOrEmpty(x.Metadata.Website) &&
|
||||
x.Metadata.Website.StartsWith(constructedUrlPart)
|
||||
);
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -2,9 +2,6 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.Core.ExternalPlugins.Environments;
|
||||
#pragma warning disable IDE0005
|
||||
using Flow.Launcher.Infrastructure.Logger;
|
||||
|
|
@ -18,10 +15,6 @@ namespace Flow.Launcher.Core.Plugin
|
|||
{
|
||||
private static readonly string ClassName = nameof(PluginsLoader);
|
||||
|
||||
// We should not initialize API in static constructor because it will create another API instance
|
||||
private static IPublicAPI api = null;
|
||||
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
|
||||
public static List<PluginPair> Plugins(List<PluginMetadata> metadatas, PluginsSettings settings)
|
||||
{
|
||||
var dotnetPlugins = DotNetPlugins(metadatas);
|
||||
|
|
@ -55,7 +48,7 @@ namespace Flow.Launcher.Core.Plugin
|
|||
return plugins;
|
||||
}
|
||||
|
||||
private static IEnumerable<PluginPair> DotNetPlugins(List<PluginMetadata> source)
|
||||
private static List<PluginPair> DotNetPlugins(List<PluginMetadata> source)
|
||||
{
|
||||
var erroredPlugins = new List<string>();
|
||||
|
||||
|
|
@ -64,56 +57,58 @@ namespace Flow.Launcher.Core.Plugin
|
|||
|
||||
foreach (var metadata in metadatas)
|
||||
{
|
||||
var milliseconds = API.StopwatchLogDebug(ClassName, $"Constructor init cost for {metadata.Name}", () =>
|
||||
var milliseconds = PublicApi.Instance.StopwatchLogDebug(ClassName, $"Constructor init cost for {metadata.Name}", () =>
|
||||
{
|
||||
Assembly assembly = null;
|
||||
IAsyncPlugin plugin = null;
|
||||
|
||||
try
|
||||
{
|
||||
Assembly assembly = null;
|
||||
IAsyncPlugin plugin = null;
|
||||
var assemblyLoader = new PluginAssemblyLoader(metadata.ExecuteFilePath);
|
||||
assembly = assemblyLoader.LoadAssemblyAndDependencies();
|
||||
|
||||
try
|
||||
{
|
||||
var assemblyLoader = new PluginAssemblyLoader(metadata.ExecuteFilePath);
|
||||
assembly = assemblyLoader.LoadAssemblyAndDependencies();
|
||||
var type = assemblyLoader.FromAssemblyGetTypeOfInterface(assembly,
|
||||
typeof(IAsyncPlugin));
|
||||
|
||||
var type = assemblyLoader.FromAssemblyGetTypeOfInterface(assembly,
|
||||
typeof(IAsyncPlugin));
|
||||
plugin = Activator.CreateInstance(type) as IAsyncPlugin;
|
||||
|
||||
plugin = Activator.CreateInstance(type) as IAsyncPlugin;
|
||||
|
||||
metadata.AssemblyName = assembly.GetName().Name;
|
||||
}
|
||||
metadata.AssemblyName = assembly.GetName().Name;
|
||||
}
|
||||
#if DEBUG
|
||||
catch (Exception)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
throw;
|
||||
}
|
||||
#else
|
||||
catch (Exception e) when (assembly == null)
|
||||
{
|
||||
Log.Exception(ClassName, $"Couldn't load assembly for the plugin: {metadata.Name}", e);
|
||||
}
|
||||
catch (InvalidOperationException e)
|
||||
{
|
||||
Log.Exception(ClassName, $"Can't find the required IPlugin interface for the plugin: <{metadata.Name}>", e);
|
||||
}
|
||||
catch (ReflectionTypeLoadException e)
|
||||
{
|
||||
Log.Exception(ClassName, $"The GetTypes method was unable to load assembly types for the plugin: <{metadata.Name}>", e);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Log.Exception(ClassName, $"The following plugin has errored and can not be loaded: <{metadata.Name}>", e);
|
||||
}
|
||||
catch (Exception e) when (assembly == null)
|
||||
{
|
||||
PublicApi.Instance.LogException(ClassName, $"Couldn't load assembly for the plugin: {metadata.Name}", e);
|
||||
}
|
||||
catch (InvalidOperationException e)
|
||||
{
|
||||
PublicApi.Instance.LogException(ClassName, $"Can't find the required IPlugin interface for the plugin: <{metadata.Name}>", e);
|
||||
}
|
||||
catch (ReflectionTypeLoadException e)
|
||||
{
|
||||
PublicApi.Instance.LogException(ClassName, $"The GetTypes method was unable to load assembly types for the plugin: <{metadata.Name}>", e);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
PublicApi.Instance.LogException(ClassName, $"The following plugin has errored and can not be loaded: <{metadata.Name}>", e);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (plugin == null)
|
||||
{
|
||||
erroredPlugins.Add(metadata.Name);
|
||||
return;
|
||||
}
|
||||
if (plugin == null)
|
||||
{
|
||||
erroredPlugins.Add(metadata.Name);
|
||||
return;
|
||||
}
|
||||
|
||||
plugins.Add(new PluginPair { Plugin = plugin, Metadata = metadata });
|
||||
});
|
||||
|
||||
plugins.Add(new PluginPair { Plugin = plugin, Metadata = metadata });
|
||||
});
|
||||
metadata.InitTime += milliseconds;
|
||||
PublicApi.Instance.LogDebug(ClassName, $"Constructor cost for <{metadata.Name}> is <{metadata.InitTime}ms>");
|
||||
}
|
||||
|
||||
if (erroredPlugins.Count > 0)
|
||||
|
|
@ -121,12 +116,12 @@ namespace Flow.Launcher.Core.Plugin
|
|||
var errorPluginString = string.Join(Environment.NewLine, erroredPlugins);
|
||||
|
||||
var errorMessage = erroredPlugins.Count > 1 ?
|
||||
API.GetTranslation("pluginsHaveErrored") :
|
||||
API.GetTranslation("pluginHasErrored");
|
||||
Localize.pluginsHaveErrored():
|
||||
Localize.pluginHasErrored();
|
||||
|
||||
API.ShowMsgError($"{errorMessage}{Environment.NewLine}{Environment.NewLine}" +
|
||||
PublicApi.Instance.ShowMsgError($"{errorMessage}{Environment.NewLine}{Environment.NewLine}" +
|
||||
$"{errorPluginString}{Environment.NewLine}{Environment.NewLine}" +
|
||||
API.GetTranslation("referToLogs"));
|
||||
Localize.referToLogs());
|
||||
}
|
||||
|
||||
return plugins;
|
||||
|
|
|
|||
|
|
@ -6,15 +6,16 @@ namespace Flow.Launcher.Core.Plugin
|
|||
{
|
||||
public static class QueryBuilder
|
||||
{
|
||||
public static Query Build(string text, Dictionary<string, PluginPair> nonGlobalPlugins)
|
||||
public static Query Build(string originalQuery, string trimmedQuery, Dictionary<string, PluginPair> nonGlobalPlugins)
|
||||
{
|
||||
// home query
|
||||
if (string.IsNullOrEmpty(text))
|
||||
if (string.IsNullOrEmpty(trimmedQuery))
|
||||
{
|
||||
return new Query()
|
||||
{
|
||||
Search = string.Empty,
|
||||
RawQuery = string.Empty,
|
||||
OriginalQuery = string.Empty,
|
||||
TrimmedQuery = string.Empty,
|
||||
SearchTerms = Array.Empty<string>(),
|
||||
ActionKeyword = string.Empty,
|
||||
IsHomeQuery = true
|
||||
|
|
@ -22,14 +23,13 @@ namespace Flow.Launcher.Core.Plugin
|
|||
}
|
||||
|
||||
// replace multiple white spaces with one white space
|
||||
var terms = text.Split(Query.TermSeparator, StringSplitOptions.RemoveEmptyEntries);
|
||||
var terms = trimmedQuery.Split(Query.TermSeparator, StringSplitOptions.RemoveEmptyEntries);
|
||||
if (terms.Length == 0)
|
||||
{
|
||||
// nothing was typed
|
||||
return null;
|
||||
}
|
||||
|
||||
var rawQuery = text;
|
||||
string actionKeyword, search;
|
||||
string possibleActionKeyword = terms[0];
|
||||
string[] searchTerms;
|
||||
|
|
@ -38,21 +38,22 @@ namespace Flow.Launcher.Core.Plugin
|
|||
{
|
||||
// use non global plugin for query
|
||||
actionKeyword = possibleActionKeyword;
|
||||
search = terms.Length > 1 ? rawQuery[(actionKeyword.Length + 1)..].TrimStart() : string.Empty;
|
||||
search = terms.Length > 1 ? trimmedQuery[(actionKeyword.Length + 1)..].TrimStart() : string.Empty;
|
||||
searchTerms = terms[1..];
|
||||
}
|
||||
else
|
||||
{
|
||||
// non action keyword
|
||||
actionKeyword = string.Empty;
|
||||
search = rawQuery.TrimStart();
|
||||
search = trimmedQuery.TrimStart();
|
||||
searchTerms = terms;
|
||||
}
|
||||
|
||||
return new Query()
|
||||
{
|
||||
Search = search,
|
||||
RawQuery = rawQuery,
|
||||
OriginalQuery = originalQuery,
|
||||
TrimmedQuery = trimmedQuery,
|
||||
SearchTerms = searchTerms,
|
||||
ActionKeyword = actionKeyword,
|
||||
IsHomeQuery = false
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
|
|
@ -6,7 +6,6 @@ using System.Linq;
|
|||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.Core.Plugin;
|
||||
using Flow.Launcher.Infrastructure;
|
||||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
|
|
@ -14,14 +13,10 @@ using Flow.Launcher.Plugin;
|
|||
|
||||
namespace Flow.Launcher.Core.Resource
|
||||
{
|
||||
public class Internationalization
|
||||
public class Internationalization : IDisposable
|
||||
{
|
||||
private static readonly string ClassName = nameof(Internationalization);
|
||||
|
||||
// We should not initialize API in static constructor because it will create another API instance
|
||||
private static IPublicAPI api = null;
|
||||
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
|
||||
private const string Folder = "Languages";
|
||||
private const string DefaultLanguageCode = "en";
|
||||
private const string DefaultFile = "en.xaml";
|
||||
|
|
@ -30,6 +25,7 @@ namespace Flow.Launcher.Core.Resource
|
|||
private readonly List<string> _languageDirectories = [];
|
||||
private readonly List<ResourceDictionary> _oldResources = [];
|
||||
private static string SystemLanguageCode;
|
||||
private readonly SemaphoreSlim _langChangeLock = new(1, 1);
|
||||
|
||||
public Internationalization(Settings settings)
|
||||
{
|
||||
|
|
@ -103,7 +99,7 @@ namespace Flow.Launcher.Core.Resource
|
|||
var directory = Path.Combine(Constant.ProgramDirectory, Folder);
|
||||
if (!Directory.Exists(directory))
|
||||
{
|
||||
API.LogError(ClassName, $"Flow Launcher language directory can't be found <{directory}>");
|
||||
PublicApi.Instance.LogError(ClassName, $"Flow Launcher language directory can't be found <{directory}>");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -174,7 +170,7 @@ namespace Flow.Launcher.Core.Resource
|
|||
FirstOrDefault(o => o.LanguageCode.Equals(languageCode, StringComparison.OrdinalIgnoreCase));
|
||||
if (language == null)
|
||||
{
|
||||
API.LogError(ClassName, $"Language code can't be found <{languageCode}>");
|
||||
PublicApi.Instance.LogError(ClassName, $"Language code can't be found <{languageCode}>");
|
||||
return AvailableLanguages.English;
|
||||
}
|
||||
else
|
||||
|
|
@ -185,20 +181,33 @@ namespace Flow.Launcher.Core.Resource
|
|||
|
||||
private async Task ChangeLanguageAsync(Language language, bool updateMetadata = true)
|
||||
{
|
||||
// Remove old language files and load language
|
||||
RemoveOldLanguageFiles();
|
||||
if (language != AvailableLanguages.English)
|
||||
await _langChangeLock.WaitAsync();
|
||||
|
||||
try
|
||||
{
|
||||
LoadLanguage(language);
|
||||
// Remove old language files and load language
|
||||
RemoveOldLanguageFiles();
|
||||
if (language != AvailableLanguages.English)
|
||||
{
|
||||
LoadLanguage(language);
|
||||
}
|
||||
|
||||
// Change culture info
|
||||
ChangeCultureInfo(language.LanguageCode);
|
||||
|
||||
if (updateMetadata)
|
||||
{
|
||||
// Raise event for plugins after culture is set
|
||||
await Task.Run(UpdatePluginMetadataTranslations);
|
||||
}
|
||||
}
|
||||
|
||||
// Change culture info
|
||||
ChangeCultureInfo(language.LanguageCode);
|
||||
|
||||
if (updateMetadata)
|
||||
catch (Exception e)
|
||||
{
|
||||
// Raise event for plugins after culture is set
|
||||
await Task.Run(UpdatePluginMetadataTranslations);
|
||||
PublicApi.Instance.LogException(ClassName, $"Failed to change language to <{language.LanguageCode}>", e);
|
||||
}
|
||||
finally
|
||||
{
|
||||
_langChangeLock.Release();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -240,7 +249,7 @@ namespace Flow.Launcher.Core.Resource
|
|||
// "Do you want to search with pinyin?"
|
||||
string text = languageToSet == AvailableLanguages.Chinese ? "是否启用拼音搜索?" : "是否啓用拼音搜索?";
|
||||
|
||||
if (API.ShowMsgBox(text, string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.No)
|
||||
if (PublicApi.Instance.ShowMsgBox(text, string.Empty, MessageBoxButton.YesNo) == MessageBoxResult.No)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
|
|
@ -257,6 +266,7 @@ namespace Flow.Launcher.Core.Resource
|
|||
{
|
||||
dicts.Remove(r);
|
||||
}
|
||||
_oldResources.Clear();
|
||||
}
|
||||
|
||||
private void LoadLanguage(Language language)
|
||||
|
|
@ -296,7 +306,7 @@ namespace Flow.Launcher.Core.Resource
|
|||
}
|
||||
else
|
||||
{
|
||||
API.LogError(ClassName, $"Language path can't be found <{path}>");
|
||||
PublicApi.Instance.LogError(ClassName, $"Language path can't be found <{path}>");
|
||||
var english = Path.Combine(folder, DefaultFile);
|
||||
if (File.Exists(english))
|
||||
{
|
||||
|
|
@ -304,7 +314,7 @@ namespace Flow.Launcher.Core.Resource
|
|||
}
|
||||
else
|
||||
{
|
||||
API.LogError(ClassName, $"Default English Language path can't be found <{path}>");
|
||||
PublicApi.Instance.LogError(ClassName, $"Default English Language path can't be found <{path}>");
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
|
|
@ -339,7 +349,7 @@ namespace Flow.Launcher.Core.Resource
|
|||
}
|
||||
else
|
||||
{
|
||||
API.LogError(ClassName, $"No Translation for key {key}");
|
||||
PublicApi.Instance.LogError(ClassName, $"No Translation for key {key}");
|
||||
return $"No Translation for key {key}";
|
||||
}
|
||||
}
|
||||
|
|
@ -362,11 +372,37 @@ namespace Flow.Launcher.Core.Resource
|
|||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
API.LogException(ClassName, $"Failed for <{p.Metadata.Name}>", e);
|
||||
PublicApi.Instance.LogException(ClassName, $"Failed for <{p.Metadata.Name}>", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static void UpdatePluginMetadataTranslation(PluginPair p)
|
||||
{
|
||||
// Update plugin metadata name & description
|
||||
if (p.Plugin is not IPluginI18n pluginI18N) return;
|
||||
try
|
||||
{
|
||||
p.Metadata.Name = pluginI18N.GetTranslatedPluginTitle();
|
||||
p.Metadata.Description = pluginI18N.GetTranslatedPluginDescription();
|
||||
pluginI18N.OnCultureInfoChanged(CultureInfo.CurrentCulture);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
PublicApi.Instance.LogException(ClassName, $"Failed for <{p.Metadata.Name}>", e);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
RemoveOldLanguageFiles();
|
||||
_langChangeLock.Dispose();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,30 +0,0 @@
|
|||
using System.ComponentModel;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.Plugin;
|
||||
|
||||
namespace Flow.Launcher.Core.Resource
|
||||
{
|
||||
public class LocalizedDescriptionAttribute : DescriptionAttribute
|
||||
{
|
||||
// We should not initialize API in static constructor because it will create another API instance
|
||||
private static IPublicAPI api = null;
|
||||
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
|
||||
private readonly string _resourceKey;
|
||||
|
||||
public LocalizedDescriptionAttribute(string resourceKey)
|
||||
{
|
||||
_resourceKey = resourceKey;
|
||||
}
|
||||
|
||||
public override string Description
|
||||
{
|
||||
get
|
||||
{
|
||||
string description = API.GetTranslation(_resourceKey);
|
||||
return string.IsNullOrWhiteSpace(description) ?
|
||||
string.Format("[[{0}]]", _resourceKey) : description;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -124,8 +124,8 @@ namespace Flow.Launcher.Core.Resource
|
|||
try
|
||||
{
|
||||
// Load a ResourceDictionary for the specified theme.
|
||||
var themeName = _settings.Theme;
|
||||
var dict = GetThemeResourceDictionary(themeName);
|
||||
var theme = _settings.Theme;
|
||||
var dict = GetThemeResourceDictionary(theme);
|
||||
|
||||
// Apply font settings to the theme resource.
|
||||
ApplyFontSettings(dict);
|
||||
|
|
@ -292,10 +292,10 @@ namespace Flow.Launcher.Core.Resource
|
|||
dict["ItemHotkeyStyle"] is Style resultHotkeyItemStyle &&
|
||||
dict["ItemHotkeySelectedStyle"] is Style resultHotkeyItemSelectedStyle)
|
||||
{
|
||||
Setter fontFamily = new Setter(TextBlock.FontFamilyProperty, new FontFamily(_settings.ResultFont));
|
||||
Setter fontStyle = new Setter(TextBlock.FontStyleProperty, FontHelper.GetFontStyleFromInvariantStringOrNormal(_settings.ResultFontStyle));
|
||||
Setter fontWeight = new Setter(TextBlock.FontWeightProperty, FontHelper.GetFontWeightFromInvariantStringOrNormal(_settings.ResultFontWeight));
|
||||
Setter fontStretch = new Setter(TextBlock.FontStretchProperty, FontHelper.GetFontStretchFromInvariantStringOrNormal(_settings.ResultFontStretch));
|
||||
var fontFamily = new Setter(TextBlock.FontFamilyProperty, new FontFamily(_settings.ResultFont));
|
||||
var fontStyle = new Setter(TextBlock.FontStyleProperty, FontHelper.GetFontStyleFromInvariantStringOrNormal(_settings.ResultFontStyle));
|
||||
var fontWeight = new Setter(TextBlock.FontWeightProperty, FontHelper.GetFontWeightFromInvariantStringOrNormal(_settings.ResultFontWeight));
|
||||
var fontStretch = new Setter(TextBlock.FontStretchProperty, FontHelper.GetFontStretchFromInvariantStringOrNormal(_settings.ResultFontStretch));
|
||||
|
||||
Setter[] setters = { fontFamily, fontStyle, fontWeight, fontStretch };
|
||||
Array.ForEach(
|
||||
|
|
@ -307,10 +307,10 @@ namespace Flow.Launcher.Core.Resource
|
|||
dict["ItemSubTitleStyle"] is Style resultSubItemStyle &&
|
||||
dict["ItemSubTitleSelectedStyle"] is Style resultSubItemSelectedStyle)
|
||||
{
|
||||
Setter fontFamily = new Setter(TextBlock.FontFamilyProperty, new FontFamily(_settings.ResultSubFont));
|
||||
Setter fontStyle = new Setter(TextBlock.FontStyleProperty, FontHelper.GetFontStyleFromInvariantStringOrNormal(_settings.ResultSubFontStyle));
|
||||
Setter fontWeight = new Setter(TextBlock.FontWeightProperty, FontHelper.GetFontWeightFromInvariantStringOrNormal(_settings.ResultSubFontWeight));
|
||||
Setter fontStretch = new Setter(TextBlock.FontStretchProperty, FontHelper.GetFontStretchFromInvariantStringOrNormal(_settings.ResultSubFontStretch));
|
||||
var fontFamily = new Setter(TextBlock.FontFamilyProperty, new FontFamily(_settings.ResultSubFont));
|
||||
var fontStyle = new Setter(TextBlock.FontStyleProperty, FontHelper.GetFontStyleFromInvariantStringOrNormal(_settings.ResultSubFontStyle));
|
||||
var fontWeight = new Setter(TextBlock.FontWeightProperty, FontHelper.GetFontWeightFromInvariantStringOrNormal(_settings.ResultSubFontWeight));
|
||||
var fontStretch = new Setter(TextBlock.FontStretchProperty, FontHelper.GetFontStretchFromInvariantStringOrNormal(_settings.ResultSubFontStretch));
|
||||
|
||||
Setter[] setters = { fontFamily, fontStyle, fontWeight, fontStretch };
|
||||
Array.ForEach(
|
||||
|
|
@ -395,7 +395,7 @@ namespace Flow.Launcher.Core.Resource
|
|||
|
||||
public List<ThemeData> GetAvailableThemes()
|
||||
{
|
||||
List<ThemeData> themes = new List<ThemeData>();
|
||||
var themes = new List<ThemeData>();
|
||||
foreach (var themeDirectory in _themeDirectories)
|
||||
{
|
||||
var filePaths = Directory
|
||||
|
|
@ -410,8 +410,7 @@ namespace Flow.Launcher.Core.Resource
|
|||
|
||||
public bool ChangeTheme(string theme = null)
|
||||
{
|
||||
if (string.IsNullOrEmpty(theme))
|
||||
theme = _settings.Theme;
|
||||
if (string.IsNullOrEmpty(theme)) theme = _settings.Theme;
|
||||
|
||||
string path = GetThemePath(theme);
|
||||
try
|
||||
|
|
@ -426,13 +425,14 @@ namespace Flow.Launcher.Core.Resource
|
|||
|
||||
_settings.Theme = theme;
|
||||
|
||||
//always allow re-loading default theme, in case of failure of switching to a new theme from default theme
|
||||
// Always allow re-loading default theme, in case of failure of switching to a new theme from default theme
|
||||
if (_oldTheme != theme || theme == Constant.DefaultTheme)
|
||||
{
|
||||
_oldTheme = Path.GetFileNameWithoutExtension(_oldResource.Source.AbsolutePath);
|
||||
}
|
||||
|
||||
BlurEnabled = IsBlurTheme();
|
||||
// Check if blur is enabled
|
||||
BlurEnabled = Win32Helper.IsBackdropSupported() && IsThemeBlurEnabled(resourceDict);
|
||||
|
||||
// Apply blur and drop shadow effect so that we do not need to call it again
|
||||
_ = RefreshFrameAsync();
|
||||
|
|
@ -444,17 +444,27 @@ namespace Flow.Launcher.Core.Resource
|
|||
_api.LogError(ClassName, $"Theme <{theme}> path can't be found");
|
||||
if (theme != Constant.DefaultTheme)
|
||||
{
|
||||
_api.ShowMsgBox(string.Format(_api.GetTranslation("theme_load_failure_path_not_exists"), theme));
|
||||
_api.ShowMsgBox(Localize.theme_load_failure_path_not_exists(theme));
|
||||
ChangeTheme(Constant.DefaultTheme);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
catch (XamlParseException)
|
||||
catch (XamlParseException e)
|
||||
{
|
||||
_api.LogError(ClassName, $"Theme <{theme}> fail to parse");
|
||||
_api.LogException(ClassName, $"Theme <{theme}> fail to parse xaml", e);
|
||||
if (theme != Constant.DefaultTheme)
|
||||
{
|
||||
_api.ShowMsgBox(string.Format(_api.GetTranslation("theme_load_failure_parse_error"), theme));
|
||||
_api.ShowMsgBox(Localize.theme_load_failure_parse_error(theme));
|
||||
ChangeTheme(Constant.DefaultTheme);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_api.LogException(ClassName, $"Theme <{theme}> fail to load", e);
|
||||
if (theme != Constant.DefaultTheme)
|
||||
{
|
||||
_api.ShowMsgBox(Localize.theme_load_failure_parse_error(theme));
|
||||
ChangeTheme(Constant.DefaultTheme);
|
||||
}
|
||||
return false;
|
||||
|
|
@ -657,21 +667,21 @@ namespace Flow.Launcher.Core.Resource
|
|||
if (mainWindow == null) return;
|
||||
|
||||
// Check if the theme supports blur
|
||||
bool hasBlur = dict.Contains("ThemeBlurEnabled") && dict["ThemeBlurEnabled"] is bool b && b;
|
||||
var hasBlur = IsThemeBlurEnabled(dict);
|
||||
if (BlurEnabled && hasBlur && Win32Helper.IsBackdropSupported())
|
||||
{
|
||||
// If the BackdropType is Mica or MicaAlt, set the windowborderstyle's background to transparent
|
||||
if (backdropType == BackdropTypes.Mica || backdropType == BackdropTypes.MicaAlt)
|
||||
if (backdropType is BackdropTypes.Mica or BackdropTypes.MicaAlt)
|
||||
{
|
||||
windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType<Setter>().FirstOrDefault(x => x.Property.Name == "Background"));
|
||||
windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, new SolidColorBrush(Color.FromArgb(1, 0, 0, 0))));
|
||||
windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType<Setter>().FirstOrDefault(x => x.Property == Control.BackgroundProperty));
|
||||
windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, ThemeHelper.GetFrozenSolidColorBrush(Color.FromArgb(1, 0, 0, 0))));
|
||||
}
|
||||
else if (backdropType == BackdropTypes.Acrylic)
|
||||
{
|
||||
windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType<Setter>().FirstOrDefault(x => x.Property.Name == "Background"));
|
||||
windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, new SolidColorBrush(Colors.Transparent)));
|
||||
windowBorderStyle.Setters.Remove(windowBorderStyle.Setters.OfType<Setter>().FirstOrDefault(x => x.Property == Control.BackgroundProperty));
|
||||
windowBorderStyle.Setters.Add(new Setter(Border.BackgroundProperty, Brushes.Transparent));
|
||||
}
|
||||
|
||||
|
||||
// For themes with blur enabled, the window border is rendered by the system, so it's treated as a simple rectangle regardless of thickness.
|
||||
//(This is to avoid issues when the window is forcibly changed to a rectangular shape during snap scenarios.)
|
||||
var cornerRadiusSetter = windowBorderStyle.Setters.OfType<Setter>().FirstOrDefault(x => x.Property == Border.CornerRadiusProperty);
|
||||
|
|
@ -679,7 +689,7 @@ namespace Flow.Launcher.Core.Resource
|
|||
cornerRadiusSetter.Value = new CornerRadius(0);
|
||||
else
|
||||
windowBorderStyle.Setters.Add(new Setter(Border.CornerRadiusProperty, new CornerRadius(0)));
|
||||
|
||||
|
||||
// Apply the blur effect
|
||||
Win32Helper.DWMSetBackdropForWindow(mainWindow, backdropType);
|
||||
ColorizeWindow(theme, backdropType);
|
||||
|
|
@ -788,12 +798,12 @@ namespace Flow.Launcher.Core.Resource
|
|||
Application.Current.Resources["WindowBorderStyle"] is Style originalStyle)
|
||||
{
|
||||
// Copy the original style, including the base style if it exists
|
||||
CopyStyle(originalStyle, previewStyle);
|
||||
ThemeHelper.CopyStyle(originalStyle, previewStyle);
|
||||
}
|
||||
|
||||
// Apply background color (remove transparency in color)
|
||||
Color backgroundColor = Color.FromRgb(bgColor.Value.R, bgColor.Value.G, bgColor.Value.B);
|
||||
previewStyle.Setters.Add(new Setter(Border.BackgroundProperty, new SolidColorBrush(backgroundColor)));
|
||||
var backgroundColor = Color.FromRgb(bgColor.Value.R, bgColor.Value.G, bgColor.Value.B);
|
||||
previewStyle.Setters.Add(new Setter(Border.BackgroundProperty, ThemeHelper.GetFrozenSolidColorBrush(backgroundColor)));
|
||||
|
||||
// The blur theme keeps the corner round fixed (applying DWM code to modify it causes rendering issues).
|
||||
// The non-blur theme retains the previously set WindowBorderStyle.
|
||||
|
|
@ -807,21 +817,6 @@ namespace Flow.Launcher.Core.Resource
|
|||
Application.Current.Resources["PreviewWindowBorderStyle"] = previewStyle;
|
||||
}
|
||||
|
||||
private void CopyStyle(Style originalStyle, Style targetStyle)
|
||||
{
|
||||
// If the style is based on another style, copy the base style first
|
||||
if (originalStyle.BasedOn != null)
|
||||
{
|
||||
CopyStyle(originalStyle.BasedOn, targetStyle);
|
||||
}
|
||||
|
||||
// Copy the setters from the original style
|
||||
foreach (var setter in originalStyle.Setters.OfType<Setter>())
|
||||
{
|
||||
targetStyle.Setters.Add(new Setter(setter.Property, setter.Value));
|
||||
}
|
||||
}
|
||||
|
||||
private void ColorizeWindow(string theme, BackdropTypes backdropType)
|
||||
{
|
||||
var dict = GetThemeResourceDictionary(theme);
|
||||
|
|
@ -831,20 +826,16 @@ namespace Flow.Launcher.Core.Resource
|
|||
if (mainWindow == null) return;
|
||||
|
||||
// Check if the theme supports blur
|
||||
bool hasBlur = dict.Contains("ThemeBlurEnabled") && dict["ThemeBlurEnabled"] is bool b && b;
|
||||
var hasBlur = IsThemeBlurEnabled(dict);
|
||||
|
||||
// SystemBG value check (Auto, Light, Dark)
|
||||
string systemBG = dict.Contains("SystemBG") ? dict["SystemBG"] as string : "Auto"; // 기본값 Auto
|
||||
var systemBG = dict.Contains("SystemBG") ? dict["SystemBG"] as string : "Auto"; // 기본값 Auto
|
||||
|
||||
// Check the user's ColorScheme setting
|
||||
string colorScheme = _settings.ColorScheme;
|
||||
|
||||
// Check system dark mode setting (read AppsUseLightTheme value)
|
||||
int themeValue = (int)Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", "AppsUseLightTheme", 1);
|
||||
bool isSystemDark = themeValue == 0;
|
||||
var colorScheme = _settings.ColorScheme;
|
||||
|
||||
// Final decision on whether to use dark mode
|
||||
bool useDarkMode = false;
|
||||
var useDarkMode = false;
|
||||
|
||||
// If systemBG is not "Auto", prioritize it over ColorScheme and set the mode based on systemBG value
|
||||
if (systemBG == "Dark")
|
||||
|
|
@ -859,11 +850,20 @@ namespace Flow.Launcher.Core.Resource
|
|||
{
|
||||
// If systemBG is "Auto", decide based on ColorScheme
|
||||
if (colorScheme == "Dark")
|
||||
{
|
||||
useDarkMode = true;
|
||||
}
|
||||
else if (colorScheme == "Light")
|
||||
{
|
||||
useDarkMode = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Check system dark mode setting (read AppsUseLightTheme value)
|
||||
var themeValue = (int)Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Themes\Personalize", "AppsUseLightTheme", 1);
|
||||
var isSystemDark = themeValue == 0;
|
||||
useDarkMode = isSystemDark; // Auto (based on system setting)
|
||||
}
|
||||
}
|
||||
|
||||
// Apply DWM Dark Mode
|
||||
|
|
@ -905,25 +905,20 @@ namespace Flow.Launcher.Core.Resource
|
|||
else
|
||||
{
|
||||
// Only set the background to transparent if the theme supports blur
|
||||
if (backdropType == BackdropTypes.Mica || backdropType == BackdropTypes.MicaAlt)
|
||||
if (backdropType is BackdropTypes.Mica or BackdropTypes.MicaAlt)
|
||||
{
|
||||
mainWindow.Background = new SolidColorBrush(Color.FromArgb(1, 0, 0, 0));
|
||||
mainWindow.Background = ThemeHelper.GetFrozenSolidColorBrush(Color.FromArgb(1, 0, 0, 0));
|
||||
}
|
||||
else
|
||||
{
|
||||
mainWindow.Background = new SolidColorBrush(selectedBG);
|
||||
mainWindow.Background = ThemeHelper.GetFrozenSolidColorBrush(selectedBG);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsBlurTheme()
|
||||
private static bool IsThemeBlurEnabled(ResourceDictionary dict)
|
||||
{
|
||||
if (!Win32Helper.IsBackdropSupported()) // Windows 11 미만이면 무조건 false
|
||||
return false;
|
||||
|
||||
var resource = Application.Current.TryFindResource("ThemeBlurEnabled");
|
||||
|
||||
return resource is bool b && b;
|
||||
return dict.Contains("ThemeBlurEnabled") && dict["ThemeBlurEnabled"] is bool enabled && enabled;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
|||
30
Flow.Launcher.Core/Resource/ThemeHelper.cs
Normal file
30
Flow.Launcher.Core/Resource/ThemeHelper.cs
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
using System.Linq;
|
||||
using System.Windows;
|
||||
using System.Windows.Media;
|
||||
|
||||
namespace Flow.Launcher.Core.Resource;
|
||||
|
||||
public static class ThemeHelper
|
||||
{
|
||||
public static void CopyStyle(Style originalStyle, Style targetStyle)
|
||||
{
|
||||
// If the style is based on another style, copy the base style first
|
||||
if (originalStyle.BasedOn != null)
|
||||
{
|
||||
CopyStyle(originalStyle.BasedOn, targetStyle);
|
||||
}
|
||||
|
||||
// Copy the setters from the original style
|
||||
foreach (var setter in originalStyle.Setters.OfType<Setter>())
|
||||
{
|
||||
targetStyle.Setters.Add(new Setter(setter.Property, setter.Value));
|
||||
}
|
||||
}
|
||||
|
||||
public static SolidColorBrush GetFrozenSolidColorBrush(Color color)
|
||||
{
|
||||
var brush = new SolidColorBrush(color);
|
||||
brush.Freeze();
|
||||
return brush;
|
||||
}
|
||||
}
|
||||
|
|
@ -41,8 +41,8 @@ namespace Flow.Launcher.Core
|
|||
try
|
||||
{
|
||||
if (!silentUpdate)
|
||||
_api.ShowMsg(_api.GetTranslation("pleaseWait"),
|
||||
_api.GetTranslation("update_flowlauncher_update_check"));
|
||||
_api.ShowMsg(Localize.pleaseWait(),
|
||||
Localize.update_flowlauncher_update_check());
|
||||
|
||||
using var updateManager = await GitHubUpdateManagerAsync(GitHubRepository).ConfigureAwait(false);
|
||||
|
||||
|
|
@ -58,13 +58,13 @@ namespace Flow.Launcher.Core
|
|||
if (newReleaseVersion <= currentVersion)
|
||||
{
|
||||
if (!silentUpdate)
|
||||
_api.ShowMsgBox(_api.GetTranslation("update_flowlauncher_already_on_latest"));
|
||||
_api.ShowMsgBox(Localize.update_flowlauncher_already_on_latest());
|
||||
return;
|
||||
}
|
||||
|
||||
if (!silentUpdate)
|
||||
_api.ShowMsg(_api.GetTranslation("update_flowlauncher_update_found"),
|
||||
_api.GetTranslation("update_flowlauncher_updating"));
|
||||
_api.ShowMsg(Localize.update_flowlauncher_update_found(),
|
||||
Localize.update_flowlauncher_updating());
|
||||
|
||||
await updateManager.DownloadReleases(newUpdateInfo.ReleasesToApply).ConfigureAwait(false);
|
||||
|
||||
|
|
@ -77,10 +77,7 @@ namespace Flow.Launcher.Core
|
|||
FilesFolders.CopyAll(DataLocation.PortableDataPath, targetDestination, (s) => _api.ShowMsgBox(s));
|
||||
if (!FilesFolders.VerifyBothFolderFilesEqual(DataLocation.PortableDataPath, targetDestination,
|
||||
(s) => _api.ShowMsgBox(s)))
|
||||
_api.ShowMsgBox(string.Format(
|
||||
_api.GetTranslation("update_flowlauncher_fail_moving_portable_user_profile_data"),
|
||||
DataLocation.PortableDataPath,
|
||||
targetDestination));
|
||||
_api.ShowMsgBox(Localize.update_flowlauncher_fail_moving_portable_user_profile_data(DataLocation.PortableDataPath, targetDestination));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -91,7 +88,7 @@ namespace Flow.Launcher.Core
|
|||
|
||||
_api.LogInfo(ClassName, $"Update success:{newVersionTips}");
|
||||
|
||||
if (_api.ShowMsgBox(newVersionTips, _api.GetTranslation("update_flowlauncher_new_update"),
|
||||
if (_api.ShowMsgBox(newVersionTips, Localize.update_flowlauncher_new_update(),
|
||||
MessageBoxButton.YesNo) == MessageBoxResult.Yes)
|
||||
{
|
||||
UpdateManager.RestartApp(Constant.ApplicationFileName);
|
||||
|
|
@ -111,8 +108,8 @@ namespace Flow.Launcher.Core
|
|||
}
|
||||
|
||||
if (!silentUpdate)
|
||||
_api.ShowMsgError(_api.GetTranslation("update_flowlauncher_fail"),
|
||||
_api.GetTranslation("update_flowlauncher_check_connection"));
|
||||
_api.ShowMsgError(Localize.update_flowlauncher_fail(),
|
||||
Localize.update_flowlauncher_check_connection());
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
|
@ -150,9 +147,9 @@ namespace Flow.Launcher.Core
|
|||
return manager;
|
||||
}
|
||||
|
||||
private string NewVersionTips(string version)
|
||||
private static string NewVersionTips(string version)
|
||||
{
|
||||
var tips = string.Format(_api.GetTranslation("newVersionTips"), version);
|
||||
var tips = Localize.newVersionTips(version);
|
||||
|
||||
return tips;
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -13,6 +13,7 @@ using NHotkey;
|
|||
using Windows.Win32;
|
||||
using Windows.Win32.Foundation;
|
||||
using Windows.Win32.UI.Accessibility;
|
||||
using System.Collections.Concurrent;
|
||||
|
||||
namespace Flow.Launcher.Infrastructure.DialogJump
|
||||
{
|
||||
|
|
@ -58,21 +59,17 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
|
||||
private static readonly Settings _settings = Ioc.Default.GetRequiredService<Settings>();
|
||||
|
||||
// We should not initialize API in static constructor because it will create another API instance
|
||||
private static IPublicAPI api = null;
|
||||
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
|
||||
private static HWND _mainWindowHandle = HWND.Null;
|
||||
|
||||
private static readonly Dictionary<DialogJumpExplorerPair, IDialogJumpExplorerWindow> _dialogJumpExplorers = new();
|
||||
private static readonly ConcurrentDictionary<DialogJumpExplorerPair, IDialogJumpExplorerWindow> _dialogJumpExplorers = new();
|
||||
|
||||
private static DialogJumpExplorerPair _lastExplorer = null;
|
||||
private static readonly object _lastExplorerLock = new();
|
||||
private static readonly Lock _lastExplorerLock = new();
|
||||
|
||||
private static readonly Dictionary<DialogJumpDialogPair, IDialogJumpDialogWindow> _dialogJumpDialogs = new();
|
||||
private static readonly ConcurrentDictionary<DialogJumpDialogPair, IDialogJumpDialogWindow> _dialogJumpDialogs = new();
|
||||
|
||||
private static IDialogJumpDialogWindow _dialogWindow = null;
|
||||
private static readonly object _dialogWindowLock = new();
|
||||
private static readonly Lock _dialogWindowLock = new();
|
||||
|
||||
private static HWINEVENTHOOK _foregroundChangeHook = HWINEVENTHOOK.Null;
|
||||
private static HWINEVENTHOOK _locationChangeHook = HWINEVENTHOOK.Null;
|
||||
|
|
@ -89,8 +86,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
private static DispatcherTimer _dragMoveTimer = null;
|
||||
|
||||
// A list of all file dialog windows that are auto switched already
|
||||
private static readonly List<HWND> _autoSwitchedDialogs = new();
|
||||
private static readonly object _autoSwitchedDialogsLock = new();
|
||||
private static readonly List<HWND> _autoSwitchedDialogs = [];
|
||||
private static readonly Lock _autoSwitchedDialogsLock = new();
|
||||
|
||||
private static HWINEVENTHOOK _moveSizeHook = HWINEVENTHOOK.Null;
|
||||
private static readonly WINEVENTPROC _moveProc = MoveSizeCallBack;
|
||||
|
|
@ -105,22 +102,13 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
|
||||
#region Initialize & Setup
|
||||
|
||||
public static void InitializeDialogJump(IList<DialogJumpExplorerPair> dialogJumpExplorers,
|
||||
IList<DialogJumpDialogPair> dialogJumpDialogs)
|
||||
public static void InitializeDialogJump()
|
||||
{
|
||||
if (_initialized) return;
|
||||
|
||||
// Initialize Dialog Jump explorers & dialogs
|
||||
_dialogJumpExplorers.Add(WindowsDialogJumpExplorer, null);
|
||||
foreach (var explorer in dialogJumpExplorers)
|
||||
{
|
||||
_dialogJumpExplorers.Add(explorer, null);
|
||||
}
|
||||
_dialogJumpDialogs.Add(WindowsDialogJumpDialog, null);
|
||||
foreach (var dialog in dialogJumpDialogs)
|
||||
{
|
||||
_dialogJumpDialogs.Add(dialog, null);
|
||||
}
|
||||
// Initialize preinstalled Dialog Jump explorers & dialogs
|
||||
_dialogJumpExplorers.TryAdd(WindowsDialogJumpExplorer, null);
|
||||
_dialogJumpDialogs.TryAdd(WindowsDialogJumpDialog, null);
|
||||
|
||||
// Initialize main window handle
|
||||
_mainWindowHandle = Win32Helper.GetMainWindowHandle();
|
||||
|
|
@ -135,6 +123,29 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
_initialized = true;
|
||||
}
|
||||
|
||||
public static void InitializeDialogJumpPlugin(PluginPair pair)
|
||||
{
|
||||
// Add Dialog Jump explorers & dialogs
|
||||
if (pair.Plugin is IDialogJumpExplorer explorer)
|
||||
{
|
||||
var dialogJumpExplorer = new DialogJumpExplorerPair
|
||||
{
|
||||
Plugin = explorer,
|
||||
Metadata = pair.Metadata
|
||||
};
|
||||
_dialogJumpExplorers.TryAdd(dialogJumpExplorer, null);
|
||||
}
|
||||
if (pair.Plugin is IDialogJumpDialog dialog)
|
||||
{
|
||||
var dialogJumpDialog = new DialogJumpDialogPair
|
||||
{
|
||||
Plugin = dialog,
|
||||
Metadata = pair.Metadata
|
||||
};
|
||||
_dialogJumpDialogs.TryAdd(dialogJumpDialog, null);
|
||||
}
|
||||
}
|
||||
|
||||
public static void SetupDialogJump(bool enabled)
|
||||
{
|
||||
if (enabled == _enabled) return;
|
||||
|
|
@ -315,7 +326,7 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
{
|
||||
foreach (var explorer in _dialogJumpExplorers.Keys)
|
||||
{
|
||||
if (API.PluginModified(explorer.Metadata.ID) || // Plugin is modified
|
||||
if (PublicApi.Instance.PluginModified(explorer.Metadata.ID) || // Plugin is modified
|
||||
explorer.Metadata.Disabled) continue; // Plugin is disabled
|
||||
|
||||
var explorerWindow = explorer.Plugin.CheckExplorerWindow(hWnd);
|
||||
|
|
@ -485,6 +496,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
uint dwmsEventTime
|
||||
)
|
||||
{
|
||||
if (hwnd.IsNull) return;
|
||||
|
||||
await _foregroundChangeLock.WaitAsync();
|
||||
try
|
||||
{
|
||||
|
|
@ -493,7 +506,7 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
var dialogWindowChanged = false;
|
||||
foreach (var dialog in _dialogJumpDialogs.Keys)
|
||||
{
|
||||
if (API.PluginModified(dialog.Metadata.ID) || // Plugin is modified
|
||||
if (PublicApi.Instance.PluginModified(dialog.Metadata.ID) || // Plugin is modified
|
||||
dialog.Metadata.Disabled) continue; // Plugin is disabled
|
||||
|
||||
IDialogJumpDialogWindow dialogWindow;
|
||||
|
|
@ -596,7 +609,7 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
{
|
||||
foreach (var explorer in _dialogJumpExplorers.Keys)
|
||||
{
|
||||
if (API.PluginModified(explorer.Metadata.ID) || // Plugin is modified
|
||||
if (PublicApi.Instance.PluginModified(explorer.Metadata.ID) || // Plugin is modified
|
||||
explorer.Metadata.Disabled) continue; // Plugin is disabled
|
||||
|
||||
var explorerWindow = explorer.Plugin.CheckExplorerWindow(hwnd);
|
||||
|
|
@ -636,6 +649,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
uint dwmsEventTime
|
||||
)
|
||||
{
|
||||
if (hwnd.IsNull) return;
|
||||
|
||||
// If the dialog window is moved, update the Dialog Jump window position
|
||||
var dialogWindowExist = false;
|
||||
lock (_dialogWindowLock)
|
||||
|
|
@ -661,6 +676,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
uint dwmsEventTime
|
||||
)
|
||||
{
|
||||
if (hwnd.IsNull) return;
|
||||
|
||||
// If the dialog window is moved or resized, update the Dialog Jump window position
|
||||
if (_dragMoveTimer != null)
|
||||
{
|
||||
|
|
@ -686,6 +703,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
uint dwmsEventTime
|
||||
)
|
||||
{
|
||||
if (hwnd.IsNull) return;
|
||||
|
||||
// If the dialog window is destroyed, set _dialogWindowHandle to null
|
||||
var dialogWindowExist = false;
|
||||
lock (_dialogWindowLock)
|
||||
|
|
@ -717,6 +736,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
uint dwmsEventTime
|
||||
)
|
||||
{
|
||||
if (hwnd.IsNull) return;
|
||||
|
||||
// If the dialog window is hidden, set _dialogWindowHandle to null
|
||||
var dialogWindowExist = false;
|
||||
lock (_dialogWindowLock)
|
||||
|
|
@ -748,6 +769,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
uint dwmsEventTime
|
||||
)
|
||||
{
|
||||
if (hwnd.IsNull) return;
|
||||
|
||||
// If the dialog window is ended, set _dialogWindowHandle to null
|
||||
var dialogWindowExist = false;
|
||||
lock (_dialogWindowLock)
|
||||
|
|
@ -832,9 +855,25 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
return true;
|
||||
}
|
||||
// file: URI paths
|
||||
var localPath = path.StartsWith("file:", StringComparison.OrdinalIgnoreCase)
|
||||
? new Uri(path).LocalPath
|
||||
: path;
|
||||
string localPath;
|
||||
if (path.StartsWith("file:", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
// Try to create a URI from the path
|
||||
if (Uri.TryCreate(path, UriKind.Absolute, out var uri))
|
||||
{
|
||||
localPath = uri.LocalPath;
|
||||
}
|
||||
else
|
||||
{
|
||||
// If URI creation fails, treat it as a regular path
|
||||
// by removing the "file:" prefix
|
||||
localPath = path.Substring(5);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
localPath = path;
|
||||
}
|
||||
// Is folder?
|
||||
var isFolder = Directory.Exists(localPath);
|
||||
// Is file?
|
||||
|
|
@ -871,7 +910,7 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
// Then check all dialog windows
|
||||
foreach (var dialog in _dialogJumpDialogs.Keys)
|
||||
{
|
||||
if (API.PluginModified(dialog.Metadata.ID) || // Plugin is modified
|
||||
if (PublicApi.Instance.PluginModified(dialog.Metadata.ID) || // Plugin is modified
|
||||
dialog.Metadata.Disabled) continue; // Plugin is disabled
|
||||
|
||||
var dialogWindow = _dialogJumpDialogs[dialog];
|
||||
|
|
@ -884,7 +923,7 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
// Finally search for the dialog window again
|
||||
foreach (var dialog in _dialogJumpDialogs.Keys)
|
||||
{
|
||||
if (API.PluginModified(dialog.Metadata.ID) || // Plugin is modified
|
||||
if (PublicApi.Instance.PluginModified(dialog.Metadata.ID) || // Plugin is modified
|
||||
dialog.Metadata.Disabled) continue; // Plugin is disabled
|
||||
|
||||
IDialogJumpDialogWindow dialogWindow;
|
||||
|
|
@ -1067,11 +1106,8 @@ namespace Flow.Launcher.Infrastructure.DialogJump
|
|||
_navigationLock.Dispose();
|
||||
|
||||
// Stop drag move timer
|
||||
if (_dragMoveTimer != null)
|
||||
{
|
||||
_dragMoveTimer.Stop();
|
||||
_dragMoveTimer = null;
|
||||
}
|
||||
_dragMoveTimer?.Stop();
|
||||
_dragMoveTimer = null;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
|||
|
|
@ -1,8 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using Windows.Win32;
|
||||
|
||||
namespace Flow.Launcher.Infrastructure
|
||||
{
|
||||
|
|
@ -13,9 +9,10 @@ namespace Flow.Launcher.Infrastructure
|
|||
/// </summary>
|
||||
public static string GetActiveExplorerPath()
|
||||
{
|
||||
var explorerWindow = GetActiveExplorer();
|
||||
string locationUrl = explorerWindow?.LocationURL;
|
||||
return !string.IsNullOrEmpty(locationUrl) ? GetDirectoryPath(new Uri(locationUrl).LocalPath) : null;
|
||||
var explorerPath = DialogJump.DialogJump.GetActiveExplorerPath();
|
||||
return !string.IsNullOrEmpty(explorerPath) ?
|
||||
GetDirectoryPath(new Uri(explorerPath).LocalPath) :
|
||||
null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -23,74 +20,12 @@ namespace Flow.Launcher.Infrastructure
|
|||
/// </summary>
|
||||
private static string GetDirectoryPath(string path)
|
||||
{
|
||||
if (!path.EndsWith("\\"))
|
||||
if (!path.EndsWith('\\'))
|
||||
{
|
||||
return path + "\\";
|
||||
}
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the file explorer that is currently in the foreground
|
||||
/// </summary>
|
||||
private static dynamic GetActiveExplorer()
|
||||
{
|
||||
Type type = Type.GetTypeFromProgID("Shell.Application");
|
||||
if (type == null) return null;
|
||||
dynamic shell = Activator.CreateInstance(type);
|
||||
if (shell == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
var explorerWindows = new List<dynamic>();
|
||||
var openWindows = shell.Windows();
|
||||
for (int i = 0; i < openWindows.Count; i++)
|
||||
{
|
||||
var window = openWindows.Item(i);
|
||||
if (window == null) continue;
|
||||
|
||||
// find the desired window and make sure that it is indeed a file explorer
|
||||
// we don't want the Internet Explorer or the classic control panel
|
||||
// ToLower() is needed, because Windows can report the path as "C:\\Windows\\Explorer.EXE"
|
||||
if (Path.GetFileName((string)window.FullName)?.ToLower() == "explorer.exe")
|
||||
{
|
||||
explorerWindows.Add(window);
|
||||
}
|
||||
}
|
||||
|
||||
if (explorerWindows.Count == 0) return null;
|
||||
|
||||
var zOrders = GetZOrder(explorerWindows);
|
||||
|
||||
return explorerWindows.Zip(zOrders).MinBy(x => x.Second).First;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the z-order for one or more windows atomically with respect to each other. In Windows, smaller z-order is higher. If the window is not top level, the z order is returned as -1.
|
||||
/// </summary>
|
||||
private static IEnumerable<int> GetZOrder(List<dynamic> hWnds)
|
||||
{
|
||||
var z = new int[hWnds.Count];
|
||||
for (var i = 0; i < hWnds.Count; i++) z[i] = -1;
|
||||
|
||||
var index = 0;
|
||||
var numRemaining = hWnds.Count;
|
||||
PInvoke.EnumWindows((wnd, _) =>
|
||||
{
|
||||
var searchIndex = hWnds.FindIndex(x => new IntPtr(x.HWND) == wnd);
|
||||
if (searchIndex != -1)
|
||||
{
|
||||
z[searchIndex] = index;
|
||||
numRemaining--;
|
||||
if (numRemaining == 0) return false;
|
||||
}
|
||||
index++;
|
||||
return true;
|
||||
}, IntPtr.Zero);
|
||||
|
||||
return z;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
<NoWarn>$(NoWarn);FLSG0007</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
@ -56,28 +57,41 @@
|
|||
<PackageReference Include="Ben.Demystifier" Version="0.4.1" />
|
||||
<PackageReference Include="BitFaster.Caching" Version="2.5.4" />
|
||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
|
||||
<PackageReference Include="Fody" Version="6.9.2">
|
||||
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
||||
<PackageReference Include="Fody" Version="6.9.3">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="ini-parser" Version="2.5.2" />
|
||||
<PackageReference Include="InputSimulator" Version="1.0.4" />
|
||||
<PackageReference Include="MemoryPack" Version="1.21.4" />
|
||||
<PackageReference Include="Microsoft.VisualStudio.Threading" Version="17.14.15" />
|
||||
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.3.183">
|
||||
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.3.205">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="NHotkey.Wpf" Version="3.0.0" />
|
||||
<PackageReference Include="NLog" Version="6.0.1" />
|
||||
<PackageReference Include="NLog.OutputDebugString" Version="6.0.1" />
|
||||
<PackageReference Include="NLog" Version="6.0.4" />
|
||||
<PackageReference Include="NLog.OutputDebugString" Version="6.0.4" />
|
||||
<PackageReference Include="PropertyChanged.Fody" Version="4.1.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="SharpVectors.Wpf" Version="1.8.4.2" />
|
||||
<PackageReference Include="SharpVectors.Wpf" Version="1.8.5" />
|
||||
<!-- Do not upgrade this to higher version since it can cause this issue on WinForm platform: -->
|
||||
<!-- PlatformNotSupportedException: SystemEvents is not supported on this platform. -->
|
||||
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
|
||||
<PackageReference Include="ToolGood.Words.Pinyin" Version="3.1.0.3" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<FLLUseDependencyInjection>true</FLLUseDependencyInjection>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<AdditionalFiles Remove="Languages\en.xaml" />
|
||||
<AdditionalFiles Include="..\Flow.Launcher\Languages\en.xaml">
|
||||
<Link>Languages\en.xaml</Link>
|
||||
</AdditionalFiles>
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
|
@ -4,10 +4,8 @@ using System.Net;
|
|||
using System.Net.Http;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.Infrastructure.Logger;
|
||||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
using Flow.Launcher.Plugin;
|
||||
using JetBrains.Annotations;
|
||||
|
||||
namespace Flow.Launcher.Infrastructure.Http
|
||||
|
|
@ -20,10 +18,6 @@ namespace Flow.Launcher.Infrastructure.Http
|
|||
|
||||
private static readonly HttpClient client = new();
|
||||
|
||||
// We should not initialize API in static constructor because it will create another API instance
|
||||
private static IPublicAPI api = null;
|
||||
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
|
||||
static Http()
|
||||
{
|
||||
// need to be added so it would work on a win10 machine
|
||||
|
|
@ -82,7 +76,7 @@ namespace Flow.Launcher.Infrastructure.Http
|
|||
}
|
||||
catch (UriFormatException e)
|
||||
{
|
||||
API.ShowMsgError(API.GetTranslation("pleaseTryAgain"), API.GetTranslation("parseProxyFailed"));
|
||||
PublicApi.Instance.ShowMsgError(Localize.pleaseTryAgain(), Localize.parseProxyFailed());
|
||||
Log.Exception(ClassName, "Unable to parse Uri", e);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace Flow.Launcher.Infrastructure.Image
|
|||
private static Lock storageLock { get; } = new();
|
||||
private static BinaryStorage<List<(string, bool)>> _storage;
|
||||
private static readonly ConcurrentDictionary<string, string> GuidToKey = new();
|
||||
private static IImageHashGenerator _hashGenerator;
|
||||
private static ImageHashGenerator _hashGenerator;
|
||||
private static readonly bool EnableImageHash = true;
|
||||
public static ImageSource Image => ImageCache[Constant.ImageIcon, false];
|
||||
public static ImageSource MissingImage => ImageCache[Constant.MissingImgIcon, false];
|
||||
|
|
@ -31,7 +31,7 @@ namespace Flow.Launcher.Infrastructure.Image
|
|||
public const int FullIconSize = 256;
|
||||
public const int FullImageSize = 320;
|
||||
|
||||
private static readonly string[] ImageExtensions = { ".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".ico" };
|
||||
private static readonly string[] ImageExtensions = [".png", ".jpg", ".jpeg", ".gif", ".bmp", ".tiff", ".ico"];
|
||||
private static readonly string SvgExtension = ".svg";
|
||||
|
||||
public static async Task InitializeAsync()
|
||||
|
|
@ -327,7 +327,7 @@ namespace Flow.Launcher.Infrastructure.Image
|
|||
return img;
|
||||
}
|
||||
|
||||
private static ImageSource LoadFullImage(string path)
|
||||
private static BitmapImage LoadFullImage(string path)
|
||||
{
|
||||
BitmapImage image = new BitmapImage();
|
||||
image.BeginInit();
|
||||
|
|
@ -364,7 +364,7 @@ namespace Flow.Launcher.Infrastructure.Image
|
|||
return image;
|
||||
}
|
||||
|
||||
private static ImageSource LoadSvgImage(string path, bool loadFullImage = false)
|
||||
private static RenderTargetBitmap LoadSvgImage(string path, bool loadFullImage = false)
|
||||
{
|
||||
// Set up drawing settings
|
||||
var desiredHeight = loadFullImage ? FullImageSize : SmallIconSize;
|
||||
|
|
|
|||
|
|
@ -1,13 +1,14 @@
|
|||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.IO;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows;
|
||||
using System.Windows.Interop;
|
||||
using System.Windows.Media.Imaging;
|
||||
using IniParser;
|
||||
using Windows.Win32;
|
||||
using Windows.Win32.Foundation;
|
||||
using Windows.Win32.UI.Shell;
|
||||
using Windows.Win32.Graphics.Gdi;
|
||||
using Windows.Win32.UI.Shell;
|
||||
|
||||
namespace Flow.Launcher.Infrastructure.Image
|
||||
{
|
||||
|
|
@ -35,9 +36,32 @@ namespace Flow.Launcher.Infrastructure.Image
|
|||
|
||||
private static readonly HRESULT S_PATHNOTFOUND = (HRESULT)0x8004B205;
|
||||
|
||||
private const string UrlExtension = ".url";
|
||||
|
||||
/// <summary>
|
||||
/// Obtains a BitmapSource thumbnail for the specified file.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If the file is a Windows URL shortcut (".url"), the method attempts to resolve the shortcut's icon and use that for the thumbnail; otherwise it requests a thumbnail for the file path. The native HBITMAP used to create the BitmapSource is always released to avoid native memory leaks.
|
||||
/// </remarks>
|
||||
/// <param name="fileName">Path to the file (can be a regular file or a ".url" shortcut).</param>
|
||||
/// <param name="width">Requested thumbnail width in pixels.</param>
|
||||
/// <param name="height">Requested thumbnail height in pixels.</param>
|
||||
/// <param name="options">Thumbnail extraction options (flags) controlling fallback and caching behavior.</param>
|
||||
/// <returns>A BitmapSource representing the requested thumbnail.</returns>
|
||||
public static BitmapSource GetThumbnail(string fileName, int width, int height, ThumbnailOptions options)
|
||||
{
|
||||
HBITMAP hBitmap = GetHBitmap(Path.GetFullPath(fileName), width, height, options);
|
||||
HBITMAP hBitmap;
|
||||
|
||||
var extension = Path.GetExtension(fileName);
|
||||
if (string.Equals(extension, UrlExtension, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
hBitmap = GetHBitmapForUrlFile(fileName, width, height, options);
|
||||
}
|
||||
else
|
||||
{
|
||||
hBitmap = GetHBitmap(Path.GetFullPath(fileName), width, height, options);
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
|
|
@ -50,6 +74,21 @@ namespace Flow.Launcher.Infrastructure.Image
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Obtains a native HBITMAP for the specified file at the requested size using the Windows Shell image factory.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// If <paramref name="options"/> is <see cref="ThumbnailOptions.ThumbnailOnly"/> and thumbnail extraction fails
|
||||
/// due to extraction errors or a missing path, the method falls back to requesting an icon (<see cref="ThumbnailOptions.IconOnly"/>).
|
||||
/// The returned HBITMAP is a raw GDI handle; the caller is responsible for releasing it (e.g., via DeleteObject) to avoid native memory leaks.
|
||||
/// </remarks>
|
||||
/// <param name="fileName">Path to the file to thumbnail.</param>
|
||||
/// <param name="width">Requested thumbnail width in pixels.</param>
|
||||
/// <param name="height">Requested thumbnail height in pixels.</param>
|
||||
/// <param name="options">Thumbnail request flags that control behavior (e.g., ThumbnailOnly, IconOnly).</param>
|
||||
/// <returns>An HBITMAP handle containing the image. Caller must free the handle when finished.</returns>
|
||||
/// <exception cref="COMException">If creating the shell item fails (HRESULT returned by SHCreateItemFromParsingName).</exception>
|
||||
/// <exception cref="InvalidOperationException">If the shell item does not expose IShellItemImageFactory or if an unexpected error occurs while obtaining the image.</exception>
|
||||
private static unsafe HBITMAP GetHBitmap(string fileName, int width, int height, ThumbnailOptions options)
|
||||
{
|
||||
var retCode = PInvoke.SHCreateItemFromParsingName(
|
||||
|
|
@ -108,5 +147,44 @@ namespace Flow.Launcher.Infrastructure.Image
|
|||
|
||||
return hBitmap;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Obtains an HBITMAP for a Windows .url shortcut by resolving its IconFile entry and delegating to GetHBitmap.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// The method parses the .url file as an INI, looks in the "InternetShortcut" section for the "IconFile" entry,
|
||||
/// and requests a bitmap for that icon path. If no IconFile is present or any error occurs while reading or
|
||||
/// resolving the icon, it falls back to requesting a thumbnail for the .url file itself.
|
||||
/// </remarks>
|
||||
/// <param name="fileName">Path to the .url shortcut file.</param>
|
||||
/// <param name="width">Requested thumbnail width (pixels).</param>
|
||||
/// <param name="height">Requested thumbnail height (pixels).</param>
|
||||
/// <param name="options">ThumbnailOptions flags controlling extraction behavior.</param>
|
||||
/// <returns>An HBITMAP containing the requested image; callers are responsible for freeing the native handle.</returns>
|
||||
private static unsafe HBITMAP GetHBitmapForUrlFile(string fileName, int width, int height, ThumbnailOptions options)
|
||||
{
|
||||
HBITMAP hBitmap;
|
||||
|
||||
try
|
||||
{
|
||||
var parser = new FileIniDataParser();
|
||||
var data = parser.ReadFile(fileName);
|
||||
var urlSection = data["InternetShortcut"];
|
||||
|
||||
var iconPath = urlSection?["IconFile"];
|
||||
if (!File.Exists(iconPath))
|
||||
{
|
||||
// If the IconFile is missing, throw exception to fallback to the default icon
|
||||
throw new FileNotFoundException("Icon file not specified in Internet shortcut (.url) file.");
|
||||
}
|
||||
hBitmap = GetHBitmap(Path.GetFullPath(iconPath), width, height, options);
|
||||
}
|
||||
catch
|
||||
{
|
||||
hBitmap = GetHBitmap(Path.GetFullPath(fileName), width, height, options);
|
||||
}
|
||||
|
||||
return hBitmap;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ namespace Flow.Launcher.Infrastructure.Logger
|
|||
|
||||
var fileTarget = new FileTarget
|
||||
{
|
||||
FileName = CurrentLogDirectory.Replace(@"\", "/") + "/${shortdate}.txt",
|
||||
FileName = CurrentLogDirectory.Replace(@"\", "/") + "/Flow.Launcher.${date:format=yyyy-MM-dd}.log",
|
||||
Layout = layout
|
||||
};
|
||||
|
||||
|
|
@ -65,26 +65,22 @@ namespace Flow.Launcher.Infrastructure.Logger
|
|||
|
||||
public static void SetLogLevel(LOGLEVEL level)
|
||||
{
|
||||
switch (level)
|
||||
var rule = LogManager.Configuration.FindRuleByName("file");
|
||||
|
||||
var nlogLevel = level switch
|
||||
{
|
||||
case LOGLEVEL.DEBUG:
|
||||
UseDebugLogLevel();
|
||||
break;
|
||||
default:
|
||||
UseInfoLogLevel();
|
||||
break;
|
||||
}
|
||||
Info(nameof(Logger), $"Using log level: {level}.");
|
||||
}
|
||||
LOGLEVEL.NONE => LogLevel.Off,
|
||||
LOGLEVEL.ERROR => LogLevel.Error,
|
||||
LOGLEVEL.DEBUG => LogLevel.Debug,
|
||||
_ => LogLevel.Info
|
||||
};
|
||||
|
||||
private static void UseDebugLogLevel()
|
||||
{
|
||||
LogManager.Configuration.FindRuleByName("file").SetLoggingLevels(LogLevel.Debug, LogLevel.Fatal);
|
||||
}
|
||||
rule.SetLoggingLevels(nlogLevel, LogLevel.Fatal);
|
||||
|
||||
private static void UseInfoLogLevel()
|
||||
{
|
||||
LogManager.Configuration.FindRuleByName("file").SetLoggingLevels(LogLevel.Info, LogLevel.Fatal);
|
||||
LogManager.ReconfigExistingLoggers();
|
||||
|
||||
// We can't log Info when level is set to Error or None, so we use Debug
|
||||
Debug(nameof(Logger), $"Using log level: {level}.");
|
||||
}
|
||||
|
||||
private static void LogFaultyFormat(string message)
|
||||
|
|
@ -169,7 +165,9 @@ namespace Flow.Launcher.Infrastructure.Logger
|
|||
|
||||
public enum LOGLEVEL
|
||||
{
|
||||
DEBUG,
|
||||
INFO
|
||||
NONE,
|
||||
ERROR,
|
||||
INFO,
|
||||
DEBUG
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,5 +85,12 @@ QueryFullProcessImageName
|
|||
EVENT_OBJECT_HIDE
|
||||
EVENT_SYSTEM_DIALOGEND
|
||||
|
||||
DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS
|
||||
WM_POWERBROADCAST
|
||||
PBT_APMRESUMEAUTOMATIC
|
||||
PBT_APMRESUMEAUTOMATIC
|
||||
PBT_APMRESUMESUSPEND
|
||||
PowerRegisterSuspendResumeNotification
|
||||
PowerUnregisterSuspendResumeNotification
|
||||
DeviceNotifyCallbackRoutine
|
||||
|
||||
MonitorFromWindow
|
||||
|
|
@ -27,7 +27,7 @@ namespace Flow.Launcher.Infrastructure
|
|||
{
|
||||
switch (e.PropertyName)
|
||||
{
|
||||
case nameof (Settings.ShouldUsePinyin):
|
||||
case nameof(Settings.ShouldUsePinyin):
|
||||
if (_settings.ShouldUsePinyin)
|
||||
{
|
||||
Reload();
|
||||
|
|
@ -52,7 +52,7 @@ namespace Flow.Launcher.Infrastructure
|
|||
|
||||
private void CreateDoublePinyinTableFromStream(Stream jsonStream)
|
||||
{
|
||||
var table = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, string>>>(jsonStream) ??
|
||||
var table = JsonSerializer.Deserialize<Dictionary<string, Dictionary<string, string>>>(jsonStream) ??
|
||||
throw new InvalidOperationException("Failed to deserialize double pinyin table: result is null");
|
||||
|
||||
var schemaKey = _settings.DoublePinyinSchema.ToString();
|
||||
|
|
@ -128,12 +128,12 @@ namespace Flow.Launcher.Infrastructure
|
|||
if (IsChineseCharacter(content[i]))
|
||||
{
|
||||
var translated = _settings.UseDoublePinyin ? ToDoublePinyin(resultList[i]) : resultList[i];
|
||||
|
||||
if (i > 0)
|
||||
|
||||
if (i > 0 && content[i - 1] != ' ')
|
||||
{
|
||||
resultBuilder.Append(' ');
|
||||
}
|
||||
|
||||
|
||||
map.AddNewIndex(resultBuilder.Length, translated.Length);
|
||||
resultBuilder.Append(translated);
|
||||
previousIsChinese = true;
|
||||
|
|
@ -144,11 +144,14 @@ namespace Flow.Launcher.Infrastructure
|
|||
if (previousIsChinese)
|
||||
{
|
||||
previousIsChinese = false;
|
||||
resultBuilder.Append(' ');
|
||||
if (content[i] != ' ')
|
||||
{
|
||||
resultBuilder.Append(' ');
|
||||
}
|
||||
}
|
||||
|
||||
map.AddNewIndex(resultBuilder.Length, resultList[i].Length);
|
||||
resultBuilder.Append(resultList[i]);
|
||||
|
||||
map.AddNewIndex(resultBuilder.Length, 1);
|
||||
resultBuilder.Append(content[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -156,7 +159,7 @@ namespace Flow.Launcher.Infrastructure
|
|||
|
||||
var translation = resultBuilder.ToString();
|
||||
var result = (translation, map);
|
||||
|
||||
|
||||
return _pinyinCache[content] = result;
|
||||
}
|
||||
|
||||
|
|
@ -185,8 +188,8 @@ namespace Flow.Launcher.Infrastructure
|
|||
|
||||
private string ToDoublePinyin(string fullPinyin)
|
||||
{
|
||||
return currentDoublePinyinTable.TryGetValue(fullPinyin, out var doublePinyinValue)
|
||||
? doublePinyinValue
|
||||
return currentDoublePinyinTable.TryGetValue(fullPinyin, out var doublePinyinValue)
|
||||
? doublePinyinValue
|
||||
: fullPinyin;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ namespace Flow.Launcher.Infrastructure
|
|||
public int MapToOriginalIndex(int translatedIndex)
|
||||
{
|
||||
var searchResult = _originalToTranslated.BinarySearch(translatedIndex);
|
||||
return searchResult >= 0 ? searchResult : ~searchResult;
|
||||
return searchResult >= 0 ? searchResult + 1 : ~searchResult;
|
||||
}
|
||||
|
||||
public void EndConstruct()
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
using System.Text.Json.Serialization;
|
||||
using Flow.Launcher.Plugin;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Flow.Launcher.Infrastructure.UserSettings
|
||||
{
|
||||
public class CustomBrowserViewModel : BaseModel
|
||||
{
|
||||
public string Name { get; set; }
|
||||
[JsonIgnore]
|
||||
public string DisplayName => Name == "Default" ? Localize.defaultBrowser_default() : Name;
|
||||
public string Path { get; set; }
|
||||
public string PrivateArg { get; set; }
|
||||
public bool EnablePrivate { get; set; }
|
||||
|
|
@ -26,8 +28,10 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
|||
Editable = Editable
|
||||
};
|
||||
}
|
||||
|
||||
public void OnDisplayNameChanged()
|
||||
{
|
||||
OnPropertyChanged(nameof(DisplayName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
using Flow.Launcher.Plugin;
|
||||
using System.Text.Json.Serialization;
|
||||
using Flow.Launcher.Plugin;
|
||||
|
||||
namespace Flow.Launcher.ViewModel
|
||||
namespace Flow.Launcher.Infrastructure.UserSettings
|
||||
{
|
||||
public class CustomExplorerViewModel : BaseModel
|
||||
{
|
||||
public string Name { get; set; }
|
||||
[JsonIgnore]
|
||||
public string DisplayName => Name == "Explorer" ? Localize.fileManagerExplorer() : Name;
|
||||
public string Path { get; set; }
|
||||
public string FileArgument { get; set; } = "\"%d\"";
|
||||
public string DirectoryArgument { get; set; } = "\"%d\"";
|
||||
|
|
@ -21,5 +24,10 @@ namespace Flow.Launcher.ViewModel
|
|||
Editable = Editable
|
||||
};
|
||||
}
|
||||
|
||||
public void OnDisplayNameChanged()
|
||||
{
|
||||
OnPropertyChanged(nameof(DisplayName));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
using System;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Threading.Tasks;
|
||||
using CommunityToolkit.Mvvm.DependencyInjection;
|
||||
using Flow.Launcher.Plugin;
|
||||
|
||||
namespace Flow.Launcher.Infrastructure.UserSettings
|
||||
{
|
||||
|
|
@ -55,11 +53,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
|||
{
|
||||
public string Description { get; set; }
|
||||
|
||||
public string LocalizedDescription => API.GetTranslation(Description);
|
||||
|
||||
// We should not initialize API in static constructor because it will create another API instance
|
||||
private static IPublicAPI api = null;
|
||||
private static IPublicAPI API => api ??= Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
public string LocalizedDescription => PublicApi.Instance.GetTranslation(Description);
|
||||
|
||||
public BaseBuiltinShortcutModel(string key, string description)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -7,8 +7,8 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
|||
{
|
||||
public const string PortableFolderName = "UserData";
|
||||
public const string DeletionIndicatorFile = ".dead";
|
||||
public static string PortableDataPath = Path.Combine(Constant.ProgramDirectory, PortableFolderName);
|
||||
public static string RoamingDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FlowLauncher");
|
||||
public static readonly string PortableDataPath = Path.Combine(Constant.ProgramDirectory, PortableFolderName);
|
||||
public static readonly string RoamingDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "FlowLauncher");
|
||||
public static string DataDirectory()
|
||||
{
|
||||
if (PortableDataLocationInUse())
|
||||
|
|
@ -19,7 +19,8 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
|||
|
||||
public static bool PortableDataLocationInUse()
|
||||
{
|
||||
if (Directory.Exists(PortableDataPath) && !File.Exists(DeletionIndicatorFile))
|
||||
if (Directory.Exists(PortableDataPath) &&
|
||||
!File.Exists(Path.Combine(PortableDataPath, DeletionIndicatorFile)))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
|
@ -39,6 +40,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
|||
public const string PythonEnvironmentName = "Python";
|
||||
public const string NodeEnvironmentName = "Node.js";
|
||||
public const string PluginEnvironments = "Environments";
|
||||
public const string PluginDeleteFile = "NeedDelete.txt";
|
||||
public static readonly string PluginEnvironmentsPath = Path.Combine(DataDirectory(), PluginEnvironments);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Collections.Generic;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Text.Json.Serialization;
|
||||
using System.Windows;
|
||||
|
|
@ -7,9 +7,9 @@ using CommunityToolkit.Mvvm.DependencyInjection;
|
|||
using Flow.Launcher.Infrastructure.Hotkey;
|
||||
using Flow.Launcher.Infrastructure.Logger;
|
||||
using Flow.Launcher.Infrastructure.Storage;
|
||||
using Flow.Launcher.Localization.Attributes;
|
||||
using Flow.Launcher.Plugin;
|
||||
using Flow.Launcher.Plugin.SharedModels;
|
||||
using Flow.Launcher.ViewModel;
|
||||
|
||||
namespace Flow.Launcher.Infrastructure.UserSettings
|
||||
{
|
||||
|
|
@ -481,6 +481,7 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
|||
}
|
||||
public bool LeaveCmdOpen { get; set; }
|
||||
public bool HideWhenDeactivated { get; set; } = true;
|
||||
public bool ShowTaskbarWhenInvoked { get; set; } = false;
|
||||
|
||||
private bool _showAtTopmost = false;
|
||||
public bool ShowAtTopmost
|
||||
|
|
@ -514,6 +515,21 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
|||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public LastQueryMode LastQueryMode { get; set; } = LastQueryMode.Selected;
|
||||
|
||||
private HistoryStyle _historyStyle = HistoryStyle.Query;
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public HistoryStyle HistoryStyle
|
||||
{
|
||||
get => _historyStyle;
|
||||
set
|
||||
{
|
||||
if (_historyStyle != value)
|
||||
{
|
||||
_historyStyle = value;
|
||||
OnPropertyChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[JsonConverter(typeof(JsonStringEnumConverter))]
|
||||
public AnimationSpeeds AnimationSpeed { get; set; } = AnimationSpeeds.Medium;
|
||||
public int CustomAnimationLength { get; set; } = 360;
|
||||
|
|
@ -696,4 +712,14 @@ namespace Flow.Launcher.Infrastructure.UserSettings
|
|||
FullPathOpen,
|
||||
Directory
|
||||
}
|
||||
|
||||
[EnumLocalize]
|
||||
public enum HistoryStyle
|
||||
{
|
||||
[EnumLocalizeKey(nameof(Localize.queryHistory))]
|
||||
Query,
|
||||
|
||||
[EnumLocalizeKey(nameof(Localize.executedHistory))]
|
||||
LastOpened
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
|
|
@ -19,6 +19,7 @@ using Microsoft.Win32.SafeHandles;
|
|||
using Windows.Win32;
|
||||
using Windows.Win32.Foundation;
|
||||
using Windows.Win32.Graphics.Dwm;
|
||||
using Windows.Win32.System.Power;
|
||||
using Windows.Win32.System.Threading;
|
||||
using Windows.Win32.UI.Input.KeyboardAndMouse;
|
||||
using Windows.Win32.UI.Shell.Common;
|
||||
|
|
@ -338,9 +339,6 @@ namespace Flow.Launcher.Infrastructure
|
|||
public const int SC_MAXIMIZE = (int)PInvoke.SC_MAXIMIZE;
|
||||
public const int SC_MINIMIZE = (int)PInvoke.SC_MINIMIZE;
|
||||
|
||||
public const int WM_POWERBROADCAST = (int)PInvoke.WM_POWERBROADCAST;
|
||||
public const int PBT_APMRESUMEAUTOMATIC = (int)PInvoke.PBT_APMRESUMEAUTOMATIC;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Window Handle
|
||||
|
|
@ -904,5 +902,146 @@ namespace Flow.Launcher.Infrastructure
|
|||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region File / Folder Dialog
|
||||
|
||||
public static string SelectFile()
|
||||
{
|
||||
var dlg = new OpenFileDialog();
|
||||
var result = dlg.ShowDialog();
|
||||
if (result == true)
|
||||
return dlg.FileName;
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Sleep Mode Listener
|
||||
|
||||
private static Action _func;
|
||||
private static PDEVICE_NOTIFY_CALLBACK_ROUTINE _callback = null;
|
||||
private static DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS _recipient;
|
||||
private static SafeHandle _recipientHandle;
|
||||
private static HPOWERNOTIFY _handle = HPOWERNOTIFY.Null;
|
||||
|
||||
/// <summary>
|
||||
/// Registers a listener for sleep mode events.
|
||||
/// Inspired from: https://github.com/XKaguya/LenovoLegionToolkit
|
||||
/// https://blog.csdn.net/mochounv/article/details/114668594
|
||||
/// </summary>
|
||||
/// <param name="func"></param>
|
||||
/// <exception cref="Win32Exception"></exception>
|
||||
public static unsafe void RegisterSleepModeListener(Action func)
|
||||
{
|
||||
if (_callback != null)
|
||||
{
|
||||
// Only register if not already registered
|
||||
return;
|
||||
}
|
||||
|
||||
_func = func;
|
||||
_callback = new PDEVICE_NOTIFY_CALLBACK_ROUTINE(DeviceNotifyCallback);
|
||||
_recipient = new DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS()
|
||||
{
|
||||
Callback = _callback,
|
||||
Context = null
|
||||
};
|
||||
|
||||
_recipientHandle = new StructSafeHandle<DEVICE_NOTIFY_SUBSCRIBE_PARAMETERS>(_recipient);
|
||||
_handle = PInvoke.PowerRegisterSuspendResumeNotification(
|
||||
REGISTER_NOTIFICATION_FLAGS.DEVICE_NOTIFY_CALLBACK,
|
||||
_recipientHandle,
|
||||
out var handle) == WIN32_ERROR.ERROR_SUCCESS ?
|
||||
new HPOWERNOTIFY(new IntPtr(handle)) :
|
||||
HPOWERNOTIFY.Null;
|
||||
if (_handle.IsNull)
|
||||
{
|
||||
throw new Win32Exception("Error registering for power notifications: " + Marshal.GetLastWin32Error());
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Unregisters the sleep mode listener.
|
||||
/// </summary>
|
||||
public static void UnregisterSleepModeListener()
|
||||
{
|
||||
if (!_handle.IsNull)
|
||||
{
|
||||
PInvoke.PowerUnregisterSuspendResumeNotification(_handle);
|
||||
_handle = HPOWERNOTIFY.Null;
|
||||
_func = null;
|
||||
_callback = null;
|
||||
_recipientHandle = null;
|
||||
}
|
||||
}
|
||||
|
||||
private static unsafe uint DeviceNotifyCallback(void* context, uint type, void* setting)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case PInvoke.PBT_APMRESUMEAUTOMATIC:
|
||||
// Operation is resuming automatically from a low-power state.This message is sent every time the system resumes
|
||||
_func?.Invoke();
|
||||
break;
|
||||
|
||||
case PInvoke.PBT_APMRESUMESUSPEND:
|
||||
// Operation is resuming from a low-power state.This message is sent after PBT_APMRESUMEAUTOMATIC if the resume is triggered by user input, such as pressing a key
|
||||
_func?.Invoke();
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private sealed class StructSafeHandle<T> : SafeHandle where T : struct
|
||||
{
|
||||
private readonly nint _ptr = nint.Zero;
|
||||
|
||||
public StructSafeHandle(T recipient) : base(nint.Zero, true)
|
||||
{
|
||||
var pRecipient = Marshal.AllocHGlobal(Marshal.SizeOf<T>());
|
||||
Marshal.StructureToPtr(recipient, pRecipient, false);
|
||||
SetHandle(pRecipient);
|
||||
_ptr = pRecipient;
|
||||
}
|
||||
|
||||
public override bool IsInvalid => handle == nint.Zero;
|
||||
|
||||
protected override bool ReleaseHandle()
|
||||
{
|
||||
Marshal.FreeHGlobal(_ptr);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Taskbar
|
||||
|
||||
public static unsafe void ShowTaskbar()
|
||||
{
|
||||
// Find the taskbar window
|
||||
var taskbarHwnd = PInvoke.FindWindowEx(HWND.Null, HWND.Null, "Shell_TrayWnd", null);
|
||||
if (taskbarHwnd == HWND.Null) return;
|
||||
|
||||
// Magic from https://github.com/Oliviaophia/SmartTaskbar
|
||||
const uint TrayBarFlag = 0x05D1;
|
||||
var mon = PInvoke.MonitorFromWindow(taskbarHwnd, Windows.Win32.Graphics.Gdi.MONITOR_FROM_FLAGS.MONITOR_DEFAULTTONEAREST);
|
||||
PInvoke.PostMessage(taskbarHwnd, TrayBarFlag, new WPARAM(1), new LPARAM((nint)mon.Value));
|
||||
}
|
||||
|
||||
public static void HideTaskbar()
|
||||
{
|
||||
// Find the taskbar window
|
||||
var taskbarHwnd = PInvoke.FindWindowEx(HWND.Null, HWND.Null, "Shell_TrayWnd", null);
|
||||
if (taskbarHwnd == HWND.Null) return;
|
||||
|
||||
// Magic from https://github.com/Oliviaophia/SmartTaskbar
|
||||
const uint TrayBarFlag = 0x05D1;
|
||||
PInvoke.PostMessage(taskbarHwnd, TrayBarFlag, new WPARAM(0), IntPtr.Zero);
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,11 +23,23 @@
|
|||
"resolved": "8.4.0",
|
||||
"contentHash": "tqVU8yc/ADO9oiTRyTnwhFN68hCwvkliMierptWOudIAvWY1mWCh5VFh+guwHJmpMwfg0J0rY+yyd5Oy7ty9Uw=="
|
||||
},
|
||||
"Flow.Launcher.Localization": {
|
||||
"type": "Direct",
|
||||
"requested": "[0.0.6, )",
|
||||
"resolved": "0.0.6",
|
||||
"contentHash": "WNI/TLGPDr3XdOW8gaALN0Uyz9h+bzqOaNZev2nHEuA3HW9o7XuqaM6C0PqNi96mNgxiypwWpVazBNzaylJ2Aw=="
|
||||
},
|
||||
"Fody": {
|
||||
"type": "Direct",
|
||||
"requested": "[6.9.2, )",
|
||||
"resolved": "6.9.2",
|
||||
"contentHash": "YBHobPGogb0vYhGYIxn/ndWqTjNWZveDi5jdjrcshL2vjwU3gQGyDeI7vGgye+2rAM5fGRvlLgNWLW3DpviS/w=="
|
||||
"requested": "[6.9.3, )",
|
||||
"resolved": "6.9.3",
|
||||
"contentHash": "1CUGgFdyECDKgi5HaUBhdv6k+VG9Iy4OCforGfHyar3xQXAJypZkzymgKtWj/4SPd6nSG0Qi7NH71qHrDSZLaA=="
|
||||
},
|
||||
"ini-parser": {
|
||||
"type": "Direct",
|
||||
"requested": "[2.5.2, )",
|
||||
"resolved": "2.5.2",
|
||||
"contentHash": "hp3gKmC/14+6eKLgv7Jd1Z7OV86lO+tNfOXr/stQbwmRhdQuXVSvrRAuAe7G5+lwhkov0XkqZ8/bn1PYWMx6eg=="
|
||||
},
|
||||
"InputSimulator": {
|
||||
"type": "Direct",
|
||||
|
|
@ -58,9 +70,9 @@
|
|||
},
|
||||
"Microsoft.Windows.CsWin32": {
|
||||
"type": "Direct",
|
||||
"requested": "[0.3.183, )",
|
||||
"resolved": "0.3.183",
|
||||
"contentHash": "Ze3aE2y7xgzKxEWtNb4SH0CExXpCHr3sbmwnvMiWMzJhWDX/G4Rs5wgg2UNs3VN+qVHh/DkDWLCPaVQv/b//Nw==",
|
||||
"requested": "[0.3.205, )",
|
||||
"resolved": "0.3.205",
|
||||
"contentHash": "U5wGAnyKd7/I2YMd43nogm81VMtjiKzZ9dsLMVI4eAB7jtv5IEj0gprj0q/F3iRmAIaGv5omOf8iSYx2+nE6BQ==",
|
||||
"dependencies": {
|
||||
"Microsoft.Windows.SDK.Win32Docs": "0.1.42-alpha",
|
||||
"Microsoft.Windows.SDK.Win32Metadata": "61.0.15-preview",
|
||||
|
|
@ -78,17 +90,17 @@
|
|||
},
|
||||
"NLog": {
|
||||
"type": "Direct",
|
||||
"requested": "[6.0.1, )",
|
||||
"resolved": "6.0.1",
|
||||
"contentHash": "qDWiqy8/xdpZKtHna/645KbalwP86N2NFJEzfqhcv+Si4V2iNaEfR/dCneuF/4+Dcwl3f7jHMXj3ndWYftV3Ug=="
|
||||
"requested": "[6.0.4, )",
|
||||
"resolved": "6.0.4",
|
||||
"contentHash": "Xr+lIk1ZlTTFXEqnxQVLxrDqZlt2tm5X+/AhJbaY2emb/dVtGDiU5QuEtj3gHtwV/SWlP/rJ922I/BPuOJXlRw=="
|
||||
},
|
||||
"NLog.OutputDebugString": {
|
||||
"type": "Direct",
|
||||
"requested": "[6.0.1, )",
|
||||
"resolved": "6.0.1",
|
||||
"contentHash": "wwJCQLaHVzuRf8TsXB+EEdrzVvE3dnzCSMQMDgwkw3AXp8VSp3JSVF/Q/H0oEqggKgKhPs13hh3a7svyQr4s3A==",
|
||||
"requested": "[6.0.4, )",
|
||||
"resolved": "6.0.4",
|
||||
"contentHash": "TOP2Ap9BbE98B/l/TglnguowOD0rXo8B/20xAgvj9shO/kf6IJ5M4QMhVxq72mrneJ/ANhHY7Jcd+xJbzuI5PA==",
|
||||
"dependencies": {
|
||||
"NLog": "6.0.1"
|
||||
"NLog": "6.0.4"
|
||||
}
|
||||
},
|
||||
"PropertyChanged.Fody": {
|
||||
|
|
@ -102,9 +114,9 @@
|
|||
},
|
||||
"SharpVectors.Wpf": {
|
||||
"type": "Direct",
|
||||
"requested": "[1.8.4.2, )",
|
||||
"resolved": "1.8.4.2",
|
||||
"contentHash": "PNxLkMBJnV8A+6yH9OqOlhLJegvWP/dvh0rAJp2l0kcrR+rB4R2tQ9vhUqka+UilH4atN8T6zvjDOizVyfz2Ng=="
|
||||
"requested": "[1.8.5, )",
|
||||
"resolved": "1.8.5",
|
||||
"contentHash": "WURdBDq5AE8RjKV9pFS7lNkJe81gxja9SaMGE4URq9GJUZ6M+5DGUL0Lm3B0iYW2/Meyowaz4ffGsyW+RBSTtg=="
|
||||
},
|
||||
"System.Drawing.Common": {
|
||||
"type": "Direct",
|
||||
|
|
@ -123,8 +135,8 @@
|
|||
},
|
||||
"JetBrains.Annotations": {
|
||||
"type": "Transitive",
|
||||
"resolved": "2024.3.0",
|
||||
"contentHash": "ox5pkeLQXjvJdyAB4b2sBYAlqZGLh3PjSnP1bQNVx72ONuTJ9+34/+Rq91Fc0dG29XG9RgZur9+NcP4riihTug=="
|
||||
"resolved": "2025.2.2",
|
||||
"contentHash": "0X56ZRizuHdrnPpgXjWV7f2tQO1FlQg5O1967OGKnI/4ZRNOK642J8L7brM1nYvrxTTU5TP1yRyXLRLaXLPQ8A=="
|
||||
},
|
||||
"MemoryPack.Core": {
|
||||
"type": "Transitive",
|
||||
|
|
@ -190,7 +202,7 @@
|
|||
"flow.launcher.plugin": {
|
||||
"type": "Project",
|
||||
"dependencies": {
|
||||
"JetBrains.Annotations": "[2024.3.0, )"
|
||||
"JetBrains.Annotations": "[2025.2.2, )"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net9.0-windows</TargetFramework>
|
||||
|
|
@ -15,10 +15,10 @@
|
|||
</PropertyGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<Version>5.0.0</Version>
|
||||
<PackageVersion>5.0.0</PackageVersion>
|
||||
<AssemblyVersion>5.0.0</AssemblyVersion>
|
||||
<FileVersion>5.0.0</FileVersion>
|
||||
<Version>5.2.0</Version>
|
||||
<PackageVersion>5.2.0</PackageVersion>
|
||||
<AssemblyVersion>5.2.0</AssemblyVersion>
|
||||
<FileVersion>5.2.0</FileVersion>
|
||||
<PackageId>Flow.Launcher.Plugin</PackageId>
|
||||
<Authors>Flow-Launcher</Authors>
|
||||
<PackageLicenseExpression>MIT</PackageLicenseExpression>
|
||||
|
|
@ -68,13 +68,13 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Fody" Version="6.9.2">
|
||||
<PackageReference Include="Fody" Version="6.9.3">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
|
||||
<PackageReference Include="JetBrains.Annotations" Version="2024.3.0" />
|
||||
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.3.183">
|
||||
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="10.0.103" PrivateAssets="All" />
|
||||
<PackageReference Include="JetBrains.Annotations" Version="2025.2.2" />
|
||||
<PackageReference Include="Microsoft.Windows.CsWin32" Version="0.3.269">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.IO;
|
||||
|
|
@ -173,9 +173,21 @@ namespace Flow.Launcher.Plugin
|
|||
/// <summary>
|
||||
/// Get all loaded plugins
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Will also return any plugins not fully initialized yet
|
||||
/// </remarks>
|
||||
/// <returns></returns>
|
||||
List<PluginPair> GetAllPlugins();
|
||||
|
||||
/// <summary>
|
||||
/// Get all initialized plugins
|
||||
/// </summary>
|
||||
/// <param name="includeFailed">
|
||||
/// Whether to include plugins that failed to initialize
|
||||
/// </param>
|
||||
/// <returns></returns>
|
||||
List<PluginPair> GetAllInitializedPlugins(bool includeFailed);
|
||||
|
||||
/// <summary>
|
||||
/// Registers a callback function for global keyboard events.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -137,6 +137,11 @@ namespace Flow.Launcher.Plugin
|
|||
[JsonIgnore]
|
||||
public int QueryCount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The minimum Flow Launcher version required for this plugin. Default is "".
|
||||
/// </summary>
|
||||
public string MinimumAppVersion { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// The path to the plugin settings directory which is not validated.
|
||||
/// It is used to store plugin settings files and data files.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System.Text.Json.Serialization;
|
||||
using System;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Flow.Launcher.Plugin
|
||||
{
|
||||
|
|
@ -8,11 +9,29 @@ namespace Flow.Launcher.Plugin
|
|||
public class Query
|
||||
{
|
||||
/// <summary>
|
||||
/// Raw query, this includes action keyword if it has.
|
||||
/// It has handled buildin custom query shortkeys and build-in shortcuts, and it trims the whitespace.
|
||||
/// We didn't recommend use this property directly. You should always use Search property.
|
||||
/// Original query, exactly how the user has typed into the search box.
|
||||
/// We don't recommend using this property directly. You should always use Search property.
|
||||
/// </summary>
|
||||
public string RawQuery { get; internal init; }
|
||||
public string OriginalQuery { get; internal init; }
|
||||
|
||||
/// <summary>
|
||||
/// Raw query, this includes action keyword if it has.
|
||||
/// It has handled built-in custom query hotkeys and built-in shortcuts, and it trims the whitespace.
|
||||
/// We don't recommend using this property directly. You should always use Search property.
|
||||
/// </summary>
|
||||
[Obsolete("RawQuery is renamed to TrimmedQuery. This property will be removed. Update the code to use TrimmedQuery instead.")]
|
||||
public string RawQuery {
|
||||
get => TrimmedQuery;
|
||||
internal init { TrimmedQuery = value; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Original query but with trimmed whitespace. Includes action keyword.
|
||||
/// It has handled built-in custom query hotkeys and build-in shortcuts.
|
||||
/// If you need the exact original query from the search box, use OriginalQuery property instead.
|
||||
/// We don't recommend using this property directly. You should always use Search property.
|
||||
/// </summary>
|
||||
public string TrimmedQuery { get; internal init; }
|
||||
|
||||
/// <summary>
|
||||
/// Determines whether the query was forced to execute again.
|
||||
|
|
@ -28,7 +47,7 @@ namespace Flow.Launcher.Plugin
|
|||
|
||||
/// <summary>
|
||||
/// Search part of a query.
|
||||
/// This will not include action keyword if exclusive plugin gets it, otherwise it should be same as RawQuery.
|
||||
/// This will not include action keyword if exclusive plugin gets it, otherwise it should be same as TrimmedQuery.
|
||||
/// Since we allow user to switch a exclusive plugin to generic plugin,
|
||||
/// so this property will always give you the "real" query part of the query
|
||||
/// </summary>
|
||||
|
|
@ -103,6 +122,6 @@ namespace Flow.Launcher.Plugin
|
|||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override string ToString() => RawQuery;
|
||||
public override string ToString() => TrimmedQuery;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,11 +4,13 @@ using System.IO;
|
|||
using System.Threading.Tasks;
|
||||
using System.Windows.Controls;
|
||||
using System.Windows.Media;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace Flow.Launcher.Plugin
|
||||
{
|
||||
/// <summary>
|
||||
/// Describes a result of a <see cref="Query"/> executed by a plugin
|
||||
/// Describes a result of a <see cref="Query"/> executed by a plugin.
|
||||
/// This or its child classes is serializable.
|
||||
/// </summary>
|
||||
public class Result
|
||||
{
|
||||
|
|
@ -21,6 +23,8 @@ namespace Flow.Launcher.Plugin
|
|||
|
||||
private string _icoPath;
|
||||
|
||||
private string _icoPathAbsolute;
|
||||
|
||||
private string _copyText = string.Empty;
|
||||
|
||||
private string _badgeIcoPath;
|
||||
|
|
@ -64,15 +68,27 @@ namespace Flow.Launcher.Plugin
|
|||
public string AutoCompleteText { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// The image to be displayed for the result.
|
||||
/// Path or URI to the icon image for this result.
|
||||
/// Updates <see cref="IcoPathAbsolute"/> appropriately when set.
|
||||
/// </summary>
|
||||
/// <value>Can be a local file path or a URL.</value>
|
||||
/// <remarks>GlyphInfo is prioritized if not null</remarks>
|
||||
/// <remarks>
|
||||
/// Preferred usage: provide a path relative to the plugin directory (for example: "Images\icon.png").
|
||||
/// Because <see cref="IcoPath"/> is serialized, using relative paths keeps the icon reference portable
|
||||
/// when Flow is moved.
|
||||
///
|
||||
/// Accepted formats:
|
||||
/// - Relative file paths (resolved against <see cref="PluginDirectory"/> into <see cref="IcoPathAbsolute"/>)
|
||||
/// - Absolute file paths (left as-is)
|
||||
/// - HTTP/HTTPS URLs (left as-is)
|
||||
/// - Data URIs (left as-is)
|
||||
/// </remarks>
|
||||
public string IcoPath
|
||||
{
|
||||
get => _icoPath;
|
||||
set
|
||||
{
|
||||
_icoPath = value;
|
||||
|
||||
// As a standard this property will handle prepping and converting to absolute local path for icon image processing
|
||||
if (!string.IsNullOrEmpty(value)
|
||||
&& !string.IsNullOrEmpty(PluginDirectory)
|
||||
|
|
@ -81,15 +97,23 @@ namespace Flow.Launcher.Plugin
|
|||
&& !value.StartsWith("https://", StringComparison.OrdinalIgnoreCase)
|
||||
&& !value.StartsWith("data:image", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
_icoPath = Path.Combine(PluginDirectory, value);
|
||||
_icoPathAbsolute = Path.Combine(PluginDirectory, value);
|
||||
}
|
||||
else
|
||||
{
|
||||
_icoPath = value;
|
||||
_icoPathAbsolute = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Absolute path or URI which is used to load and display the result icon for Flow.
|
||||
/// This is populated by the <see cref="IcoPath"/> setter.
|
||||
/// If a relative path was provided to <see cref="IcoPath"/>, this property will contain the resolved
|
||||
/// absolute local path after combining with <see cref="PluginDirectory"/>.
|
||||
/// </summary>
|
||||
public string IcoPathAbsolute => _icoPathAbsolute;
|
||||
|
||||
/// <summary>
|
||||
/// The image to be displayed for the badge of the result.
|
||||
/// </summary>
|
||||
|
|
@ -131,17 +155,34 @@ namespace Flow.Launcher.Plugin
|
|||
/// <summary>
|
||||
/// Delegate to load an icon for this result.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public IconDelegate Icon = null;
|
||||
|
||||
/// <summary>
|
||||
/// Delegate to load an icon for the badge of this result.
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public IconDelegate BadgeIcon = null;
|
||||
|
||||
private GlyphInfo _glyph;
|
||||
|
||||
/// <summary>
|
||||
/// Information for Glyph Icon (Prioritized than IcoPath/Icon if user enable Glyph Icons)
|
||||
/// </summary>
|
||||
public GlyphInfo Glyph { get; init; }
|
||||
public GlyphInfo Glyph
|
||||
{
|
||||
get => _glyph;
|
||||
init => _glyph = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Set the Glyph Icon after initialization
|
||||
/// </summary>
|
||||
/// <param name="glyph"></param>
|
||||
public void SetGlyph(GlyphInfo glyph)
|
||||
{
|
||||
_glyph = glyph;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// An action to take in the form of a function call when the result has been selected.
|
||||
|
|
@ -151,6 +192,7 @@ namespace Flow.Launcher.Plugin
|
|||
/// Its result determines what happens to Flow Launcher's query form:
|
||||
/// when true, the form will be hidden; when false, it will stay in focus.
|
||||
/// </remarks>
|
||||
[JsonIgnore]
|
||||
public Func<ActionContext, bool> Action { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -161,6 +203,7 @@ namespace Flow.Launcher.Plugin
|
|||
/// Its result determines what happens to Flow Launcher's query form:
|
||||
/// when true, the form will be hidden; when false, it will stay in focus.
|
||||
/// </remarks>
|
||||
[JsonIgnore]
|
||||
public Func<ActionContext, ValueTask<bool>> AsyncAction { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -203,11 +246,13 @@ namespace Flow.Launcher.Plugin
|
|||
/// <example>
|
||||
/// As external information for ContextMenu
|
||||
/// </example>
|
||||
[JsonIgnore]
|
||||
public object ContextData { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Plugin ID that generated this result
|
||||
/// </summary>
|
||||
[JsonInclude]
|
||||
public string PluginID { get; internal set; }
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -223,6 +268,7 @@ namespace Flow.Launcher.Plugin
|
|||
/// <summary>
|
||||
/// Customized Preview Panel
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public Lazy<UserControl> PreviewPanel { get; set; }
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -352,6 +398,7 @@ namespace Flow.Launcher.Plugin
|
|||
/// <summary>
|
||||
/// Delegate to get the preview panel's image
|
||||
/// </summary>
|
||||
[JsonIgnore]
|
||||
public IconDelegate PreviewDelegate { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -130,6 +130,119 @@ namespace Flow.Launcher.Plugin.SharedCommands
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Attempts to delete a directory robustly with retry logic for locked files.
|
||||
/// This method tries to delete files individually with retries, then removes empty directories.
|
||||
/// Returns true if the directory was completely deleted, false if some files/folders remain.
|
||||
/// </summary>
|
||||
/// <param name="path">The directory path to delete</param>
|
||||
/// <param name="maxRetries">Maximum number of retry attempts for locked files (default: 3)</param>
|
||||
/// <param name="retryDelayMs">Delay in milliseconds between retries (default: 100ms)</param>
|
||||
/// <returns>True if directory was fully deleted, false if some items remain</returns>
|
||||
public static bool TryDeleteDirectoryRobust(string path, int maxRetries = 3, int retryDelayMs = 100)
|
||||
{
|
||||
if (!Directory.Exists(path))
|
||||
return true;
|
||||
|
||||
bool fullyDeleted = true;
|
||||
|
||||
try
|
||||
{
|
||||
// First, try to delete all files in the directory tree
|
||||
var files = Directory.GetFiles(path, "*", SearchOption.AllDirectories);
|
||||
foreach (var file in files)
|
||||
{
|
||||
bool fileDeleted = false;
|
||||
for (int attempt = 0; attempt <= maxRetries; attempt++)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Remove read-only attribute if present
|
||||
var fileInfo = new FileInfo(file);
|
||||
if (fileInfo.Exists && fileInfo.IsReadOnly)
|
||||
{
|
||||
fileInfo.IsReadOnly = false;
|
||||
}
|
||||
|
||||
File.Delete(file);
|
||||
fileDeleted = true;
|
||||
break;
|
||||
}
|
||||
catch (UnauthorizedAccessException)
|
||||
{
|
||||
// File is in use or access denied, wait and retry
|
||||
if (attempt < maxRetries)
|
||||
{
|
||||
System.Threading.Thread.Sleep(retryDelayMs);
|
||||
}
|
||||
}
|
||||
catch (IOException)
|
||||
{
|
||||
// File is in use, wait and retry
|
||||
if (attempt < maxRetries)
|
||||
{
|
||||
System.Threading.Thread.Sleep(retryDelayMs);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// Other exceptions, don't retry
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!fileDeleted)
|
||||
{
|
||||
fullyDeleted = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Then, try to delete all empty directories (from deepest to shallowest)
|
||||
var directories = Directory.GetDirectories(path, "*", SearchOption.AllDirectories)
|
||||
.OrderByDescending(d => d.Length) // Delete deeper directories first
|
||||
.ToArray();
|
||||
|
||||
foreach (var directory in directories)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Directory.Exists(directory) && !Directory.EnumerateFileSystemEntries(directory).Any())
|
||||
{
|
||||
Directory.Delete(directory, false);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
// If we can't delete an empty directory, mark as not fully deleted
|
||||
fullyDeleted = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Finally, try to delete the root directory itself
|
||||
try
|
||||
{
|
||||
if (Directory.Exists(path) && !Directory.EnumerateFileSystemEntries(path).Any())
|
||||
{
|
||||
Directory.Delete(path, false);
|
||||
}
|
||||
else if (Directory.Exists(path))
|
||||
{
|
||||
fullyDeleted = false;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
fullyDeleted = false;
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
fullyDeleted = false;
|
||||
}
|
||||
|
||||
return fullyDeleted;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if a directory exists
|
||||
/// </summary>
|
||||
|
|
@ -150,6 +263,16 @@ namespace Flow.Launcher.Plugin.SharedCommands
|
|||
return File.Exists(filePath);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Checks if a file or directory exists
|
||||
/// </summary>
|
||||
/// <param name="path"></param>
|
||||
/// <returns></returns>
|
||||
public static bool FileOrLocationExists(this string path)
|
||||
{
|
||||
return LocationExists(path) || FileExists(path);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Open a directory window (using the OS's default handler, usually explorer)
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -4,35 +4,35 @@
|
|||
"net9.0-windows7.0": {
|
||||
"Fody": {
|
||||
"type": "Direct",
|
||||
"requested": "[6.9.2, )",
|
||||
"resolved": "6.9.2",
|
||||
"contentHash": "YBHobPGogb0vYhGYIxn/ndWqTjNWZveDi5jdjrcshL2vjwU3gQGyDeI7vGgye+2rAM5fGRvlLgNWLW3DpviS/w=="
|
||||
"requested": "[6.9.3, )",
|
||||
"resolved": "6.9.3",
|
||||
"contentHash": "1CUGgFdyECDKgi5HaUBhdv6k+VG9Iy4OCforGfHyar3xQXAJypZkzymgKtWj/4SPd6nSG0Qi7NH71qHrDSZLaA=="
|
||||
},
|
||||
"JetBrains.Annotations": {
|
||||
"type": "Direct",
|
||||
"requested": "[2024.3.0, )",
|
||||
"resolved": "2024.3.0",
|
||||
"contentHash": "ox5pkeLQXjvJdyAB4b2sBYAlqZGLh3PjSnP1bQNVx72ONuTJ9+34/+Rq91Fc0dG29XG9RgZur9+NcP4riihTug=="
|
||||
"requested": "[2025.2.2, )",
|
||||
"resolved": "2025.2.2",
|
||||
"contentHash": "0X56ZRizuHdrnPpgXjWV7f2tQO1FlQg5O1967OGKnI/4ZRNOK642J8L7brM1nYvrxTTU5TP1yRyXLRLaXLPQ8A=="
|
||||
},
|
||||
"Microsoft.SourceLink.GitHub": {
|
||||
"type": "Direct",
|
||||
"requested": "[8.0.0, )",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "G5q7OqtwIyGTkeIOAc3u2ZuV/kicQaec5EaRnc0pIeSnh9LUjj+PYQrJYBURvDt7twGl2PKA7nSN0kz1Zw5bnQ==",
|
||||
"requested": "[10.0.103, )",
|
||||
"resolved": "10.0.103",
|
||||
"contentHash": "qZk7r40ftpZY+/sO019sgWAWfNqC2CLSspDdAxNYCJU/bCi/8jVwvOMjzb/d5gjCRNzQ4OCYgBfhdpQyVwLTyw==",
|
||||
"dependencies": {
|
||||
"Microsoft.Build.Tasks.Git": "8.0.0",
|
||||
"Microsoft.SourceLink.Common": "8.0.0"
|
||||
"Microsoft.Build.Tasks.Git": "10.0.103",
|
||||
"Microsoft.SourceLink.Common": "10.0.103"
|
||||
}
|
||||
},
|
||||
"Microsoft.Windows.CsWin32": {
|
||||
"type": "Direct",
|
||||
"requested": "[0.3.183, )",
|
||||
"resolved": "0.3.183",
|
||||
"contentHash": "Ze3aE2y7xgzKxEWtNb4SH0CExXpCHr3sbmwnvMiWMzJhWDX/G4Rs5wgg2UNs3VN+qVHh/DkDWLCPaVQv/b//Nw==",
|
||||
"requested": "[0.3.269, )",
|
||||
"resolved": "0.3.269",
|
||||
"contentHash": "O4GVJ0ymxcoFRGS07VcoEClj7A9PIciHIjWDrPymzonhYlOfM7V0ZqGBUK19cUH3BPca9MfSOH0KLK/9JzQ8+Q==",
|
||||
"dependencies": {
|
||||
"Microsoft.Windows.SDK.Win32Docs": "0.1.42-alpha",
|
||||
"Microsoft.Windows.SDK.Win32Metadata": "61.0.15-preview",
|
||||
"Microsoft.Windows.WDK.Win32Metadata": "0.12.8-experimental"
|
||||
"Microsoft.Windows.SDK.Win32Metadata": "69.0.7-preview",
|
||||
"Microsoft.Windows.WDK.Win32Metadata": "0.13.25-experimental"
|
||||
}
|
||||
},
|
||||
"PropertyChanged.Fody": {
|
||||
|
|
@ -46,13 +46,13 @@
|
|||
},
|
||||
"Microsoft.Build.Tasks.Git": {
|
||||
"type": "Transitive",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "bZKfSIKJRXLTuSzLudMFte/8CempWjVamNUR5eHJizsy+iuOuO/k2gnh7W0dHJmYY0tBf+gUErfluCv5mySAOQ=="
|
||||
"resolved": "10.0.103",
|
||||
"contentHash": "QoiCMcPuxC6eqRQmrmF9zBY96ejIznXtve/lJJbonGD9I5Aygf2AUCOWslGiCEtBbfWRSuUnepBjuuVOdAl5ag=="
|
||||
},
|
||||
"Microsoft.SourceLink.Common": {
|
||||
"type": "Transitive",
|
||||
"resolved": "8.0.0",
|
||||
"contentHash": "dk9JPxTCIevS75HyEQ0E4OVAFhB2N+V9ShCXf8Q6FkUQZDkgLI12y679Nym1YqsiSysuQskT7Z+6nUf3yab6Vw=="
|
||||
"resolved": "10.0.103",
|
||||
"contentHash": "cMtGW5/r0ck72Jg2QwZcNTX59z+iB/B1kW84VMa/eX8L19DhHIuIcQjfK0pgLLBxd60Jl0Bj9GUolcM0MnJnZA=="
|
||||
},
|
||||
"Microsoft.Windows.SDK.Win32Docs": {
|
||||
"type": "Transitive",
|
||||
|
|
@ -61,15 +61,15 @@
|
|||
},
|
||||
"Microsoft.Windows.SDK.Win32Metadata": {
|
||||
"type": "Transitive",
|
||||
"resolved": "61.0.15-preview",
|
||||
"contentHash": "cysex3dazKtCPALCluC2XX3f5Aedy9H2pw5jb+TW5uas2rkem1Z7FRnbUrg2vKx0pk0Qz+4EJNr37HdYTEcvEQ=="
|
||||
"resolved": "69.0.7-preview",
|
||||
"contentHash": "RJoNjQJVCIDNLPbvYuaygCFknTyAxOUE45of1voj0jjOgJa9MB2m1/G8L8F3IYc+2EFG5aqa/9y8PEx7Tk2tLQ=="
|
||||
},
|
||||
"Microsoft.Windows.WDK.Win32Metadata": {
|
||||
"type": "Transitive",
|
||||
"resolved": "0.12.8-experimental",
|
||||
"contentHash": "3n8R44/Z96Ly+ty4eYVJfESqbzvpw96lRLs3zOzyDmr1x1Kw7FNn5CyE416q+bZQV3e1HRuMUvyegMeRE/WedA==",
|
||||
"resolved": "0.13.25-experimental",
|
||||
"contentHash": "IM50tb/+UIwBr9FMr6ZKcZjCMW+Axo6NjGqKxgjUfyCY8dRnYUfrJEXxAaXoWtYP4X8EmASmC1Jtwh4XucseZg==",
|
||||
"dependencies": {
|
||||
"Microsoft.Windows.SDK.Win32Metadata": "61.0.15-preview"
|
||||
"Microsoft.Windows.SDK.Win32Metadata": "63.0.31-preview"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
using Flow.Launcher.Plugin.SharedCommands;
|
||||
using NUnit.Framework;
|
||||
using NUnit.Framework.Legacy;
|
||||
using System.IO;
|
||||
|
||||
namespace Flow.Launcher.Test
|
||||
{
|
||||
|
|
@ -50,5 +51,89 @@ namespace Flow.Launcher.Test
|
|||
{
|
||||
ClassicAssert.AreEqual(expectedResult, FilesFolders.PathContains(parentPath, path, allowEqual: expectedResult));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TryDeleteDirectoryRobust_WhenDirectoryDoesNotExist_ReturnsTrue()
|
||||
{
|
||||
// Arrange
|
||||
string nonExistentPath = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
|
||||
|
||||
// Act
|
||||
bool result = FilesFolders.TryDeleteDirectoryRobust(nonExistentPath);
|
||||
|
||||
// Assert
|
||||
ClassicAssert.IsTrue(result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TryDeleteDirectoryRobust_WhenDirectoryIsEmpty_DeletesSuccessfully()
|
||||
{
|
||||
// Arrange
|
||||
string tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
|
||||
// Act
|
||||
bool result = FilesFolders.TryDeleteDirectoryRobust(tempDir);
|
||||
|
||||
// Assert
|
||||
ClassicAssert.IsTrue(result);
|
||||
ClassicAssert.IsFalse(Directory.Exists(tempDir));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TryDeleteDirectoryRobust_WhenDirectoryHasFiles_DeletesSuccessfully()
|
||||
{
|
||||
// Arrange
|
||||
string tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
File.WriteAllText(Path.Combine(tempDir, "test.txt"), "test content");
|
||||
|
||||
// Act
|
||||
bool result = FilesFolders.TryDeleteDirectoryRobust(tempDir);
|
||||
|
||||
// Assert
|
||||
ClassicAssert.IsTrue(result);
|
||||
ClassicAssert.IsFalse(Directory.Exists(tempDir));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TryDeleteDirectoryRobust_WhenDirectoryHasNestedStructure_DeletesSuccessfully()
|
||||
{
|
||||
// Arrange
|
||||
string tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
string subDir1 = Path.Combine(tempDir, "SubDir1");
|
||||
string subDir2 = Path.Combine(tempDir, "SubDir2");
|
||||
Directory.CreateDirectory(subDir1);
|
||||
Directory.CreateDirectory(subDir2);
|
||||
File.WriteAllText(Path.Combine(subDir1, "file1.txt"), "content1");
|
||||
File.WriteAllText(Path.Combine(subDir2, "file2.txt"), "content2");
|
||||
File.WriteAllText(Path.Combine(tempDir, "root.txt"), "root content");
|
||||
|
||||
// Act
|
||||
bool result = FilesFolders.TryDeleteDirectoryRobust(tempDir);
|
||||
|
||||
// Assert
|
||||
ClassicAssert.IsTrue(result);
|
||||
ClassicAssert.IsFalse(Directory.Exists(tempDir));
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void TryDeleteDirectoryRobust_WhenFileIsReadOnly_RemovesAttributeAndDeletes()
|
||||
{
|
||||
// Arrange
|
||||
string tempDir = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
|
||||
Directory.CreateDirectory(tempDir);
|
||||
string filePath = Path.Combine(tempDir, "readonly.txt");
|
||||
File.WriteAllText(filePath, "readonly content");
|
||||
File.SetAttributes(filePath, FileAttributes.ReadOnly);
|
||||
|
||||
// Act
|
||||
bool result = FilesFolders.TryDeleteDirectoryRobust(tempDir);
|
||||
|
||||
// Assert
|
||||
ClassicAssert.IsTrue(result);
|
||||
ClassicAssert.IsFalse(Directory.Exists(tempDir));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\Plugins\Flow.Launcher.Plugin.Calculator\Flow.Launcher.Plugin.Calculator.csproj" />
|
||||
<ProjectReference Include="..\Plugins\Flow.Launcher.Plugin.Explorer\Flow.Launcher.Plugin.Explorer.csproj" />
|
||||
<ProjectReference Include="..\Plugins\Flow.Launcher.Plugin.Program\Flow.Launcher.Plugin.Program.csproj" />
|
||||
<ProjectReference Include="..\Plugins\Flow.Launcher.Plugin.Url\Flow.Launcher.Plugin.Url.csproj" />
|
||||
|
|
@ -49,8 +50,8 @@
|
|||
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Moq" Version="4.20.72" />
|
||||
<PackageReference Include="nunit" Version="4.3.2" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="5.0.0">
|
||||
<PackageReference Include="nunit" Version="4.4.0" />
|
||||
<PackageReference Include="NUnit3TestAdapter" Version="5.1.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
|
|
|
|||
134
Flow.Launcher.Test/Plugins/CalculatorTest.cs
Normal file
134
Flow.Launcher.Test/Plugins/CalculatorTest.cs
Normal file
|
|
@ -0,0 +1,134 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Reflection;
|
||||
using Flow.Launcher.Plugin.Calculator;
|
||||
using Mages.Core;
|
||||
using NUnit.Framework;
|
||||
using NUnit.Framework.Legacy;
|
||||
|
||||
namespace Flow.Launcher.Test.Plugins
|
||||
{
|
||||
[TestFixture]
|
||||
public class CalculatorPluginTest
|
||||
{
|
||||
private readonly Main _plugin;
|
||||
private readonly Settings _settings = new()
|
||||
{
|
||||
DecimalSeparator = DecimalSeparator.UseSystemLocale,
|
||||
MaxDecimalPlaces = 10,
|
||||
ShowErrorMessage = false, // Make sure we return the empty results when error occurs
|
||||
UseThousandsSeparator = true // Default value
|
||||
};
|
||||
private readonly Engine _engine = new(new Configuration
|
||||
{
|
||||
Scope = new Dictionary<string, object>
|
||||
{
|
||||
{ "e", Math.E }, // e is not contained in the default mages engine
|
||||
}
|
||||
});
|
||||
|
||||
public CalculatorPluginTest()
|
||||
{
|
||||
_plugin = new Main();
|
||||
|
||||
var settingField = typeof(Main).GetField("_settings", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||
if (settingField == null)
|
||||
Assert.Fail("Could not find field '_settings' on Flow.Launcher.Plugin.Calculator.Main");
|
||||
settingField.SetValue(_plugin, _settings);
|
||||
|
||||
var engineField = typeof(Main).GetField("MagesEngine", BindingFlags.NonPublic | BindingFlags.Static);
|
||||
if (engineField == null)
|
||||
Assert.Fail("Could not find static field 'MagesEngine' on Flow.Launcher.Plugin.Calculator.Main");
|
||||
engineField.SetValue(null, _engine);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ThousandsSeparatorTest_Enabled()
|
||||
{
|
||||
_settings.UseThousandsSeparator = true;
|
||||
|
||||
_settings.DecimalSeparator = DecimalSeparator.Dot;
|
||||
var result = GetCalculationResult("1000+234");
|
||||
// When thousands separator is enabled, the result should contain a separator
|
||||
// Since decimal separator is dot, thousands separator should be comma
|
||||
ClassicAssert.AreEqual("1,234", result);
|
||||
|
||||
_settings.DecimalSeparator = DecimalSeparator.Comma;
|
||||
var result2 = GetCalculationResult("1000+234");
|
||||
// When thousands separator is enabled, the result should contain a separator
|
||||
// Since decimal separator is comma, thousands separator should be dot
|
||||
ClassicAssert.AreEqual("1.234", result2);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ThousandsSeparatorTest_Disabled()
|
||||
{
|
||||
_settings.UseThousandsSeparator = false;
|
||||
_settings.DecimalSeparator = DecimalSeparator.UseSystemLocale;
|
||||
|
||||
var result = GetCalculationResult("1000+234");
|
||||
ClassicAssert.AreEqual("1234", result);
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ThousandsSeparatorTest_LargeNumber()
|
||||
{
|
||||
_settings.UseThousandsSeparator = false;
|
||||
_settings.DecimalSeparator = DecimalSeparator.UseSystemLocale;
|
||||
|
||||
var result = GetCalculationResult("1000000+234567");
|
||||
ClassicAssert.AreEqual("1234567", result);
|
||||
}
|
||||
|
||||
// Basic operations
|
||||
[TestCase(@"1+1", "2")]
|
||||
[TestCase(@"2-1", "1")]
|
||||
[TestCase(@"2*2", "4")]
|
||||
[TestCase(@"4/2", "2")]
|
||||
[TestCase(@"2^3", "8")]
|
||||
// Decimal places
|
||||
[TestCase(@"10/3", "3.3333333333")]
|
||||
// Parentheses
|
||||
[TestCase(@"(1+2)*3", "9")]
|
||||
[TestCase(@"2^(1+2)", "8")]
|
||||
// Functions
|
||||
[TestCase(@"pow(2,3)", "8")]
|
||||
[TestCase(@"min(1,-1,-2)", "-2")]
|
||||
[TestCase(@"max(1,-1,-2)", "1")]
|
||||
[TestCase(@"sqrt(16)", "4")]
|
||||
[TestCase(@"sin(pi)", "0.0000000000")]
|
||||
[TestCase(@"cos(0)", "1")]
|
||||
[TestCase(@"tan(0)", "0")]
|
||||
[TestCase(@"log10(100)", "2")]
|
||||
[TestCase(@"log(100)", "2")]
|
||||
[TestCase(@"log2(8)", "3")]
|
||||
[TestCase(@"ln(e)", "1")]
|
||||
[TestCase(@"abs(-5)", "5")]
|
||||
// Constants
|
||||
[TestCase(@"pi", "3.1415926536")]
|
||||
// Complex expressions
|
||||
[TestCase(@"(2+3)*sqrt(16)-log(100)/ln(e)", "18")]
|
||||
[TestCase(@"sin(pi/2)+cos(0)+tan(0)", "2")]
|
||||
// Error handling (should return empty result)
|
||||
[TestCase(@"10/0", "")]
|
||||
[TestCase(@"sqrt(-1)", "")]
|
||||
[TestCase(@"log(0)", "")]
|
||||
[TestCase(@"invalid_expression", "")]
|
||||
public void CalculatorTest(string expression, string result)
|
||||
{
|
||||
_settings.UseThousandsSeparator = false;
|
||||
_settings.DecimalSeparator = DecimalSeparator.Dot;
|
||||
|
||||
ClassicAssert.AreEqual(GetCalculationResult(expression), result);
|
||||
}
|
||||
|
||||
private string GetCalculationResult(string expression)
|
||||
{
|
||||
var results = _plugin.Query(new Plugin.Query()
|
||||
{
|
||||
Search = expression
|
||||
});
|
||||
return results.Count > 0 ? results[0].Title : string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -16,9 +16,9 @@ namespace Flow.Launcher.Test
|
|||
{">", new PluginPair {Metadata = new PluginMetadata {ActionKeywords = new List<string> {">"}}}}
|
||||
};
|
||||
|
||||
Query q = QueryBuilder.Build("> ping google.com -n 20 -6", nonGlobalPlugins);
|
||||
Query q = QueryBuilder.Build("> ping google.com -n 20 -6", "> ping google.com -n 20 -6", nonGlobalPlugins);
|
||||
|
||||
ClassicAssert.AreEqual("> ping google.com -n 20 -6", q.RawQuery);
|
||||
ClassicAssert.AreEqual("> ping google.com -n 20 -6", q.TrimmedQuery);
|
||||
ClassicAssert.AreEqual("ping google.com -n 20 -6", q.Search, "Search should not start with the ActionKeyword.");
|
||||
ClassicAssert.AreEqual(">", q.ActionKeyword);
|
||||
|
||||
|
|
@ -39,10 +39,10 @@ namespace Flow.Launcher.Test
|
|||
{">", new PluginPair {Metadata = new PluginMetadata {ActionKeywords = new List<string> {">"}, Disabled = true}}}
|
||||
};
|
||||
|
||||
Query q = QueryBuilder.Build("> ping google.com -n 20 -6", nonGlobalPlugins);
|
||||
Query q = QueryBuilder.Build("> ping google.com -n 20 -6", "> ping google.com -n 20 -6", nonGlobalPlugins);
|
||||
|
||||
ClassicAssert.AreEqual("> ping google.com -n 20 -6", q.Search);
|
||||
ClassicAssert.AreEqual(q.Search, q.RawQuery, "RawQuery should be equal to Search.");
|
||||
ClassicAssert.AreEqual(q.Search, q.TrimmedQuery, "TrimmedQuery should be equal to Search.");
|
||||
ClassicAssert.AreEqual(6, q.SearchTerms.Length, "The length of SearchTerms should match.");
|
||||
ClassicAssert.AreNotEqual(">", q.ActionKeyword, "ActionKeyword should not match that of a disabled plugin.");
|
||||
ClassicAssert.AreEqual("ping google.com -n 20 -6", q.SecondToEndSearch, "SecondToEndSearch should be trimmed of multiple whitespace characters");
|
||||
|
|
@ -51,7 +51,7 @@ namespace Flow.Launcher.Test
|
|||
[Test]
|
||||
public void GenericPluginQueryTest()
|
||||
{
|
||||
Query q = QueryBuilder.Build("file.txt file2 file3", new Dictionary<string, PluginPair>());
|
||||
Query q = QueryBuilder.Build("file.txt file2 file3", "file.txt file2 file3", new Dictionary<string, PluginPair>());
|
||||
|
||||
ClassicAssert.AreEqual("file.txt file2 file3", q.Search);
|
||||
ClassicAssert.AreEqual("", q.ActionKeyword);
|
||||
|
|
|
|||
|
|
@ -22,19 +22,33 @@ namespace Flow.Launcher.Test
|
|||
ClassicAssert.AreEqual(10, GetOriginalToTranslatedAt(mapping, 1));
|
||||
}
|
||||
|
||||
[TestCase(0, 0)]
|
||||
[TestCase(2, 1)]
|
||||
[TestCase(3, 1)]
|
||||
[TestCase(5, 2)]
|
||||
[TestCase(6, 2)]
|
||||
|
||||
[TestCase(0, 0)] // "F" -> "F"
|
||||
[TestCase(1, 1)] // "l" -> "l"
|
||||
[TestCase(2, 2)] // "o" -> "o"
|
||||
[TestCase(3, 3)] // "w" -> "w"
|
||||
[TestCase(4, 4)] // " " -> " "
|
||||
[TestCase(5, 5)] // "Y" (translated from "用") -> original index 5
|
||||
[TestCase(6, 5)] // "o" (translated from "用") -> original index 5
|
||||
[TestCase(7, 5)] // "n" (translated from "用") -> original index 5
|
||||
[TestCase(8, 5)] // "g" (translated from "用") -> original index 5
|
||||
[TestCase(10, 6)] // "H" (translated from "户") -> original index 6
|
||||
[TestCase(11, 6)] // "u" (translated from "户") -> original index 6
|
||||
public void MapToOriginalIndex_ShouldReturnExpectedIndex(int translatedIndex, int expectedOriginalIndex)
|
||||
{
|
||||
var mapping = new TranslationMapping();
|
||||
// a测试
|
||||
// a Ce Shi
|
||||
mapping.AddNewIndex(0, 1);
|
||||
mapping.AddNewIndex(2, 2);
|
||||
mapping.AddNewIndex(5, 3);
|
||||
// Test case :
|
||||
// 0123456
|
||||
// Flow 用户
|
||||
// 012345678901
|
||||
// Flow Yong Hu
|
||||
mapping.AddNewIndex(0, 1); // F
|
||||
mapping.AddNewIndex(1, 1); // l
|
||||
mapping.AddNewIndex(2, 1); // o
|
||||
mapping.AddNewIndex(3, 1); // w
|
||||
mapping.AddNewIndex(4, 1); // ' '
|
||||
mapping.AddNewIndex(5, 4); // 用 -> Yong
|
||||
mapping.AddNewIndex(10, 2); // 户 -> Hu
|
||||
|
||||
var result = mapping.MapToOriginalIndex(translatedIndex);
|
||||
ClassicAssert.AreEqual(expectedOriginalIndex, result);
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ namespace Flow.Launcher
|
|||
|
||||
if (addedActionKeywords.Any(App.API.ActionKeywordAssigned))
|
||||
{
|
||||
App.API.ShowMsgBox(App.API.GetTranslation("newActionKeywordsHasBeenAssigned"));
|
||||
App.API.ShowMsgBox(Localize.newActionKeywordsHasBeenAssigned());
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -63,7 +63,7 @@ namespace Flow.Launcher
|
|||
if (sortedOldActionKeywords.SequenceEqual(sortedNewActionKeywords))
|
||||
{
|
||||
// User just changes the sequence of action keywords
|
||||
App.API.ShowMsgBox(App.API.GetTranslation("newActionKeywordsSameAsOld"));
|
||||
App.API.ShowMsgBox(Localize.newActionKeywordsSameAsOld());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2,7 +2,8 @@
|
|||
x:Class="Flow.Launcher.App"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:ui="http://schemas.modernwpf.com/2019"
|
||||
xmlns:sys="clr-namespace:System;assembly=mscorlib"
|
||||
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
|
||||
ShutdownMode="OnMainWindowClose"
|
||||
Startup="OnStartup">
|
||||
<Application.Resources>
|
||||
|
|
@ -10,17 +11,17 @@
|
|||
<ResourceDictionary.MergedDictionaries>
|
||||
<ui:ThemeResources>
|
||||
<ui:ThemeResources.ThemeDictionaries>
|
||||
<ResourceDictionary x:Key="Light">
|
||||
<ResourceDictionary x:Key="Light" ui:ThemeDictionary.Key="Light">
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceDictionary Source="pack://application:,,,/Resources/Light.xaml" />
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
</ResourceDictionary>
|
||||
<ResourceDictionary x:Key="Dark">
|
||||
<ResourceDictionary x:Key="Dark" ui:ThemeDictionary.Key="Dark">
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceDictionary Source="pack://application:,,,/Resources/Dark.xaml" />
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
</ResourceDictionary>
|
||||
<ResourceDictionary x:Key="HighContrast">
|
||||
<ResourceDictionary x:Key="HighContrast" ui:ThemeDictionary.Key="HighContrast">
|
||||
<ResourceDictionary.MergedDictionaries>
|
||||
<ResourceDictionary Source="pack://application:,,,/Resources/Dark.xaml" />
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
|
|
@ -33,6 +34,15 @@
|
|||
<ResourceDictionary Source="pack://application:,,,/Themes/Win11Light.xaml" />
|
||||
<ResourceDictionary Source="pack://application:,,,/Languages/en.xaml" />
|
||||
</ResourceDictionary.MergedDictionaries>
|
||||
|
||||
<!-- Override styles in UI.Modern.WPF -->
|
||||
<Thickness x:Key="ListViewItemCompactSelectedBorderThemeThickness">2</Thickness>
|
||||
<sys:Double x:Key="CheckBoxMinWidth">0</sys:Double>
|
||||
<sys:Double x:Key="GridViewItemMinWidth">0</sys:Double>
|
||||
<sys:Double x:Key="GridViewItemMinHeight">40</sys:Double>
|
||||
<sys:Double x:Key="ListViewItemMinWidth">0</sys:Double>
|
||||
<sys:Double x:Key="ListViewItemMinHeight">36</sys:Double>
|
||||
<SolidColorBrush x:Key="NavigationViewSelectionIndicatorForeground" Color="#FF0063B1" />
|
||||
</ResourceDictionary>
|
||||
</Application.Resources>
|
||||
</Application>
|
||||
|
|
@ -22,6 +22,7 @@ using Flow.Launcher.Infrastructure.UserSettings;
|
|||
using Flow.Launcher.Plugin;
|
||||
using Flow.Launcher.SettingPages.ViewModels;
|
||||
using Flow.Launcher.ViewModel;
|
||||
using iNKORE.UI.WPF.Modern.Common;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.VisualStudio.Threading;
|
||||
|
|
@ -45,6 +46,7 @@ namespace Flow.Launcher
|
|||
private static Settings _settings;
|
||||
private static MainWindow _mainWindow;
|
||||
private readonly MainViewModel _mainVM;
|
||||
private readonly Internationalization _internationalization;
|
||||
|
||||
// To prevent two disposals running at the same time.
|
||||
private static readonly object _disposingLock = new();
|
||||
|
|
@ -55,6 +57,9 @@ namespace Flow.Launcher
|
|||
|
||||
public App()
|
||||
{
|
||||
// Do not use bitmap cache since it can cause WPF second window freezing issue
|
||||
ShadowAssist.UseBitmapCache = false;
|
||||
|
||||
// Initialize settings
|
||||
_settings.WMPInstalled = WindowsMediaPlayerHelper.IsWindowsMediaPlayerInstalled();
|
||||
|
||||
|
|
@ -107,6 +112,7 @@ namespace Flow.Launcher
|
|||
API = Ioc.Default.GetRequiredService<IPublicAPI>();
|
||||
_settings.Initialize();
|
||||
_mainVM = Ioc.Default.GetRequiredService<MainViewModel>();
|
||||
_internationalization = Ioc.Default.GetRequiredService<Internationalization>();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
|
|
@ -181,20 +187,23 @@ namespace Flow.Launcher
|
|||
// So set to OnExplicitShutdown to prevent the application from shutting down before main window is created
|
||||
Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
|
||||
|
||||
// Setup log level before any logging is done
|
||||
Log.SetLogLevel(_settings.LogLevel);
|
||||
|
||||
// Update dynamic resources base on settings
|
||||
Current.Resources["SettingWindowFont"] = new FontFamily(_settings.SettingWindowFont);
|
||||
Current.Resources["ContentControlThemeFontFamily"] = new FontFamily(_settings.SettingWindowFont);
|
||||
|
||||
// Initialize notification system before any notification api is called
|
||||
Notification.Install();
|
||||
|
||||
// Enable Win32 dark mode if the system is in dark mode before creating all windows
|
||||
Win32Helper.EnableWin32DarkMode(_settings.ColorScheme);
|
||||
|
||||
// Initialize language before portable clean up since it needs translations
|
||||
await Ioc.Default.GetRequiredService<Internationalization>().InitializeLanguageAsync();
|
||||
await _internationalization.InitializeLanguageAsync();
|
||||
|
||||
// Clean up after portability update
|
||||
Ioc.Default.GetRequiredService<Portable>().PreStartCleanUpAfterPortabilityUpdate();
|
||||
|
||||
API.LogInfo(ClassName, "Begin Flow Launcher startup ----------------------------------------------------");
|
||||
|
|
@ -204,32 +213,25 @@ namespace Flow.Launcher
|
|||
RegisterDispatcherUnhandledException();
|
||||
RegisterTaskSchedulerUnhandledException();
|
||||
|
||||
var imageLoadertask = ImageLoader.InitializeAsync();
|
||||
|
||||
AbstractPluginEnvironment.PreStartPluginExecutablePathUpdate(_settings);
|
||||
|
||||
PluginManager.LoadPlugins(_settings.PluginSettings);
|
||||
|
||||
// Register ResultsUpdated event after all plugins are loaded
|
||||
Ioc.Default.GetRequiredService<MainViewModel>().RegisterResultsUpdatedEvent();
|
||||
var imageLoaderTask = ImageLoader.InitializeAsync();
|
||||
|
||||
Http.Proxy = _settings.Proxy;
|
||||
|
||||
// Initialize plugin manifest before initializing plugins so that they can use the manifest instantly
|
||||
await API.UpdatePluginManifestAsync();
|
||||
|
||||
await PluginManager.InitializePluginsAsync();
|
||||
|
||||
// Update plugin titles after plugins are initialized with their api instances
|
||||
Internationalization.UpdatePluginMetadataTranslations();
|
||||
|
||||
await imageLoadertask;
|
||||
await imageLoaderTask;
|
||||
|
||||
_mainWindow = new MainWindow();
|
||||
|
||||
Current.MainWindow = _mainWindow;
|
||||
Current.MainWindow.Title = Constant.FlowLauncher;
|
||||
|
||||
// Initialize Dialog Jump before hotkey mapper since hotkey mapper will register its hotkey
|
||||
// Initialize Dialog Jump after main window is created so that it can access main window handle
|
||||
DialogJump.InitializeDialogJump();
|
||||
DialogJump.SetupDialogJump(_settings.EnableDialogJump);
|
||||
|
||||
// Initialize hotkey mapper instantly after main window is created because
|
||||
// it will steal focus from main window which causes window hide
|
||||
HotKeyMapper.Initialize();
|
||||
|
|
@ -237,19 +239,43 @@ namespace Flow.Launcher
|
|||
// Initialize theme for main window
|
||||
Ioc.Default.GetRequiredService<Theme>().ChangeTheme();
|
||||
|
||||
DialogJump.InitializeDialogJump(PluginManager.GetDialogJumpExplorers(), PluginManager.GetDialogJumpDialogs());
|
||||
DialogJump.SetupDialogJump(_settings.EnableDialogJump);
|
||||
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
|
||||
RegisterExitEvents();
|
||||
|
||||
AutoStartup();
|
||||
AutoUpdates();
|
||||
AutoPluginUpdates();
|
||||
|
||||
API.SaveAppAllSettings();
|
||||
API.LogInfo(ClassName, "End Flow Launcher startup ----------------------------------------------------");
|
||||
API.LogInfo(ClassName, "End Flow Launcher startup ------------------------------------------------------");
|
||||
|
||||
_ = API.StopwatchLogInfoAsync(ClassName, "Startup cost", async () =>
|
||||
{
|
||||
API.LogInfo(ClassName, "Begin plugin initialization ----------------------------------------------------");
|
||||
|
||||
AbstractPluginEnvironment.PreStartPluginExecutablePathUpdate(_settings);
|
||||
|
||||
PluginManager.LoadPlugins(_settings.PluginSettings);
|
||||
|
||||
await PluginManager.InitializePluginsAsync(_mainVM);
|
||||
|
||||
// Refresh the history results after plugins are initialized so that we can parse the absolute icon paths
|
||||
_mainVM.RefreshLastOpenedHistoryResults();
|
||||
|
||||
// Refresh home page after plugins are initialized because users may open main window during plugin initialization
|
||||
// And home page is created without full plugin list
|
||||
if (_settings.ShowHomePage && _mainVM.QueryResultsSelected() && string.IsNullOrEmpty(_mainVM.QueryText))
|
||||
{
|
||||
_mainVM.QueryResults();
|
||||
}
|
||||
|
||||
AutoPluginUpdates();
|
||||
|
||||
// Save all settings since we possibly update the plugin environment paths
|
||||
API.SaveAppAllSettings();
|
||||
|
||||
API.LogInfo(ClassName, "End plugin initialization ------------------------------------------------------");
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
@ -274,7 +300,7 @@ namespace Flow.Launcher
|
|||
// but if it fails (permissions, etc) then don't keep retrying
|
||||
// this also gives the user a visual indication in the Settings widget
|
||||
_settings.StartFlowLauncherOnSystemStartup = false;
|
||||
API.ShowMsgError(API.GetTranslation("setAutoStartFailed"), e.Message);
|
||||
API.ShowMsgError(Localize.setAutoStartFailed(), e.Message);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -421,6 +447,7 @@ namespace Flow.Launcher
|
|||
_mainWindow?.Dispatcher.Invoke(_mainWindow.Dispose);
|
||||
_mainVM?.Dispose();
|
||||
DialogJump.Dispose();
|
||||
_internationalization.Dispose();
|
||||
}
|
||||
|
||||
API.LogInfo(ClassName, "End Flow Launcher dispose ----------------------------------------------------");
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@ using System.Windows.Input;
|
|||
|
||||
namespace Flow.Launcher.Converters;
|
||||
|
||||
internal class BoolToIMEConversionModeConverter : IValueConverter
|
||||
public class BoolToIMEConversionModeConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
|
|
@ -22,7 +22,7 @@ internal class BoolToIMEConversionModeConverter : IValueConverter
|
|||
}
|
||||
}
|
||||
|
||||
internal class BoolToIMEStateConverter : IValueConverter
|
||||
public class BoolToIMEStateConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
|
|
|
|||
91
Flow.Launcher/Converters/CornerRadiusFilterConverter.cs
Normal file
91
Flow.Launcher/Converters/CornerRadiusFilterConverter.cs
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using System.Windows;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Flow.Launcher.Converters;
|
||||
|
||||
public class CornerRadiusFilterConverter : DependencyObject, IValueConverter
|
||||
{
|
||||
public CornerRadiusFilterKind Filter { get; set; }
|
||||
|
||||
public double Scale { get; set; } = 1.0;
|
||||
|
||||
public static CornerRadius Convert(CornerRadius radius, CornerRadiusFilterKind filterKind)
|
||||
{
|
||||
CornerRadius result = radius;
|
||||
|
||||
switch (filterKind)
|
||||
{
|
||||
case CornerRadiusFilterKind.Top:
|
||||
result.BottomLeft = 0;
|
||||
result.BottomRight = 0;
|
||||
break;
|
||||
case CornerRadiusFilterKind.Right:
|
||||
result.TopLeft = 0;
|
||||
result.BottomLeft = 0;
|
||||
break;
|
||||
case CornerRadiusFilterKind.Bottom:
|
||||
result.TopLeft = 0;
|
||||
result.TopRight = 0;
|
||||
break;
|
||||
case CornerRadiusFilterKind.Left:
|
||||
result.TopRight = 0;
|
||||
result.BottomRight = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
var cornerRadius = (CornerRadius)value;
|
||||
|
||||
var scale = Scale;
|
||||
if (!double.IsNaN(scale))
|
||||
{
|
||||
cornerRadius.TopLeft *= scale;
|
||||
cornerRadius.TopRight *= scale;
|
||||
cornerRadius.BottomRight *= scale;
|
||||
cornerRadius.BottomLeft *= scale;
|
||||
}
|
||||
|
||||
var filterType = Filter;
|
||||
if (filterType == CornerRadiusFilterKind.TopLeftValue ||
|
||||
filterType == CornerRadiusFilterKind.BottomRightValue)
|
||||
{
|
||||
return GetDoubleValue(cornerRadius, filterType);
|
||||
}
|
||||
|
||||
return Convert(cornerRadius, filterType);
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
private static double GetDoubleValue(CornerRadius radius, CornerRadiusFilterKind filterKind)
|
||||
{
|
||||
switch (filterKind)
|
||||
{
|
||||
case CornerRadiusFilterKind.TopLeftValue:
|
||||
return radius.TopLeft;
|
||||
case CornerRadiusFilterKind.BottomRightValue:
|
||||
return radius.BottomRight;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
public enum CornerRadiusFilterKind
|
||||
{
|
||||
None,
|
||||
Top,
|
||||
Right,
|
||||
Bottom,
|
||||
Left,
|
||||
TopLeftValue,
|
||||
BottomRightValue
|
||||
}
|
||||
32
Flow.Launcher/Converters/PlacementRectangleConverter.cs
Normal file
32
Flow.Launcher/Converters/PlacementRectangleConverter.cs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using System.Windows;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Flow.Launcher.Converters;
|
||||
|
||||
public class PlacementRectangleConverter : IMultiValueConverter
|
||||
{
|
||||
public Thickness Margin { get; set; }
|
||||
|
||||
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
if (values.Length == 2 &&
|
||||
values[0] is double width &&
|
||||
values[1] is double height)
|
||||
{
|
||||
var margin = Margin;
|
||||
var topLeft = new Point(margin.Left, margin.Top);
|
||||
var bottomRight = new Point(width - margin.Right, height - margin.Bottom);
|
||||
var rect = new Rect(topLeft, bottomRight);
|
||||
return rect;
|
||||
}
|
||||
|
||||
return Rect.Empty;
|
||||
}
|
||||
|
||||
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
19
Flow.Launcher/Converters/SharedSizeGroupConverter.cs
Normal file
19
Flow.Launcher/Converters/SharedSizeGroupConverter.cs
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
using System;
|
||||
using System.Globalization;
|
||||
using System.Windows;
|
||||
using System.Windows.Data;
|
||||
|
||||
namespace Flow.Launcher.Converters;
|
||||
|
||||
public class SharedSizeGroupConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
return (Visibility)value != Visibility.Collapsed ? (string)parameter : null;
|
||||
}
|
||||
|
||||
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
|
|
@ -5,7 +5,7 @@ using System.Windows.Input;
|
|||
|
||||
namespace Flow.Launcher.Converters;
|
||||
|
||||
class StringToKeyBindingConverter : IValueConverter
|
||||
public class StringToKeyBindingConverter : IValueConverter
|
||||
{
|
||||
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ namespace Flow.Launcher
|
|||
|
||||
if (string.IsNullOrEmpty(Hotkey) && string.IsNullOrEmpty(ActionKeyword))
|
||||
{
|
||||
App.API.ShowMsgBox(App.API.GetTranslation("emptyPluginHotkey"));
|
||||
App.API.ShowMsgBox(Localize.emptyPluginHotkey());
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -40,14 +40,14 @@ namespace Flow.Launcher
|
|||
{
|
||||
if (string.IsNullOrEmpty(Key) || string.IsNullOrEmpty(Value))
|
||||
{
|
||||
App.API.ShowMsgBox(App.API.GetTranslation("emptyShortcut"));
|
||||
App.API.ShowMsgBox(Localize.emptyShortcut());
|
||||
return;
|
||||
}
|
||||
|
||||
// Check if key is modified or adding a new one
|
||||
if (((update && originalKey != Key) || !update) && _hotkeyVm.DoesShortcutExist(Key))
|
||||
{
|
||||
App.API.ShowMsgBox(App.API.GetTranslation("duplicateShortcut"));
|
||||
App.API.ShowMsgBox(Localize.duplicateShortcut());
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@
|
|||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<Prefer32Bit>false</Prefer32Bit>
|
||||
<NoWarn>$(NoWarn);FLSG0007</NoWarn>
|
||||
</PropertyGroup>
|
||||
|
||||
<Target Name="RemoveUnnecessaryRuntimesAfterBuild" AfterTargets="Build">
|
||||
|
|
@ -132,27 +133,26 @@
|
|||
<ItemGroup>
|
||||
<PackageReference Include="ChefKeys" Version="0.1.2" />
|
||||
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
|
||||
<PackageReference Include="Fody" Version="6.9.2">
|
||||
<PackageReference Include="Flow.Launcher.Localization" Version="0.0.6" />
|
||||
<PackageReference Include="Fody" Version="6.9.3">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="iNKORE.UI.WPF.Modern" Version="0.10.1" />
|
||||
<PackageReference Include="MdXaml" Version="1.27.0" />
|
||||
<PackageReference Include="MdXaml.AnimatedGif" Version="1.27.0" />
|
||||
<PackageReference Include="MdXaml.Html" Version="1.27.0" />
|
||||
<PackageReference Include="MdXaml.Plugins" Version="1.27.0" />
|
||||
<PackageReference Include="MdXaml.Svg" Version="1.27.0" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.7" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.7" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.9" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.9" />
|
||||
<PackageReference Include="Microsoft.Toolkit.Uwp.Notifications" Version="7.1.3" />
|
||||
<!-- ModernWpfUI v0.9.5 introduced WinRT changes that causes Notification platform unavailable error on some machines -->
|
||||
<!-- https://github.com/Flow-Launcher/Flow.Launcher/issues/1772#issuecomment-1502440801 -->
|
||||
<PackageReference Include="ModernWpfUI" Version="0.9.4" />
|
||||
<PackageReference Include="PropertyChanged.Fody" Version="4.1.0">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="SemanticVersioning" Version="3.0.0" />
|
||||
<PackageReference Include="TaskScheduler" Version="2.12.2" />
|
||||
<PackageReference Include="VirtualizingWrapPanel" Version="2.3.0" />
|
||||
<PackageReference Include="VirtualizingWrapPanel" Version="2.3.1" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
|
@ -161,6 +161,10 @@
|
|||
<ProjectReference Include="..\Flow.Launcher.Plugin\Flow.Launcher.Plugin.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<PropertyGroup>
|
||||
<FLLUseDependencyInjection>true</FLLUseDependencyInjection>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<Content Include="Resources\open.wav">
|
||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||
|
|
@ -181,7 +185,7 @@
|
|||
</Target>
|
||||
|
||||
<Target Name="RemoveDuplicateAnalyzers" BeforeTargets="CoreCompile">
|
||||
<!-- Work around https://github.com/dotnet/wpf/issues/6792 -->
|
||||
<!-- Workaround https://github.com/dotnet/wpf/issues/6792 -->
|
||||
<ItemGroup>
|
||||
<FilteredAnalyzer Include="@(Analyzer->Distinct())" />
|
||||
<Analyzer Remove="@(Analyzer)" />
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using System.Security.Principal;
|
||||
using Flow.Launcher.Infrastructure;
|
||||
|
|
@ -64,7 +65,9 @@ public class AutoStartup
|
|||
if (task.Definition.Actions.FirstOrDefault() is Microsoft.Win32.TaskScheduler.Action taskAction)
|
||||
{
|
||||
var action = taskAction.ToString().Trim();
|
||||
if (!action.Equals(Constant.ExecutablePath, StringComparison.OrdinalIgnoreCase))
|
||||
var needsRecreation = !action.Equals(Constant.ExecutablePath, StringComparison.OrdinalIgnoreCase)
|
||||
|| task.Definition.Settings.Priority != ProcessPriorityClass.Normal;
|
||||
if (needsRecreation)
|
||||
{
|
||||
UnscheduleLogonTask();
|
||||
ScheduleLogonTask();
|
||||
|
|
@ -184,6 +187,7 @@ public class AutoStartup
|
|||
td.Settings.StopIfGoingOnBatteries = false;
|
||||
td.Settings.DisallowStartIfOnBatteries = false;
|
||||
td.Settings.ExecutionTimeLimit = TimeSpan.Zero;
|
||||
td.Settings.Priority = ProcessPriorityClass.Normal;
|
||||
|
||||
try
|
||||
{
|
||||
|
|
|
|||
33
Flow.Launcher/Helper/BorderHelper.cs
Normal file
33
Flow.Launcher/Helper/BorderHelper.cs
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
using System.Windows;
|
||||
using System.Windows.Controls;
|
||||
|
||||
namespace Flow.Launcher.Helper;
|
||||
|
||||
public static class BorderHelper
|
||||
{
|
||||
#region Child
|
||||
|
||||
public static readonly DependencyProperty ChildProperty =
|
||||
DependencyProperty.RegisterAttached(
|
||||
"Child",
|
||||
typeof(UIElement),
|
||||
typeof(BorderHelper),
|
||||
new PropertyMetadata(default(UIElement), OnChildChanged));
|
||||
|
||||
public static UIElement GetChild(Border border)
|
||||
{
|
||||
return (UIElement)border.GetValue(ChildProperty);
|
||||
}
|
||||
|
||||
public static void SetChild(Border border, UIElement value)
|
||||
{
|
||||
border.SetValue(ChildProperty, value);
|
||||
}
|
||||
|
||||
private static void OnChildChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
|
||||
{
|
||||
((Border)d).Child = (UIElement)e.NewValue;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
|
|
@ -16,6 +16,15 @@ public static class ErrorReporting
|
|||
var logger = LogManager.GetLogger(methodName);
|
||||
logger.Fatal(ExceptionFormatter.FormatExcpetion(e));
|
||||
if (silent) return;
|
||||
|
||||
// Workaround for issue https://github.com/Flow-Launcher/Flow.Launcher/issues/4016
|
||||
// The crash occurs in PresentationFramework.dll, not necessarily when the Runner UI is visible, originating from this line:
|
||||
// https://github.com/dotnet/wpf/blob/3439f20fb8c685af6d9247e8fd2978cac42e74ac/src/Microsoft.DotNet.Wpf/src/PresentationFramework/System/Windows/Shell/WindowChromeWorker.cs#L1005
|
||||
// Many bug reports because users see the "Error report UI" after the crash with System.Runtime.InteropServices.COMException 0xD0000701 or 0x80263001.
|
||||
// However, displaying this "Error report UI" during WPF crashes, especially when DWM composition is changing, is not ideal; some users reported it hangs for up to a minute before the it appears.
|
||||
// This change modifies the behavior to log the exception instead of showing the "Error report UI".
|
||||
if (ExceptionHelper.IsRecoverableDwmCompositionException(e)) return;
|
||||
|
||||
var reportWindow = new ReportWindow(e);
|
||||
reportWindow.Show();
|
||||
}
|
||||
|
|
|
|||
42
Flow.Launcher/Helper/ExceptionHelper.cs
Normal file
42
Flow.Launcher/Helper/ExceptionHelper.cs
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
// This is a direct copy of the file at https://github.com/microsoft/PowerToys/blob/main/src/modules/launcher/PowerLauncher/Helper/ExceptionHelper.cs and adapted for flow.
|
||||
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace Flow.Launcher.Helper;
|
||||
|
||||
internal static class ExceptionHelper
|
||||
{
|
||||
private const string PresentationFrameworkExceptionSource = "PresentationFramework";
|
||||
|
||||
private const int DWM_E_COMPOSITIONDISABLED = unchecked((int)0x80263001);
|
||||
|
||||
// HRESULT for NT STATUS STATUS_MESSAGE_LOST (0xC0000701 | 0x10000000 == 0xD0000701)
|
||||
private const int STATUS_MESSAGE_LOST_HR = unchecked((int)0xD0000701);
|
||||
|
||||
/// <summary>
|
||||
/// Returns true if the exception is a recoverable DWM composition exception.
|
||||
/// </summary>
|
||||
internal static bool IsRecoverableDwmCompositionException(Exception exception)
|
||||
{
|
||||
if (exception is not COMException comException)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (comException.HResult is DWM_E_COMPOSITIONDISABLED)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (comException.HResult is STATUS_MESSAGE_LOST_HR && comException.Source == PresentationFrameworkExceptionSource)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check for common DWM composition changed patterns in the stack trace
|
||||
var stackTrace = comException.StackTrace;
|
||||
return !string.IsNullOrEmpty(stackTrace) &&
|
||||
stackTrace.Contains("DwmCompositionChanged", StringComparison.OrdinalIgnoreCase);
|
||||
}
|
||||
}
|
||||
|
|
@ -61,8 +61,8 @@ internal static class HotKeyMapper
|
|||
string.Format("|HotkeyMapper.SetWithChefKeys|Error registering hotkey: {0} \nStackTrace:{1}",
|
||||
e.Message,
|
||||
e.StackTrace));
|
||||
string errorMsg = string.Format(App.API.GetTranslation("registerHotkeyFailed"), hotkeyStr);
|
||||
string errorMsgTitle = App.API.GetTranslation("MessageBoxTitle");
|
||||
string errorMsg = Localize.registerHotkeyFailed(hotkeyStr);
|
||||
string errorMsgTitle = Localize.MessageBoxTitle();
|
||||
App.API.ShowMsgBox(errorMsg, errorMsgTitle);
|
||||
}
|
||||
}
|
||||
|
|
@ -87,8 +87,8 @@ internal static class HotKeyMapper
|
|||
e.Message,
|
||||
e.StackTrace,
|
||||
hotkeyStr));
|
||||
string errorMsg = string.Format(App.API.GetTranslation("registerHotkeyFailed"), hotkeyStr);
|
||||
string errorMsgTitle = App.API.GetTranslation("MessageBoxTitle");
|
||||
string errorMsg = Localize.registerHotkeyFailed(hotkeyStr);
|
||||
string errorMsgTitle = Localize.MessageBoxTitle();
|
||||
App.API.ShowMsgBox(errorMsg, errorMsgTitle);
|
||||
}
|
||||
}
|
||||
|
|
@ -112,8 +112,8 @@ internal static class HotKeyMapper
|
|||
string.Format("|HotkeyMapper.RemoveHotkey|Error removing hotkey: {0} \nStackTrace:{1}",
|
||||
e.Message,
|
||||
e.StackTrace));
|
||||
string errorMsg = string.Format(App.API.GetTranslation("unregisterHotkeyFailed"), hotkeyStr);
|
||||
string errorMsgTitle = App.API.GetTranslation("MessageBoxTitle");
|
||||
string errorMsg = Localize.unregisterHotkeyFailed(hotkeyStr);
|
||||
string errorMsgTitle = Localize.MessageBoxTitle();
|
||||
App.API.ShowMsgBox(errorMsg, errorMsgTitle);
|
||||
}
|
||||
}
|
||||
|
|
@ -143,6 +143,8 @@ internal static class HotKeyMapper
|
|||
return;
|
||||
|
||||
App.API.ShowMainWindow();
|
||||
// Make sure to go back to the query results page first since it can cause issues if current page is context menu
|
||||
App.API.BackToQueryResults();
|
||||
App.API.ChangeQuery(hotkey.ActionKeyword, true);
|
||||
});
|
||||
}
|
||||
|
|
|
|||
45
Flow.Launcher/Helper/ResultHelper.cs
Normal file
45
Flow.Launcher/Helper/ResultHelper.cs
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Flow.Launcher.Core.Plugin;
|
||||
using Flow.Launcher.Plugin;
|
||||
using Flow.Launcher.Storage;
|
||||
|
||||
namespace Flow.Launcher.Helper;
|
||||
|
||||
#nullable enable
|
||||
|
||||
public static class ResultHelper
|
||||
{
|
||||
public static async Task<Result?> PopulateResultsAsync(LastOpenedHistoryResult item)
|
||||
{
|
||||
return await PopulateResultsAsync(item.PluginID, item.Query, item.Title, item.SubTitle, item.RecordKey);
|
||||
}
|
||||
|
||||
public static async Task<Result?> PopulateResultsAsync(string pluginId, string trimmedQuery, string title, string subTitle, string recordKey)
|
||||
{
|
||||
var plugin = PluginManager.GetPluginForId(pluginId);
|
||||
if (plugin == null) return null;
|
||||
var query = QueryBuilder.Build(trimmedQuery, trimmedQuery, PluginManager.GetNonGlobalPlugins());
|
||||
if (query == null) return null;
|
||||
try
|
||||
{
|
||||
var freshResults = await PluginManager.QueryForPluginAsync(plugin, query, CancellationToken.None);
|
||||
// Try to match by record key first if it is valid, otherwise fall back to title + subtitle match
|
||||
if (string.IsNullOrEmpty(recordKey))
|
||||
{
|
||||
return freshResults?.FirstOrDefault(r => r.Title == title && r.SubTitle == subTitle);
|
||||
}
|
||||
else
|
||||
{
|
||||
return freshResults?.FirstOrDefault(r => r.RecordKey == recordKey) ??
|
||||
freshResults?.FirstOrDefault(r => r.Title == title && r.SubTitle == subTitle);
|
||||
}
|
||||
}
|
||||
catch (System.Exception e)
|
||||
{
|
||||
App.API.LogException(nameof(ResultHelper), $"Failed to query results for {plugin.Metadata.Name}", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@
|
|||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using System.Windows;
|
||||
using System.Windows.Media;
|
||||
using System.Windows.Media.Imaging;
|
||||
|
|
@ -16,7 +17,7 @@ public static class WallpaperPathRetrieval
|
|||
|
||||
private const int MaxCacheSize = 3;
|
||||
private static readonly Dictionary<(string, DateTime), ImageBrush> WallpaperCache = new();
|
||||
private static readonly object CacheLock = new();
|
||||
private static readonly Lock CacheLock = new();
|
||||
|
||||
public static Brush GetWallpaperBrush()
|
||||
{
|
||||
|
|
@ -31,7 +32,7 @@ public static class WallpaperPathRetrieval
|
|||
var wallpaperPath = Win32Helper.GetWallpaperPath();
|
||||
if (string.IsNullOrEmpty(wallpaperPath) || !File.Exists(wallpaperPath))
|
||||
{
|
||||
App.API.LogInfo(ClassName, $"Wallpaper path is invalid: {wallpaperPath}");
|
||||
App.API.LogError(ClassName, $"Wallpaper path is invalid: {wallpaperPath}");
|
||||
var wallpaperColor = GetWallpaperColor();
|
||||
return new SolidColorBrush(wallpaperColor);
|
||||
}
|
||||
|
|
@ -47,17 +48,22 @@ public static class WallpaperPathRetrieval
|
|||
return cachedWallpaper;
|
||||
}
|
||||
}
|
||||
|
||||
using var fileStream = File.OpenRead(wallpaperPath);
|
||||
var decoder = BitmapDecoder.Create(fileStream, BitmapCreateOptions.DelayCreation, BitmapCacheOption.None);
|
||||
var frame = decoder.Frames[0];
|
||||
var originalWidth = frame.PixelWidth;
|
||||
var originalHeight = frame.PixelHeight;
|
||||
|
||||
int originalWidth, originalHeight;
|
||||
// Use `using ()` instead of `using var` sentence here to ensure the wallpaper file is not locked
|
||||
using (var fileStream = File.OpenRead(wallpaperPath))
|
||||
{
|
||||
var decoder = BitmapDecoder.Create(fileStream, BitmapCreateOptions.DelayCreation, BitmapCacheOption.None);
|
||||
var frame = decoder.Frames[0];
|
||||
originalWidth = frame.PixelWidth;
|
||||
originalHeight = frame.PixelHeight;
|
||||
}
|
||||
|
||||
if (originalWidth == 0 || originalHeight == 0)
|
||||
{
|
||||
App.API.LogInfo(ClassName, $"Failed to load bitmap: Width={originalWidth}, Height={originalHeight}");
|
||||
return new SolidColorBrush(Colors.Transparent);
|
||||
App.API.LogError(ClassName, $"Failed to load bitmap: Width={originalWidth}, Height={originalHeight}");
|
||||
var wallpaperColor = GetWallpaperColor();
|
||||
return new SolidColorBrush(wallpaperColor);
|
||||
}
|
||||
|
||||
// Calculate the scaling factor to fit the image within 800x600 while preserving aspect ratio
|
||||
|
|
@ -70,7 +76,9 @@ public static class WallpaperPathRetrieval
|
|||
// Set DecodePixelWidth and DecodePixelHeight to resize the image while preserving aspect ratio
|
||||
var bitmap = new BitmapImage();
|
||||
bitmap.BeginInit();
|
||||
bitmap.CacheOption = BitmapCacheOption.OnLoad; // Use OnLoad to ensure the wallpaper file is not locked
|
||||
bitmap.UriSource = new Uri(wallpaperPath);
|
||||
bitmap.CreateOptions = BitmapCreateOptions.IgnoreColorProfile;
|
||||
bitmap.DecodePixelWidth = decodedPixelWidth;
|
||||
bitmap.DecodePixelHeight = decodedPixelHeight;
|
||||
bitmap.EndInit();
|
||||
|
|
@ -104,13 +112,13 @@ public static class WallpaperPathRetrieval
|
|||
|
||||
private static Color GetWallpaperColor()
|
||||
{
|
||||
RegistryKey key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Colors", false);
|
||||
using var key = Registry.CurrentUser.OpenSubKey(@"Control Panel\Colors", false);
|
||||
var result = key?.GetValue("Background", null);
|
||||
if (result is string strResult)
|
||||
{
|
||||
try
|
||||
{
|
||||
var parts = strResult.Trim().Split(new[] { ' ' }, 3).Select(byte.Parse).ToList();
|
||||
var parts = strResult.Trim().Split([' '], 3).Select(byte.Parse).ToList();
|
||||
return Color.FromRgb(parts[0], parts[1], parts[2]);
|
||||
}
|
||||
catch (Exception ex)
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using System.Collections.ObjectModel;
|
||||
using System.Collections.ObjectModel;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
using System.Windows.Input;
|
||||
|
|
@ -234,7 +234,7 @@ namespace Flow.Launcher
|
|||
private static bool CheckHotkeyAvailability(HotkeyModel hotkey, bool validateKeyGesture) =>
|
||||
hotkey.Validate(validateKeyGesture) && HotKeyMapper.CheckAvailability(hotkey);
|
||||
|
||||
public string EmptyHotkey => App.API.GetTranslation("none");
|
||||
public string EmptyHotkey => Localize.none();
|
||||
|
||||
public ObservableCollection<string> KeysToDisplay { get; set; } = new();
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
x:Class="Flow.Launcher.HotkeyControlDialog"
|
||||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||||
xmlns:ui="http://schemas.modernwpf.com/2019"
|
||||
xmlns:ui="http://schemas.inkore.net/lib/ui/wpf/modern"
|
||||
Background="{DynamicResource PopuBGColor}"
|
||||
BorderBrush="{DynamicResource PopupButtonAreaBorderColor}"
|
||||
BorderThickness="0 1 0 0"
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ using Flow.Launcher.Helper;
|
|||
using Flow.Launcher.Infrastructure.Hotkey;
|
||||
using Flow.Launcher.Infrastructure.UserSettings;
|
||||
using Flow.Launcher.Plugin;
|
||||
using ModernWpf.Controls;
|
||||
using iNKORE.UI.WPF.Modern.Controls;
|
||||
|
||||
namespace Flow.Launcher;
|
||||
|
||||
|
|
@ -33,7 +33,7 @@ public partial class HotkeyControlDialog : ContentDialog
|
|||
|
||||
public EResultType ResultType { get; private set; } = EResultType.Cancel;
|
||||
public string ResultValue { get; private set; } = string.Empty;
|
||||
public static string EmptyHotkey => App.API.GetTranslation("none");
|
||||
public static string EmptyHotkey => Localize.none();
|
||||
|
||||
private static bool isOpenFlowHotkey;
|
||||
|
||||
|
|
@ -41,7 +41,7 @@ public partial class HotkeyControlDialog : ContentDialog
|
|||
{
|
||||
WindowTitle = windowTitle switch
|
||||
{
|
||||
"" or null => App.API.GetTranslation("hotkeyRegTitle"),
|
||||
"" or null => Localize.hotkeyRegTitle(),
|
||||
_ => windowTitle
|
||||
};
|
||||
DefaultHotkey = defaultHotkey;
|
||||
|
|
@ -146,10 +146,7 @@ public partial class HotkeyControlDialog : ContentDialog
|
|||
Alert.Visibility = Visibility.Visible;
|
||||
if (registeredHotkeyData.RemoveHotkey is not null)
|
||||
{
|
||||
tbMsg.Text = string.Format(
|
||||
App.API.GetTranslation("hotkeyUnavailableEditable"),
|
||||
description
|
||||
);
|
||||
tbMsg.Text = Localize.hotkeyUnavailableEditable(description);
|
||||
SaveBtn.IsEnabled = false;
|
||||
SaveBtn.Visibility = Visibility.Collapsed;
|
||||
OverwriteBtn.IsEnabled = true;
|
||||
|
|
@ -158,10 +155,7 @@ public partial class HotkeyControlDialog : ContentDialog
|
|||
}
|
||||
else
|
||||
{
|
||||
tbMsg.Text = string.Format(
|
||||
App.API.GetTranslation("hotkeyUnavailableUneditable"),
|
||||
description
|
||||
);
|
||||
tbMsg.Text = Localize.hotkeyUnavailableUneditable(description);
|
||||
SaveBtn.IsEnabled = false;
|
||||
SaveBtn.Visibility = Visibility.Visible;
|
||||
OverwriteBtn.IsEnabled = false;
|
||||
|
|
@ -175,7 +169,7 @@ public partial class HotkeyControlDialog : ContentDialog
|
|||
|
||||
if (!CheckHotkeyAvailability(hotkey.Value, true))
|
||||
{
|
||||
tbMsg.Text = App.API.GetTranslation("hotkeyUnavailable");
|
||||
tbMsg.Text = Localize.hotkeyUnavailable();
|
||||
Alert.Visibility = Visibility.Visible;
|
||||
SaveBtn.IsEnabled = false;
|
||||
SaveBtn.Visibility = Visibility.Visible;
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">إعادة تعيين الموقع</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">الإعدادات</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">خطأ في إعداد التشغيل عند بدء التشغيل</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">إخفاء Flow Launcher عند فقدان التركيز</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">عدم عرض إشعارات الإصدار الجديد</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">تذكر آخر موقع</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">الإصدار</system:String>
|
||||
<system:String x:Key="plugin_query_web">الموقع الإلكتروني</system:String>
|
||||
<system:String x:Key="plugin_uninstall">إلغاء التثبيت</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">متجر الإضافات</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">الأيقونات</system:String>
|
||||
<system:String x:Key="about_activate_times">لقد قمت بتفعيل Flow Launcher {0} مرات</system:String>
|
||||
<system:String x:Key="checkUpdates">التحقق من التحديثات</system:String>
|
||||
<system:String x:Key="BecomeASponsor">كن راعيا</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">الإصدار الجديد {0} متاح، هل ترغب في إعادة تشغيل Flow Launcher لاستخدام التحديث</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">فشل التحقق من التحديثات، يرجى التحقق من الاتصال وإعدادات البروكسي لـ api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">فتح المجلد</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">Log Level</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">خطأ</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Setting Window Font</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">حجة للملف</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">متصفح الويب الافتراضي</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">نافذة جديدة</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">تبويب جديد</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">الوضع الخاص</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">تغيير الأولوية</system:String>
|
||||
|
|
@ -589,8 +610,9 @@
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">خطأ</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">يرجى الانتظار...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Obnovit pozici</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Nastavení</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Při nastavování spouštění došlo k chybě</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Skrýt Flow Launcher při vykliknutí</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Nezobrazovat oznámení o nové verzi</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Zapamatovat poslední pozici</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Verze</system:String>
|
||||
<system:String x:Key="plugin_query_web">Webová stránka</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Odinstalovat</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Obchod s pluginy</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">Ikony</system:String>
|
||||
<system:String x:Key="about_activate_times">Flow Launcher byl aktivován {0} krát</system:String>
|
||||
<system:String x:Key="checkUpdates">Zkontrolovat Aktualizace</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Staňte se sponzorem</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Je k dispozici nová verze {0}, chcete Flow Launcher restartovat, aby se mohl aktualizovat?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Hledání aktualizací se nezdařilo, zkontrolujte prosím své internetové připojení a nastavení proxy serveru k api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Open Folder</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">Log Level</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Chyba</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Setting Window Font</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Argumenty pro Soubor</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Výchozí prohlížeč</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">Nové okno</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Nová karta</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Soukromý režim</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Změnit prioritu</system:String>
|
||||
|
|
@ -589,8 +610,9 @@ Pokud před zkratku při zadávání přidáte znak "@", bude odpovíd
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Chyba</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Počkejte prosím...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Position Reset</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Indstillinger</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Skjul Flow Launcher ved mistet fokus</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Vis ikke notifikationer om nye versioner</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Version</system:String>
|
||||
<system:String x:Key="plugin_query_web">Hjemmeside</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Uninstall</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Plugin-butik</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">Icons</system:String>
|
||||
<system:String x:Key="about_activate_times">Du har aktiveret Flow Launcher {0} gange</system:String>
|
||||
<system:String x:Key="checkUpdates">Tjek for opdateringer</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Ny version {0} er tilgængelig, genstart venligst Flow Launcher</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Check updates failed, please check your connection and proxy settings to api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Open Folder</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">Log Level</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Error</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Setting Window Font</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Arg for fil</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Default Web Browser</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">New Window</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">New Tab</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Privattilstand</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Skift prioritet</system:String>
|
||||
|
|
@ -589,8 +610,9 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Error</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Please wait...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Zurücksetzen der Position</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Position des Suchfensters zurücksetzen</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Zum Suchen hier tippen</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Einstellungen</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">Nach der Deinstallation müssen Sie diese Aufgabe (Flow.Launcher Startup) via Task-Scheduler manuell entfernen</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Fehler bei Einstellungsstart beim Start</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Flow Launcher ausblenden, wenn Fokus verloren geht</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Versionsbenachrichtigungen nicht zeigen</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Ort des Suchfensters</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Letzte Position merken</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Ergebnisse der Homepage zeigen, wenn Abfragetext leer ist.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Historie-Ergebnisse auf Homepage zeigen</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximal gezeigte Historie-Ergebnisse auf Homepage</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Dies kann nur bearbeitet werden, wenn das Plug-in das Home-Feature unterstützt und die Homepage aktiviert ist.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Suchfenster an vorderster zeigen</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Setzt die Einstellung 'Immer im Vordergrund' anderer Programme außer Kraft und zeigt Flow in der vordersten Position an.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Version</system:String>
|
||||
<system:String x:Key="plugin_query_web">Website</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Deinstallieren</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Plug-in-Einstellungen können nicht entfernt werden</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plug-ins: {0} - Plug-in-Einstellungsdateien können nicht entfernt werden, bitte entfernen Sie diese manuell</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Plug-in-Cache kann nicht entfernt werden</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Plug-in-Store</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">Icons</system:String>
|
||||
<system:String x:Key="about_activate_times">Sie haben Flow Launcher {0} mal aktiviert</system:String>
|
||||
<system:String x:Key="checkUpdates">Nach Updates suchen</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Ein Sponsor werden</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Neue Version {0} ist verfügbar. Möchten Sie Flow Launcher neu starten, um das Update zu verwenden?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Überprüfung der Updates fehlgeschlagen. Bitte überprüfen Sie Ihre Verbindungs- und Proxy-Einstellungen zu api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Ordner öffnen</system:String>
|
||||
<system:String x:Key="advanced">Erweitert</system:String>
|
||||
<system:String x:Key="logLevel">Log-Ebene</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Fehler</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Einstellung der Fensterschriftart</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Arg For File</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">Der Dateimanager '{0}' konnte nicht unter '{1}' gefunden werden. Möchten Sie fortfahren?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">Pfadfehler bei Dateimanager</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Webbrowser per Default</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">Neues Fenster</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Neuer Tab</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Privater Modus</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Priorität ändern</system:String>
|
||||
|
|
@ -589,8 +610,9 @@ Wenn Sie bei der Eingabe eines Shortcuts ein '@'-Präfix hinzufügen, stimmt die
|
|||
Der spezifizierte Dateimanager konnte nicht gefunden werden. Bitte überprüfen Sie die Einstellung des benutzerdefinierten Dateimanagers unter Einstellungen > Allgemein.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Fehler</system:String>
|
||||
<system:String x:Key="folderOpenError">Beim Öffnen des Ordners ist ein Fehler aufgetreten. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">Beim Öffnen der URL im Browser ist ein Fehler aufgetreten. Bitte überprüfen Sie die Konfiguration Ihres Default-Webbrowsers im Abschnitt „Allgemein“ des Einstellungsfensters</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Bitte warten Sie ...</system:String>
|
||||
|
|
|
|||
|
|
@ -66,6 +66,10 @@
|
|||
<system:String x:Key="PositionReset">Position Reset</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Settings</system:String>
|
||||
|
|
@ -77,6 +81,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Hide Flow Launcher when focus is lost</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Do not show new version notifications</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
||||
|
|
@ -166,6 +172,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -209,6 +219,8 @@
|
|||
<system:String x:Key="plugin_query_version">Version</system:String>
|
||||
<system:String x:Key="plugin_query_web">Website</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Uninstall</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
|
|
@ -219,6 +231,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Plugin Store</system:String>
|
||||
|
|
@ -438,7 +454,7 @@
|
|||
<system:String x:Key="icons">Icons</system:String>
|
||||
<system:String x:Key="about_activate_times">You have activated Flow Launcher {0} times</system:String>
|
||||
<system:String x:Key="checkUpdates">Check for Updates</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">New version {0} is available, would you like to restart Flow Launcher to use the update?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Check updates failed, please check your connection and proxy settings to api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -462,8 +478,10 @@
|
|||
<system:String x:Key="userdatapathButton">Open Folder</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">Log Level</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Error</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Setting Window Font</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -485,6 +503,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Arg For File</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Default Web Browser</system:String>
|
||||
|
|
@ -495,6 +514,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">New Window</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">New Tab</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Private Mode</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Change Priority</system:String>
|
||||
|
|
@ -582,8 +603,9 @@
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Error</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Please wait...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Position Reset</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Ajustes</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ocultar Flow Launcher cuando se pierde el enfoque</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">No mostrar notificaciones de nuevas versiones</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Versión</system:String>
|
||||
<system:String x:Key="plugin_query_web">Sitio web</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Uninstall</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Tienda de Plugins</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">Icons</system:String>
|
||||
<system:String x:Key="about_activate_times">Has activado Flow Launcher {0} veces</system:String>
|
||||
<system:String x:Key="checkUpdates">Buscar actualizaciones</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">La nueva versión {0} está disponible, ¿desea reiniciar Flow Launcher para usar la actualización?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Falló la comprobación de actualizaciones, compruebe su conexión y configuración de proxy a api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Open Folder</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">Log Level</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Error</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Setting Window Font</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Arg para Archivo</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Navegador Web Predeterminado</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">Nueva Ventana</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Nueva Pestaña</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Modo Privado</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Cambiar Prioridad</system:String>
|
||||
|
|
@ -589,8 +610,9 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Error</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Por favor espere...</system:String>
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@
|
|||
<system:String x:Key="userDataDuplicated">Flow Launcher ha detectado que los datos de usario existen tanto en {0} como en {1}. {2}{2}Por favor, elimine {1} para continuar. No se han producido cambios.</system:String>
|
||||
|
||||
<!-- Plugin Loader -->
|
||||
<system:String x:Key="pluginHasErrored">El siguiente complemento ha sufrido un error y no puede cargarse:</system:String>
|
||||
<system:String x:Key="pluginsHaveErrored">Los siguientes complementos han sufrido un error y no pueden cargarse:</system:String>
|
||||
<system:String x:Key="pluginHasErrored">El siguiente complemento ha sufrido un fallo y no se puede cargar:</system:String>
|
||||
<system:String x:Key="pluginsHaveErrored">Los siguientes complementos han sufrido un fallo y no se pueden cargar:</system:String>
|
||||
<system:String x:Key="referToLogs">Por favor, consulte los registros para más información</system:String>
|
||||
|
||||
<!-- Http -->
|
||||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Restablecer posición</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Restablece la posición de la ventana de búsqueda</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Escribir aquí para buscar</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: Este complemento aún se está inicializando...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Seleccione este resultado para volver a realizar la consulta</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: ¡No se ha recibido respuesta!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Seleccione este resultado para más información</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Configuración</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">Después de la desinstalación, es necesario eliminar manualmente la tarea (Flow.Launcher Startup) mediante el Programador de Tareas</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Error de configuración de arranque al iniciar</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ocultar Flow Launcher cuando se pierde el foco</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Mostrar la barra de tareas cuando Flow Launcher está abierto</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Muestra temporalmente la barra de tareas cuando Flow Launcher está abierto, útil para barras de tareas que se ocultan automáticamente.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">No mostrar notificaciones de nuevas versiones</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Ubicación de la ventana de búsqueda</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Recordar última ubicación</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Muestra los resultados de la página de inicio cuando el texto de la consulta está vacío.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Mostrar historial de resultados en la página de inicio</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Número máximo de resultados del historial en la página de inicio</system:String>
|
||||
<system:String x:Key="historyStyle">Estilo del historial</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Elija el tipo de historial que desea mostrar en el historial y la página de inicio</system:String>
|
||||
<system:String x:Key="queryHistory">Historial de consultas</system:String>
|
||||
<system:String x:Key="executedHistory">Historial de últimas aperturas</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Esto solo se puede editar si el complemento soporta la función de Inicio y la Página de Inicio está activada.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Mostrar ventana de búsqueda en primer plano</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Anula el ajuste «Siempre arriba» de otros programas y muestra Flow en primer plano.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Versión</system:String>
|
||||
<system:String x:Key="plugin_query_web">Sitio web</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Desinstalar</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Tiempo de retardo de búsqueda: predeterminado</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Tiempo de retardo de búsqueda: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fallo al eliminar la configuración del complemento</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Complementos: {0} - Fallo al eliminar los archivos de configuración del complemento, por favor elimínelos manualmente</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fallo al eliminar la caché del complemento</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fallo al desinstalar {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">No se puede encontrar plugin.json en el archivo zip extraído, o esta ruta {0} no existe</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">Ya existe un complemento con el mismo ID y versión, o la versión es superior a la de este complemento descargado</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error al crear el panel de configuración para el complemento {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requiere la versión {1} de Flow para ejecutarse</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow no cumple los requisitos mínimos de versión para ejecutar {0}. ¿Desea continuar con la instalación?{1}{1}Recomendamos actualizar Flow a la última versión para garantizar que {0} funcione sin problemas.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">No se pudo instalar el plugin porque plugin.json no es válido o está dañado</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Tienda complementos</system:String>
|
||||
|
|
@ -332,7 +348,7 @@
|
|||
<system:String x:Key="PlaceholderTextTip">Cambia el texto del marcador de posición. La entrada vacía utilizará: {0}</system:String>
|
||||
<system:String x:Key="KeepMaxResults">Tamaño fijo de la ventana</system:String>
|
||||
<system:String x:Key="KeepMaxResultsToolTip">El tamaño de la ventana no se puede ajustar mediante arrastre.</system:String>
|
||||
<system:String x:Key="MaxShowResultsCannotWorkWithAlwaysPreview">Since Always Preview is on, maximum results shown may not take effect because preview panel requires a certain minimum height</system:String>
|
||||
<system:String x:Key="MaxShowResultsCannotWorkWithAlwaysPreview">Dado que la vista previa está siempre activada, es posible que no se muestren los resultados máximos, ya que el panel de vista previa requiere una altura mínima determinada</system:String>
|
||||
|
||||
<!-- Setting Hotkey -->
|
||||
<system:String x:Key="hotkey">Atajo de teclado</system:String>
|
||||
|
|
@ -395,7 +411,7 @@
|
|||
<system:String x:Key="showBadges">Mostrar distintivos en resultados</system:String>
|
||||
<system:String x:Key="showBadgesToolTip">Para los complementos compatibles, se muestran distintivos que ayudan a distinguirlos más fácilmente.</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnly">Mostrar distintivos en resultados solo para consulta global</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnlyToolTip">Mostrar distintivos solo para los resultados de consultas globales</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnlyToolTip">Muestra distintivos solo para los resultados de consultas globales</system:String>
|
||||
<system:String x:Key="dialogJumpHotkey">Salto de diálogo</system:String>
|
||||
<system:String x:Key="dialogJumpHotkeyToolTip">Introducir atajo de teclado para acceder rápidamente a la ventana de diálogo Abrir/Guardar como en la ruta del administrador de archivos actual.</system:String>
|
||||
<system:String x:Key="dialogJump">Salto de diálogo</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">Iconos</system:String>
|
||||
<system:String x:Key="about_activate_times">Ha activado Flow Launcher {0} veces</system:String>
|
||||
<system:String x:Key="checkUpdates">Buscar actualizaciones</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Hágase Patrocinador</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Conviértase en Patrocinador</system:String>
|
||||
<system:String x:Key="newVersionTips">La nueva versión {0} está disponible, ¿desea reiniciar Flow Launcher para actualizar?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Ha fallado la comprobación de las actualizaciones, por favor, compruebe la configuración de su proxy y conexión a api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Abrir carpeta</system:String>
|
||||
<system:String x:Key="advanced">Avanzado</system:String>
|
||||
<system:String x:Key="logLevel">Nivel de registro</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Depuración</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silencioso</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Error</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Información</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Depuración</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Configuración de fuente de la ventana</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Argumentos del archivo</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">El administrador de archivos '{0}' no pudo ser localizado en '{1}'. ¿Desea continuar?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">Error de ruta del administrador de archivos</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">Explorador de archivos</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Navegador web predeterminado</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">Nueva ventana</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Nueva pestaña</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Modo privado</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Predeterminado</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">Nuevo perfil</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Cambiar la prioridad</system:String>
|
||||
|
|
@ -589,8 +610,9 @@ Si añade un prefijo "@" al introducir un acceso directo, éste coinci
|
|||
No se ha encontrado el administrador de archivos especificado. Compruebe la configuración del Administrador de archivos personalizado en Configuración > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Error</system:String>
|
||||
<system:String x:Key="folderOpenError">Se ha producido un error al abrir la carpeta. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">Se ha producido un error al abrir la carpeta.</system:String>
|
||||
<system:String x:Key="browserOpenError">Se ha producido un error al abrir la URL en el navegador. Por favor, compruebe la configuración de su navegador web predeterminado en la sección General de la ventana de configuración</system:String>
|
||||
<system:String x:Key="fileNotFoundError">No se encuentra el archivo o directorio: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Por favor espere...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Réinitialiser la position</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Réinitialiser la position de la fenêtre de recherche</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Tapez ici pour rechercher</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: Ce plugin est toujours en cours d'initialisation...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Sélectionner ce résultat pour la requête</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Ne répond pas !</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Sélectionnez ce résultat pour plus d'informations</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Paramètres</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">Après une désinstallation, vous devez supprimer manuellement cette tâche (Flow.Launcher Startup) via le planificateur de tâches</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Erreur lors de la configuration du lancement au démarrage</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Cacher Flow Launcher lors de la perte de focus</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Afficher la barre des tâches lorsque Flow Launcher est ouvert</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Afficher temporairement la barre des tâches lorsque Flow Launcher est ouvert, utile pour les barres de tâches auto-masquées.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Ne pas afficher le message de mise à jour pour les nouvelles versions</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Emplacement de la fenêtre de recherche</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Se souvenir de la dernière position</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Afficher les résultats de la page d'accueil lorsque le texte de la requête est vide.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Afficher les résultats de l'historique sur la page d'accueil</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum de résultats de l'historique affichés sur la page d'accueil</system:String>
|
||||
<system:String x:Key="historyStyle">Style d'historique</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choisissez le type d'historique à afficher dans l'historique et la page d'accueil</system:String>
|
||||
<system:String x:Key="queryHistory">Historique des requêtes</system:String>
|
||||
<system:String x:Key="executedHistory">Historique des dernières ouvertures</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Ceci ne peut être édité que si le plugin prend en charge la fonction Accueil et que la page d'accueil est activée.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Afficher la fenêtre de recherche en premier plan</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Outrepasse le paramètre 'toujours en premier plan' des autres programmes et affiche Flow Launcher en première position.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Version</system:String>
|
||||
<system:String x:Key="plugin_query_web">Site Web</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Désinstaller</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Délai de recherche : par défaut</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Délai de recherche : {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Échec de la suppression des paramètres du plugin</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins : {0} - Échec de la suppression des fichiers de configuration des plugins, veuillez les supprimer manuellement</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Échec de la suppression du cache du plugin</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Échec de la désinstallation de {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Impossible de trouver le fichier plugin.json dans le fichier zip extrait, ou ce chemin {0} n'existe pas</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">Un plugin avec le même ID et la même version existe déjà, ou la version est supérieure à ce plugin téléchargé</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Erreur lors de la création du panneau de configuration pour le plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} nécessite la version {1} de Flow pour fonctionner</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow ne répond pas aux exigences de version minimale pour que {0} puisse fonctionner. Voulez-vous continuer l'installation ?{1}{1}Nous vous recommandons de mettre à jour Flow vers la dernière version pour vous assurer que {0} fonctionne sans problème.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Impossible d'installer le plugin car plugin.json est invalide ou corrompu</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Magasin des Plugins</system:String>
|
||||
|
|
@ -396,24 +412,24 @@
|
|||
<system:String x:Key="showBadgesToolTip">Pour les plugins pris en charge, des badges sont affichés afin de les distinguer plus facilement.</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnly">Afficher les badges de résultats pour la requête globale uniquement</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnlyToolTip">Afficher les badges pour les résultats des requêtes globales uniquement</system:String>
|
||||
<system:String x:Key="dialogJumpHotkey">Dialog Jump</system:String>
|
||||
<system:String x:Key="dialogJumpHotkey">Saut de dialogue</system:String>
|
||||
<system:String x:Key="dialogJumpHotkeyToolTip">Entrez le raccourci pour naviguer rapidement dans la fenêtre de dialogue Ouvrir/Enregistrer sous, vers le chemin du gestionnaire de fichiers actuel.</system:String>
|
||||
<system:String x:Key="dialogJump">Dialog Jump</system:String>
|
||||
<system:String x:Key="dialogJump">Saut de dialogue</system:String>
|
||||
<system:String x:Key="dialogJumpToolTip">Lorsque la fenêtre de dialogue Ouvrir/Enregistrer sous s'ouvre, accédez rapidement au chemin d'accès actuel du gestionnaire de fichiers.</system:String>
|
||||
<system:String x:Key="autoDialogJump">Dialog Jump Automatically</system:String>
|
||||
<system:String x:Key="autoDialogJump">Saut de dialogue automatique</system:String>
|
||||
<system:String x:Key="autoDialogJumpToolTip">Lorsque la fenêtre de dialogue Ouvrir/Enregistrer sous est affichée, naviguez automatiquement vers le chemin du gestionnaire de fichiers actuel. (Expérimental)</system:String>
|
||||
<system:String x:Key="showDialogJumpWindow">Show Dialog Jump Window</system:String>
|
||||
<system:String x:Key="showDialogJumpWindowToolTip">Display Dialog Jump search window when the open/save dialog window is shown to quickly navigate to file/folder locations.</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPosition">Dialog Jump Window Position</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPositionToolTip">Select position for the Dialog Jump search window</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionUnderDialog">Fixed under the Open/Save As dialog window. Displayed on open and stays until the window is closed</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionFollowDefault">Default search window position. Displayed when triggered by search window hotkey</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviour">Dialog Jump Result Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviourToolTip">Behaviour to navigate Open/Save As dialog window to the selected result path</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourLeftClick">Left click or Enter key</system:String>
|
||||
<system:String x:Key="showDialogJumpWindow">Afficher la fenêtre de saut de dialogue</system:String>
|
||||
<system:String x:Key="showDialogJumpWindowToolTip">Afficher la fenêtre de recherche de saut de dialogue lorsque la fenêtre de dialogue Ouvrir/Enregistrer sous est affichée pour naviguer rapidement vers les emplacements de fichier/dossier.</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPosition">Position de la fenêtre de saut de dialogue</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPositionToolTip">Sélectionnez la position pour la fenêtre de recherche de saut de dialogue</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionUnderDialog">Fixé sous la fenêtre de dialogue Ouvrir/Enregistrer sous. Affiché à l'ouverture et reste jusqu'à ce que la fenêtre soit fermée.</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionFollowDefault">Position de la fenêtre de recherche par défaut. Affiché lorsqu'il est déclenché par le raccourci clavier de la fenêtre de recherche</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviour">Comportement de navigation des résultats du saut de dialogue</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviourToolTip">Comportement pour naviguer dans la fenêtre de dialogue Ouvrir/Enregistrer sous vers le chemin de résultat sélectionné</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourLeftClick">Clic gauche ou touche Entrée</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourRightClick">Clique droit</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviour">Dialog Jump File Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviourToolTip">Behaviour to navigate Open/Save As dialog window when the result is a file path</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviour">Comportement de navigation des résultats du saut de dialogue</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviourToolTip">Comportement pour naviguer dans la fenêtre de dialogue Ouvrir/Enregistrer sous lorsque le résultat est un chemin de fichier</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPath">Remplir le chemin complet dans la zone de nom de fichier</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPathOpen">Remplir le chemin complet dans la zone de nom de fichier et ouvrir</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourDirectory">Remplir le répertoire dans la zone de chemin</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">Icônes</system:String>
|
||||
<system:String x:Key="about_activate_times">Vous avez utilisé Flow Launcher {0} fois</system:String>
|
||||
<system:String x:Key="checkUpdates">Vérifier les mises à jour</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Devenir un Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Devenez un sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Nouvelle version {0} disponible, souhaitez-vous redémarrer Flow Launcher pour l'installer ?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Échec de la vérification de la mise à jour, vérifiez votre connexion et vos paramètres de configuration proxy pour pouvoir acceder à api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -466,8 +482,10 @@
|
|||
<system:String x:Key="userdatapathButton">Ouvrir le dossier</system:String>
|
||||
<system:String x:Key="advanced">Avancé</system:String>
|
||||
<system:String x:Key="logLevel">Niveau de journalisation</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Débogage</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silencieux</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Erreur</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Débogage</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Réglage de la police de la fenêtre</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -489,6 +507,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Arguments pour le fichier</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">Le gestionnaire de fichiers '{0}' n'a pas pu être situé à '{1}'. Souhaitez-vous continuer ?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">Erreur de chemin du gestionnaire de fichiers</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">Explorateur de fichiers</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Navigateur web par défaut</system:String>
|
||||
|
|
@ -499,6 +518,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">Nouvelle fenêtre</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Nouvel onglet</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Mode privé</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Par défaut</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">Nouveau profil</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Changer la priorité</system:String>
|
||||
|
|
@ -588,8 +609,9 @@ Si vous ajoutez un préfixe "@" lors de la saisie d'un raccourci, celu
|
|||
Le gestionnaire de fichiers spécifié n'a pas été trouvé. Veuillez vérifier le paramètre Gestionnaire de fichiers personnalisé dans Paramètres > Général.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Erreur</system:String>
|
||||
<system:String x:Key="folderOpenError">Une erreur s'est produite lors de l'ouverture du dossier. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">Une erreur s'est produite lors de l'ouverture du dossier.</system:String>
|
||||
<system:String x:Key="browserOpenError">Une erreur s'est produite lors de l'ouverture de l'URL dans le navigateur. Veuillez vérifier la configuration de votre navigateur Web par défaut dans la section "Général" de la fenêtre des paramètres</system:String>
|
||||
<system:String x:Key="fileNotFoundError">Fichier ou répertoire introuvable : {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Veuillez patienter...</system:String>
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@
|
|||
</system:String>
|
||||
<system:String x:Key="runtimePluginChooseRuntimeExecutable">אנא בחר את קובץ ההפעלה {0}</system:String>
|
||||
<system:String x:Key="runtimeExecutableInvalidChooseDownload">
|
||||
Your selected {0} executable is invalid.
|
||||
קובץ ההפעלה {0} שבחרת אינו חוקי.
|
||||
{2}{2}
|
||||
Click yes if you would like select the {0} executable again. Click no if you would like to download {1}
|
||||
לחץ על כן אם ברצונך, בחר את {0} ההפעלה הקודמת. לחץ על לא אם ברצונך להוריד את {1}
|
||||
</system:String>
|
||||
<system:String x:Key="runtimePluginUnableToSetExecutablePath">לא ניתן להגדיר נתיב הפעלה {0}, אנא נסה שוב בהגדרות Flow (גלול עד למטה).</system:String>
|
||||
<system:String x:Key="failedToInitializePluginsTitle">נכשל בהפעלת תוספים</system:String>
|
||||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">איפוס מיקום</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">אפס את מיקום חלון החיפוש</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">הקלד כאן כדי לחפש</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">הגדרות</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">לאחר הסרת ההתקנה, עליך להסיר ידנית משימה זו (Flow.Launcher Startup) דרך מתזמן המשימות</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">שגיאה בהגדרת ההפעלה בעת הפעלת windows</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">הסתר את Flow Launcher כאשר הוא אינו החלון הפעיל</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">אל תציג התראות על גרסה חדשה</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">מיקום חלון חיפוש</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">זכור את המיקום האחרון</system:String>
|
||||
|
|
@ -170,6 +176,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">ניתן לערוך זאת רק אם התוסף תומך בתכונת הבית ודף הבית מופעל.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">עוקף את הגדרת תמיד עליון של תוכנות אחרות, ומציג את Flow במיקום הגבוה ביותר.</system:String>
|
||||
|
|
@ -213,6 +223,8 @@
|
|||
<system:String x:Key="plugin_query_version">גרסה</system:String>
|
||||
<system:String x:Key="plugin_query_web">אתר</system:String>
|
||||
<system:String x:Key="plugin_uninstall">הסר התקנה</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">נכשל בהסרת הגדרות התוסף</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">תוספים: {0} - נכשל בהסרת קבצי הגדרות התוסף, יש להסירם ידנית</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">נכשל בהסרת מטמון התוסף</system:String>
|
||||
|
|
@ -223,6 +235,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">חנות תוספים</system:String>
|
||||
|
|
@ -442,7 +458,7 @@
|
|||
<system:String x:Key="icons">סמלים</system:String>
|
||||
<system:String x:Key="about_activate_times">הפעלת את Flow Launcher {0} פעמים</system:String>
|
||||
<system:String x:Key="checkUpdates">בדוק עדכונים</system:String>
|
||||
<system:String x:Key="BecomeASponsor">תן חסות</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">גרסה חדשה {0} זמינה, האם ברצונך להפעיל מחדש את Flow Launcher כדי להשתמש בעדכון?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">בדיקת העדכונים נכשלה, אנא בדוק את הגדרות החיבור ואת הגדרות ה-Proxy שלך לכתובת api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -466,8 +482,10 @@
|
|||
<system:String x:Key="userdatapathButton">פתח תיקיה</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">רמת יומן</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">ניפוי שגיאות</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">שגיאה</system:String>
|
||||
<system:String x:Key="LogLevelINFO">מידע</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">ניפוי שגיאות</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Setting Window Font</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -489,6 +507,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">ארגומנט לקובץ</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">לא ניתן היה לאתר את מנהל הקבצים '{0}' ב-'{1}'. האם ברצונך להמשיך?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">שגיאת נתיב למנהל הקבצים</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">דפדפן ברירת מחדל</system:String>
|
||||
|
|
@ -499,6 +518,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">חלון חדש</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">כרטיסייה חדשה</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">מצב פרטיות</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">שנה עדיפות</system:String>
|
||||
|
|
@ -588,8 +609,9 @@
|
|||
לא ניתן היה למצוא את מנהל הקבצים שצוין. אנא בדוק את ההגדרה של מנהל קבצים מותאם אישית תחת הגדרות > כללי.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">שגיאה</system:String>
|
||||
<system:String x:Key="folderOpenError">אירעה שגיאה בעת פתיחת התיקייה. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">אירעה שגיאה בעת פתיחת כתובת ה-URL בדפדפן. אנא בדוק את תצורת דפדפן האינטרנט המוגדר כברירת מחדל שלך במקטע הכללי של חלון ההגדרות</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">אנא המתן...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Ripristina Posizione</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Impostazioni</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Errore nell'impostazione del lancio all'avvio</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Nascondi Flow Launcher quando perde il focus</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Non mostrare le notifiche per una nuova versione</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Ricorda L'Ultima Posizione</system:String>
|
||||
|
|
@ -143,8 +149,8 @@
|
|||
<system:String x:Key="searchDelay">Search Delay</system:String>
|
||||
<system:String x:Key="searchDelayToolTip">Adds a short delay while typing to reduce UI flicker and result load. Recommended if your typing speed is average.</system:String>
|
||||
<system:String x:Key="searchDelayNumberBoxToolTip">Enter the wait time (in ms) until input is considered complete. This can only be edited if Search Delay is enabled.</system:String>
|
||||
<system:String x:Key="searchDelayTime">Default Search Delay Time</system:String>
|
||||
<system:String x:Key="searchDelayTimeToolTip">Wait time before showing results after typing stops. Higher values wait longer. (ms)</system:String>
|
||||
<system:String x:Key="searchDelayTime">Tempo predefinito ritardo ricerca</system:String>
|
||||
<system:String x:Key="searchDelayTimeToolTip">Tempo di attesa prima di mostrare i risultati dopo l'interruzione della digitazione. Valori più alti attendono più a lungo. (ms)</system:String>
|
||||
<system:String x:Key="KoreanImeTitle">Information for Korean IME user</system:String>
|
||||
<system:String x:Key="KoreanImeGuide">
|
||||
The Korean input method used in Windows 11 may cause some issues in Flow Launcher.
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Versione</system:String>
|
||||
<system:String x:Key="plugin_query_web">Sito Web</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Disinstalla</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Negozio dei Plugin</system:String>
|
||||
|
|
@ -254,11 +270,11 @@
|
|||
<system:String x:Key="UpdatePromptTitle">Plugin update</system:String>
|
||||
<system:String x:Key="UpdatePromptSubtitle">{0} di {1} {2}{2}Vuoi aggiornare questo plugin?</system:String>
|
||||
<system:String x:Key="DownloadingPlugin">Download del plugin</system:String>
|
||||
<system:String x:Key="AutoRestartAfterChange">Automatically restart after installing/uninstalling/updating plugins in plugin store</system:String>
|
||||
<system:String x:Key="ZipFileNotHavePluginJson">Zip file does not have a valid plugin.json configuration</system:String>
|
||||
<system:String x:Key="AutoRestartAfterChange">Riavvia automaticamente dopo l'installazione/disinstallazione/aggiornamento dei plugin nel Plugin Store</system:String>
|
||||
<system:String x:Key="ZipFileNotHavePluginJson">Il file zip non contiene una configurazione plugin.json valida</system:String>
|
||||
<system:String x:Key="InstallFromUnknownSourceTitle">Installazione da una fonte sconosciuta</system:String>
|
||||
<system:String x:Key="InstallFromUnknownSourceSubtitle">This plugin is from an unknown source and it may contain potential risks!{0}{0}Please ensure you understand where this plugin is from and that it is safe.{0}{0}Would you like to continue still?{0}{0}(You can switch off this warning in general section of setting window)</system:String>
|
||||
<system:String x:Key="ZipFiles">Zip files</system:String>
|
||||
<system:String x:Key="ZipFiles">File zip</system:String>
|
||||
<system:String x:Key="SelectZipFile">Please select zip file</system:String>
|
||||
<system:String x:Key="installLocalPluginTooltip">Install plugin from local path</system:String>
|
||||
<system:String x:Key="updateNoResultTitle">Nessun aggiornamento disponibile</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">Icone</system:String>
|
||||
<system:String x:Key="about_activate_times">Hai usato Flow Launcher {0} volte</system:String>
|
||||
<system:String x:Key="checkUpdates">Cerca aggiornamenti</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Diventa un sostenitore</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Una nuova versione {0} è disponibile, riavvia Flow Launcher per favore.</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Ricerca aggiornamenti fallita, per favore controlla la tua connessione e le eventuali impostazioni proxy per api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -458,7 +474,7 @@
|
|||
<system:String x:Key="clearlogfolder">Cancella i log</system:String>
|
||||
<system:String x:Key="clearlogfolderMessage">Sei sicuro di voler cancellare tutti i log?</system:String>
|
||||
<system:String x:Key="cachefolder">Cache Folder</system:String>
|
||||
<system:String x:Key="clearcachefolder">Clear Caches</system:String>
|
||||
<system:String x:Key="clearcachefolder">Cancella cache</system:String>
|
||||
<system:String x:Key="clearcachefolderMessage">Are you sure you want to delete all caches?</system:String>
|
||||
<system:String x:Key="clearfolderfailMessage">Failed to clear part of folders and files. Please see log file for more information</system:String>
|
||||
<system:String x:Key="welcomewindow">Wizard</system:String>
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Apri Cartella</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">Log Level</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Error</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Setting Window Font</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Arg Per Cartella</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Browser predefinito</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">Nuova Finestra</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Nuova Scheda</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Modalità Privata</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Cambia Priorità</system:String>
|
||||
|
|
@ -589,8 +610,9 @@ Se si aggiunge un prefisso '@' mentre si inserisce una scorciatoia, corrisponde
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Error</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Attendere prego...</system:String>
|
||||
|
|
@ -619,7 +641,7 @@ Se si aggiunge un prefisso '@' mentre si inserisce una scorciatoia, corrisponde
|
|||
<!-- Plugin Update Window -->
|
||||
<system:String x:Key="restartAfterUpdating">Restart Flow Launcher after updating plugins</system:String>
|
||||
<system:String x:Key="updatePluginCheckboxContent">{0}: Update from v{1} to v{2}</system:String>
|
||||
<system:String x:Key="updatePluginNoSelected">No plugin selected</system:String>
|
||||
<system:String x:Key="updatePluginNoSelected">Nessun plugin selezionato</system:String>
|
||||
|
||||
<!-- Welcome Window -->
|
||||
<system:String x:Key="Skip">Salta</system:String>
|
||||
|
|
|
|||
|
|
@ -2,43 +2,43 @@
|
|||
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:system="clr-namespace:System;assembly=mscorlib">
|
||||
<!-- Startup -->
|
||||
<system:String x:Key="runtimePluginInstalledChooseRuntimePrompt">
|
||||
Flow detected you have installed {0} plugins, which will require {1} to run. Would you like to download {1}?
|
||||
Flow はあなたが {0} プラグインをインストールしており、実行するために {1} が必要であることを検知しました。{1} をインストールしますか?
|
||||
{2}{2}
|
||||
Click no if it's already installed, and you will be prompted to select the folder that contains the {1} executable
|
||||
{1}がすでにインストールされている場合は「いいえ」をクリックし、それが入っているフォルダーを選択してください
|
||||
</system:String>
|
||||
<system:String x:Key="runtimePluginChooseRuntimeExecutable">Please select the {0} executable</system:String>
|
||||
<system:String x:Key="runtimePluginChooseRuntimeExecutable">{0} の実行ファイルを選択してください</system:String>
|
||||
<system:String x:Key="runtimeExecutableInvalidChooseDownload">
|
||||
Your selected {0} executable is invalid.
|
||||
あなたが選択した {0} の実行ファイルが不正です。
|
||||
{2}{2}
|
||||
Click yes if you would like select the {0} executable again. Click no if you would like to download {1}
|
||||
{0} の実行ファイルをもう一度選択する場合は「はい」を、{1} をダウンロードする場合は「いいえ」を選択してください
|
||||
</system:String>
|
||||
<system:String x:Key="runtimePluginUnableToSetExecutablePath">Unable to set {0} executable path, please try from Flow's settings (scroll down to the bottom).</system:String>
|
||||
<system:String x:Key="failedToInitializePluginsTitle">Fail to Init Plugins</system:String>
|
||||
<system:String x:Key="failedToInitializePluginsMessage">Plugins: {0} - fail to load and would be disabled, please contact plugin creator for help</system:String>
|
||||
<system:String x:Key="runtimePluginUnableToSetExecutablePath">{0} の実行可能ファイルのパスを設定できません。Flow の設定から試してください(下までスクロールしてください)。</system:String>
|
||||
<system:String x:Key="failedToInitializePluginsTitle">プラグインの起動失敗</system:String>
|
||||
<system:String x:Key="failedToInitializePluginsMessage">プラグイン: {0} の読み込みに失敗したため、無効になりました。プラグインの作成者にお問い合わせください</system:String>
|
||||
|
||||
<!-- Portable -->
|
||||
<system:String x:Key="restartToDisablePortableMode">Flow Launcherはポータブルモードの無効化のために再起動する必要があります。再起動の後、ポータブルな形式の設定項目は削除され、あなたのパソコンのフォルダに保存されます</system:String>
|
||||
<system:String x:Key="restartToEnablePortableMode">Flow Launcherはポータブルモードの有効化のために再起動する必要があります。再起動の後、パソコンに保存された設定項目は削除され、ポータブルな形式で保存されます</system:String>
|
||||
<system:String x:Key="moveToDifferentLocation">Flow Launcherはポータブルモードの有効化を検知しました。Flow Launcherを別の場所に移動しますか?</system:String>
|
||||
<system:String x:Key="shortcutsUninstallerCreated">Flow Launcherはポータブルモードの無効化を検知しました。関連するショートカットやアンインストーラーが配置されます</system:String>
|
||||
<system:String x:Key="userDataDuplicated">Flow Launcher detected your user data exists both in {0} and {1}. {2}{2}Please delete {1} in order to proceed. No changes have occurred.</system:String>
|
||||
<system:String x:Key="userDataDuplicated">Flow Launcherはあなたのユーザーデータが{0} と {1} の両方に存在することを検知しました。{2}{2}続行するには、{1}を削除してください。処理は中断されました。</system:String>
|
||||
|
||||
<!-- Plugin Loader -->
|
||||
<system:String x:Key="pluginHasErrored">The following plugin has errored and cannot be loaded:</system:String>
|
||||
<system:String x:Key="pluginsHaveErrored">The following plugins have errored and cannot be loaded:</system:String>
|
||||
<system:String x:Key="referToLogs">Please refer to the logs for more information</system:String>
|
||||
<system:String x:Key="pluginHasErrored">以下のプラグインにエラーがあるためロードできません:</system:String>
|
||||
<system:String x:Key="pluginsHaveErrored">以下のプラグインにエラーがあるためロードできません:</system:String>
|
||||
<system:String x:Key="referToLogs">詳細はログを参照してください</system:String>
|
||||
|
||||
<!-- Http -->
|
||||
<system:String x:Key="pleaseTryAgain">Please try again</system:String>
|
||||
<system:String x:Key="parseProxyFailed">Unable to parse Http Proxy</system:String>
|
||||
<system:String x:Key="pleaseTryAgain">もう一度お試しください</system:String>
|
||||
<system:String x:Key="parseProxyFailed">Http プロキシをパースできません</system:String>
|
||||
|
||||
<!-- AbstractPluginEnvironment -->
|
||||
<system:String x:Key="failToInstallTypeScriptEnv">Failed to install TypeScript environment. Please try again later</system:String>
|
||||
<system:String x:Key="failToInstallPythonEnv">Failed to install Python environment. Please try again later.</system:String>
|
||||
<system:String x:Key="failToInstallTypeScriptEnv">TypeScript環境のインストールに失敗しました。後でもう一度お試しください</system:String>
|
||||
<system:String x:Key="failToInstallPythonEnv">Python 環境のインストールに失敗しました。後でもう一度お試しください。</system:String>
|
||||
|
||||
<!-- MainWindow -->
|
||||
<system:String x:Key="registerHotkeyFailed">ホットキー "{0}" の登録に失敗しました。このホットキーは別のプログラムで使用されている可能性があります。別のホットキーに変更するか、このホットキーを使用しているプログラムを終了してください。</system:String>
|
||||
<system:String x:Key="unregisterHotkeyFailed">Failed to unregister hotkey "{0}". Please try again or see log for details</system:String>
|
||||
<system:String x:Key="unregisterHotkeyFailed">ホットキー「{0}」の登録解除に失敗しました。もう一度試すか、ログを参照して詳細を確認してください</system:String>
|
||||
<system:String x:Key="MessageBoxTitle">Flow Launcher</system:String>
|
||||
<system:String x:Key="couldnotStartCmd">{0}の起動に失敗しました</system:String>
|
||||
<system:String x:Key="invalidFlowLauncherPluginFileFormat">Flow Launcherプラグインの形式が正しくありません</system:String>
|
||||
|
|
@ -58,12 +58,16 @@
|
|||
<system:String x:Key="selectAll">全て選択</system:String>
|
||||
<system:String x:Key="fileTitle">ファイル</system:String>
|
||||
<system:String x:Key="folderTitle">フォルダー</system:String>
|
||||
<system:String x:Key="textTitle">Text</system:String>
|
||||
<system:String x:Key="textTitle">テキスト</system:String>
|
||||
<system:String x:Key="GameMode">ゲームモード</system:String>
|
||||
<system:String x:Key="GameModeToolTip">ホットキーの使用を一時停止します。</system:String>
|
||||
<system:String x:Key="PositionReset">位置のリセット</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">検索ウィンドウの位置をリセット</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">ここに入力して検索</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: このプラグインはまだ初期化中です…</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">この結果を選択して再検索する</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: 応答に失敗しました!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">詳細については、この結果を選択してください</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">設定</system:String>
|
||||
|
|
@ -73,8 +77,10 @@
|
|||
<system:String x:Key="startFlowLauncherOnSystemStartup">スタートアップ時にFlow Launcherを起動する</system:String>
|
||||
<system:String x:Key="useLogonTaskForStartup">起動の高速化のためにスタートアップではなくログオンタスクを使用</system:String>
|
||||
<system:String x:Key="useLogonTaskForStartupTooltip">アンインストール後は、「タスク スケジューラ」からこのタスク(Flow.Launcher Startup)を手動で削除する必要があります。</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">スタートアップ時に起動の設定失敗</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">フォーカスを失った時にFlow Launcherを隠す</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Flow Launcher を開いたときにタスクバーを表示する</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Flow Launcher を開いたときに一時的にタスクバーを表示します。タスクバーの自動非表示を設定している場合に便利です。</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">最新版が入手可能であっても、アップグレードメッセージを表示しない</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">検索ウィンドウの位置</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">最後の表示位置を記憶する</system:String>
|
||||
|
|
@ -111,7 +117,7 @@
|
|||
<system:String x:Key="typingStartEn">常に英語モードで入力を開始する</system:String>
|
||||
<system:String x:Key="typingStartEnTooltip">Flowを起動したとき、一時的に入力方法を英語モードに変更します。</system:String>
|
||||
<system:String x:Key="autoUpdates">自動更新</system:String>
|
||||
<system:String x:Key="autoUpdatesTooltip">Automatically check and update the app when available</system:String>
|
||||
<system:String x:Key="autoUpdatesTooltip">利用可能な場合、Flow Launcherを自動的に確認して更新します</system:String>
|
||||
<system:String x:Key="select">選択</system:String>
|
||||
<system:String x:Key="hideOnStartup">起動時にFlow Launcherを隠す</system:String>
|
||||
<system:String x:Key="hideOnStartupToolTip">起動後、Flow Launcher の検索ウィンドウは非表示になり、トレイに格納されます。</system:String>
|
||||
|
|
@ -123,10 +129,10 @@
|
|||
<system:String x:Key="SearchPrecisionLow">低</system:String>
|
||||
<system:String x:Key="SearchPrecisionRegular">標準</system:String>
|
||||
<system:String x:Key="ShouldUsePinyin">ピンインによる検索</system:String>
|
||||
<system:String x:Key="ShouldUsePinyinToolTip">Pinyin is the standard system of romanized spelling for translating Chinese. Please note, enabling this can significantly increase memory usage during search.</system:String>
|
||||
<system:String x:Key="ShouldUseDoublePinyin">Use Double Pinyin</system:String>
|
||||
<system:String x:Key="ShouldUseDoublePinyinToolTip">Use Double Pinyin instead of Full Pinyin to search.</system:String>
|
||||
<system:String x:Key="DoublePinyinSchema">Double Pinyin Schema</system:String>
|
||||
<system:String x:Key="ShouldUsePinyinToolTip">Pinyinは中国語を翻訳するためのローマ字入力の標準的な方法です。有効にすると、検索時のメモリ使用量が大幅に増加する可能性があります。</system:String>
|
||||
<system:String x:Key="ShouldUseDoublePinyin">双拼入力を使用</system:String>
|
||||
<system:String x:Key="ShouldUseDoublePinyinToolTip">検索するときに全拼の代わりに双拼を使用する。</system:String>
|
||||
<system:String x:Key="DoublePinyinSchema">双拼の入力方式</system:String>
|
||||
<system:String x:Key="DoublePinyinSchemasXiaoHe">Xiao He</system:String>
|
||||
<system:String x:Key="DoublePinyinSchemasZiRanMa">Zi Ran Ma</system:String>
|
||||
<system:String x:Key="DoublePinyinSchemasWeiRuan">Wei Ruan</system:String>
|
||||
|
|
@ -142,10 +148,10 @@
|
|||
<system:String x:Key="shadowEffectNotAllowed">現在のテーマでぼかしの効果が有効になっている場合、影の効果を有効にすることはできません</system:String>
|
||||
<system:String x:Key="searchDelay">検索遅延</system:String>
|
||||
<system:String x:Key="searchDelayToolTip">入力中に短い遅延を追加することで、UIのちらつきや結果の読み込みを軽減します。平均的なタイピング速度のユーザーにおすすめです。</system:String>
|
||||
<system:String x:Key="searchDelayNumberBoxToolTip">Enter the wait time (in ms) until input is considered complete. This can only be edited if Search Delay is enabled.</system:String>
|
||||
<system:String x:Key="searchDelayNumberBoxToolTip">入力中の結果表示までの待ち時間をミリ秒単位で入力します。これは、検索遅延が有効な場合にのみ編集できます。</system:String>
|
||||
<system:String x:Key="searchDelayTime">デフォルトの検索遅延時間</system:String>
|
||||
<system:String x:Key="searchDelayTimeToolTip">入力が停止した後に結果が表示されるまでの待ち時間。値が大きいほど長く待機します。(単位 ms)</system:String>
|
||||
<system:String x:Key="KoreanImeTitle">Information for Korean IME user</system:String>
|
||||
<system:String x:Key="KoreanImeTitle">韓国語IMEユーザーへの情報</system:String>
|
||||
<system:String x:Key="KoreanImeGuide">
|
||||
The Korean input method used in Windows 11 may cause some issues in Flow Launcher.
|
||||
|
||||
|
|
@ -160,29 +166,33 @@
|
|||
|
||||
|
||||
</system:String>
|
||||
<system:String x:Key="KoreanImeOpenLink">Open Language and Region System Settings</system:String>
|
||||
<system:String x:Key="KoreanImeOpenLink">システムの言語と地域設定を開く</system:String>
|
||||
<system:String x:Key="KoreanImeOpenLinkToolTip">Opens the Korean IME setting location. Go to Korean > Language Options > Keyboard - Microsoft IME > Compatibility</system:String>
|
||||
<system:String x:Key="KoreanImeOpenLinkButton">開く</system:String>
|
||||
<system:String x:Key="KoreanImeRegistry">Use Previous Korean IME</system:String>
|
||||
<system:String x:Key="KoreanImeRegistry">前の韓国語IMEを使用</system:String>
|
||||
<system:String x:Key="KoreanImeRegistryTooltip">You can change the Previous Korean IME settings directly from here</system:String>
|
||||
<system:String x:Key="KoreanImeSettingChangeFailTitle">Failed to change Korean IME setting</system:String>
|
||||
<system:String x:Key="KoreanImeSettingChangeFailSubTitle">Please check your system registry access or contact support.</system:String>
|
||||
<system:String x:Key="KoreanImeSettingChangeFailTitle">韓国語IME設定の変更に失敗しました</system:String>
|
||||
<system:String x:Key="KoreanImeSettingChangeFailSubTitle">システムのレジストリへのアクセスが可能か確認するか、サポートにお問い合わせください。</system:String>
|
||||
<system:String x:Key="homePage">ホームページ</system:String>
|
||||
<system:String x:Key="homePageToolTip">検索文字列が空の場合、ホームページの結果を表示します。</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">クエリの履歴をホームページに表示</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">ホームページに表示される最大の履歴の数</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="historyStyle">履歴のスタイル</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">履歴とホームページに表示する履歴の種類を選択します</system:String>
|
||||
<system:String x:Key="queryHistory">クエリの履歴</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">これは、プラグインがホーム機能をサポートし、ホームページが有効な場合にのみ編集することができます。</system:String>
|
||||
<system:String x:Key="showAtTopmost">検索ウィンドウを最前面に表示</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">他のプログラムの 'Always on Top' (最前面に表示)設定を上書きし、常に最前面のウィンドウで Flow を表示します。</system:String>
|
||||
<system:String x:Key="autoRestartAfterChanging">プラグインストアでプラグインを変更した後に再起動します</system:String>
|
||||
<system:String x:Key="autoRestartAfterChanging">プラグインストアでプラグインを変更した後に再起動</system:String>
|
||||
<system:String x:Key="autoRestartAfterChangingToolTip">プラグインストア経由でプラグインをインストール、アンインストール、または更新した後、Flow Lancherを自動的に再起動します</system:String>
|
||||
<system:String x:Key="showUnknownSourceWarning">不明なソースの警告を表示</system:String>
|
||||
<system:String x:Key="showUnknownSourceWarningToolTip">不明なソースからプラグインをインストールするときに警告を表示する</system:String>
|
||||
<system:String x:Key="autoUpdatePlugins">Auto update plugins</system:String>
|
||||
<system:String x:Key="autoUpdatePluginsToolTip">Automatically check plugin updates and notify if there are any updates available</system:String>
|
||||
<system:String x:Key="autoUpdatePlugins">プラグインの自動アップデート</system:String>
|
||||
<system:String x:Key="autoUpdatePluginsToolTip">プラグインの更新を自動的にチェックし、利用可能な更新がある場合に通知します</system:String>
|
||||
|
||||
<!-- Setting Plugin -->
|
||||
<system:String x:Key="searchplugin">Search Plugin</system:String>
|
||||
<system:String x:Key="searchplugin">プラグインの検索</system:String>
|
||||
<system:String x:Key="searchpluginToolTip">Ctrl+F でプラグインを検索します</system:String>
|
||||
<system:String x:Key="searchplugin_Noresult_Title">検索結果が見つかりませんでした</system:String>
|
||||
<system:String x:Key="searchplugin_Noresult_Subtitle">別の検索を試してみてください。</system:String>
|
||||
|
|
@ -191,20 +201,20 @@
|
|||
<system:String x:Key="browserMorePlugins">プラグインを探す</system:String>
|
||||
<system:String x:Key="enable">有効</system:String>
|
||||
<system:String x:Key="disable">無効</system:String>
|
||||
<system:String x:Key="actionKeywordsTitle">Action keyword Setting</system:String>
|
||||
<system:String x:Key="actionKeywordsTitle">アクションキーワードの設定</system:String>
|
||||
<system:String x:Key="actionKeywords">キーワード</system:String>
|
||||
<system:String x:Key="currentActionKeywords">Current action keyword</system:String>
|
||||
<system:String x:Key="newActionKeyword">New action keyword</system:String>
|
||||
<system:String x:Key="actionKeywordsTooltip">Change Action Keywords</system:String>
|
||||
<system:String x:Key="pluginSearchDelayTime">Plugin search delay time</system:String>
|
||||
<system:String x:Key="pluginSearchDelayTimeTooltip">Change Plugin Search Delay Time</system:String>
|
||||
<system:String x:Key="currentActionKeywords">現在のアクションキーワード</system:String>
|
||||
<system:String x:Key="newActionKeyword">新しいアクションキーワード</system:String>
|
||||
<system:String x:Key="actionKeywordsTooltip">アクションキーワードの変更</system:String>
|
||||
<system:String x:Key="pluginSearchDelayTime">プラグインの検索遅延時間</system:String>
|
||||
<system:String x:Key="pluginSearchDelayTimeTooltip">プラグインの検索遅延時間を変更</system:String>
|
||||
<system:String x:Key="FilterComboboxLabel">詳細設定:</system:String>
|
||||
<system:String x:Key="DisplayModeOnOff">有効</system:String>
|
||||
<system:String x:Key="DisplayModePriority">重要度</system:String>
|
||||
<system:String x:Key="DisplayModeSearchDelay">検索遅延</system:String>
|
||||
<system:String x:Key="DisplayModeHomeOnOff">ホームページ</system:String>
|
||||
<system:String x:Key="currentPriority">Current Priority</system:String>
|
||||
<system:String x:Key="newPriority">New Priority</system:String>
|
||||
<system:String x:Key="currentPriority">現在の優先度</system:String>
|
||||
<system:String x:Key="newPriority">新しい優先度</system:String>
|
||||
<system:String x:Key="priority">重要度</system:String>
|
||||
<system:String x:Key="priorityToolTip">プラグインの結果の優先度を変更します。</system:String>
|
||||
<system:String x:Key="pluginDirectory">プラグイン・ディレクトリ</system:String>
|
||||
|
|
@ -214,59 +224,65 @@
|
|||
<system:String x:Key="plugin_query_version">バージョン</system:String>
|
||||
<system:String x:Key="plugin_query_web">ウェブサイト</system:String>
|
||||
<system:String x:Key="plugin_uninstall">アンインストール</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheMessage">Plugins: {0} - Fail to remove plugin cache files, please remove them manually</system:String>
|
||||
<system:String x:Key="pluginModifiedAlreadyTitle">{0} modified already</system:String>
|
||||
<system:String x:Key="pluginModifiedAlreadyMessage">Please restart Flow before making any further changes</system:String>
|
||||
<system:String x:Key="failedToInstallPluginTitle">Fail to install {0}</system:String>
|
||||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">検索の遅延時間: デフォルト</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">検索の遅延時間: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">プラグイン設定の削除に失敗</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">プラグイン: {0} - プラグイン設定ファイルの削除に失敗しました。手動で削除してください</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">プラグインキャッシュの削除に失敗</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheMessage">プラグイン: {0} - プラグインキャッシュファイルの削除に失敗しました。手動で削除してください</system:String>
|
||||
<system:String x:Key="pluginModifiedAlreadyTitle">{0} は既に変更されています</system:String>
|
||||
<system:String x:Key="pluginModifiedAlreadyMessage">これ以上変更を加える前に Flow Launcher を再起動してください</system:String>
|
||||
<system:String x:Key="failedToInstallPluginTitle">{0} のインストールに失敗</system:String>
|
||||
<system:String x:Key="failedToUninstallPluginTitle">{0} のアンインストールに失敗</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">展開されたzipファイルからplugin.jsonが見つからないか、このパス {0} が存在しません</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">同じIDとバージョンのプラグインがすでに存在するか、またはこのダウンロードしたプラグインよりもバージョンが大きいです</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">プラグイン {0}の設定パネル作成中にエラーが発生しました:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">プラグインストア</system:String>
|
||||
<system:String x:Key="pluginStore_NewRelease">新規リリース</system:String>
|
||||
<system:String x:Key="pluginStore_RecentlyUpdated">最近の更新</system:String>
|
||||
<system:String x:Key="pluginStore_None">プラグイン</system:String>
|
||||
<system:String x:Key="pluginStore_Installed">Installed</system:String>
|
||||
<system:String x:Key="pluginStore_Installed">インストール済み</system:String>
|
||||
<system:String x:Key="refresh">更新</system:String>
|
||||
<system:String x:Key="installbtn">インストール</system:String>
|
||||
<system:String x:Key="uninstallbtn">アンインストール</system:String>
|
||||
<system:String x:Key="updatebtn">更新</system:String>
|
||||
<system:String x:Key="LabelInstalledToolTip">Plugin already installed</system:String>
|
||||
<system:String x:Key="LabelNew">New Version</system:String>
|
||||
<system:String x:Key="LabelNewToolTip">This plugin has been updated within the last 7 days</system:String>
|
||||
<system:String x:Key="LabelInstalledToolTip">プラグインは既にインストールされています</system:String>
|
||||
<system:String x:Key="LabelNew">新しいバージョン</system:String>
|
||||
<system:String x:Key="LabelNewToolTip">このプラグインは過去1週間以内に更新されました</system:String>
|
||||
<system:String x:Key="LabelUpdateToolTip">新しいアップデートが利用可能です</system:String>
|
||||
<system:String x:Key="ErrorInstallingPlugin">プラグインのインストール失敗</system:String>
|
||||
<system:String x:Key="ErrorUninstallingPlugin">プラグインのアンインストール失敗</system:String>
|
||||
<system:String x:Key="ErrorUpdatingPlugin">Error updating plugin</system:String>
|
||||
<system:String x:Key="ErrorUpdatingPlugin">プラグインの更新に失敗</system:String>
|
||||
<system:String x:Key="KeepPluginSettingsTitle">プラグインの設定を維持</system:String>
|
||||
<system:String x:Key="KeepPluginSettingsSubtitle">再びインストールして使用するときのためにプラグインの設定を維持しますか?</system:String>
|
||||
<system:String x:Key="InstallSuccessNoRestart">Plugin {0} successfully installed. Please restart Flow.</system:String>
|
||||
<system:String x:Key="UninstallSuccessNoRestart">Plugin {0} successfully uninstalled. Please restart Flow.</system:String>
|
||||
<system:String x:Key="UpdateSuccessNoRestart">Plugin {0} successfully updated. Please restart Flow.</system:String>
|
||||
<system:String x:Key="InstallSuccessNoRestart">プラグイン {0} のインストールに成功しました。Flow を再起動してください。</system:String>
|
||||
<system:String x:Key="UninstallSuccessNoRestart">プラグイン {0} のアンインストールに成功しました。Flow を再起動してください。</system:String>
|
||||
<system:String x:Key="UpdateSuccessNoRestart">プラグイン {0} が正常に更新されました。Flow を再起動してください。</system:String>
|
||||
<system:String x:Key="InstallPromptTitle">プラグインのインストール</system:String>
|
||||
<system:String x:Key="InstallPromptSubtitle">{0} by {1} {2}{2}このプラグインをインストールしますか?</system:String>
|
||||
<system:String x:Key="UninstallPromptTitle">プラグインのアンインストール</system:String>
|
||||
<system:String x:Key="UninstallPromptSubtitle">{0} by {1} {2}{2}このプラグインをアンインストールしますか?</system:String>
|
||||
<system:String x:Key="UpdatePromptTitle">Plugin update</system:String>
|
||||
<system:String x:Key="UpdatePromptSubtitle">{0} by {1} {2}{2}Would you like to update this plugin?</system:String>
|
||||
<system:String x:Key="DownloadingPlugin">Downloading plugin</system:String>
|
||||
<system:String x:Key="AutoRestartAfterChange">Automatically restart after installing/uninstalling/updating plugins in plugin store</system:String>
|
||||
<system:String x:Key="ZipFileNotHavePluginJson">Zip file does not have a valid plugin.json configuration</system:String>
|
||||
<system:String x:Key="UpdatePromptTitle">プラグインの更新</system:String>
|
||||
<system:String x:Key="UpdatePromptSubtitle">{0} by {1} {2}{2}このプラグインを更新しますか?</system:String>
|
||||
<system:String x:Key="DownloadingPlugin">プラグインをダウンロード中</system:String>
|
||||
<system:String x:Key="AutoRestartAfterChange">プラグインストア経由でのプラグインのインストール 、アンインストール、または更新後に自動的に再起動します</system:String>
|
||||
<system:String x:Key="ZipFileNotHavePluginJson">Zipファイルに有効なplugin.jsonファイルがありません</system:String>
|
||||
<system:String x:Key="InstallFromUnknownSourceTitle">不明なソースからのインストール</system:String>
|
||||
<system:String x:Key="InstallFromUnknownSourceSubtitle">このプラグインは不明なソースから提供されており、潜在的なリスクを含んでいる可能性があります!{0}{0}このプラグインの開発元をよく調べ、安全であることをご自身で確かめてください。{0}{0}それでもあなたはこのプラグインをインストールしますか?{0}{0}(この警告は設定の「一般」セクションで無効にすることができます)</system:String>
|
||||
<system:String x:Key="ZipFiles">Zip files</system:String>
|
||||
<system:String x:Key="SelectZipFile">Please select zip file</system:String>
|
||||
<system:String x:Key="ZipFiles">Zip ファイル</system:String>
|
||||
<system:String x:Key="SelectZipFile">zipファイルを選択してください</system:String>
|
||||
<system:String x:Key="installLocalPluginTooltip">ローカルパスからプラグインをインストール</system:String>
|
||||
<system:String x:Key="updateNoResultTitle">No update available</system:String>
|
||||
<system:String x:Key="updateNoResultSubtitle">All plugins are up to date</system:String>
|
||||
<system:String x:Key="updateAllPluginsTitle">Plugin updates available</system:String>
|
||||
<system:String x:Key="updateAllPluginsButtonContent">Update plugins</system:String>
|
||||
<system:String x:Key="checkPluginUpdatesTooltip">Check plugin updates</system:String>
|
||||
<system:String x:Key="PluginsUpdateSuccessNoRestart">Plugins are successfully updated. Please restart Flow.</system:String>
|
||||
<system:String x:Key="updateNoResultTitle">利用可能な更新はありません</system:String>
|
||||
<system:String x:Key="updateNoResultSubtitle">すべてのプラグインが最新です</system:String>
|
||||
<system:String x:Key="updateAllPluginsTitle">プラグインの更新が利用可能</system:String>
|
||||
<system:String x:Key="updateAllPluginsButtonContent">プラグインを更新</system:String>
|
||||
<system:String x:Key="checkPluginUpdatesTooltip">プラグインの更新を確認</system:String>
|
||||
<system:String x:Key="PluginsUpdateSuccessNoRestart">プラグインが正常に更新されました。Flow を再起動してください。</system:String>
|
||||
|
||||
<!-- Setting Theme -->
|
||||
<system:String x:Key="theme">テーマ</system:String>
|
||||
|
|
@ -285,13 +301,13 @@
|
|||
<system:String x:Key="SearchBarHeight">検索バーの高さ</system:String>
|
||||
<system:String x:Key="ItemHeight">アイテムの高さ</system:String>
|
||||
<system:String x:Key="queryBoxFont">検索ボックスのフォント</system:String>
|
||||
<system:String x:Key="resultItemFont">Result Title Font</system:String>
|
||||
<system:String x:Key="resultSubItemFont">Result Subtitle Font</system:String>
|
||||
<system:String x:Key="resultItemFont">結果のタイトルのフォント</system:String>
|
||||
<system:String x:Key="resultSubItemFont">結果のサブタイトルのフォント</system:String>
|
||||
<system:String x:Key="resetCustomize">リセット</system:String>
|
||||
<system:String x:Key="resetCustomizeToolTip">Reset to the recommended font and size settings.</system:String>
|
||||
<system:String x:Key="ImportThemeSize">Import Theme Size</system:String>
|
||||
<system:String x:Key="ImportThemeSizeToolTip">If a size value intended by the theme designer is available, it will be retrieved and applied.</system:String>
|
||||
<system:String x:Key="CustomizeToolTip">Customize</system:String>
|
||||
<system:String x:Key="resetCustomizeToolTip">推奨されるフォントとサイズの設定にリセットします。</system:String>
|
||||
<system:String x:Key="ImportThemeSize">テーマ中のサイズをインポート</system:String>
|
||||
<system:String x:Key="ImportThemeSizeToolTip">テーマのデザイナーによって意図されたサイズ値が利用可能なとき、それを取得して適用します。</system:String>
|
||||
<system:String x:Key="CustomizeToolTip">カスタマイズ</system:String>
|
||||
<system:String x:Key="windowMode">ウィンドウモード</system:String>
|
||||
<system:String x:Key="opacity">透過度</system:String>
|
||||
<system:String x:Key="theme_load_failure_path_not_exists">テーマ {0} が存在しません、デフォルトのテーマに戻します。</system:String>
|
||||
|
|
@ -306,7 +322,7 @@
|
|||
<system:String x:Key="SoundEffectTip">検索ウィンドウが開いたとき、小さな音を鳴らします</system:String>
|
||||
<system:String x:Key="SoundEffectVolume">効果音の音量</system:String>
|
||||
<system:String x:Key="SoundEffectVolumeTip">効果音の音量を調整します</system:String>
|
||||
<system:String x:Key="SoundEffectWarning">Windows Media Player is unavailable and is required for Flow's volume adjustment. Please check your installation if you need to adjust volume.</system:String>
|
||||
<system:String x:Key="SoundEffectWarning">Windows Media Player は Flow を使った音量調整に必要です。ボリュームを調整する必要がある場合は、Windows Media Player がインストールされているかどうか確認してください。</system:String>
|
||||
<system:String x:Key="Animation">アニメーション</system:String>
|
||||
<system:String x:Key="AnimationTip">UIでアニメーションを使用します</system:String>
|
||||
<system:String x:Key="AnimationSpeed">アニメーション速度</system:String>
|
||||
|
|
@ -324,15 +340,15 @@
|
|||
<system:String x:Key="BackdropTypesAcrylic">アクリル</system:String>
|
||||
<system:String x:Key="BackdropTypesMica">マイカ</system:String>
|
||||
<system:String x:Key="BackdropTypesMicaAlt">マイカ(代替)</system:String>
|
||||
<system:String x:Key="TypeIsDarkToolTip">This theme supports two (light/dark) modes.</system:String>
|
||||
<system:String x:Key="TypeHasBlurToolTip">This theme supports Blur Transparent Background.</system:String>
|
||||
<system:String x:Key="TypeIsDarkToolTip">このテーマはライト/ダークの2モードに対応しています。</system:String>
|
||||
<system:String x:Key="TypeHasBlurToolTip">このテーマは背景をぼかした透明効果をサポートしています。</system:String>
|
||||
<system:String x:Key="ShowPlaceholder">プレースホルダーを表示</system:String>
|
||||
<system:String x:Key="ShowPlaceholderTip">クエリが空の場合にプレースホルダを表示します</system:String>
|
||||
<system:String x:Key="PlaceholderText">検索欄の案内文</system:String>
|
||||
<system:String x:Key="PlaceholderTextTip">Change placeholder text. Input empty will use: {0}</system:String>
|
||||
<system:String x:Key="PlaceholderTextTip">プレースホルダのテキストを変更します。空にすると、 {0} が使用されます</system:String>
|
||||
<system:String x:Key="KeepMaxResults">ウィンドウサイズの固定</system:String>
|
||||
<system:String x:Key="KeepMaxResultsToolTip">ウィンドウのサイズを固定し、ドラッグでの変更を無効にします。</system:String>
|
||||
<system:String x:Key="MaxShowResultsCannotWorkWithAlwaysPreview">Since Always Preview is on, maximum results shown may not take effect because preview panel requires a certain minimum height</system:String>
|
||||
<system:String x:Key="MaxShowResultsCannotWorkWithAlwaysPreview">「常にプレビューする」が有効になっているため、プレビューパネルの高さの確保のために「結果の最大表示件数」設定は無視される可能性があります</system:String>
|
||||
|
||||
<!-- Setting Hotkey -->
|
||||
<system:String x:Key="hotkey">ホットキー</system:String>
|
||||
|
|
@ -372,51 +388,51 @@
|
|||
<system:String x:Key="customQueryHotkey">カスタムクエリ ホットキー</system:String>
|
||||
<system:String x:Key="customQueryShortcut">Custom Query Shortcut</system:String>
|
||||
<system:String x:Key="builtinShortcuts">組み込みショートカット</system:String>
|
||||
<system:String x:Key="customQuery">Query</system:String>
|
||||
<system:String x:Key="customQuery">クエリー</system:String>
|
||||
<system:String x:Key="customShortcut">ショートカット</system:String>
|
||||
<system:String x:Key="customShortcutExpansion">展開</system:String>
|
||||
<system:String x:Key="builtinShortcutDescription">説明</system:String>
|
||||
<system:String x:Key="delete">削除</system:String>
|
||||
<system:String x:Key="edit">編集</system:String>
|
||||
<system:String x:Key="add">追加</system:String>
|
||||
<system:String x:Key="none">None</system:String>
|
||||
<system:String x:Key="none">なし</system:String>
|
||||
<system:String x:Key="pleaseSelectAnItem">項目を選択してください</system:String>
|
||||
<system:String x:Key="deleteCustomHotkeyWarning">{0} プラグインのホットキーを本当に削除しますか?</system:String>
|
||||
<system:String x:Key="deleteCustomShortcutWarning">本当にこのショートカットを削除しますか?: {0} を {1} に展開</system:String>
|
||||
<system:String x:Key="shortcut_clipboard_description">Get text from clipboard.</system:String>
|
||||
<system:String x:Key="shortcut_clipboard_description">クリップボードからテキストを取得します。</system:String>
|
||||
<system:String x:Key="shortcut_active_explorer_path">アクティブなエクスプローラーからパスを取得します。</system:String>
|
||||
<system:String x:Key="queryWindowShadowEffect">検索ウィンドウの落陰効果</system:String>
|
||||
<system:String x:Key="shadowEffectCPUUsage">Shadow effect has a substantial usage of GPU. Not recommended if your computer performance is limited.</system:String>
|
||||
<system:String x:Key="windowWidthSize">Window Width Size</system:String>
|
||||
<system:String x:Key="windowWidthSizeToolTip">You can also quickly adjust this by using Ctrl+[ and Ctrl+].</system:String>
|
||||
<system:String x:Key="shadowEffectCPUUsage">影の効果は GPU に大きな負荷をかけます。お使いのコンピューターの性能が限定的な場合、無効にすることをおすすめします。</system:String>
|
||||
<system:String x:Key="windowWidthSize">ウィンドウ幅のサイズ</system:String>
|
||||
<system:String x:Key="windowWidthSizeToolTip">Ctrl+Plus と Ctrl+Minus を使用すれば、簡単に調整することもできます。</system:String>
|
||||
<system:String x:Key="useGlyphUI">Segoe Fluent アイコンを使用する</system:String>
|
||||
<system:String x:Key="useGlyphUIEffect">サポートされているクエリ結果にSegoe Fluentアイコンを使用する</system:String>
|
||||
<system:String x:Key="flowlauncherPressHotkey">Press Key</system:String>
|
||||
<system:String x:Key="showBadges">Show Result Badges</system:String>
|
||||
<system:String x:Key="flowlauncherPressHotkey">キーを入力</system:String>
|
||||
<system:String x:Key="showBadges">結果のバッジを表示</system:String>
|
||||
<system:String x:Key="showBadgesToolTip">サポートされているプラグインでは、バッジが表示され、より簡単に区別できます。</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnly">Show Result Badges for Global Query Only</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnlyToolTip">Show badges for global query results only</system:String>
|
||||
<system:String x:Key="dialogJumpHotkey">Dialog Jump</system:String>
|
||||
<system:String x:Key="dialogJumpHotkeyToolTip">Enter shortcut to quickly navigate the Open/Save As dialog window to the path of the current file manager.</system:String>
|
||||
<system:String x:Key="dialogJump">Dialog Jump</system:String>
|
||||
<system:String x:Key="dialogJumpToolTip">When Open/Save As dialog window opens, quickly navigate to the current path of the file manager.</system:String>
|
||||
<system:String x:Key="autoDialogJump">Dialog Jump Automatically</system:String>
|
||||
<system:String x:Key="autoDialogJumpToolTip">When Open/Save As dialog window is displayed, automatically navigate to the path of the current file manager. (Experimental)</system:String>
|
||||
<system:String x:Key="showDialogJumpWindow">Show Dialog Jump Window</system:String>
|
||||
<system:String x:Key="showDialogJumpWindowToolTip">Display Dialog Jump search window when the open/save dialog window is shown to quickly navigate to file/folder locations.</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPosition">Dialog Jump Window Position</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPositionToolTip">Select position for the Dialog Jump search window</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionUnderDialog">Fixed under the Open/Save As dialog window. Displayed on open and stays until the window is closed</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionFollowDefault">Default search window position. Displayed when triggered by search window hotkey</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviour">Dialog Jump Result Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviourToolTip">Behaviour to navigate Open/Save As dialog window to the selected result path</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourLeftClick">Left click or Enter key</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourRightClick">Right click</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviour">Dialog Jump File Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviourToolTip">Behaviour to navigate Open/Save As dialog window when the result is a file path</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPath">Fill full path in file name box</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPathOpen">Fill full path in file name box and open</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourDirectory">Fill directory in path box</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnly">グローバルクエリのみ、結果のバッジを表示</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnlyToolTip">グローバルクエリの結果にのみバッジを表示する</system:String>
|
||||
<system:String x:Key="dialogJumpHotkey">ダイアログジャンプ</system:String>
|
||||
<system:String x:Key="dialogJumpHotkeyToolTip">ショートカットを入力して、「名前を付けて開く/保存」ダイアログ・ウィンドウを現在のファイルマネージャのパスにすばやくナビゲートします。</system:String>
|
||||
<system:String x:Key="dialogJump">ダイアログジャンプ</system:String>
|
||||
<system:String x:Key="dialogJumpToolTip">「名前を付けて開く/保存」ダイアログウィンドウが開いたら、すぐにファイルマネージャの現在のパスに移動します。</system:String>
|
||||
<system:String x:Key="autoDialogJump">自動ダイアログジャンプ</system:String>
|
||||
<system:String x:Key="autoDialogJumpToolTip">開く/名前を付けて保存ダイアログが表示されると、自動的に現在のファイルマネージャのパスに移動させます。 (実験的)</system:String>
|
||||
<system:String x:Key="showDialogJumpWindow">ダイアログジャンプウィンドウを表示</system:String>
|
||||
<system:String x:Key="showDialogJumpWindowToolTip">「名前をつけて保存/開く」ダイアログウィンドウが表示されたときにダイアログジャンプのウィンドウを開いて、ファイルやフォルダーを素早く開く。</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPosition">ダイアログジャンプのウィンドウの位置</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPositionToolTip">ダイアログジャンプ検索ウィンドウの位置を選択します</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionUnderDialog">「名前を付けて開く/保存」ダイアログウィンドウの下に固定。ウィンドウが閉じるまで開いたまま表示されます</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionFollowDefault">デフォルトの検索ウィンドウの位置。検索ウィンドウのホットキーによってトリガーされたときに表示されます</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviour">ダイアログジャンプの検索結果の開き方</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviourToolTip">「開く/名前を付けて保存」ダイアログウィンドウの選択した結果パスに移動する動作</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourLeftClick">左クリックまたはEnter キー</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourRightClick">右クリック</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviour">ダイアログジャンプのファイルに対する動作</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviourToolTip">結果がファイルパスの場合の、「開く/名前を付けて保存」ダイアログウィンドウに対する動作</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPath">フルパスをファイル名ボックスに入力</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPathOpen">フルパスをファイル名ボックスに入力して開く</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourDirectory">パスボックスに含まれるフォルダを入力</system:String>
|
||||
|
||||
<!-- Setting Proxy -->
|
||||
<system:String x:Key="proxy">HTTP プロキシ</system:String>
|
||||
|
|
@ -467,44 +483,49 @@
|
|||
<system:String x:Key="userdatapathButton">フォルダーを開く</system:String>
|
||||
<system:String x:Key="advanced">上級者向け機能</system:String>
|
||||
<system:String x:Key="logLevel">ログレベル</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">デバッグ</system:String>
|
||||
<system:String x:Key="LogLevelNONE">サイレント</system:String>
|
||||
<system:String x:Key="LogLevelERROR">エラー</system:String>
|
||||
<system:String x:Key="LogLevelINFO">情報</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">デバッグ</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">設定ウィンドウで使用するフォント</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
<system:String x:Key="seeMoreReleaseNotes">See more release notes on GitHub</system:String>
|
||||
<system:String x:Key="checkNetworkConnectionTitle">Failed to fetch release notes</system:String>
|
||||
<system:String x:Key="checkNetworkConnectionSubTitle">Please check your network connection or ensure GitHub is accessible</system:String>
|
||||
<system:String x:Key="appUpdateTitle">Flow Launcher has been updated to {0}</system:String>
|
||||
<system:String x:Key="appUpdateButtonContent">Click here to view the release notes</system:String>
|
||||
<system:String x:Key="seeMoreReleaseNotes">GitHub で詳細なリリース ノートを見る</system:String>
|
||||
<system:String x:Key="checkNetworkConnectionTitle">リリースノートの取得に失敗</system:String>
|
||||
<system:String x:Key="checkNetworkConnectionSubTitle">ネットワーク接続を確認するか、GitHubにアクセスできることを確認してください</system:String>
|
||||
<system:String x:Key="appUpdateTitle">Flow Launcher が {0}に更新されました</system:String>
|
||||
<system:String x:Key="appUpdateButtonContent">ここをクリックしてリリースノートを表示</system:String>
|
||||
|
||||
<!-- FileManager Setting Dialog -->
|
||||
<system:String x:Key="fileManagerWindow">デフォルトのファイルマネージャー</system:String>
|
||||
<system:String x:Key="fileManager_learnMore">Learn more</system:String>
|
||||
<system:String x:Key="fileManager_tips">Please specify the file location of the file manager you using and add arguments as required. The "%d" represents the directory path to open for, used by the Arg for Folder field and for commands opening specific directories. The "%f" represents the file path to open for, used by the Arg for File field and for commands opening specific files.</system:String>
|
||||
<system:String x:Key="fileManager_tips2">For example, if the file manager uses a command such as "totalcmd.exe /A c:\windows" to open the c:\windows directory, the File Manager Path will be totalcmd.exe, and the Arg For Folder will be /A "%d". Certain file managers like QTTabBar may just require a path to be supplied, in this instance use "%d" as the File Manager Path and leave the rest of the fields blank.</system:String>
|
||||
<system:String x:Key="fileManager_name">File Manager</system:String>
|
||||
<system:String x:Key="fileManager_profile_name">Profile Name</system:String>
|
||||
<system:String x:Key="fileManager_path">File Manager Path</system:String>
|
||||
<system:String x:Key="fileManager_directory_arg">Arg For Folder</system:String>
|
||||
<system:String x:Key="fileManager_file_arg">Arg For File</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManager_learnMore">詳細を見る</system:String>
|
||||
<system:String x:Key="fileManager_tips">使用したいファイルマネージャーのファイルの位置を指定し、コマンドライン引数を入力してください。"%d" は開こうとしているフォルダーのパスを表し、「フォルダー用の引数」の欄で特定のフォルダーを開くために使用されます。"%f" は開こうとしているファイルのパスを表し、「ファイル用の引数」の欄で特定のファイルを開くために使用されます。</system:String>
|
||||
<system:String x:Key="fileManager_tips2">例として、ファイルマネージャーが "totalcmd.exe /A c:\windows" というコマンドを c:\windows というフォルダを開くために使用する場合を考えます。この場合、ファイルマネージャーのパスは totalcmd.exe で、フォルダー用の引数は /A "%d" になります。QTTabBarのように、パスのみを要求するファイルマネージャーの場合、”%d” をファイルマネージャーのパスの欄に指定し、残りを空欄にしてください。</system:String>
|
||||
<system:String x:Key="fileManager_name">ファイル マネージャー</system:String>
|
||||
<system:String x:Key="fileManager_profile_name">プロファイル名</system:String>
|
||||
<system:String x:Key="fileManager_path">ファイルマネージャーのパス</system:String>
|
||||
<system:String x:Key="fileManager_directory_arg">フォルダー用の引数</system:String>
|
||||
<system:String x:Key="fileManager_file_arg">ファイル用の引数</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">ファイルマネージャー '{0}' は、'{1}' に見つかりませんでした。続行しますか?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">ファイルマネージャのパスエラー</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">ファイルエクスプローラー</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">デフォルトのウェブブラウザー</system:String>
|
||||
<system:String x:Key="defaultBrowser_tips">The default setting follows the OS default browser setting. If specified separately, flow uses that browser.</system:String>
|
||||
<system:String x:Key="defaultBrowser_name">Browser</system:String>
|
||||
<system:String x:Key="defaultBrowser_profile_name">Browser Name</system:String>
|
||||
<system:String x:Key="defaultBrowser_path">Browser Path</system:String>
|
||||
<system:String x:Key="defaultBrowser_newWindow">New Window</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">New Tab</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Private Mode</system:String>
|
||||
<system:String x:Key="defaultBrowser_tips">デフォルトの設定は、OS のデフォルトのブラウザ設定に従います。別々に指定すると、Flow はそのブラウザを使用します。</system:String>
|
||||
<system:String x:Key="defaultBrowser_name">ブラウザー</system:String>
|
||||
<system:String x:Key="defaultBrowser_profile_name">ブラウザー名</system:String>
|
||||
<system:String x:Key="defaultBrowser_path">ブラウザーのパス</system:String>
|
||||
<system:String x:Key="defaultBrowser_newWindow">新しいウィンドウ</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">新しいタブ</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">プライベートモード</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">デフォルト</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">新しいプロファイル</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Change Priority</system:String>
|
||||
<system:String x:Key="priority_tips">Greater the number, the higher the result will be ranked. Try setting it as 5. If you want the results to be lower than any other plugin's, provide a negative number</system:String>
|
||||
<system:String x:Key="invalidPriority">Please provide an valid integer for Priority!</system:String>
|
||||
<system:String x:Key="changePriorityWindow">優先度の変更</system:String>
|
||||
<system:String x:Key="priority_tips">数値が大きいほど、結果の上の方に表示されます。試しに5として設定してみてください。 結果を他のプラグインよりも低くしたい場合は、負の数字を入力してください</system:String>
|
||||
<system:String x:Key="invalidPriority">優先度には有効な整数を入力してください!</system:String>
|
||||
|
||||
<!-- Action Keyword Setting Dialog -->
|
||||
<system:String x:Key="oldActionKeywords">古いアクションキーワード</system:String>
|
||||
|
|
@ -514,33 +535,33 @@
|
|||
<system:String x:Key="cannotFindSpecifiedPlugin">指定されたプラグインが見つかりません</system:String>
|
||||
<system:String x:Key="newActionKeywordsCannotBeEmpty">新しいアクションキーワードを空にすることはできません</system:String>
|
||||
<system:String x:Key="newActionKeywordsHasBeenAssigned">新しいアクションキーワードは他のプラグインに割り当てられています。他のアクションキーワードを入力してください</system:String>
|
||||
<system:String x:Key="newActionKeywordsSameAsOld">This new Action Keyword is the same as old, please choose a different one</system:String>
|
||||
<system:String x:Key="newActionKeywordsSameAsOld">そのアクションキーワードは以前のものと同じです。他のアクションキーワードを入力してください</system:String>
|
||||
<system:String x:Key="success">成功しました</system:String>
|
||||
<system:String x:Key="completedSuccessfully">Completed successfully</system:String>
|
||||
<system:String x:Key="failedToCopy">Failed to copy</system:String>
|
||||
<system:String x:Key="actionkeyword_tips">Enter the action keywords you like to use to start the plugin and use whitespace to divide them. Use * if you don't want to specify any, and the plugin will be triggered without any action keywords.</system:String>
|
||||
<system:String x:Key="completedSuccessfully">正常に完了しました</system:String>
|
||||
<system:String x:Key="failedToCopy">コピーに失敗</system:String>
|
||||
<system:String x:Key="actionkeyword_tips">プラグインを起動するためのアクションキーワードを、空白区切りで入力してください。特定のキーワードを使用せずにプラグインを使用したい場合、* を入力してください。</system:String>
|
||||
|
||||
<!-- Search Delay Settings Dialog -->
|
||||
<system:String x:Key="searchDelayTimeTitle">Search Delay Time Setting</system:String>
|
||||
<system:String x:Key="searchDelayTimeTips">Input the search delay time in ms you like to use for the plugin. Input empty if you don't want to specify any, and the plugin will use default search delay time.</system:String>
|
||||
<system:String x:Key="searchDelayTimeTitle">検索の遅延時間の設定</system:String>
|
||||
<system:String x:Key="searchDelayTimeTips">プラグインに使用したい検索の遅延時間をミリ秒で入力します。 何も指定したくない場合は空にしておくと、プラグインはデフォルトの検索の遅延時間を使用します。</system:String>
|
||||
|
||||
<!-- Search Delay Settings Dialog -->
|
||||
<system:String x:Key="homeTitle">ホームページ</system:String>
|
||||
<system:String x:Key="homeTips">Enable the plugin home page state if you like to show the plugin results when query is empty.</system:String>
|
||||
<system:String x:Key="homeTips">クエリが空のときにプラグインの結果を表示したい場合は、プラグインのホームページの設定を有効にします。</system:String>
|
||||
|
||||
<!-- Custom Query Hotkey Dialog -->
|
||||
<system:String x:Key="customeQueryHotkeyTitle">カスタムクエリのホットキー</system:String>
|
||||
<system:String x:Key="customeQueryHotkeyTips">Press a custom hotkey to open Flow Launcher and input the specified query automatically.</system:String>
|
||||
<system:String x:Key="customeQueryHotkeyTips">カスタムホットキーを押して Flow Launcher を開き、指定したクエリを自動的に入力します。</system:String>
|
||||
<system:String x:Key="preview">プレビュー</system:String>
|
||||
<system:String x:Key="hotkeyIsNotUnavailable">ホットキーは使用できません。新しいホットキーを選択してください</system:String>
|
||||
<system:String x:Key="invalidPluginHotkey">Hotkey is invalid</system:String>
|
||||
<system:String x:Key="invalidPluginHotkey">そのホットキーは無効です</system:String>
|
||||
<system:String x:Key="update">更新</system:String>
|
||||
<system:String x:Key="hotkeyRegTitle">Binding Hotkey</system:String>
|
||||
<system:String x:Key="hotkeyUnavailable">Current hotkey is unavailable.</system:String>
|
||||
<system:String x:Key="hotkeyUnavailableUneditable">This hotkey is reserved for "{0}" and can't be used. Please choose another hotkey.</system:String>
|
||||
<system:String x:Key="hotkeyUnavailableEditable">This hotkey is already in use by "{0}". If you press "Overwrite", it will be removed from "{0}".</system:String>
|
||||
<system:String x:Key="hotkeyRegGuide">Press the keys you want to use for this function.</system:String>
|
||||
<system:String x:Key="emptyPluginHotkey">Hotkey and action keyword are empty</system:String>
|
||||
<system:String x:Key="hotkeyRegTitle">ホットキーの設定</system:String>
|
||||
<system:String x:Key="hotkeyUnavailable">現在のホットキーは使用できません。</system:String>
|
||||
<system:String x:Key="hotkeyUnavailableUneditable">このホットキーは "{0}" で予約されており、使用できません。別のホットキーを選択してください。</system:String>
|
||||
<system:String x:Key="hotkeyUnavailableEditable">このホットキーは "{0}" によってすでに使用されています。「上書き」を押すと、"{0}"から削除されます。</system:String>
|
||||
<system:String x:Key="hotkeyRegGuide">この機能に使用するキーを押してください。</system:String>
|
||||
<system:String x:Key="emptyPluginHotkey">ホットキーとアクションキーワードが空です</system:String>
|
||||
|
||||
<!-- Custom Query Shortcut Dialog -->
|
||||
<system:String x:Key="customeQueryShortcutTitle">カスタムクエリのショートカット</system:String>
|
||||
|
|
@ -551,11 +572,11 @@
|
|||
</system:String>
|
||||
<system:String x:Key="duplicateShortcut">そのショートカットは既に存在します。新しいショートカットを入力するか、既存のショートカットを編集してください。</system:String>
|
||||
<system:String x:Key="emptyShortcut">ショートカット、展開の少なくとも一方が空です。</system:String>
|
||||
<system:String x:Key="invalidShortcut">Shortcut is invalid</system:String>
|
||||
<system:String x:Key="invalidShortcut">ショートカットが無効です</system:String>
|
||||
|
||||
<!-- Common Action -->
|
||||
<system:String x:Key="commonSave">保存</system:String>
|
||||
<system:String x:Key="commonOverwrite">Overwrite</system:String>
|
||||
<system:String x:Key="commonOverwrite">上書き</system:String>
|
||||
<system:String x:Key="commonCancel">キャンセル</system:String>
|
||||
<system:String x:Key="commonReset">リセット</system:String>
|
||||
<system:String x:Key="commonDelete">削除</system:String>
|
||||
|
|
@ -580,46 +601,47 @@
|
|||
<system:String x:Key="reportWindow_report_failed">クラッシュレポートの送信に失敗しました</system:String>
|
||||
<system:String x:Key="reportWindow_flowlauncher_got_an_error">Flow Launcherにエラーが発生しました</system:String>
|
||||
<system:String x:Key="reportWindow_please_open_issue">Please open new issue in</system:String>
|
||||
<system:String x:Key="reportWindow_upload_log">1. Upload log file: {0}</system:String>
|
||||
<system:String x:Key="reportWindow_copy_below">2. Copy below exception message</system:String>
|
||||
<system:String x:Key="reportWindow_upload_log">1. ログファイルをアップロード: {0}</system:String>
|
||||
<system:String x:Key="reportWindow_copy_below">2. 例外メッセージ以下をコピー</system:String>
|
||||
|
||||
<!-- File Open Error -->
|
||||
<system:String x:Key="fileManagerNotFoundTitle">File Manager Error</system:String>
|
||||
<system:String x:Key="fileManagerNotFoundTitle">ファイルマネージャのエラー</system:String>
|
||||
<system:String x:Key="fileManagerNotFound">
|
||||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
指定されたファイルマネージャーが見つかりませんでした。設定 > 一般でカスタムファイルマネージャの設定を確認してください。
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Error</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="errorTitle">エラー</system:String>
|
||||
<system:String x:Key="folderOpenError">フォルダを開く際にエラーが発生しました。</system:String>
|
||||
<system:String x:Key="browserOpenError">ブラウザでURLを開く際にエラーが発生しました。設定ウィンドウの一般セクションでデフォルトのウェブブラウザ設定を確認してください</system:String>
|
||||
<system:String x:Key="fileNotFoundError">ファイルまたはフォルダーが見つかりません: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Please wait...</system:String>
|
||||
<system:String x:Key="pleaseWait">しばらくお待ちください…</system:String>
|
||||
|
||||
<!-- Update -->
|
||||
<system:String x:Key="update_flowlauncher_update_check">Checking for new update</system:String>
|
||||
<system:String x:Key="update_flowlauncher_update_check">新しい更新を確認中</system:String>
|
||||
<system:String x:Key="update_flowlauncher_already_on_latest">Flow Launcherは既に最新です</system:String>
|
||||
<system:String x:Key="update_flowlauncher_update_found">Update found</system:String>
|
||||
<system:String x:Key="update_flowlauncher_updating">Updating...</system:String>
|
||||
<system:String x:Key="update_flowlauncher_update_found">更新が見つかりました</system:String>
|
||||
<system:String x:Key="update_flowlauncher_updating">更新中…</system:String>
|
||||
<system:String x:Key="update_flowlauncher_fail_moving_portable_user_profile_data">
|
||||
Flow Launcher was not able to move your user profile data to the new update version.
|
||||
Please manually move your profile data folder from {0} to {1}
|
||||
Flow Launcherはユーザープロファイルデータを新しいバージョンに移動できませんでした。
|
||||
手動で {0} から {1}にプロフィールデータフォルダを移動してください
|
||||
</system:String>
|
||||
<system:String x:Key="update_flowlauncher_new_update">New Update</system:String>
|
||||
<system:String x:Key="update_flowlauncher_new_update">新しい更新</system:String>
|
||||
<system:String x:Key="update_flowlauncher_update_new_version_available">Flow Launcher の最新バージョン V{0} が入手可能です</system:String>
|
||||
<system:String x:Key="update_flowlauncher_update_error">Flow Launcherのアップデート中にエラーが発生しました</system:String>
|
||||
<system:String x:Key="update_flowlauncher_update">更新</system:String>
|
||||
<system:String x:Key="update_flowlauncher_update_cancel">キャンセル</system:String>
|
||||
<system:String x:Key="update_flowlauncher_fail">Update Failed</system:String>
|
||||
<system:String x:Key="update_flowlauncher_check_connection">Check your connection and try updating proxy settings to github-cloud.s3.amazonaws.com.</system:String>
|
||||
<system:String x:Key="update_flowlauncher_fail">アップデート失敗</system:String>
|
||||
<system:String x:Key="update_flowlauncher_check_connection">接続を確認し、その後プロキシ設定を github-cloud.s3.amazonaws.com に更新してみてください。</system:String>
|
||||
<system:String x:Key="update_flowlauncher_update_restart_flowlauncher_tip">このアップデートでは、Flow Launcherの再起動が必要です</system:String>
|
||||
<system:String x:Key="update_flowlauncher_update_update_files">次のファイルがアップデートされます</system:String>
|
||||
<system:String x:Key="update_flowlauncher_update_files">更新ファイル一覧</system:String>
|
||||
<system:String x:Key="update_flowlauncher_update_update_description">アップデートの詳細</system:String>
|
||||
|
||||
<!-- Plugin Update Window -->
|
||||
<system:String x:Key="restartAfterUpdating">Restart Flow Launcher after updating plugins</system:String>
|
||||
<system:String x:Key="updatePluginCheckboxContent">{0}: Update from v{1} to v{2}</system:String>
|
||||
<system:String x:Key="updatePluginNoSelected">No plugin selected</system:String>
|
||||
<system:String x:Key="restartAfterUpdating">プラグインを更新した後、Flow Launcher を再起動する</system:String>
|
||||
<system:String x:Key="updatePluginCheckboxContent">{0}: v{1} から v{2} へ更新</system:String>
|
||||
<system:String x:Key="updatePluginNoSelected">プラグインが選択されていません</system:String>
|
||||
|
||||
<!-- Welcome Window -->
|
||||
<system:String x:Key="Skip">スキップ</system:String>
|
||||
|
|
@ -642,18 +664,18 @@
|
|||
<system:String x:Key="HotkeyShiftEnterDesc">コンテキストメニューを開く</system:String>
|
||||
<system:String x:Key="HotkeyCtrlEnterDesc">ファイルのあるフォルダを開く</system:String>
|
||||
<system:String x:Key="HotkeyCtrlShiftEnterDesc">管理者として実行、または、 デフォルトのファイルマネージャでフォルダを開く</system:String>
|
||||
<system:String x:Key="HotkeyCtrlHDesc">Query History</system:String>
|
||||
<system:String x:Key="HotkeyCtrlHDesc">クエリの履歴</system:String>
|
||||
<system:String x:Key="HotkeyESCDesc">コンテキストメニューから検索結果に戻る</system:String>
|
||||
<system:String x:Key="HotkeyTabDesc">Autocomplete</system:String>
|
||||
<system:String x:Key="HotkeyTabDesc">自動補完</system:String>
|
||||
<system:String x:Key="HotkeyRunDesc">選択したアイテムを開く、または、実行する</system:String>
|
||||
<system:String x:Key="HotkeyCtrlIDesc">Flow Launcherの設定ウインドウを開く</system:String>
|
||||
<system:String x:Key="HotkeyF5Desc">プラグインデータのリロード</system:String>
|
||||
|
||||
<system:String x:Key="HotkeySelectFirstResult">Select first result</system:String>
|
||||
<system:String x:Key="HotkeySelectLastResult">Select last result</system:String>
|
||||
<system:String x:Key="HotkeyRequery">Run current query again</system:String>
|
||||
<system:String x:Key="HotkeySelectFirstResult">最初の結果を選択</system:String>
|
||||
<system:String x:Key="HotkeySelectLastResult">最後の結果を選択</system:String>
|
||||
<system:String x:Key="HotkeyRequery">現在のクエリをもう一度実行</system:String>
|
||||
<system:String x:Key="HotkeyOpenResult">結果を開く</system:String>
|
||||
<system:String x:Key="HotkeyOpenResultN">Open result #{0}</system:String>
|
||||
<system:String x:Key="HotkeyOpenResultN">#{0} を開く</system:String>
|
||||
|
||||
<system:String x:Key="RecommendWeather">天気</system:String>
|
||||
<system:String x:Key="RecommendWeatherDesc">天気についてのGoogle検索</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">창 위치 초기화</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">검색창 위치 초기화</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">검색어 입력</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">설정</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">Flow Launcher를 제거한 후에는 작업 스케줄러에서 이 작업(Flow.Launcher Startup)을 수동으로 삭제해야 합니다</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">포커스 잃으면 Flow Launcher 숨김</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">새 버전 알림 끄기</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">검색 창 위치</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">마지막 위치 기억</system:String>
|
||||
|
|
@ -162,6 +168,10 @@
|
|||
<system:String x:Key="homePageToolTip">쿼리 입력창이 비어있을때, 홈페이지의 결과를 표시합니다.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">히스토리를 홈페이지에 표시</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">홈페이지에 표시할 최대 히스토리 수</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -205,6 +215,8 @@
|
|||
<system:String x:Key="plugin_query_version">버전</system:String>
|
||||
<system:String x:Key="plugin_query_web">웹사이트</system:String>
|
||||
<system:String x:Key="plugin_uninstall">제거</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
|
|
@ -215,6 +227,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">플러그인 스토어</system:String>
|
||||
|
|
@ -434,7 +450,7 @@
|
|||
<system:String x:Key="icons">아이콘</system:String>
|
||||
<system:String x:Key="about_activate_times">Flow Launcher를 {0}번 실행했습니다.</system:String>
|
||||
<system:String x:Key="checkUpdates">업데이트 확인</system:String>
|
||||
<system:String x:Key="BecomeASponsor">후원하기</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">새 버전({0})이 있습니다. Flow Launcher를 재시작하세요.</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">업데이트 확인을 실패했습니다. api.github.com로의 연결 또는 프록시 설정을 확인해주세요.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -458,8 +474,10 @@
|
|||
<system:String x:Key="userdatapathButton">폴더 열기</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">로그 레벨</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Error</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">설정창 글꼴</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -481,6 +499,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">파일경로 인수</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">기본 웹 브라우저</system:String>
|
||||
|
|
@ -491,6 +510,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">새 창</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">새 탭</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">사생활 보호 모드</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">중요도 변경</system:String>
|
||||
|
|
@ -553,7 +574,7 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
|
|||
<system:String x:Key="commonOK">확인</system:String>
|
||||
<system:String x:Key="commonYes">예</system:String>
|
||||
<system:String x:Key="commonNo">아니오</system:String>
|
||||
<system:String x:Key="commonBackground">배경</system:String>
|
||||
<system:String x:Key="commonBackground">백그라운드</system:String>
|
||||
|
||||
<!-- Crash Reporter -->
|
||||
<system:String x:Key="reportWindow_version">버전</system:String>
|
||||
|
|
@ -580,8 +601,9 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Error</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">잠시 기다려주세요...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Tilbakestilling av posisjon</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Innstillinger</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Feil ved å sette kjør ved oppstart</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Skjul Flow Launcher når fokus forsvinner</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Ikke vis varsler om nye versjoner</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Husk siste posisjon</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Versjon</system:String>
|
||||
<system:String x:Key="plugin_query_web">Nettsted</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Avinstaller</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Programtillegg butikk</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">Ikoner</system:String>
|
||||
<system:String x:Key="about_activate_times">Du har aktivert Flow Launcher {0} ganger</system:String>
|
||||
<system:String x:Key="checkUpdates">Se etter oppdateringer</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Bli en sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Ny versjon {0} er tilgjengelig, vil du starte Flow Launcher på nytt for å bruke oppdateringen?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Sjekk oppdateringer mislyktes, vennligst sjekk tilkoblingen og proxy-innstillingene til api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Åpne mappe</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">Log Level</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Feil</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Setting Window Font</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Arg for fil</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Standard nettleser</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">Nytt vindu</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Ny fane</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Privat modus</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Endre prioritet</system:String>
|
||||
|
|
@ -589,8 +610,9 @@ Hvis du legger til et @-prefiks mens du legger inn en snarvei, samsvarer det med
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Feil</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Vennligst vent...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Positie resetten</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type om te zoeken</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Instellingen</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Fout bij het instellen van uitvoeren bij opstarten</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Verberg Flow Launcher als focus verloren is</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Laat geen nieuwe versie notificaties zien</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Laatste Positie Onthouden</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Versie</system:String>
|
||||
<system:String x:Key="plugin_query_web">Website</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Verwijderen</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Plugin Winkel</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">Pictogrammen</system:String>
|
||||
<system:String x:Key="about_activate_times">U heeft Flow Launcher {0} keer opgestart</system:String>
|
||||
<system:String x:Key="checkUpdates">Zoek naar Updates</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Sponsor worden</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Nieuwe versie {0} beschikbaar, start Flow Launcher opnieuw op</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Controleren op updates mislukt, controleer uw verbinding en proxy-instellingen voor api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Map openen</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">Log Level</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Error</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Setting Window Font</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Arg voor bestand</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Standaard webbrowser</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">Nieuw Venster</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Nieuw tabblad</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Privé modus</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Prioriteit wijzigen</system:String>
|
||||
|
|
@ -589,8 +610,9 @@ Als u een '@' voorvoegsel toevoegt tijdens het invoeren van een snelkoppeling, m
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Error</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Please wait...</system:String>
|
||||
|
|
|
|||
|
|
@ -8,33 +8,33 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
</system:String>
|
||||
<system:String x:Key="runtimePluginChooseRuntimeExecutable">Wybierz plik wykonywalny {0}</system:String>
|
||||
<system:String x:Key="runtimeExecutableInvalidChooseDownload">
|
||||
Your selected {0} executable is invalid.
|
||||
Wybrany plik wykonywalny {0} jest nieprawidłowy.
|
||||
{2}{2}
|
||||
Click yes if you would like select the {0} executable again. Click no if you would like to download {1}
|
||||
Kliknij Tak, jeśli chcesz ponownie wybrać plik wykonywalny {0}. Kliknij Nie, jeśli chcesz pobrać {1}
|
||||
</system:String>
|
||||
<system:String x:Key="runtimePluginUnableToSetExecutablePath">Nie można ustawić ścieżki do pliku wykonywalnego {0}. Spróbuj ponownie w ustawieniach Flow (przewiń na sam dół).</system:String>
|
||||
<system:String x:Key="failedToInitializePluginsTitle">Nie udało się zainicjować wtyczek</system:String>
|
||||
<system:String x:Key="failedToInitializePluginsMessage">Wtyczki: {0} – nie udało się ich wczytać i zostaną wyłączone. Skontaktuj się z twórcą wtyczki, aby uzyskać pomoc</system:String>
|
||||
|
||||
<!-- Portable -->
|
||||
<system:String x:Key="restartToDisablePortableMode">Flow Launcher needs to restart to finish disabling portable mode, after the restart your portable data profile will be deleted and roaming data profile kept</system:String>
|
||||
<system:String x:Key="restartToEnablePortableMode">Flow Launcher needs to restart to finish enabling portable mode, after the restart your roaming data profile will be deleted and portable data profile kept</system:String>
|
||||
<system:String x:Key="moveToDifferentLocation">Flow Launcher has detected you enabled portable mode, would you like to move it to a different location?</system:String>
|
||||
<system:String x:Key="shortcutsUninstallerCreated">Flow Launcher has detected you disabled portable mode, the relevant shortcuts and uninstaller entry have been created</system:String>
|
||||
<system:String x:Key="userDataDuplicated">Flow Launcher detected your user data exists both in {0} and {1}. {2}{2}Please delete {1} in order to proceed. No changes have occurred.</system:String>
|
||||
<system:String x:Key="restartToDisablePortableMode">Flow Launcher musi zostać ponownie uruchomiony, aby wyłączyć tryb przenośny. Spowoduje to usunięcie profilu przenośnego i zachowanie profilu mobilnego</system:String>
|
||||
<system:String x:Key="restartToEnablePortableMode">Flow Launcher musi zostać ponownie uruchomiony, aby włączyć tryb przenośny. Spowoduje to usunięcie profilu mobilnego i zachowanie profilu przenośnego</system:String>
|
||||
<system:String x:Key="moveToDifferentLocation">Flow Launcher wykrył włączenie trybu przenośnego. Czy chcesz przenieść aplikację do innej lokalizacji?</system:String>
|
||||
<system:String x:Key="shortcutsUninstallerCreated">Wykryto wyłączenie trybu przenośnego. Odpowiednie skróty oraz deinstalator zostały utworzone</system:String>
|
||||
<system:String x:Key="userDataDuplicated">Flow Launcher wykrył zduplikowane dane użytkownika w dwóch lokalizacjach: {0} oraz {1}.{2}{2}Aby kontynuować, usuń dane znajdujące się w {1}. Nie wprowadzono żadnych zmian.</system:String>
|
||||
|
||||
<!-- Plugin Loader -->
|
||||
<system:String x:Key="pluginHasErrored">The following plugin has errored and cannot be loaded:</system:String>
|
||||
<system:String x:Key="pluginsHaveErrored">The following plugins have errored and cannot be loaded:</system:String>
|
||||
<system:String x:Key="referToLogs">Please refer to the logs for more information</system:String>
|
||||
<system:String x:Key="pluginHasErrored">Nie można załadować następującej wtyczki z powodu błędu:</system:String>
|
||||
<system:String x:Key="pluginsHaveErrored">Nie można załadować następujących wtyczek z powodu błędu:</system:String>
|
||||
<system:String x:Key="referToLogs">Aby uzyskać więcej informacji, zapoznaj się z logami</system:String>
|
||||
|
||||
<!-- Http -->
|
||||
<system:String x:Key="pleaseTryAgain">Please try again</system:String>
|
||||
<system:String x:Key="parseProxyFailed">Unable to parse Http Proxy</system:String>
|
||||
<system:String x:Key="pleaseTryAgain">Proszę spróbować ponownie</system:String>
|
||||
<system:String x:Key="parseProxyFailed">Nie można przetworzyć adresu serwera proxy HTTP</system:String>
|
||||
|
||||
<!-- AbstractPluginEnvironment -->
|
||||
<system:String x:Key="failToInstallTypeScriptEnv">Failed to install TypeScript environment. Please try again later</system:String>
|
||||
<system:String x:Key="failToInstallPythonEnv">Failed to install Python environment. Please try again later.</system:String>
|
||||
<system:String x:Key="failToInstallTypeScriptEnv">Instalacja środowiska TypeScript nie powiodła się. Spróbuj ponownie później.</system:String>
|
||||
<system:String x:Key="failToInstallPythonEnv">Instalacja środowiska Python nie powiodła się. Spróbuj ponownie później.</system:String>
|
||||
|
||||
<!-- MainWindow -->
|
||||
<system:String x:Key="registerHotkeyFailed">Nie udało się zarejestrować skrótu klawiszowego „{0}”. Skrót może być używany przez inny program. Zmień skrót na inny lub zamknij program, który go używa.</system:String>
|
||||
|
|
@ -64,6 +64,10 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="PositionReset">Resetowanie pozycji</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Zresetuj pozycję okna wyszukiwania</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Wpisz tutaj, aby wyszukać</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Ustawienia</system:String>
|
||||
|
|
@ -75,6 +79,8 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">Po odinstalowaniu musisz ręcznie usunąć to zadanie (Flow.Launcher Startup) za pomocą Harmonogramu zadań</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Błąd uruchamiania ustawień przy starcie</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ukryj okno Flow Launcher kiedy przestanie ono być aktywne</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Nie pokazuj powiadomienia o nowej wersji</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Pozycja okna wyszukiwania</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Zapamiętaj Ostatnią Pozycję</system:String>
|
||||
|
|
@ -111,7 +117,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="typingStartEn">Zawsze rozpoczynaj wpisywanie w trybie angielskim</system:String>
|
||||
<system:String x:Key="typingStartEnTooltip">Tymczasowo zmień metodę wprowadzania na tryb angielski podczas aktywacji Flow.</system:String>
|
||||
<system:String x:Key="autoUpdates">Automatyczne aktualizacje</system:String>
|
||||
<system:String x:Key="autoUpdatesTooltip">Automatically check and update the app when available</system:String>
|
||||
<system:String x:Key="autoUpdatesTooltip">Automatycznie sprawdzaj i instaluj aktualizacje, gdy będą dostępne</system:String>
|
||||
<system:String x:Key="select">Wybierz</system:String>
|
||||
<system:String x:Key="hideOnStartup">Uruchamiaj Flow Launcher zminimalizowany</system:String>
|
||||
<system:String x:Key="hideOnStartupToolTip">Okno wyszukiwania Flow Launcher jest ukryte w zasobniku systemowym po uruchomieniu.</system:String>
|
||||
|
|
@ -123,7 +129,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="SearchPrecisionLow">Niska</system:String>
|
||||
<system:String x:Key="SearchPrecisionRegular">Standardowa</system:String>
|
||||
<system:String x:Key="ShouldUsePinyin">Szukaj z Pinyin</system:String>
|
||||
<system:String x:Key="ShouldUsePinyinToolTip">Pinyin is the standard system of romanized spelling for translating Chinese. Please note, enabling this can significantly increase memory usage during search.</system:String>
|
||||
<system:String x:Key="ShouldUsePinyinToolTip">Pinyin to standardowy system zapisu języka chińskiego za pomocą alfabetu łacińskiego. Należy pamiętać, że włączenie tej opcji może znacznie zwiększyć zużycie pamięci podczas wyszukiwania.</system:String>
|
||||
<system:String x:Key="ShouldUseDoublePinyin">Use Double Pinyin</system:String>
|
||||
<system:String x:Key="ShouldUseDoublePinyinToolTip">Use Double Pinyin instead of Full Pinyin to search.</system:String>
|
||||
<system:String x:Key="DoublePinyinSchema">Double Pinyin Schema</system:String>
|
||||
|
|
@ -170,6 +176,10 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="homePageToolTip">Wyświetl wyniki strony głównej, gdy pole wyszukiwania jest puste.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Pokaż wyniki historii na stronie głównej</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maksymalna liczba wyników historii wyświetlanych na stronie głównej</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Można edytować tylko wtedy, gdy wtyczka obsługuje funkcję Strona główna i jest ona włączona.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Wyświetl okno wyszukiwania na wierzchu</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Wyświetl okno wyszukiwania ponad innymi oknami</system:String>
|
||||
|
|
@ -213,6 +223,8 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="plugin_query_version">Wersja</system:String>
|
||||
<system:String x:Key="plugin_query_web">Strona</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Odinstalowywanie</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Nie udało się usunąć ustawień wtyczki</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Wtyczki: {0} – nie udało się usunąć plików ustawień wtyczek, usuń je ręcznie</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Nie udało się usunąć cache wtyczki</system:String>
|
||||
|
|
@ -223,6 +235,10 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Sklep z wtyczkami</system:String>
|
||||
|
|
@ -442,7 +458,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="icons">Ikony</system:String>
|
||||
<system:String x:Key="about_activate_times">Uaktywniłeś Flow Launcher {0} razy</system:String>
|
||||
<system:String x:Key="checkUpdates">Szukaj aktualizacji</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Zostań sponsorem</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Nowa wersja {0} jest dostępna, uruchom ponownie Flow Launcher</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Sprawdzenie aktualizacji nie powiodło się. Sprawdź swoje połączenie i ustawienia proxy dla api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -466,8 +482,10 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="userdatapathButton">Otwórz folder</system:String>
|
||||
<system:String x:Key="advanced">Zaawansowane</system:String>
|
||||
<system:String x:Key="logLevel">Poziom logowania</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Błąd</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Ustawienia czcionki okna</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -489,6 +507,7 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="fileManager_file_arg">Arg dla pliku</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">Menedżer plików „{0}” nie został znaleziony w lokalizacji „{1}”. Czy chcesz kontynuować?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">Błąd ścieżki do menedżera plików</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Domyślna przeglądarka</system:String>
|
||||
|
|
@ -499,6 +518,8 @@ Kliknij "nie", jeśli jest już zainstalowany. Zostaniesz wtedy popros
|
|||
<system:String x:Key="defaultBrowser_newWindow">Nowe okno</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Nowa zakładka</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Tryb prywatny</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Zmień priorytet</system:String>
|
||||
|
|
@ -588,8 +609,9 @@ Jeśli dodasz prefiks '@' podczas wprowadzania skrótu, będzie on pasował do d
|
|||
Nie można znaleźć określonego menedżera plików. Sprawdź ustawienie Niestandardowy menedżer plików w Ustawienia > Ogólne.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Błąd</system:String>
|
||||
<system:String x:Key="folderOpenError">Wystąpił błąd podczas otwierania folderu. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">Wystąpił błąd podczas otwierania adresu URL w przeglądarce. Sprawdź konfigurację domyślnej przeglądarki internetowej w sekcji Ogólne okna ustawień</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Proszę czekać...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Redefinição de Posição</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Configurações</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Erro ao ativar início com o sistema</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Esconder Flow Launcher quando foco for perdido</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Não mostrar notificações de novas versões</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Lembrar Última Posição</system:String>
|
||||
|
|
@ -90,7 +96,7 @@
|
|||
<system:String x:Key="SearchWindowAlignCustom">Posição Personalizada</system:String>
|
||||
<system:String x:Key="language">Idioma</system:String>
|
||||
<system:String x:Key="lastQueryMode">Estilo da Última Consulta</system:String>
|
||||
<system:String x:Key="lastQueryModeToolTip">Mostrar/ocultar resultados anteriores quando o Lançador de Fluxos é reativado.</system:String>
|
||||
<system:String x:Key="lastQueryModeToolTip">Mostrar/ocultar resultados anteriores quando o Flow Launcher for reativado.</system:String>
|
||||
<system:String x:Key="LastQueryPreserved">Preservar Última Consulta</system:String>
|
||||
<system:String x:Key="LastQuerySelected">Selecionar última consulta</system:String>
|
||||
<system:String x:Key="LastQueryEmpty">Limpar última consulta</system:String>
|
||||
|
|
@ -138,7 +144,7 @@
|
|||
<system:String x:Key="DoublePinyinSchemasXiaoLang">Xiao Lang</system:String>
|
||||
|
||||
<system:String x:Key="AlwaysPreview">Sempre Pré-visualizar</system:String>
|
||||
<system:String x:Key="AlwaysPreviewToolTip">Sempre abrir o painel de pré-visualização quando o Flow é ativado. Pressione {0} para ativar ou desativar a pré-visualização.</system:String>
|
||||
<system:String x:Key="AlwaysPreviewToolTip">Sempre abrir o painel de pré-visualização quando o Flow for ativado. Pressione {0} para alternar a pré-visualização.</system:String>
|
||||
<system:String x:Key="shadowEffectNotAllowed">O efeito de sombra não é permitido enquanto o tema atual tem o efeito de desfoque ativado</system:String>
|
||||
<system:String x:Key="searchDelay">Search Delay</system:String>
|
||||
<system:String x:Key="searchDelayToolTip">Adds a short delay while typing to reduce UI flicker and result load. Recommended if your typing speed is average.</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Versão</system:String>
|
||||
<system:String x:Key="plugin_query_web">Site</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Desinstalar</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Loja de Plugins</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">Ícones</system:String>
|
||||
<system:String x:Key="about_activate_times">Você ativou o Flow Launcher {0} vezes</system:String>
|
||||
<system:String x:Key="checkUpdates">Procurar atualizações</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Torne-se um Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">A nova versão {0} está disponível, por favor reinicie o Flow Launcher.</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Falha ao procurar atualizações, confira sua conexão e configuração de proxy para api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Open Folder</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">Log Level</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Error</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Setting Window Font</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Arg para Arquivo</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Navegador da Web Padrão</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">Nova Janela</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Nova Aba</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Modo Privado</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Alterar Prioridade</system:String>
|
||||
|
|
@ -589,8 +610,9 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Error</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Por favor, aguarde...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Repor posição</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Repor posição da janela de pesquisa</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Escreva aqui para pesquisar</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: Este plugin está a ser iniciado...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Selecione este resultado para pesquisar novamente</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Falha na resposta!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Selecione este resultado para mais informação</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Definições</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">Se desinstalar a aplicação, tem que remover manualmente a tarefa (Flow.Launcher Startup) no agendamento de tarefas</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Erro ao definir para iniciar ao arrancar</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Ocultar Flow Launcher ao perder o foco</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Mostrar barra de tarefas ao abrir Flow Launcher</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Mostrar, temporariamente, a barra de tarefas ao abrir Flow launcher. Útil para barra de tarefas oculta automaticamente.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Não notificar acerca de novas versões</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Posição da janela de pesquisa</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Memorizar última posição</system:String>
|
||||
|
|
@ -170,6 +176,10 @@
|
|||
<system:String x:Key="homePageToolTip">Mostrar resultados da página inicial se o termo de pesquisa estiver vazio.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Mostrar histórico na página inicial</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Máximo de resultados a mostrar na Página inicial</system:String>
|
||||
<system:String x:Key="historyStyle">Estilo do histórico</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Escolha o tipo de histórico a ser mostrado no Histórico e na Página inicial</system:String>
|
||||
<system:String x:Key="queryHistory">Histórico de pesquisas</system:String>
|
||||
<system:String x:Key="executedHistory">Último histórico aberto</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Esta opção apenas pode ser editada se o plugin tiver suporte a Página inicial e se estiver ativo.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Janela de pesquisa à frente</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Sobrepõe a definição 'Sempre na frente' das outras aplicações e mostra Flow Launcher à frente de qualquer janela.</system:String>
|
||||
|
|
@ -213,6 +223,8 @@
|
|||
<system:String x:Key="plugin_query_version">Versão</system:String>
|
||||
<system:String x:Key="plugin_query_web">Site</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Desinstalar</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Tempo de atraso para pesquisa: padrão</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Tempo de atraso para pesquisa: {0} ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Falha ao remover as definições do plugin</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugin: {0} - Falha ao remover o ficheiro de definições do plugin. Experimente remover manualmente.</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Falha ao limpar a cache do plugin</system:String>
|
||||
|
|
@ -223,6 +235,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Falha ao desinstalar {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Não foi possível encontrar plugin.json no ficheiro zip ou, então, o caminho {0} não existe.</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">Já existe um plugin com a mesma ID e versão ou, então, a versão instalada é superior à do plugin descarregado.</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Erro ao criar o painel de definição para o plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requer Flow Launcher v {1} para ser executado</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">A sua versão Flow Launcher não cumpre os reuisitos mínimos para executar {0}. Pretende continuar com a instalação?{1}{1}Deve atualizar Flow Launcher para a versão mais recente para poder usufruir de {0} sem quaisquer problemas.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Não foi possível instalar o plugin uma vez que plugin.json parece estar danificado.</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Loja de plugins</system:String>
|
||||
|
|
@ -331,7 +347,7 @@
|
|||
<system:String x:Key="PlaceholderTextTip">O texto do marcador de posição. Se vazio, será utilizado: {0}</system:String>
|
||||
<system:String x:Key="KeepMaxResults">Janela com tamanho fixo</system:String>
|
||||
<system:String x:Key="KeepMaxResultsToolTip">Não pode ajustar o tamanho da janela por arrasto.</system:String>
|
||||
<system:String x:Key="MaxShowResultsCannotWorkWithAlwaysPreview">Since Always Preview is on, maximum results shown may not take effect because preview panel requires a certain minimum height</system:String>
|
||||
<system:String x:Key="MaxShowResultsCannotWorkWithAlwaysPreview">Como a opção "Pré-visualizar sempre" está ativa, os resultados máximos mostrados podem não ter efeito porque o painel de visualização requer uma altura mínima</system:String>
|
||||
|
||||
<!-- Setting Hotkey -->
|
||||
<system:String x:Key="hotkey">Tecla de atalho</system:String>
|
||||
|
|
@ -409,13 +425,13 @@
|
|||
<system:String x:Key="DialogJumpWindowPositionFollowDefault">Default search window position. Displayed when triggered by search window hotkey</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviour">Dialog Jump Result Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviourToolTip">Behaviour to navigate Open/Save As dialog window to the selected result path</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourLeftClick">Left click or Enter key</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourRightClick">Right click</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourLeftClick">Clique esquerdo ou tecla Enter</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourRightClick">Clique direito</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviour">Dialog Jump File Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviourToolTip">Behaviour to navigate Open/Save As dialog window when the result is a file path</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPath">Fill full path in file name box</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPathOpen">Fill full path in file name box and open</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourDirectory">Fill directory in path box</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPath">Preencher caminho total na caixa Nome do ficheiro</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPathOpen">Preencher caminho total na caixa Nome do ficheiro e abrir</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourDirectory">Preencher diretório na caixa Caminho</system:String>
|
||||
|
||||
<!-- Setting Proxy -->
|
||||
<system:String x:Key="proxy">Proxy HTTP</system:String>
|
||||
|
|
@ -442,7 +458,7 @@
|
|||
<system:String x:Key="icons">Ícones</system:String>
|
||||
<system:String x:Key="about_activate_times">Ativou o Flow Launcher {0} vezes</system:String>
|
||||
<system:String x:Key="checkUpdates">Procurar atualizações</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Tornar-se patrocinador</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Torne-se um Patrocinador</system:String>
|
||||
<system:String x:Key="newVersionTips">Está disponível a versão {0}. Gostaria de reiniciar Flow Launcher para atualizar a sua versão?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Erro ao procurar atualizações. Verifique a sua ligação e as definições do proxy estabelecidas para api.github.com</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -465,8 +481,10 @@
|
|||
<system:String x:Key="userdatapathButton">Abrir pasta</system:String>
|
||||
<system:String x:Key="advanced">Avançado</system:String>
|
||||
<system:String x:Key="logLevel">Nível de registo</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Depuração</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silencioso</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Erro</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Informação</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Depuração</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Tipo de letra da aplicação</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -488,6 +506,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Argumento para ficheiro</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">Não foi possível encontrar o gestor de ficheiros '{0}' em '{1}'. Deseja continuar?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">Erro no caminho do gestor de ficheiros</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">Gestor de ficheiros</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Navegador web padrão</system:String>
|
||||
|
|
@ -498,6 +517,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">Nova janela</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Novo separador</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Modo privado</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Padrão</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">Novo perfil</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Alterar prioridade</system:String>
|
||||
|
|
@ -587,8 +608,9 @@ Se adicionar o prefixo '@' durante a introdução do atalho, será utilizada qua
|
|||
Não foi possível encontrar o gestor de ficheiros. Verifique a definição 'Gestor de ficheiros personalizado' em Definições -> Geral.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Erro</system:String>
|
||||
<system:String x:Key="folderOpenError">Ocorreu um erro ao abrir a pasta: {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">Ocorreu um erro ao abrir a pasta.</system:String>
|
||||
<system:String x:Key="browserOpenError">Ocorreu um erro ao abrir o URL no navegador. Verifique a configuração Navegador web padrão na secção Geral das definições.</system:String>
|
||||
<system:String x:Key="fileNotFoundError">Ficheiro ou diretório não encontrado: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Por favor aguarde...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Сброс положения</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Настройки</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Ошибка настройки запуска при запуске</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Скрывать Flow Launcher, если потерян фокуc</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Не отображать сообщение об обновлении, когда доступна новая версия</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Запомнить последнее положение</system:String>
|
||||
|
|
@ -167,10 +173,14 @@
|
|||
<system:String x:Key="KoreanImeRegistryTooltip">You can change the Previous Korean IME settings directly from here</system:String>
|
||||
<system:String x:Key="KoreanImeSettingChangeFailTitle">Failed to change Korean IME setting</system:String>
|
||||
<system:String x:Key="KoreanImeSettingChangeFailSubTitle">Please check your system registry access or contact support.</system:String>
|
||||
<system:String x:Key="homePage">Home Page</system:String>
|
||||
<system:String x:Key="homePage">Главная страница</system:String>
|
||||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -199,10 +209,10 @@
|
|||
<system:String x:Key="pluginSearchDelayTime">Plugin search delay time</system:String>
|
||||
<system:String x:Key="pluginSearchDelayTimeTooltip">Change Plugin Search Delay Time</system:String>
|
||||
<system:String x:Key="FilterComboboxLabel">Advanced Settings:</system:String>
|
||||
<system:String x:Key="DisplayModeOnOff">Enabled</system:String>
|
||||
<system:String x:Key="DisplayModeOnOff">Включено</system:String>
|
||||
<system:String x:Key="DisplayModePriority">Приоритет</system:String>
|
||||
<system:String x:Key="DisplayModeSearchDelay">Search Delay</system:String>
|
||||
<system:String x:Key="DisplayModeHomeOnOff">Home Page</system:String>
|
||||
<system:String x:Key="DisplayModeHomeOnOff">Главная страница</system:String>
|
||||
<system:String x:Key="currentPriority">Текущий приоритет</system:String>
|
||||
<system:String x:Key="newPriority">Новый приоритет</system:String>
|
||||
<system:String x:Key="priority">Приоритет</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Версия</system:String>
|
||||
<system:String x:Key="plugin_query_web">Веб-сайт</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Удалить</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Магазин плагинов</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">Значки</system:String>
|
||||
<system:String x:Key="about_activate_times">Вы воспользовались Flow Launcher уже {0} раз</system:String>
|
||||
<system:String x:Key="checkUpdates">Проверить наличие обновлений</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Стать спонсором</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Доступна новая версия {0}. Вы хотите перезапустить Flow Launcher, чтобы использовать обновление?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Проверка обновлений не удалась, пожалуйста, проверьте настройки подключения и прокси-сервера к api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Open Folder</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">Log Level</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Ошибка</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Setting Window Font</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Аргумент для файла</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Браузер по умолчанию</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">Новое окно</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Новая вкладка</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Приватный режим</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Изменить приоритет</system:String>
|
||||
|
|
@ -525,7 +546,7 @@
|
|||
<system:String x:Key="searchDelayTimeTips">Input the search delay time in ms you like to use for the plugin. Input empty if you don't want to specify any, and the plugin will use default search delay time.</system:String>
|
||||
|
||||
<!-- Search Delay Settings Dialog -->
|
||||
<system:String x:Key="homeTitle">Home Page</system:String>
|
||||
<system:String x:Key="homeTitle">Главная страница</system:String>
|
||||
<system:String x:Key="homeTips">Enable the plugin home page state if you like to show the plugin results when query is empty.</system:String>
|
||||
|
||||
<!-- Custom Query Hotkey Dialog -->
|
||||
|
|
@ -589,8 +610,9 @@
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Ошибка</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Пожалуйста, подождите...</system:String>
|
||||
|
|
|
|||
|
|
@ -65,6 +65,10 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<system:String x:Key="PositionReset">Resetovať pozíciu</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Resetovať pozíciu vyhľadávacieho okna</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Zadajte text na vyhľadávanie</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: Tento plugin sa stále inicializuje…</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Vyberte tento výsledok na opätovné vyhľadávanie</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Nepodarilo sa odpovedať!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Vyberte tento výsledok pre viac informácií</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Nastavenia</system:String>
|
||||
|
|
@ -76,6 +80,8 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">Po odinštalovaní musíte úlohu manuálne odstrániť (Flow.Launcher Startup) cez Plánovač úloh</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Chybné nastavenie spustenia pri spustení</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Schovať Flow Launcher po strate fokusu</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Zobraziť panel úloh, keď je Flow Launcher otvorený</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Dočasne zobraziť panel úloh pri otvorení Flow Launchera, užitočné pri automatickom skrývaní panela úloh.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Nezobrazovať upozornenia na novú verziu</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Poloha vyhľadávacieho okna</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Zapamätať si poslednú pozíciu</system:String>
|
||||
|
|
@ -169,14 +175,18 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<system:String x:Key="KoreanImeSettingChangeFailTitle">Nepodarilo sa zmeniť nastavenie kórejského IME</system:String>
|
||||
<system:String x:Key="KoreanImeSettingChangeFailSubTitle">Skontrolujte prístup do systémového registra alebo kontaktujte podporu.</system:String>
|
||||
<system:String x:Key="homePage">Domovská stránka</system:String>
|
||||
<system:String x:Key="homePageToolTip">Zobraziť výsledky Domovskej stránky, keď je text dopytu prázdny.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Zobraziť výsledky histórie na Domovskej stránke</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximálny počet zobrazených výsledkov histórie na Domovskej stránke</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Úprava je možná len vtedy, ak plugin podporuje funkciu Domovská stránka a Domovská stránka je povolená.</system:String>
|
||||
<system:String x:Key="homePageToolTip">Zobraziť výsledky domovskej stránky, keď je text dopytu prázdny.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Zobraziť výsledky histórie na domovskej stránke</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximálny počet histórie výsledkov zobrazenej na domovskej stránke</system:String>
|
||||
<system:String x:Key="historyStyle">Štýl histórie</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Vyberte, ktorý typ histórie sa má zobraziť v histórii a na domovskej stránke</system:String>
|
||||
<system:String x:Key="queryHistory">História dopytov</system:String>
|
||||
<system:String x:Key="executedHistory">História naposledy otvorených</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Úprava je možná len vtedy, ak plugin podporuje funkciu domovská stránka a zároveň je povolená.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Zobraziť vyhľadávacie okno v popredí</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Prepíše nastavenie "Vždy na vrchu" ostatných programov a zobrazí navrchu Flow.</system:String>
|
||||
<system:String x:Key="autoRestartAfterChanging">Reštartovať po úprave pluginu cez Repozitár pluginov</system:String>
|
||||
<system:String x:Key="autoRestartAfterChangingToolTip">Automaticky reštartovať Flow Launcher po inštalácii/odinštalácii/aktualizáciu pluginu cez Repozitár pluginov</system:String>
|
||||
<system:String x:Key="autoRestartAfterChangingToolTip">Automaticky reštartovať Flow Launcher po inštalácii/odinštalácii/aktualizácii pluginu cez Repozitár pluginov</system:String>
|
||||
<system:String x:Key="showUnknownSourceWarning">Zobraziť upozornenie na neznámy zdroj</system:String>
|
||||
<system:String x:Key="showUnknownSourceWarningToolTip">Zobraziť upozornenie pri inštalácii z neznámych zdrojov</system:String>
|
||||
<system:String x:Key="autoUpdatePlugins">Automaticky aktualizovať pluginy</system:String>
|
||||
|
|
@ -215,6 +225,8 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<system:String x:Key="plugin_query_version">Verzia</system:String>
|
||||
<system:String x:Key="plugin_query_web">Webstránka</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Odinštalovať</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Oneskorenie vyhľadávania: predvolené</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Oneskorenie vyhľadávania: {0} ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Nepodarilo sa odstrániť nastavenia pluginu</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Pluginy: {0} – Nepodarilo sa odstrániť súbory s nastaveniami pluginu, odstráňte ich manuálne</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Nepodarilo sa odstrániť vyrovnávaciu pamäť pluginu</system:String>
|
||||
|
|
@ -225,6 +237,10 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Nepodarilo sa odinštalovať {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Súbor plugin.json sa nenašiel v rozbalenom zip súbore, alebo táto cesta {0} neexistuje</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">Plugin s rovnakým ID už existuje, alebo ide o vyššiu verziu ako stiahnutý plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Chyba pri vytváraní panelu nastavení pre plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">Plugin {0} vyžaduje na spustenie minimálnu verziu Flow Launcheru {1}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow Launcher nespĺňa minimálne požiadavky na verziu na spustenie {0}. Chcete pokračovať v inštalácii?{1}{1}Odporúčame aktualizovať Flow Launcher na najnovšiu verziu, aby {0} fungoval bez problémov.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Inštalácia pluginu zlyhala z dôvodu neplatného alebo poškodeného súboru plugin.json</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Repozitár pluginov</system:String>
|
||||
|
|
@ -255,7 +271,7 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<system:String x:Key="UpdatePromptTitle">Aktualizácia pluginu</system:String>
|
||||
<system:String x:Key="UpdatePromptSubtitle">{0} od {1} {2}{2}Chcete aktualizovať tento plugin?</system:String>
|
||||
<system:String x:Key="DownloadingPlugin">Sťahovanie pluginu</system:String>
|
||||
<system:String x:Key="AutoRestartAfterChange">Automaticky reštartovať po inštalácii/odinštalácii/aktualizáciu pluginov cez Repozitár pluginov</system:String>
|
||||
<system:String x:Key="AutoRestartAfterChange">Automaticky reštartovať po inštalácii/odinštalácii/aktualizácii pluginov cez Repozitár pluginov</system:String>
|
||||
<system:String x:Key="ZipFileNotHavePluginJson">V zipe sa nenachádza platná konfigurácia plugin.json</system:String>
|
||||
<system:String x:Key="InstallFromUnknownSourceTitle">Inštalácia z neznámeho zdroja</system:String>
|
||||
<system:String x:Key="InstallFromUnknownSourceSubtitle">Tento plugin pochádza z neznámeho zdroja a môže predstavovať potenciálne riziká!{0}{0}Uistite sa, že viete, odkiaľ tento plugin pochádza, a že je bezpečný.{0}{0}Stále chcete pokračovať?{0}{0}(Toto upozornenie môžete vypnúť sekcii Všeobecné v nastaveniach)</system:String>
|
||||
|
|
@ -267,7 +283,7 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<system:String x:Key="updateAllPluginsTitle">Dostupná aktualizácia pluginu</system:String>
|
||||
<system:String x:Key="updateAllPluginsButtonContent">Aktualizovať pluginy</system:String>
|
||||
<system:String x:Key="checkPluginUpdatesTooltip">Skontrolovať dostupnosť aktualizácií</system:String>
|
||||
<system:String x:Key="PluginsUpdateSuccessNoRestart">Pluginy {0} boli úspešne aktualizované. Prosím, reštartuje Flow.</system:String>
|
||||
<system:String x:Key="PluginsUpdateSuccessNoRestart">Pluginy boli úspešne aktualizované. Prosím, reštartuje Flow.</system:String>
|
||||
|
||||
<!-- Setting Theme -->
|
||||
<system:String x:Key="theme">Motív</system:String>
|
||||
|
|
@ -396,28 +412,28 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<system:String x:Key="showBadges">Zobraziť výsledok v odznaku</system:String>
|
||||
<system:String x:Key="showBadgesToolTip">Ak to plugin podporuje, zobrazí sa jeho ikona v odznaku na jednoduchšie odlíšenie.</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnly">Zobraziť výsledok v odznaku len pre globálne vyhľadávanie</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnlyToolTip">Show badges for global query results only</system:String>
|
||||
<system:String x:Key="dialogJumpHotkey">Dialog Jump</system:String>
|
||||
<system:String x:Key="dialogJumpHotkeyToolTip">Enter shortcut to quickly navigate the Open/Save As dialog window to the path of the current file manager.</system:String>
|
||||
<system:String x:Key="dialogJump">Dialog Jump</system:String>
|
||||
<system:String x:Key="dialogJumpToolTip">When Open/Save As dialog window opens, quickly navigate to the current path of the file manager.</system:String>
|
||||
<system:String x:Key="autoDialogJump">Dialog Jump Automatically</system:String>
|
||||
<system:String x:Key="autoDialogJumpToolTip">When Open/Save As dialog window is displayed, automatically navigate to the path of the current file manager. (Experimental)</system:String>
|
||||
<system:String x:Key="showDialogJumpWindow">Show Dialog Jump Window</system:String>
|
||||
<system:String x:Key="showDialogJumpWindowToolTip">Display Dialog Jump search window when the open/save dialog window is shown to quickly navigate to file/folder locations.</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPosition">Dialog Jump Window Position</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPositionToolTip">Select position for the Dialog Jump search window</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionUnderDialog">Fixed under the Open/Save As dialog window. Displayed on open and stays until the window is closed</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionFollowDefault">Default search window position. Displayed when triggered by search window hotkey</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviour">Dialog Jump Result Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviourToolTip">Behaviour to navigate Open/Save As dialog window to the selected result path</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourLeftClick">Left click or Enter key</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourRightClick">Right click</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviour">Dialog Jump File Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviourToolTip">Behaviour to navigate Open/Save As dialog window when the result is a file path</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPath">Fill full path in file name box</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPathOpen">Fill full path in file name box and open</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourDirectory">Fill directory in path box</system:String>
|
||||
<system:String x:Key="showBadgesGlobalOnlyToolTip">Zobrazí výsledok v odznaku len pre výsledky globálneho vyhľadávania</system:String>
|
||||
<system:String x:Key="dialogJumpHotkey">Rýchly prechod</system:String>
|
||||
<system:String x:Key="dialogJumpHotkeyToolTip">Zadajte skratku na rýchly prechod na aktuálnu cestu správcu súborov v dialógovom okne Otvoriť/Uložiť.</system:String>
|
||||
<system:String x:Key="dialogJump">Rýchly prechod</system:String>
|
||||
<system:String x:Key="dialogJumpToolTip">Keď sa otvorí dialógové okno Otvoriť/Uložiť, rýchlo prejdete na aktuálnu cestu správcu súborov.</system:String>
|
||||
<system:String x:Key="autoDialogJump">Automatický rýchly prechod</system:String>
|
||||
<system:String x:Key="autoDialogJumpToolTip">Keď je otvorené dialógové okno Otvoriť/Uložiť, automaticky prejsť na cestu v aktuálnom správcovi súborov (Experimentálne)</system:String>
|
||||
<system:String x:Key="showDialogJumpWindow">Zobraziť okno na rýchly prechod</system:String>
|
||||
<system:String x:Key="showDialogJumpWindowToolTip">Zobraziť okno rýchleho prechodu, keď je zobrazené dialógové okno Ovoriť/Uložiť na rýchlu navigáciu do umiestnenia súborov/priečinkov.</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPosition">Umiestnenie okna "rýchly prechod"</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPositionToolTip">Vyberte umiestnenie vyhľadávacieho okna pre "rýchly prechod"</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionUnderDialog">Fixné pod oknom Otvoriť/Uložiť. Zostane zobrazené po otvorení až do uzavretia okna</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionFollowDefault">Predvolená pozícia vyhľadávacieho okna. Zobrazí sa po zadaní skratky na otvorenie vyhľadávacieho okna</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviour">Akcia na prechod k výsledku rýchleho prechodu</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviourToolTip">Ako prejsť na vybranú cestu v otvorenom dialógovom okne Otvoriť/Uložiť</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourLeftClick">Kliknutie ľavým tlačidlom myši alebo klávesom Enter</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourRightClick">Kliknutie pravým tlačidlom myši</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviour">Akcia na prechod k súboru rýchleho prechodu</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviourToolTip">Akcia, ktorá sa vykoná na navigáciu v dialógovom okne Otvoriť/Uložiť, ak výsledkom je súbor</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPath">Vložiť celú cestu k súboru do poľa názvu súboru</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPathOpen">Vložiť celú cestu k súboru do poľa názvu súboru a otvoriť</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourDirectory">Vložiť priečinok do poľa s cestou</system:String>
|
||||
|
||||
<!-- Setting Proxy -->
|
||||
<system:String x:Key="proxy">HTTP proxy</system:String>
|
||||
|
|
@ -468,8 +484,10 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<system:String x:Key="userdatapathButton">Otvoriť priečinok</system:String>
|
||||
<system:String x:Key="advanced">Rozšírené</system:String>
|
||||
<system:String x:Key="logLevel">Úroveň logovania</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Žiadne</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Chyba</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Nastavenie písma okna</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -482,8 +500,8 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<!-- FileManager Setting Dialog -->
|
||||
<system:String x:Key="fileManagerWindow">Vyberte správcu súborov</system:String>
|
||||
<system:String x:Key="fileManager_learnMore">Viac informácií</system:String>
|
||||
<system:String x:Key="fileManager_tips">Zadajte umiestnenie súboru správcu súborov, ktorý používate, a podľa potreby pridajte argumenty. "%d" predstavuje cestu k priečinku, ktorý sa má otvoriť, používa sa v poli Arg pre priečinok a pri príkazoch na otvorenie konkrétnych priečinkov. "%f" predstavuje cestu k súboru, ktorá sa má otvoriť a používa sa v poli Arg pre súbor a pri príkazoch na otvorenie konkrétnych súborov.</system:String>
|
||||
<system:String x:Key="fileManager_tips2">Napríklad, ak správca súborov používa príkaz ako "totalcmd.exe /A c:\windows" na otvorenie priečinka c:\windows, cesta správcu súborov bude totalcmd.exe a Arg pre priečinok bude /A "%d". Niektorí správcovia súborov, ako napríklad QTTabBar, môžu vyžadovať len zadanie cesty, v tomto prípade použite "%d" ako cestu správcu súborov a zvyšok súborov nechajte prázdny.</system:String>
|
||||
<system:String x:Key="fileManager_tips">Zadajte umiestnenie súboru správcu súborov, ktorý používate, a podľa potreby pridajte argumenty. "%d" predstavuje cestu k priečinku, ktorý sa má otvoriť, používa sa v poli Arg. pre priečinok a pri príkazoch na otvorenie konkrétnych priečinkov. "%f" predstavuje cestu k súboru, ktorá sa má otvoriť a používa sa v poli Arg. pre súbor a pri príkazoch na otvorenie konkrétnych súborov.</system:String>
|
||||
<system:String x:Key="fileManager_tips2">Napríklad, ak správca súborov používa príkaz ako "totalcmd.exe /A c:\windows" na otvorenie priečinka c:\windows, cesta správcu súborov bude totalcmd.exe a Arg. pre priečinok bude /A "%d". Niektorí správcovia súborov, ako napríklad QTTabBar, môžu vyžadovať len zadanie cesty, v tomto prípade použite "%d" ako cestu správcu súborov a zvyšok súborov nechajte prázdny.</system:String>
|
||||
<system:String x:Key="fileManager_name">Správca súborov</system:String>
|
||||
<system:String x:Key="fileManager_profile_name">Názov profilu</system:String>
|
||||
<system:String x:Key="fileManager_path">Cesta k správcovi súborov</system:String>
|
||||
|
|
@ -491,6 +509,7 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<system:String x:Key="fileManager_file_arg">Arg. pre súbor</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">Správca súborov '{0}' sa nenachádza na '{1}'. Chcete pokračovať?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">Chyba v ceste k správcovi súborov</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">Prieskumník</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Predvolený webový prehliadač</system:String>
|
||||
|
|
@ -501,6 +520,8 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
<system:String x:Key="defaultBrowser_newWindow">Nové okno</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Nová karta</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Privátny režim</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Predvolené</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">Nový profil</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Zmena priority</system:String>
|
||||
|
|
@ -527,7 +548,7 @@ Nevykonali sa žiadne zmeny.</system:String>
|
|||
|
||||
<!-- Search Delay Settings Dialog -->
|
||||
<system:String x:Key="homeTitle">Domovská stránka</system:String>
|
||||
<system:String x:Key="homeTips">Ak chcete zobrazovať výsledky pluginu, keď je dopyt prázdny, povoľte funkciu Domovská stránka.</system:String>
|
||||
<system:String x:Key="homeTips">Ak chcete zobrazovať výsledky pluginu, keď je dopyt prázdny, povoľte funkciu domovská stránka.</system:String>
|
||||
|
||||
<!-- Custom Query Hotkey Dialog -->
|
||||
<system:String x:Key="customeQueryHotkeyTitle">Klávesová skratka vlastného vyhľadávania</system:String>
|
||||
|
|
@ -590,8 +611,9 @@ Ak pri zadávaní skratky pred ňu pridáte "@", bude sa zhodovať s
|
|||
Zadaný správca súborov sa nenašiel. Skontrolujte nastavenie vlastného správcu súborov v Nastavenia > Všeobecné.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Chyba</system:String>
|
||||
<system:String x:Key="folderOpenError">Počas otvárania priečinka sa vyskytla chyba. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">Pri otváraní priečinka došlo k chybe.</system:String>
|
||||
<system:String x:Key="browserOpenError">Pri otváraní adresy URL v prehliadači došlo k chybe. Skontrolujte konfiguráciu predvoleného webového prehliadača v nastaveniach Všeobecné</system:String>
|
||||
<system:String x:Key="fileNotFoundError">Súbor alebo priečinok sa nenašiel: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Čakajte, prosím...</system:String>
|
||||
|
|
@ -619,7 +641,7 @@ Ak pri zadávaní skratky pred ňu pridáte "@", bude sa zhodovať s
|
|||
|
||||
<!-- Plugin Update Window -->
|
||||
<system:String x:Key="restartAfterUpdating">Po aktualizácii pluginov reštartovať Flow Launcher</system:String>
|
||||
<system:String x:Key="updatePluginCheckboxContent">{0}: Aktualizované z v{1} na v{2}</system:String>
|
||||
<system:String x:Key="updatePluginCheckboxContent">{0}: Aktualizácia z v{1} na v{2}</system:String>
|
||||
<system:String x:Key="updatePluginNoSelected">Nie je vybraný žiaden plugin</system:String>
|
||||
|
||||
<!-- Welcome Window -->
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Position Reset</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Settings</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Hide Flow Launcher when focus is lost</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Do not show new version notifications</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Version</system:String>
|
||||
<system:String x:Key="plugin_query_web">Website</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Uninstall</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Plugin Store</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">Icons</system:String>
|
||||
<system:String x:Key="about_activate_times">You have activated Flow Launcher {0} times</system:String>
|
||||
<system:String x:Key="checkUpdates">Check for Updates</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">New version {0} is available, would you like to restart Flow Launcher to use the update?</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Check updates failed, please check your connection and proxy settings to api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Open Folder</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">Log Level</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Error</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Setting Window Font</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Arg For File</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Default Web Browser</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">New Window</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">New Tab</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Private Mode</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Change Priority</system:String>
|
||||
|
|
@ -589,8 +610,9 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Error</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Please wait...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Position Reset</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Reset search window position</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Type here to search</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: This plugin is still initializing...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Select this result to requery</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Failed to respond!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Select this result for more info</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Podešavanja</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">After uninstallation, you need to manually remove this task (Flow.Launcher Startup) via Task Scheduler</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Error setting launch on startup</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Sakri Flow Launcher kada se izgubi fokus</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Show taskbar when Flow Launcher is opened</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Temporarily show the taskbar when Flow Launcher is opened, useful for auto-hidden taskbars.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Ne prikazuj obaveštenje o novoj verziji</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Search Window Location</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Remember Last Position</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Show home page results when query text is empty.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Show History Results in Home Page</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Maximum History Results Shown in Home Page</system:String>
|
||||
<system:String x:Key="historyStyle">History Style</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Choose the type of history to show in the History and Home Page</system:String>
|
||||
<system:String x:Key="queryHistory">Query history</system:String>
|
||||
<system:String x:Key="executedHistory">Last opened history</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">This can only be edited if plugin supports Home feature and Home Page is enabled.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Show Search Window at Foremost</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Overrides other programs' 'Always on Top' setting and displays Flow in the foremost position.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Verzija</system:String>
|
||||
<system:String x:Key="plugin_query_web">Website</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Uninstall</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Search delay time: default</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Search delay time: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Fail to remove plugin settings</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Plugins: {0} - Fail to remove plugin settings files, please remove them manually</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Fail to remove plugin cache</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Fail to uninstall {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Unable to find plugin.json from the extracted zip file, or this path {0} does not exist</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">A plugin with the same ID and version already exists, or the version is greater than this downloaded plugin</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Error creating setting panel for plugin {0}:{1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Plugin Store</system:String>
|
||||
|
|
@ -443,7 +459,7 @@
|
|||
<system:String x:Key="icons">Icons</system:String>
|
||||
<system:String x:Key="about_activate_times">Aktivirali ste Flow Launcher {0} puta</system:String>
|
||||
<system:String x:Key="checkUpdates">Proveri ažuriranja</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become A Sponsor</system:String>
|
||||
<system:String x:Key="BecomeASponsor">Become a Sponsor</system:String>
|
||||
<system:String x:Key="newVersionTips">Nove verzija {0} je dostupna, molim Vas ponovo pokrenite Flow Launcher.</system:String>
|
||||
<system:String x:Key="checkUpdatesFailed">Neuspešna provera ažuriranja, molim Vas proverite vašu vezu i podešavanja za proksi prema api.github.com.</system:String>
|
||||
<system:String x:Key="downloadUpdatesFailed">
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Open Folder</system:String>
|
||||
<system:String x:Key="advanced">Advanced</system:String>
|
||||
<system:String x:Key="logLevel">Log Level</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Silent</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Error</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Info</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Debug</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Setting Window Font</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Arg For File</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">The file manager '{0}' could not be located at '{1}'. Would you like to continue?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">File Manager Path Error</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">File Explorer</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Default Web Browser</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">New Window</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">New Tab</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Private Mode</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Default</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">New Profile</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Change Priority</system:String>
|
||||
|
|
@ -589,8 +610,9 @@ If you add an '@' prefix while inputting a shortcut, it matches any position in
|
|||
The specified file manager could not be found. Please check the Custom File Manager setting under Settings > General.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Error</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">An error occurred while opening the folder.</system:String>
|
||||
<system:String x:Key="browserOpenError">An error occurred while opening the URL in the browser. Please check your Default Web Browser configuration in the General section of the settings window</system:String>
|
||||
<system:String x:Key="fileNotFoundError">File or directory not found: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Please wait...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Pencere Konumunu Sıfırla</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Arama penceresinin konumunu sıfırla</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Aramak için buraya yazın</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: Bu eklenti hala başlatılıyor...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Yeniden sorgulamak için bu sonucu seçin</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Yanıt veremedi!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Daha fazla bilgi için bu sonucu seçin</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Ayarlar</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">Kaldırma işleminden sonra, bu görevi (Flow.Launcher Startup) Görev Zamanlayıcı üzerinden elle kaldırmanız gerekmektedir</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Sistemle başlatma ayarı başarısız oldu</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Odak Pencereden Ayrıldığında Gizle</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Flow Launcher açıldığında görev çubuğunu göster</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Flow Launcher açıldığında geçici olarak görev çubuğunu gösterir, otomatik gizlenen görev çubukları için kullanışlıdır.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Güncelleme bildirimlerini gösterme</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Pencere Konumu</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Son Konumu Hatırla</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Sorgu metni boş olduğunda ana sayfa sonuçlarını gösterin.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Geçmiş Sonuçlarını Ana Sayfada Göster</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Ana Sayfada Gösterilen Maksimum Geçmiş Sonuçları</system:String>
|
||||
<system:String x:Key="historyStyle">Geçmiş Stili</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Geçmiş ve Ana Sayfada gösterilecek geçmiş türünü seçin</system:String>
|
||||
<system:String x:Key="queryHistory">Sorgu geçmişi</system:String>
|
||||
<system:String x:Key="executedHistory">Son açılan geçmiş</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Bu sadece eklenti Ana Sayfa özelliğini destekliyorsa ve Ana Sayfa etkinleştirilmiş ise düzenlenebilir.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Arama Penceresini En Üstte Göster</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Diğer programların 'Her Zaman Üstte' ayarını geçersiz kılar ve Flow’u en önde gösterir.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Sürüm</system:String>
|
||||
<system:String x:Key="plugin_query_web">İnternet Sitesi</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Kaldır</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Arama gecikme süresi: varsayılan</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Arama gecikme süresi: {0}ms</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Eklenti ayarları kaldırılamıyor</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Eklentiler: {0} - Ayar dosyaları kaldırılamadı, lütfen elle silin</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Eklenti ön belleği kaldırılamıyor</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">{0} kaldırılamıyor</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">plugin.json dosyası çıkarılan zip dosyasında bulunamadı veya {0} yolu mevcut değil</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">Bu eklentiyle aynı ID ve sürüme sahip bir eklenti zaten var, ya da mevcut sürüm daha yüksek</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Eklenti {0} için ayar paneli oluşturulurken hata oluştu: {1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">{0} requires Flow version {1} to run</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow does not meet the minimum version requirements for {0} to run. Do you want to continue installing it?{1}{1}We recommend updating Flow to the latest version to ensure that {0} works without issues.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Failed to install plugin because plugin.json is invalid or corrupted</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Eklenti Mağazası</system:String>
|
||||
|
|
@ -332,7 +348,7 @@
|
|||
<system:String x:Key="PlaceholderTextTip">Yer tutucu metnini değiştirin. Boş bırakılırsa şu kullanılacak: {0}</system:String>
|
||||
<system:String x:Key="KeepMaxResults">Sabit Pencere Boyutu</system:String>
|
||||
<system:String x:Key="KeepMaxResultsToolTip">Pencere boyutu sürüklenerek ayarlanamaz.</system:String>
|
||||
<system:String x:Key="MaxShowResultsCannotWorkWithAlwaysPreview">Since Always Preview is on, maximum results shown may not take effect because preview panel requires a certain minimum height</system:String>
|
||||
<system:String x:Key="MaxShowResultsCannotWorkWithAlwaysPreview">Always Preview (Her Zaman Önizleme) açık olduğundan, önizleme paneli belirli bir minimum yükseklik gerektirdiğinden, gösterilen maksimum sonuçlar etkili olmayabilir</system:String>
|
||||
|
||||
<!-- Setting Hotkey -->
|
||||
<system:String x:Key="hotkey">Kısayol Tuşu</system:String>
|
||||
|
|
@ -405,14 +421,14 @@
|
|||
<system:String x:Key="showDialogJumpWindow">Diyalog Atlama Penceresini Göster</system:String>
|
||||
<system:String x:Key="showDialogJumpWindowToolTip">Dosya/klasör konumlarına hızlı erişim için aç/kaydet penceresi gösterildiğinde Diyalog Atlama arama penceresini görüntüle.</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPosition">Diyalog Atlama Penceresi Konumu</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPositionToolTip">Select position for the Dialog Jump search window</system:String>
|
||||
<system:String x:Key="dialogJumpWindowPositionToolTip">Diyalog Atlama arama penceresi için konum seçin</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionUnderDialog">Farklı Aç/Kaydet iletişim penceresinin altında düzeltildi. Açıldığında görüntülenir ve pencere kapatılana kadar kalır</system:String>
|
||||
<system:String x:Key="DialogJumpWindowPositionFollowDefault">Varsayılan arama penceresi konumu. Arama penceresi kısayol tuşu tarafından tetiklendiğinde görüntülenir</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviour">Dialog Jump Result Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviour">Diyalog Atlama Sonucu Gezinme Davranışı</system:String>
|
||||
<system:String x:Key="dialogJumpResultBehaviourToolTip">Farklı Aç/Kaydet iletişim penceresini seçilen sonuç yoluna yönlendirmek için davranış</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourLeftClick">Sol tık veya Enter tuşu</system:String>
|
||||
<system:String x:Key="DialogJumpResultBehaviourRightClick">Sağ tık</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviour">Dialog Jump File Navigation Behaviour</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviour">Dialog Jump Dosya Gezinme Davranışı</system:String>
|
||||
<system:String x:Key="dialogJumpFileResultBehaviourToolTip">Sonuç bir dosya yolu olduğunda Farklı Aç/Kaydet iletişim penceresinde gezinme davranışı</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPath">Dosya adı kutusuna tam yolu girin</system:String>
|
||||
<system:String x:Key="DialogJumpFileResultBehaviourFullPathOpen">Dosya adı kutusuna tam yolu girin ve açın</system:String>
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Klasörü Aç</system:String>
|
||||
<system:String x:Key="advanced">Gelişmiş</system:String>
|
||||
<system:String x:Key="logLevel">Günlük Düzeyi</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Hata ayıklama</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Sessiz</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Hata</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Bilgi</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Hata ayıklama</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Pencere Yazı Tipini Ayarla</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Dosya Açarken</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">'{0}' dosya yöneticisi '{1}' konumunda bulunamadı. Devam etmek ister misiniz?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">Dosya Yöneticisi Yol Hatası</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">Dosya Gezgini</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">İnternet Tarayıcı Seçenekleri</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">Yeni Pencere</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Yeni Sekme</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Gizli Mod için Bağımsız Değişken</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Varsayılan</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">Yeni Profil</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Önceliği Ayarla</system:String>
|
||||
|
|
@ -587,8 +608,9 @@
|
|||
Belirtilen dosya yöneticisi bulunamadı. Lütfen Ayarlar > Genel bölümündeki Özel Dosya Yöneticisi ayarını kontrol edin.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Hata</system:String>
|
||||
<system:String x:Key="folderOpenError">Klasör açılırken bir hata oluştu. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">Klasör açılırken bir hata oluştu.</system:String>
|
||||
<system:String x:Key="browserOpenError">URL tarayıcıda açılırken bir hata oluştu. Lütfen ayarlar penceresindeki Genel bölümden Varsayılan Web Tarayıcısı ayarını kontrol edin</system:String>
|
||||
<system:String x:Key="fileNotFoundError">Dosya veya dizin bulunamadı: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Lütfen bekleyin...</system:String>
|
||||
|
|
|
|||
|
|
@ -64,6 +64,10 @@
|
|||
<system:String x:Key="PositionReset">Скидання позиції</system:String>
|
||||
<system:String x:Key="PositionResetToolTip">Скинути положення вікна пошуку</system:String>
|
||||
<system:String x:Key="queryTextBoxPlaceholder">Напишіть тут, аби знайти</system:String>
|
||||
<system:String x:Key="pluginStillInitializing">{0}: Цей плагін все ще ініціалізується...</system:String>
|
||||
<system:String x:Key="pluginStillInitializingSubtitle">Виберіть цей результат, щоб повторити запит</system:String>
|
||||
<system:String x:Key="pluginFailedToRespond">{0}: Не вдалося відповісти!</system:String>
|
||||
<system:String x:Key="pluginFailedToRespondSubtitle">Виберіть цей результат, щоб отримати додаткову інформацію</system:String>
|
||||
|
||||
<!-- Setting General -->
|
||||
<system:String x:Key="flowlauncher_settings">Налаштування</system:String>
|
||||
|
|
@ -75,6 +79,8 @@
|
|||
<system:String x:Key="useLogonTaskForStartupTooltip">Після видалення, вам необхідно вручну видалити це завдання (Flow.Launcher Startup) через планувальник завдань</system:String>
|
||||
<system:String x:Key="setAutoStartFailed">Помилка запуску налаштування під час запуску</system:String>
|
||||
<system:String x:Key="hideFlowLauncherWhenLoseFocus">Сховати Flow Launcher, якщо втрачено фокус</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpened">Показувати панель завдань, коли Flow Launcher відкрито</system:String>
|
||||
<system:String x:Key="showTaskbarWhenOpenedToolTip">Тимчасово показувати панель завдань при відкритті Flow Launcher, корисно для автоматично прихованих панелей завдань.</system:String>
|
||||
<system:String x:Key="dontPromptUpdateMsg">Не повідомляти про доступні нові версії</system:String>
|
||||
<system:String x:Key="SearchWindowPosition">Розташування вікна пошуку</system:String>
|
||||
<system:String x:Key="SearchWindowScreenRememberLastLaunchLocation">Пам'ятати останню позицію</system:String>
|
||||
|
|
@ -171,6 +177,10 @@
|
|||
<system:String x:Key="homePageToolTip">Показувати результати на головній сторінці, коли текст запиту порожній.</system:String>
|
||||
<system:String x:Key="historyResultsForHomePage">Показати результати історії на головній</system:String>
|
||||
<system:String x:Key="historyResultsCountForHomePage">Максимальна кількість результатів історії, що показуються на головній</system:String>
|
||||
<system:String x:Key="historyStyle">Стиль історії</system:String>
|
||||
<system:String x:Key="historyStyleTooltip">Виберіть тип історії, який буде показуватися на сторінці «Історія» та «Головна».</system:String>
|
||||
<system:String x:Key="queryHistory">Історія запитів</system:String>
|
||||
<system:String x:Key="executedHistory">Остання відкрита історія</system:String>
|
||||
<system:String x:Key="homeToggleBoxToolTip">Це можна редагувати тільки в тому випадку, якщо плагін підтримує функцію «Головна сторінка» і вона ввімкнена.</system:String>
|
||||
<system:String x:Key="showAtTopmost">Показувати вікно пошуку на передньому плані</system:String>
|
||||
<system:String x:Key="showAtTopmostToolTip">Перекриває налаштування «Завжди зверху» інших програм і виводить Flow на передній план.</system:String>
|
||||
|
|
@ -214,6 +224,8 @@
|
|||
<system:String x:Key="plugin_query_version">Версія</system:String>
|
||||
<system:String x:Key="plugin_query_web">Сайт</system:String>
|
||||
<system:String x:Key="plugin_uninstall">Видалити</system:String>
|
||||
<system:String x:Key="plugin_default_search_delay_time">Час затримки пошуку: типово</system:String>
|
||||
<system:String x:Key="plugin_search_delay_time">Час затримки пошуку: {0} мс</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsTitle">Не вдалося видалити налаштування плагіну</system:String>
|
||||
<system:String x:Key="failedToRemovePluginSettingsMessage">Плагіни: {0} — Не вдалося видалити файли налаштувань плагінів, видаліть їх вручну.</system:String>
|
||||
<system:String x:Key="failedToRemovePluginCacheTitle">Не вдалося видалити кеш плагіну</system:String>
|
||||
|
|
@ -224,6 +236,10 @@
|
|||
<system:String x:Key="failedToUninstallPluginTitle">Не вдалося видалити {0}</system:String>
|
||||
<system:String x:Key="fileNotFoundMessage">Не вдалося знайти файл plugin.json у розпакованому zip-файлі або цей шлях {0} не існує.</system:String>
|
||||
<system:String x:Key="pluginExistAlreadyMessage">Вже існує плагін з таким самим ідентифікатором та версією, або версія цього плагіну вища за версію завантаженого.</system:String>
|
||||
<system:String x:Key="errorCreatingSettingPanel">Помилка створення панелі налаштувань для плагіну {0}: {1}{2}</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedTitle">Для роботи {0} необхідна {1} версія Flow</system:String>
|
||||
<system:String x:Key="pluginMinimumAppVersionUnsatisfiedMessage">Flow не відповідає мінімальним вимогам версії для запуску {0}. Чи хочете ви продовжити його встановлення?{1}{1}Ми рекомендуємо оновити Flow до останньої версії, аби забезпечити безперебійну роботу {0}.</system:String>
|
||||
<system:String x:Key="pluginJsonInvalidOrCorrupted">Не вдалося встановити плагін, оскільки файл plugin.json є недійсним або пошкодженим</system:String>
|
||||
|
||||
<!-- Setting Plugin Store -->
|
||||
<system:String x:Key="pluginStore">Магазин плагінів</system:String>
|
||||
|
|
@ -467,8 +483,10 @@
|
|||
<system:String x:Key="userdatapathButton">Відкрити теку</system:String>
|
||||
<system:String x:Key="advanced">Розширені</system:String>
|
||||
<system:String x:Key="logLevel">Рівень журналювання</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Налагодження</system:String>
|
||||
<system:String x:Key="LogLevelNONE">Без звуку</system:String>
|
||||
<system:String x:Key="LogLevelERROR">Помилка</system:String>
|
||||
<system:String x:Key="LogLevelINFO">Інформація</system:String>
|
||||
<system:String x:Key="LogLevelDEBUG">Налагодження</system:String>
|
||||
<system:String x:Key="settingWindowFontTitle">Встановлення шрифту вікна</system:String>
|
||||
|
||||
<!-- Release Notes Window -->
|
||||
|
|
@ -490,6 +508,7 @@
|
|||
<system:String x:Key="fileManager_file_arg">Аргумент для файлу</system:String>
|
||||
<system:String x:Key="fileManagerPathNotFound">Не вдалося знайти файловий менеджер «{0}» за адресою «{1}». Чи бажаєте продовжити?</system:String>
|
||||
<system:String x:Key="fileManagerPathError">Помилка шляху до файлового менеджера</system:String>
|
||||
<system:String x:Key="fileManagerExplorer">Файловий провідник</system:String>
|
||||
|
||||
<!-- DefaultBrowser Setting Dialog -->
|
||||
<system:String x:Key="defaultBrowserTitle">Типовий веббраузер</system:String>
|
||||
|
|
@ -500,6 +519,8 @@
|
|||
<system:String x:Key="defaultBrowser_newWindow">Нове вікно</system:String>
|
||||
<system:String x:Key="defaultBrowser_newTab">Нова вкладка</system:String>
|
||||
<system:String x:Key="defaultBrowser_parameter">Приватний режим</system:String>
|
||||
<system:String x:Key="defaultBrowser_default">Типово</system:String>
|
||||
<system:String x:Key="defaultBrowser_new_profile">Новий профіль</system:String>
|
||||
|
||||
<!-- Priority Setting Dialog -->
|
||||
<system:String x:Key="changePriorityWindow">Змінити пріоритет</system:String>
|
||||
|
|
@ -589,8 +610,9 @@
|
|||
Вказаний файловий менеджер не знайдено. Перевірте налаштування вашого файлового менеджера в розділі Налаштування > Загальні.
|
||||
</system:String>
|
||||
<system:String x:Key="errorTitle">Помилка</system:String>
|
||||
<system:String x:Key="folderOpenError">Під час відкриття теки сталася помилка. {0}</system:String>
|
||||
<system:String x:Key="folderOpenError">Під час відкриття теки сталася помилка.</system:String>
|
||||
<system:String x:Key="browserOpenError">Під час відкриття URL-адреси в браузері сталася помилка. Перевірте налаштування типового веббраузера у розділі «Загальні» вікна налаштувань.</system:String>
|
||||
<system:String x:Key="fileNotFoundError">Файл або каталог не знайдено: {0}</system:String>
|
||||
|
||||
<!-- General Notice -->
|
||||
<system:String x:Key="pleaseWait">Будь ласка, зачекайте...</system:String>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue