Compare commits
886 Commits
v0.0.41
...
ci/github-
Author | SHA1 | Date | |
---|---|---|---|
5508d9408f | |||
5d434fcbe4 | |||
9a0a753dde | |||
5668b2a958 | |||
7e0d3b5f50 | |||
24d2689a4c | |||
dabe89c07e | |||
43ce40223d | |||
a5c3aa3744 | |||
d9f0da461d | |||
98c4589188 | |||
5888607388 | |||
900058a6e5 | |||
4c51ad3650 | |||
a0c2a17bab | |||
851b06b0d2 | |||
57018a65df | |||
b44419133a | |||
8961cf9044 | |||
5139873f79 | |||
5caa79eb0d | |||
9552b2ebc5 | |||
7e3afe0cb2 | |||
7b7d91d661 | |||
44b8d4ceee | |||
aaa97ebb71 | |||
d99e5af384 | |||
c47c7c0a88 | |||
3e32c0fd90 | |||
a45d9598cc | |||
8c8df698d4 | |||
8d0d782ab5 | |||
c2316dc9d1 | |||
01d685159d | |||
9024539e08 | |||
de4ccbe10c | |||
9be7ff96b5 | |||
4c9c8ff0d6 | |||
c74b13981f | |||
6ad90a827a | |||
4db4789a06 | |||
abdd9dc430 | |||
5193042e6b | |||
daba737ecb | |||
bd96701103 | |||
69c20b74cf | |||
7297436ab4 | |||
a329626715 | |||
50a20d0535 | |||
c52edc99c0 | |||
1c6c5d53ae | |||
1b110e5bd5 | |||
8872165a99 | |||
bd79496433 | |||
820cd720b5 | |||
31ff1e0492 | |||
8b429f03c2 | |||
a68a83940d | |||
1f95767aeb | |||
c7298424e5 | |||
d53f8cf130 | |||
a7e2281805 | |||
0ce23d2d60 | |||
d0fe57970f | |||
4dcdc57ffd | |||
1ef1f8d47a | |||
d688f38a63 | |||
582db18d83 | |||
f5a12e01bd | |||
09fd9c4e04 | |||
43d5888182 | |||
646feae0ec | |||
e73ce99f1d | |||
af2d8226de | |||
37c912b598 | |||
3102272a31 | |||
3dc695eafb | |||
6f0721b066 | |||
3dfe6b1080 | |||
02e5641227 | |||
01e4a76caa | |||
59838a51ca | |||
224be29a3d | |||
921052acce | |||
81f05e1b19 | |||
b769a66d16 | |||
5d612fe790 | |||
61251deffa | |||
f2931443d9 | |||
3d8318da14 | |||
f6bfe0d3f9 | |||
51c0f14055 | |||
2a6dc09a9b | |||
f1c2f4146c | |||
2f46b3c84e | |||
5f388abf95 | |||
7acdb8e660 | |||
e063b3d102 | |||
cb722f2634 | |||
0499d2b08a | |||
427928e542 | |||
ceb9d66f17 | |||
295c5a74ea | |||
400df69528 | |||
5bc7b135d5 | |||
6dce353d78 | |||
e707e51719 | |||
1cea9600a2 | |||
d81808ad7b | |||
ea9654edec | |||
ced37f7c76 | |||
4c6e214bf6 | |||
d10abd4829 | |||
25f1640fd6 | |||
5690adc0de | |||
f1b25d09da | |||
96a21a5564 | |||
0b21bb9807 | |||
557ee8d472 | |||
6da3751a8a | |||
cf708de005 | |||
b649c4539f | |||
c63342bc21 | |||
9f56b277ca | |||
73c92b9c72 | |||
c7627ced8e | |||
63c6412736 | |||
a7663524e6 | |||
65feb34242 | |||
23690a98df | |||
7449d4e318 | |||
c6f9e36f4b | |||
e9cee0abe2 | |||
9440f23b55 | |||
c67b4b438c | |||
1bdb820aed | |||
a28d77bc65 | |||
d60f9aa1d8 | |||
3209c0e430 | |||
7ef8f0454b | |||
232b702789 | |||
694f2a9fae | |||
77204087bb | |||
b26760b216 | |||
3c36950aeb | |||
bbeb836923 | |||
a99406f0a9 | |||
73368b58be | |||
ca14e77ba3 | |||
cafdfcda47 | |||
5c68d513a3 | |||
fc52560244 | |||
46f6a49a7a | |||
c13827e8e1 | |||
e0a6de2c2b | |||
afdba00722 | |||
9084c71aa3 | |||
8fc5fb6a80 | |||
5f762c5442 | |||
8b21ec1ea3 | |||
e83fbb864e | |||
f03af17f71 | |||
2c3e2e639f | |||
cc85b393dc | |||
fa6ad214f9 | |||
3ceb63be1d | |||
200483d733 | |||
6b03f3a169 | |||
612a3bab49 | |||
3ac08512f3 | |||
1adc673c44 | |||
1aa1bd84cf | |||
4a72267d41 | |||
7e0f18e3b7 | |||
aab5d4411b | |||
e5d83f424a | |||
bc300d81d9 | |||
5e6cc86c7e | |||
d91ea62903 | |||
f00dc4d3e6 | |||
6c0c961ca0 | |||
a99de99202 | |||
a31ec9d1fe | |||
a23f032fd2 | |||
95a8234e2d | |||
a7e481c827 | |||
975870e254 | |||
b7c838fd25 | |||
3776674eb4 | |||
4293e27681 | |||
8564c1a72e | |||
f9e6ef3fd3 | |||
e80ee09893 | |||
025ff527ee | |||
35fdbb5988 | |||
401646ace4 | |||
a62a8852e7 | |||
04a3df3642 | |||
ecb041187b | |||
1fd44e1cfc | |||
fb29036d0a | |||
aba2ed4378 | |||
076e17d670 | |||
a971cbd519 | |||
c265794d0e | |||
ecadb80113 | |||
9a66357f7a | |||
63d83a43ad | |||
7833a0d552 | |||
966796dfec | |||
2d19f36901 | |||
6f70a07970 | |||
e85ed5a8e3 | |||
ad416387c2 | |||
58d8e7f34f | |||
bb105b5662 | |||
a71a930125 | |||
af7e39b7f0 | |||
c981cb4a41 | |||
3ea6ef0bbf | |||
2772a96727 | |||
50b4a5f1d8 | |||
e52a6ce734 | |||
add49e14fb | |||
ab13895196 | |||
846afb420b | |||
dca8a1dab6 | |||
d1c36c1bcc | |||
c209c32613 | |||
9e5e89ac95 | |||
7cc6b88e4e | |||
5cd1cba668 | |||
ca365bac6e | |||
f1fc48ce5a | |||
316e440d0d | |||
95018814a7 | |||
b52e49d90a | |||
4acd738353 | |||
982249f974 | |||
1f5461fbe5 | |||
adb7e5663a | |||
ffc14f2146 | |||
0c57322051 | |||
a8b7debf8d | |||
7ed9787b58 | |||
eef701615b | |||
97d8519b8b | |||
00210f7f0e | |||
cea4c6c27a | |||
bc83a39b0f | |||
aa0575a637 | |||
4ca7b8a7c1 | |||
6ec6546cc5 | |||
c5e04cc824 | |||
4fc913eae1 | |||
2d7026ac7a | |||
1200360588 | |||
02722fc0be | |||
2e1de94623 | |||
10bae69db6 | |||
6dee3aa1b7 | |||
e76418d48d | |||
52e1020a90 | |||
c170392123 | |||
d414a91f40 | |||
6d6fae1ecd | |||
6d866d4424 | |||
f4dea6e58c | |||
c72d10ac85 | |||
3e696d6847 | |||
28d6ab692e | |||
f7747809f2 | |||
d4b15aee4d | |||
d0689555f1 | |||
82d6e3f105 | |||
244d078b11 | |||
f89c742c90 | |||
ce5088ab53 | |||
0443c8c200 | |||
8a4161753e | |||
f2e7071f6d | |||
25d53ce9a8 | |||
3b58d229da | |||
f5ba84d81e | |||
933c71923e | |||
bfe59ea57a | |||
953209ca13 | |||
b2119ce60e | |||
e0c750d27e | |||
b754a045eb | |||
5a24911fad | |||
0ec6897fda | |||
f57898a471 | |||
3ee29c2256 | |||
3b0fed55e4 | |||
31a32eb11d | |||
64c10b44f5 | |||
34365239c1 | |||
bdfeda23b6 | |||
1aaeac1fe3 | |||
f5578b0fc1 | |||
f82c439b26 | |||
c498cff096 | |||
3559477247 | |||
b9241fa1b2 | |||
9bf5153e6b | |||
eb6d3cd64e | |||
8cda2c164d | |||
c900d09cf8 | |||
edc8ef4f44 | |||
9aeb156d92 | |||
8be07de373 | |||
93482b0041 | |||
5b2c55142e | |||
088a3b7c28 | |||
b115643034 | |||
07fc964f9c | |||
3e51caf111 | |||
deb1ba339f | |||
70a1086edf | |||
c7d975e612 | |||
7104d6d6dd | |||
d933997c89 | |||
bea99bb4c6 | |||
f38a593434 | |||
85950991ab | |||
6fd740f8c0 | |||
ec2c2d8ccb | |||
efb2d5ef32 | |||
acb1e2434b | |||
8e52abda9a | |||
9764326242 | |||
97c33d6c54 | |||
30d5f3ad3f | |||
079c0defaf | |||
cf1afddb9e | |||
b07b9351c4 | |||
7911459817 | |||
ef9b1d5c2d | |||
fd2780624a | |||
4f22e88e42 | |||
0d45fe4a97 | |||
28ae2766f0 | |||
edd86024b9 | |||
f3c78c2c24 | |||
3f96608398 | |||
9ed43efe5d | |||
975180b075 | |||
c94eb7a48e | |||
bb1b0da749 | |||
85c8006977 | |||
850bdc4a4d | |||
ca95e32164 | |||
a141ec85b0 | |||
1298a96b0e | |||
1928b150ad | |||
7426f5484d | |||
11a8f313b0 | |||
69b6ef07a1 | |||
7a1ba9dabf | |||
48a739c94e | |||
9680f0cf12 | |||
5b1c89a0c5 | |||
8a1ab478a3 | |||
2ae8d49526 | |||
a0b673c138 | |||
c56c445fb7 | |||
c23275f2fe | |||
8b28a33b73 | |||
f8d086a743 | |||
c06d15de5f | |||
dcaf1f54e4 | |||
aa91abb022 | |||
67d204eb02 | |||
18e680b298 | |||
6ef1b072e8 | |||
ca9ef544ce | |||
7831a3438d | |||
1fad90441c | |||
7f26c5bd45 | |||
637641cf54 | |||
d9a316abbb | |||
093cfa5269 | |||
61a025de4d | |||
7df1ae7ed8 | |||
eb6e75b156 | |||
8480b3ac3d | |||
6339a31fec | |||
71b5bb3f8f | |||
a9878dbbdf | |||
b1fb9dd7d3 | |||
de51fbd7be | |||
c9412a97d0 | |||
63c29bdd75 | |||
bace26063d | |||
7931eb97b9 | |||
9df89c7b74 | |||
78978276c4 | |||
011eddbbc5 | |||
4e9f3fe1dc | |||
9bd48c19ff | |||
c0516c3665 | |||
06ff36c836 | |||
98c16eb1dc | |||
35d80840e5 | |||
ad3a778fb9 | |||
d25d1efe9c | |||
de58dff423 | |||
ec26e4d8d1 | |||
c24da41505 | |||
f785185e1c | |||
5ed3ed9a2d | |||
a3adace60e | |||
3db4de09e2 | |||
70b2ee0a84 | |||
e7d82850c9 | |||
e6a8f4e6dc | |||
494e268bc5 | |||
e1c6f65b7e | |||
89075c5588 | |||
c7fa9b8ce7 | |||
cb70082d31 | |||
48b9ac8f5b | |||
0be568bbbd | |||
ba44fa620f | |||
dde402afbf | |||
bbe5142ca9 | |||
e74ffac5b0 | |||
cfb8980e3a | |||
e06e1bdcbe | |||
d60ced2f61 | |||
e68689828e | |||
ba932758c8 | |||
ee43fa6311 | |||
ad6b164d51 | |||
4a5510acb2 | |||
970dbc4428 | |||
f8f37325eb | |||
bb999019ef | |||
533b6a155a | |||
4cdc92388c | |||
ccc6be1e71 | |||
b355778a92 | |||
6a12e8f37a | |||
59adb91f5f | |||
53677e2f39 | |||
1c74f43b22 | |||
b4801970e8 | |||
7a3a6b512f | |||
72ea33b6de | |||
d97192e0ee | |||
196d9fe4d2 | |||
e960fcc303 | |||
f334da95ff | |||
5d5f311e36 | |||
d577e97758 | |||
2dc92e26d3 | |||
f4994a36a3 | |||
7a785a8163 | |||
6ad0d860c7 | |||
38a2fa55df | |||
a21b170b52 | |||
44265b2362 | |||
069193342b | |||
54e9a56cda | |||
39bc9227dc | |||
ac636670c3 | |||
2abadc73e4 | |||
377368f6bf | |||
4085c10bfc | |||
657ba11e7e | |||
a9ae45fe63 | |||
61bb39b46f | |||
2ad106f7d7 | |||
8fd4fe0e55 | |||
b1c9aedac3 | |||
a80415be02 | |||
d9acd0d74b | |||
7ae09159ba | |||
a709abd80c | |||
cd07f39b69 | |||
f7c11d07a8 | |||
b07439d402 | |||
d8eadc2a2d | |||
3a88d4d3e6 | |||
012110f008 | |||
4de274bf62 | |||
76b89baee3 | |||
697ae92031 | |||
c87f92b346 | |||
6961bb7fd0 | |||
6e26130744 | |||
123a375a27 | |||
2b4b3ca0a5 | |||
c4a795418f | |||
91837ebade | |||
0492e910ea | |||
36c86e22b1 | |||
6bdc0c7bb2 | |||
1e8d8f749a | |||
2e8e3b0d1e | |||
15b8613d3c | |||
8ce266bc94 | |||
8661d72e45 | |||
62505f2543 | |||
37986c58ec | |||
2968d96fe9 | |||
e7c8d0e78c | |||
83cbb34a5b | |||
7559c7b67e | |||
02822f4b38 | |||
96736afb94 | |||
72ae132fcd | |||
2250e1bcab | |||
d9d5b746c3 | |||
f1ea306291 | |||
378d62395a | |||
99c92069b9 | |||
2a89ef797f | |||
5838550188 | |||
e0e01ae3ee | |||
0983ba8a0f | |||
0bfa776ce7 | |||
d2b09936d1 | |||
68e9f0f7c1 | |||
c3d345de80 | |||
385c0e246a | |||
5ead49a5b7 | |||
c0760b1347 | |||
e01b323aee | |||
6f4866ef63 | |||
1b6d72661c | |||
c59d4aea81 | |||
6260a80738 | |||
e75d3c8273 | |||
b7acb475e9 | |||
42b6bbff7c | |||
4b8542b35b | |||
9ad1d6cbfb | |||
4cdd9acd73 | |||
f4b0a695d6 | |||
b525ea1ba4 | |||
c1fc2c4766 | |||
5c733932c7 | |||
d1218616ec | |||
2bf6a03d56 | |||
b6ee63c1ea | |||
6d08efdcd7 | |||
a0a43a5651 | |||
3af2f5b032 | |||
8f54b226b4 | |||
9f64011b26 | |||
c5fc54e721 | |||
fc8a4fc5b6 | |||
6f9ab232ae | |||
8cb96f1e45 | |||
5733acb77a | |||
e49bcb2a69 | |||
42e41c399f | |||
166a3180d3 | |||
3bf4982f23 | |||
f4e1cccfac | |||
7911a8f49e | |||
64a96fc3ce | |||
8e2cfbddc5 | |||
45fae3f0fd | |||
e45a7824c1 | |||
5d72c48a76 | |||
d6169c6fa2 | |||
9df6d52e2d | |||
239de8e923 | |||
7d553a87f3 | |||
557b42bc56 | |||
8423914748 | |||
07dce23794 | |||
18fd0552db | |||
d537d48f8e | |||
b456512bbb | |||
d9953b1473 | |||
c6ac898390 | |||
43f98cec43 | |||
63175cdec6 | |||
6436a1ec61 | |||
c400619338 | |||
dcd5ba41cf | |||
7525e52fab | |||
72fd24e624 | |||
11d8f9fd30 | |||
4b0c8cecc8 | |||
372ce174c9 | |||
381daff980 | |||
94acebbebd | |||
f90f6e81ee | |||
97e37f304b | |||
f5e45ead26 | |||
14f765f4b4 | |||
b77d46b2c2 | |||
1442916b20 | |||
c6a5f42d23 | |||
580d50eb8d | |||
9a66b6e50d | |||
acec064cb7 | |||
ea05d13a1f | |||
fd741f2ccf | |||
055c52178f | |||
722a5859a5 | |||
1714c3fa86 | |||
131df28110 | |||
1be284f8d8 | |||
218e53ae75 | |||
264d8d90c4 | |||
0b529c2629 | |||
5abcc7191f | |||
5346f6e1bf | |||
2f471b3de4 | |||
3cf06efddf | |||
1f4f0a3bb7 | |||
c07f8eae9b | |||
374eb3d06d | |||
fe75b75ddc | |||
d3790bf64b | |||
f905a52988 | |||
e55f427b05 | |||
0f000fc4d1 | |||
a0339e3c19 | |||
9cfa274d81 | |||
8c79f5e371 | |||
0d716513d7 | |||
08f6724060 | |||
29daf51e64 | |||
b3b2b01c0f | |||
c3212d0308 | |||
aaa114ba13 | |||
8ca6418630 | |||
95632b7f55 | |||
64744b2abf | |||
096b315701 | |||
c27ca08d3a | |||
0011222371 | |||
29db947e25 | |||
fd43ac7581 | |||
e49c19b3cd | |||
06f0e59967 | |||
c5fc5ee93b | |||
159c85bd1f | |||
2460acf0f4 | |||
6495687841 | |||
d229ccb36c | |||
4d6a57ddcf | |||
d161d55aaf | |||
768ad0c9bc | |||
29323d4e20 | |||
630b22e193 | |||
79116f9e67 | |||
eb58475259 | |||
a879ac30fb | |||
c5b0621323 | |||
0462815014 | |||
e64318c947 | |||
b784482788 | |||
2834e8b348 | |||
b23dfd4289 | |||
217d525cb2 | |||
85b166cbda | |||
9a57f8b858 | |||
3bfdc932c2 | |||
48c878af21 | |||
490a7a58fc | |||
567b1a3ace | |||
6a45db8a38 | |||
b272988929 | |||
9828857570 | |||
ecb54d8e44 | |||
344717b021 | |||
da6cf585c0 | |||
9e93177afd | |||
16318efb01 | |||
e83e13b6d4 | |||
7c2c695d88 | |||
c7b227529d | |||
14f49e9d30 | |||
1875c4ee73 | |||
76c68baa1f | |||
68876a4414 | |||
26d7e5b60f | |||
e78af6ae99 | |||
6fe05cd86e | |||
4100d7a391 | |||
c1cc812ea4 | |||
9663e3f0f4 | |||
941f618153 | |||
716a30bf7b | |||
d051ae576b | |||
35e99cb014 | |||
af054fba49 | |||
58d837d641 | |||
6cc1bd21cd | |||
cebfa7c8ae | |||
e2d7ab8f8f | |||
ec77987fcd | |||
b161608d02 | |||
5e7458ff1c | |||
ed06aaa1f5 | |||
13b7179941 | |||
da0d88d86f | |||
b7347c312a | |||
c876f2f7e3 | |||
adad5fd8ff | |||
2aaa7ae8c9 | |||
1f64ea37bd | |||
cac1525da0 | |||
1ad906fedc | |||
20ffef39a3 | |||
185460c054 | |||
0079e74d77 | |||
a8e019482f | |||
f01b8e47aa | |||
e43dfb7599 | |||
6b8cfe2b49 | |||
7f7b14bae3 | |||
810b02d9fd | |||
62813145b2 | |||
4877058253 | |||
2a9fd3abb8 | |||
a244f7b598 | |||
5396457ad5 | |||
0186b6ea61 | |||
f6e99f7e88 | |||
c24a3828be | |||
2e38a4567a | |||
67c5d67a61 | |||
9592dde534 | |||
d030b0af70 | |||
4ccb9ac94d | |||
8af62b917c | |||
311f114132 | |||
d015bd03f7 | |||
a61b9de0fa | |||
ef1b283917 | |||
c677f00105 | |||
8d2f778dfe | |||
c549d102f6 | |||
39a9ee4e9d | |||
a27dc6ad1c | |||
8ccb75fc8d | |||
8fc86dbe02 | |||
359f052608 | |||
4150e2265c | |||
b803ce7435 | |||
289c6cd7a9 | |||
31fc7b74c2 | |||
3e565f25be | |||
e509be4e21 | |||
170fc537ac | |||
3fe5882145 | |||
a290791410 | |||
2ebd38ff68 | |||
cd987a5b19 | |||
7f1dab7ee1 | |||
bed3945aa5 | |||
15a32a18b7 | |||
d2e8e7dd5d | |||
ce12ec89c4 | |||
b286444ad9 | |||
941263102d | |||
e2ed296dc7 | |||
cfc866bef2 | |||
affba669ce | |||
7230152ab8 | |||
21fee7171f | |||
ad17995f28 | |||
ac830cbe7f | |||
65da6af3f9 | |||
3d90bf7588 | |||
62ef1c88fe | |||
d6918920b6 | |||
cdfb09fbfa | |||
bb681e31c9 | |||
c7483936ec | |||
0a1f2da33d | |||
f5aafdb7d6 | |||
c9adf1c492 | |||
4c9cb560e3 | |||
f0b028279c | |||
197770b68b | |||
37b583f560 | |||
dca2d4fe12 | |||
3b677f8ae3 | |||
0b952578d1 | |||
054afbbedd | |||
866a6e4a44 | |||
8ea7dd478b | |||
7839252934 | |||
fa4063220f | |||
d214a02abd | |||
d1c12edd1b | |||
ded1a44c37 | |||
790a6cd1e3 | |||
a79f883a0f | |||
d9c5a540a3 | |||
276f33b9ec | |||
ded59d2da0 | |||
62f7a820d8 | |||
7063ffa013 | |||
bf4dc3c095 | |||
c10e5848bf | |||
92a3b0d6e0 | |||
b475bd25c8 | |||
d318224a6f | |||
0074fee865 | |||
5617535a63 | |||
68ccefc59f | |||
6d60541626 | |||
a635e5b8d0 | |||
48a10440fe | |||
8e3ba88318 | |||
ab8fccc544 | |||
8319dc9164 | |||
6829d3cdea | |||
3ae4d69110 | |||
dc665f227e | |||
a83496568f | |||
12d25570af | |||
378c947654 | |||
bd39a3140e | |||
7d3ca3dec1 | |||
1cb556c8f8 | |||
8c8f96de1c | |||
318cd87a9a | |||
5d63d5c2d3 | |||
7d347fccc6 | |||
a54ca799b9 | |||
f5bc1a996f | |||
8591bc4d01 | |||
40888c07f3 | |||
1c965c3788 | |||
4df690c2a2 | |||
d6abb61e2b | |||
3434c862e9 | |||
ea8af926fa | |||
c3df48174c | |||
f1e60f96c4 | |||
cdd852678b | |||
bf518b5467 | |||
ffd53fab26 | |||
5aad7dad35 | |||
b1c1a9f4e1 | |||
d847a8e0b2 | |||
9668730b5d | |||
dc049cf26a | |||
82c2b2f128 | |||
5f81d65911 | |||
19f990c564 | |||
62467007b2 | |||
d7624e5e1f | |||
4505f10e50 | |||
3ce3df5e19 | |||
8d4e4ba6c9 | |||
d78868b462 | |||
01a681ad00 | |||
adfeb61eab | |||
8c3faac343 | |||
c81acce31c | |||
fe629ce77c | |||
5c27add2b2 | |||
ff90dae695 | |||
4f8aec6a05 | |||
ba8df57580 | |||
3bab1940c1 | |||
e300c92215 | |||
99764e25ed | |||
b5dcae11a4 | |||
f69f475ab9 | |||
061e929705 | |||
9e8193a6ac | |||
1601796c6c | |||
a0af0dde0a | |||
c5ba6a238a | |||
3c3ebe7d9d | |||
b7227bfad7 | |||
447c16cff1 | |||
47529ae3f5 | |||
149af96d51 | |||
14e9dd1c04 | |||
ec9ef98981 | |||
922f474b59 |
120
.github/ISSUE_TEMPLATE/bug-issue.yml
vendored
@ -1,120 +0,0 @@
|
||||
name: 🐞 Bug report
|
||||
description: Report a very clearly broken issue.
|
||||
title: 'bug: <title>'
|
||||
labels: [bug]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
# ReVanced Manager bug report
|
||||
|
||||
Important to note that your issue may have already been reported before. Please check for existing issues [here](https://github.com/revanced/revanced-manager/labels/bug).
|
||||
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Type
|
||||
options:
|
||||
- Error while running the manager
|
||||
- Error at runtime
|
||||
- Cosmetic
|
||||
- Other
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Bug description
|
||||
description: How did you find the bug? Any additional details that might help?
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Steps to reproduce
|
||||
description: Add the steps to reproduce this bug including your environment.
|
||||
placeholder: Step 1. Download some files. Step 2. ...
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Android version
|
||||
description: Android version used.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Manager version
|
||||
description: Manager version used.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Target package name
|
||||
description: App you tried to patch.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Target package version.
|
||||
description: Version of the app you tried to patch.
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Installation type
|
||||
options:
|
||||
- Non-root
|
||||
- Root
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Patches selected.
|
||||
description: Patches you selected for the app.
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Device logs (exported using Manager settings).
|
||||
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
|
||||
render: shell
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Installer logs (exported using Installer menu option) [unneeded if issue is not during patching].
|
||||
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
|
||||
render: shell
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Screenshots or videos
|
||||
description: Add screenshots or videos that show the bug here.
|
||||
placeholder: Drag and drop the screenshots/videos into this box.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Solution
|
||||
description: If applicable, add a possible solution.
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: Add additional context here.
|
||||
validations:
|
||||
required: false
|
||||
- type: checkboxes
|
||||
id: acknowledgements
|
||||
attributes:
|
||||
label: Acknowledgements
|
||||
description: Your issue will be closed if you haven't done these steps.
|
||||
options:
|
||||
- label: I have searched the existing issues and this is a new and no duplicate or related to another open issue.
|
||||
required: true
|
||||
- label: I have written a short but informative title.
|
||||
required: true
|
||||
- label: I filled out all of the requested information in this issue properly.
|
||||
required: true
|
||||
- label: The issue is related solely to the ReVanced Manager
|
||||
required: true
|
126
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@ -0,0 +1,126 @@
|
||||
name: 🐞 Bug report
|
||||
description: Report a bug or an issue.
|
||||
title: "bug: "
|
||||
labels: ["Bug report"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
<p align="center">
|
||||
<picture>
|
||||
<source
|
||||
width="256px"
|
||||
media="(prefers-color-scheme: dark)"
|
||||
srcset="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-dark.svg"
|
||||
>
|
||||
<img
|
||||
width="256px"
|
||||
src="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-light.svg"
|
||||
>
|
||||
</picture>
|
||||
<br>
|
||||
<a href="https://revanced.app/">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg" />
|
||||
<img height="24px" src="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://github.com/ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
|
||||
<img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="http://revanced.app/discord">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://reddit.com/r/revancedapp">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://t.me/app_revanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://x.com/revancedapp">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://www.youtube.com/@ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
Continuing the legacy of Vanced
|
||||
</p>
|
||||
|
||||
# ReVanced Manager bug report
|
||||
|
||||
Before creating a new bug report, please keep the following in mind:
|
||||
|
||||
- **Do not submit a duplicate bug report**: Search for existing bug reports [here](https://github.com/ReVanced/revanced-manager/issues?q=label%3A%22Bug+report%22).
|
||||
- **Review the contribution guidelines**: Make sure your bug report adheres to it. You can find the guidelines [here](https://github.com/ReVanced/revanced-manager/blob/main/CONTRIBUTING.md).
|
||||
- **Do not use the issue page for support**: If you need help or have questions, check out other platforms on [revanced.app](https://revanced.app).
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Bug description
|
||||
description: |
|
||||
- Describe your bug in detail
|
||||
- Add steps to reproduce the bug if possible (Step 1. ... Step 2. ...)
|
||||
- Add images and videos if possible
|
||||
- List used patches if applicable
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Version of ReVanced Manager and version & name of app you are patching
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Installation method
|
||||
options:
|
||||
- Regular
|
||||
- Mount
|
||||
validations:
|
||||
required: false
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: ReVanced Manager logs
|
||||
description: Export logs from the ReVanced Manager settings.
|
||||
render: shell
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Patch logs
|
||||
description: Export logs from the "Patcher" screen.
|
||||
render: shell
|
||||
validations:
|
||||
required: false
|
||||
- type: checkboxes
|
||||
id: acknowledgements
|
||||
attributes:
|
||||
label: Acknowledgements
|
||||
description: Your bug report will be closed if you don't follow the checklist below.
|
||||
options:
|
||||
- label: I have checked all open and closed bug reports and this is not a duplicate.
|
||||
required: true
|
||||
- label: I have chosen an appropriate title.
|
||||
required: true
|
||||
- label: All requested information has been provided properly.
|
||||
required: true
|
||||
- label: The bug is only related to ReVanced Manager.
|
||||
required: true
|
6
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: 🗨 Discussions
|
||||
url: https://github.com/revanced/revanced-suggestions/discussions
|
||||
about: Have something unspecific to ReVanced Manager in mind? Search for or start a new discussion!
|
||||
|
52
.github/ISSUE_TEMPLATE/feature-issue.yml
vendored
@ -1,52 +0,0 @@
|
||||
name: ⭐ Feature request
|
||||
description: Create a detailed feature request.
|
||||
title: 'feat: <title>'
|
||||
labels: [feature-request]
|
||||
body:
|
||||
- type: dropdown
|
||||
attributes:
|
||||
label: Type
|
||||
options:
|
||||
- Functionality
|
||||
- Cosmetic
|
||||
- Other
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Issue
|
||||
description: What is the current problem. Why does it require a feature request?
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Feature
|
||||
description: Describe your feature in detail. How does it solve the issue?
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Motivation
|
||||
description: Why should your feature should be considered?
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Additional context
|
||||
description: Add additional context here.
|
||||
validations:
|
||||
required: false
|
||||
- type: checkboxes
|
||||
id: acknowledgements
|
||||
attributes:
|
||||
label: Acknowledgements
|
||||
description: Your issue will be closed if you haven't done these steps.
|
||||
options:
|
||||
- label: I have searched the existing issues and this is a new and no duplicate or related to another open issue.
|
||||
required: true
|
||||
- label: I have written a short but informative title.
|
||||
required: true
|
||||
- label: I filled out all of the requested information in this issue properly.
|
||||
required: true
|
||||
- label: The issue is related solely to the ReVanced Manager
|
||||
required: true
|
105
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
@ -0,0 +1,105 @@
|
||||
name: ⭐ Feature request
|
||||
description: Create a detailed request for a new feature.
|
||||
title: "feat: "
|
||||
labels: ["Feature request"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
<p align="center">
|
||||
<picture>
|
||||
<source
|
||||
width="256px"
|
||||
media="(prefers-color-scheme: dark)"
|
||||
srcset="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-dark.svg"
|
||||
>
|
||||
<img
|
||||
width="256px"
|
||||
src="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-light.svg"
|
||||
>
|
||||
</picture>
|
||||
<br>
|
||||
<a href="https://revanced.app/">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg" />
|
||||
<img height="24px" src="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://github.com/ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
|
||||
<img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="http://revanced.app/discord">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://reddit.com/r/revancedapp">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://t.me/app_revanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://x.com/revancedapp">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://www.youtube.com/@ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
Continuing the legacy of Vanced
|
||||
</p>
|
||||
|
||||
# ReVanced Manager feature request
|
||||
|
||||
Before creating a new feature request, please keep the following in mind:
|
||||
|
||||
- **Do not submit a duplicate feature request**: Search for existing feature requests [here](https://github.com/ReVanced/revanced-manager/issues?q=label%3A%22Feature+request%22).
|
||||
- **Review the contribution guidelines**: Make sure your feature request adheres to it. You can find the guidelines [here](https://github.com/ReVanced/revanced-manager/blob/main/CONTRIBUTING.md).
|
||||
- **Do not use the issue page for support**: If you need help or have questions, check out other platforms on [revanced.app](https://revanced.app).
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Feature description
|
||||
description: |
|
||||
- Describe your feature in detail
|
||||
- Add images, videos, links, examples, references, etc. if possible
|
||||
- type: textarea
|
||||
attributes:
|
||||
label: Motivation
|
||||
description: |
|
||||
A strong motivation is necessary for a feature request to be considered.
|
||||
|
||||
- Why should this feature be implemented?
|
||||
- What is the explicit use case?
|
||||
- What are the benefits?
|
||||
- What makes this feature important?
|
||||
validations:
|
||||
required: true
|
||||
- type: checkboxes
|
||||
id: acknowledgements
|
||||
attributes:
|
||||
label: Acknowledgements
|
||||
description: Your feature request will be closed if you don't follow the checklist below.
|
||||
options:
|
||||
- label: I have checked all open and closed feature requests and this is not a duplicate.
|
||||
required: true
|
||||
- label: I have chosen an appropriate title.
|
||||
required: true
|
||||
- label: The feature request is only related to ReVanced Manager.
|
||||
required: true
|
2
.github/config.yaml
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
firstPRMergeComment: >
|
||||
Thank you for contributing to ReVanced. Join us on [Discord](https://revanced.app/discord) to receive a role for your contribution.
|
78
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,78 @@
|
||||
version: 2
|
||||
updates:
|
||||
- package-ecosystem: github-actions
|
||||
labels: []
|
||||
directory: /
|
||||
target-branch: dev
|
||||
schedule:
|
||||
interval: monthly
|
||||
groups:
|
||||
gh-actions:
|
||||
applies-to: version-updates
|
||||
patterns:
|
||||
- "*"
|
||||
update-types:
|
||||
- "minor"
|
||||
- "patch"
|
||||
|
||||
- package-ecosystem: npm
|
||||
labels: []
|
||||
directory: /
|
||||
target-branch: dev
|
||||
schedule:
|
||||
interval: monthly
|
||||
groups:
|
||||
npm:
|
||||
applies-to: version-updates
|
||||
patterns:
|
||||
- "*"
|
||||
update-types:
|
||||
- "minor"
|
||||
- "patch"
|
||||
|
||||
# ReVanced Manager Flutter
|
||||
- package-ecosystem: pub
|
||||
labels: []
|
||||
directory: /
|
||||
target-branch: dev
|
||||
schedule:
|
||||
interval: monthly
|
||||
groups:
|
||||
pubspec:
|
||||
applies-to: version-updates
|
||||
patterns:
|
||||
- "*"
|
||||
update-types:
|
||||
- "minor"
|
||||
- "patch"
|
||||
|
||||
- package-ecosystem: gradle
|
||||
labels: []
|
||||
directory: /android
|
||||
target-branch: dev
|
||||
schedule:
|
||||
interval: monthly
|
||||
groups:
|
||||
gradle:
|
||||
applies-to: version-updates
|
||||
patterns:
|
||||
- "*"
|
||||
update-types:
|
||||
- "minor"
|
||||
- "patch"
|
||||
|
||||
# ReVanced Manager Compose
|
||||
- package-ecosystem: gradle
|
||||
labels: [ "ReVanced Manager Compose" ]
|
||||
directory: /
|
||||
target-branch: compose-dev
|
||||
schedule:
|
||||
interval: monthly
|
||||
groups:
|
||||
gradle-compose:
|
||||
applies-to: version-updates
|
||||
patterns:
|
||||
- "*"
|
||||
update-types:
|
||||
- "minor"
|
||||
- "patch"
|
117
.github/workflows/build_pull_request.yml
vendored
Normal file
@ -0,0 +1,117 @@
|
||||
name: Build pull request
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
# Enable or disable cache
|
||||
flutter-cache:
|
||||
description: Cache
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
# Select app flavour
|
||||
app-flavour:
|
||||
description: App flavour
|
||||
default: 'release'
|
||||
type: choice
|
||||
options:
|
||||
- release
|
||||
- debug
|
||||
- profile
|
||||
|
||||
# Select pull request
|
||||
pr-number:
|
||||
description: PR number (Without hashtag)
|
||||
required: true
|
||||
|
||||
run-name: "Build pull request ${{ inputs.pr-number }}"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Setup pull request
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
gh repo clone "${{ github.repository }}"
|
||||
cd revanced-manager
|
||||
gh repo set-default "${{ github.repository }}"
|
||||
gh pr checkout "${{ inputs.pr-number }}"
|
||||
|
||||
echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Cache Gradle
|
||||
uses: burrunan/gradle-cache-action@v2
|
||||
|
||||
- name: Setup Java
|
||||
run: echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
|
||||
|
||||
- name: Set up Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
flutter-version: 3.24.x
|
||||
cache: ${{ inputs.flutter-cache }}
|
||||
|
||||
- name: Get dependencies
|
||||
run: flutter pub get
|
||||
|
||||
- name: Generate translations
|
||||
run: dart run slang
|
||||
|
||||
- name: Generate code files
|
||||
run: dart run build_runner build --delete-conflicting-outputs
|
||||
|
||||
- name: Build
|
||||
continue-on-error: true
|
||||
id: flutter-build
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
flutter build apk --"${{ inputs.app-flavour }}";
|
||||
|
||||
- name: Prepare comment
|
||||
run: |
|
||||
if [[ "${{ steps.flutter-build.outcome }}" == "success" ]]; then
|
||||
echo "MESSAGE=✅ Succeeded build on ${{ env.COMMIT_HASH }}." >> $GITHUB_ENV
|
||||
else
|
||||
echo "MESSAGE=🚫 Failed build on ${{ env.COMMIT_HASH }}." >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: "Comment on pull request #${{ inputs.pr-number }}"
|
||||
uses: thollander/actions-comment-pull-request@v2
|
||||
with:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
pr_number: ${{ inputs.pr-number }}
|
||||
mode: recreate
|
||||
message: |
|
||||
## ⚒️ Build status
|
||||
|
||||
${{ env.MESSAGE }}
|
||||
|
||||
Details: [${{ github.run_id }}](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})!
|
||||
|
||||
### ⚙️ Workflow run configuration
|
||||
|
||||
- Flutter cache: ${{ inputs.flutter-cache }}
|
||||
- App flavor: ${{ inputs.app-flavour }}
|
||||
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
if-no-files-found: error
|
||||
name: revanced-manager-(${{ env.COMMIT_HASH }}-${{ inputs.pr-number }}-${{ inputs.app-flavour }})
|
||||
path: |
|
||||
build/app/outputs/flutter-apk/app-${{ inputs.app-flavour }}.apk
|
||||
build/app/outputs/flutter-apk/app-${{ inputs.app-flavour }}.apk.sha1
|
45
.github/workflows/crowdin.yml
vendored
@ -1,45 +0,0 @@
|
||||
name: Sync Crowdin translations
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "flutter"
|
||||
paths:
|
||||
- "assets/i18n/en_US.json"
|
||||
- ".github/workflows/crowdin.yml"
|
||||
schedule:
|
||||
- cron: "0 0 * * *" # daily
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
sync-crowdin:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
- name: Crowdin
|
||||
uses: crowdin/github-action@1.0.4
|
||||
with:
|
||||
config: crowdin.yml
|
||||
upload_translations: true
|
||||
download_translations: true
|
||||
push_translations: true
|
||||
create_pull_request: false
|
||||
localization_branch_name: i18n_flutter
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
|
||||
# commented due to Manager not being ready for the translated files to be in the main branch
|
||||
# - name: GitHub is so dumb i just cant
|
||||
# run: |
|
||||
# sudo chmod -R ugo+rwX .
|
||||
|
||||
# - name: Merge
|
||||
# run: |
|
||||
# git checkout flutter
|
||||
# git add *
|
||||
# git merge i18n_flutter
|
||||
# git push
|
43
.github/workflows/debug-build.yml
vendored
@ -1,43 +0,0 @@
|
||||
name: "Debug Build"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "flutter-disabled"
|
||||
tags-ignore:
|
||||
- "*"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set up JDK 12
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: '12.x'
|
||||
- uses: subosito/flutter-action@v1
|
||||
with:
|
||||
channel: 'stable'
|
||||
- name: Set environment variables
|
||||
run: echo $SECRETS | base64 -d > lib/utils/environment.dart
|
||||
env:
|
||||
SECRETS: ${{ secrets.SECRETS }}
|
||||
- name: Set up Flutter
|
||||
run: flutter pub get
|
||||
- name: Generate files with Builder
|
||||
run: flutter packages pub run build_runner build --delete-conflicting-outputs
|
||||
- name: Build with Flutter
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: flutter build apk --debug
|
||||
- name: Add version to APK
|
||||
run: mv build/app/outputs/flutter-apk/app-debug.apk revanced-manager-latest.apk
|
||||
- name: Publish debug APK
|
||||
uses: "marvinpinto/action-automatic-releases@latest"
|
||||
with:
|
||||
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
automatic_release_tag: "latest"
|
||||
prerelease: true
|
||||
title: "Development Build"
|
||||
files: revanced-manager-latest.apk
|
28
.github/workflows/open_pull_request.yml
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
name: Open a PR to main
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
MESSAGE: Merge branch `${{ github.head_ref || github.ref_name }}` to `main`
|
||||
|
||||
jobs:
|
||||
pull-request:
|
||||
name: Open pull request
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Open pull request
|
||||
uses: repo-sync/pull-request@v2
|
||||
with:
|
||||
destination_branch: 'main'
|
||||
pr_title: 'chore: ${{ env.MESSAGE }}'
|
||||
pr_body: |
|
||||
This pull request will ${{ env.MESSAGE }}.
|
||||
pr_draft: true
|
||||
github_token: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
|
53
.github/workflows/release-build.yml
vendored
@ -1,53 +0,0 @@
|
||||
name: "Release Build"
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
- name: Set env
|
||||
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
|
||||
- name: Set up JDK 12
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: '12.x'
|
||||
- uses: subosito/flutter-action@v1
|
||||
with:
|
||||
channel: 'stable'
|
||||
- name: Set environment variables
|
||||
run: echo $SECRETS | base64 -d > lib/utils/environment.dart
|
||||
env:
|
||||
SECRETS: ${{ secrets.SECRETS }}
|
||||
- name: Set up Flutter
|
||||
run: flutter pub get
|
||||
- name: Generate files with Builder
|
||||
run: flutter packages pub run build_runner build --delete-conflicting-outputs
|
||||
- name: Build with Flutter
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
|
||||
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
|
||||
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
|
||||
run: flutter build apk
|
||||
- name: Sign APK
|
||||
id: sign_apk
|
||||
uses: r0adkll/sign-android-release@v1
|
||||
with:
|
||||
releaseDirectory: build/app/outputs/apk/release
|
||||
signingKeyBase64: ${{ secrets.SIGNING_KEYSTORE }}
|
||||
keyStorePassword: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
|
||||
alias: ${{ secrets.SIGNING_KEY_ALIAS }}
|
||||
keyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }}
|
||||
- name: Add version to APK
|
||||
run: mv ${{steps.sign_apk.outputs.signedReleaseFile}} revanced-manager-${{ env.RELEASE_VERSION }}.apk
|
||||
- name: Publish release APK
|
||||
uses: "marvinpinto/action-automatic-releases@latest"
|
||||
with:
|
||||
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
prerelease: false
|
||||
files: revanced-manager-${{ env.RELEASE_VERSION }}.apk
|
72
.github/workflows/release.yml
vendored
Normal file
@ -0,0 +1,72 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- dev
|
||||
paths:
|
||||
- ".github/workflows/release.yml"
|
||||
- "android/**"
|
||||
- "assets/**"
|
||||
- "lib/**"
|
||||
- "pubspec.yaml"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Release
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
attestations: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Java
|
||||
run: echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
with:
|
||||
node-version: "lts/*"
|
||||
cache: 'npm'
|
||||
|
||||
- name: Set up Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: stable
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
|
||||
- name: Get dependencies
|
||||
run: flutter pub get
|
||||
|
||||
- name: Generate translations
|
||||
run: dart run slang
|
||||
|
||||
- name: Generate code files
|
||||
run: dart run build_runner build --delete-conflicting-outputs
|
||||
|
||||
- name: Setup keystore
|
||||
run: |
|
||||
echo "${{ secrets.KEYSTORE }}" | base64 --decode > "android/app/keystore.jks"
|
||||
|
||||
- name: Release
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
|
||||
KEYSTORE_ENTRY_ALIAS: ${{ secrets.KEYSTORE_ENTRY_ALIAS }}
|
||||
KEYSTORE_ENTRY_PASSWORD: ${{ secrets.KEYSTORE_ENTRY_PASSWORD }}
|
||||
run: |
|
||||
npx semantic-release
|
||||
|
||||
- name: Generate artifact attestation
|
||||
uses: actions/attest-build-provenance@v1
|
||||
with:
|
||||
subject-path: build/app/outputs/apk/release/revanced-manager-*.apk
|
72
.github/workflows/sync_crowdin.yml
vendored
Normal file
@ -0,0 +1,72 @@
|
||||
name: Sync Crowdin
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: 00 12 * * 1
|
||||
push:
|
||||
branches: dev
|
||||
paths:
|
||||
- assets/i18n/*.json
|
||||
- assets/i18n/*.dart
|
||||
- .github/workflows/sync_crowdin.yml
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
name: Sync
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
cache: true
|
||||
flutter-version: 3.24.x
|
||||
|
||||
- name: Sync translations from Crowdin
|
||||
uses: crowdin/github-action@v1
|
||||
with:
|
||||
config: crowdin.yml
|
||||
upload_sources: true
|
||||
upload_translations: false
|
||||
download_translations: true
|
||||
localization_branch_name: feat/translations
|
||||
create_pull_request: true
|
||||
pull_request_title: "chore: Sync translations"
|
||||
pull_request_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)"
|
||||
pull_request_base_branch_name: "dev"
|
||||
commit_message: "chore: Sync translations"
|
||||
github_user_name: revanced-bot
|
||||
github_user_email: github@revanced.app
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
|
||||
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
|
||||
# There has to be a better way to do this
|
||||
- name: Normalization of Translation Strings
|
||||
run: |
|
||||
dart pub get
|
||||
cd assets/i18n
|
||||
sudo chmod 766 *.json
|
||||
cd ../..
|
||||
dart run slang analyze
|
||||
dart run slang clean
|
||||
dart run slang normalize
|
||||
cd assets/i18n
|
||||
dart nuke.dart >> $GITHUB_STEP_SUMMARY
|
||||
cd ../..
|
||||
dart run slang
|
||||
flutter analyze lib/gen/strings.g.dart --no-fatal-infos --no-fatal-warnings
|
||||
|
||||
- name: Commit translations
|
||||
run: |
|
||||
git config user.name revanced-bot
|
||||
git config user.email github@revanced.app
|
||||
sudo chown -R $USER:$USER .git
|
||||
git commit -m "chore: Remove empty values from JSON" assets/i18n/strings_*.json
|
||||
git push origin HEAD:feat/translations
|
19
.github/workflows/update_documentation.yml
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
name: Update documentation
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- docs/**
|
||||
|
||||
jobs:
|
||||
trigger:
|
||||
runs-on: ubuntu-latest
|
||||
name: Dispatch event to documentation repository
|
||||
if: github.ref == 'refs/heads/main'
|
||||
steps:
|
||||
- uses: peter-evans/repository-dispatch@v3
|
||||
with:
|
||||
token: ${{ secrets.DOCUMENTATION_REPO_ACCESS_TOKEN }}
|
||||
repository: revanced/revanced-documentation
|
||||
event-type: update-documentation
|
||||
client-payload: '{"repo": "${{ github.event.repository.name }}", "ref": "${{ github.ref }}"}'
|
126
.gitignore
vendored
@ -1,6 +1,5 @@
|
||||
# Miscellaneous
|
||||
*.class
|
||||
*.lock
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
@ -9,6 +8,7 @@
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
migrate_working_dir/
|
||||
|
||||
# IntelliJ related
|
||||
*.iml
|
||||
@ -16,109 +16,20 @@
|
||||
*.iws
|
||||
.idea/
|
||||
|
||||
# Visual Studio Code related
|
||||
.classpath
|
||||
.project
|
||||
.settings/
|
||||
|
||||
# Flutter repo-specific
|
||||
/bin/cache/
|
||||
/bin/mingit/
|
||||
/dev/benchmarks/mega_gallery/
|
||||
/dev/bots/.recipe_deps
|
||||
/dev/bots/android_tools/
|
||||
/dev/docs/doc/
|
||||
/dev/docs/flutter.docs.zip
|
||||
/dev/docs/lib/
|
||||
/dev/docs/pubspec.yaml
|
||||
/dev/integration_tests/**/xcuserdata
|
||||
/dev/integration_tests/**/Pods
|
||||
/packages/flutter/coverage/
|
||||
version
|
||||
|
||||
# packages file containing multi-root paths
|
||||
.packages.generated
|
||||
# The .vscode folder contains launch configuration and tasks you configure in
|
||||
# VS Code which you may wish to be included in version control, so this line
|
||||
# is commented out by default.
|
||||
#.vscode/
|
||||
|
||||
# Flutter/Dart/Pub related
|
||||
**/doc/api/
|
||||
**/*.g.dart
|
||||
**/*.locator.dart
|
||||
**/*.router.dart
|
||||
**/ios/Flutter/.last_build_id
|
||||
.dart_tool/
|
||||
.flutter-plugins
|
||||
.flutter-plugins-dependencies
|
||||
**/generated_plugin_registrant.dart
|
||||
.packages
|
||||
.pub-cache/
|
||||
.pub/
|
||||
build/
|
||||
flutter_*.png
|
||||
linked_*.ds
|
||||
unlinked.ds
|
||||
unlinked_spec.ds
|
||||
|
||||
# Android related
|
||||
**/android/**/gradle-wrapper.jar
|
||||
**/android/.gradle
|
||||
**/android/captures/
|
||||
**/android/gradlew
|
||||
**/android/gradlew.bat
|
||||
**/android/local.properties
|
||||
**/android/**/GeneratedPluginRegistrant.java
|
||||
**/android/key.properties
|
||||
*.jks
|
||||
|
||||
# iOS/XCode related
|
||||
**/ios/**/*.mode1v3
|
||||
**/ios/**/*.mode2v3
|
||||
**/ios/**/*.moved-aside
|
||||
**/ios/**/*.pbxuser
|
||||
**/ios/**/*.perspectivev3
|
||||
**/ios/**/*sync/
|
||||
**/ios/**/.sconsign.dblite
|
||||
**/ios/**/.tags*
|
||||
**/ios/**/.vagrant/
|
||||
**/ios/**/DerivedData/
|
||||
**/ios/**/Icon?
|
||||
**/ios/**/Pods/
|
||||
**/ios/**/.symlinks/
|
||||
**/ios/**/profile
|
||||
**/ios/**/xcuserdata
|
||||
**/ios/.generated/
|
||||
**/ios/Flutter/.last_build_id
|
||||
**/ios/Flutter/App.framework
|
||||
**/ios/Flutter/Flutter.framework
|
||||
**/ios/Flutter/Flutter.podspec
|
||||
**/ios/Flutter/Generated.xcconfig
|
||||
**/ios/Flutter/app.flx
|
||||
**/ios/Flutter/app.zip
|
||||
**/ios/Flutter/flutter_assets/
|
||||
**/ios/Flutter/flutter_export_environment.sh
|
||||
**/ios/ServiceDefinitions.json
|
||||
**/ios/Runner/GeneratedPluginRegistrant.*
|
||||
|
||||
# macOS related
|
||||
**/macos/Flutter/GeneratedPluginRegistrant.swift
|
||||
**/macos/Flutter/Flutter-Debug.xcconfig
|
||||
**/macos/Flutter/Flutter-Release.xcconfig
|
||||
**/macos/Flutter/Flutter-Profile.xcconfig
|
||||
|
||||
# Windows related
|
||||
**/windows/flutter/ephemeral/
|
||||
**/windows/**/*.suo
|
||||
**/windows/**/*.user
|
||||
**/windows/**/*.userosscache
|
||||
**/windows/**/*.sln.docstates
|
||||
**/windows/x64/
|
||||
**/windows/x86/
|
||||
**/windows/**/*.[Cc]ache
|
||||
**/windows/**/!*.[Cc]ache/
|
||||
|
||||
# Web related
|
||||
lib/generated_plugin_registrant.dart
|
||||
|
||||
# Coverage
|
||||
coverage/
|
||||
/build/
|
||||
|
||||
# Symbolication related
|
||||
app.*.symbols
|
||||
@ -126,13 +37,18 @@ app.*.symbols
|
||||
# Obfuscation related
|
||||
app.*.map.json
|
||||
|
||||
# Exceptions to above rules.
|
||||
!**/ios/**/default.mode1v3
|
||||
!**/ios/**/default.mode2v3
|
||||
!**/ios/**/default.pbxuser
|
||||
!**/ios/**/default.perspectivev3
|
||||
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
|
||||
!/dev/ci/**/Gemfile.lock
|
||||
# Android Studio will place build artifacts here
|
||||
/android/app/debug
|
||||
/android/app/profile
|
||||
/android/app/release
|
||||
|
||||
# Generated files
|
||||
**/*.g.dart
|
||||
**/*.locator.dart
|
||||
**/*.router.dart
|
||||
|
||||
# Project specific
|
||||
node_modules/
|
||||
.vscode/
|
||||
|
||||
|
||||
Firebase related
|
||||
.firebase
|
29
.metadata
@ -1,11 +1,11 @@
|
||||
# This file tracks properties of this Flutter project.
|
||||
# Used by Flutter tool to assess capabilities and perform upgrades etc.
|
||||
#
|
||||
# This file should be version controlled.
|
||||
# This file should be version controlled and should not be manually edited.
|
||||
|
||||
version:
|
||||
revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
channel: stable
|
||||
revision: "2663184aa79047d0a33a14a3b607954f8fdd8730"
|
||||
channel: "stable"
|
||||
|
||||
project_type: app
|
||||
|
||||
@ -13,26 +13,11 @@ project_type: app
|
||||
migration:
|
||||
platforms:
|
||||
- platform: root
|
||||
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
||||
base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
||||
- platform: android
|
||||
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
- platform: ios
|
||||
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
- platform: linux
|
||||
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
- platform: macos
|
||||
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
- platform: web
|
||||
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
- platform: windows
|
||||
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
|
||||
create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
||||
base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
|
||||
|
||||
# User provided section
|
||||
|
||||
|
62
.releaserc
Normal file
@ -0,0 +1,62 @@
|
||||
{
|
||||
"branches": [
|
||||
"main",
|
||||
{
|
||||
"name": "dev",
|
||||
"prerelease": true
|
||||
}
|
||||
],
|
||||
"plugins": [
|
||||
[
|
||||
"@semantic-release/commit-analyzer", {
|
||||
"releaseRules": [
|
||||
{ "type": "build", "scope": "Needs bump", "release": "patch" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"@semantic-release/changelog",
|
||||
"@semantic-release/release-notes-generator",
|
||||
[
|
||||
"semantic-release-pub",
|
||||
{
|
||||
"publishPub": false,
|
||||
"updateBuildNumber": true
|
||||
}
|
||||
],
|
||||
[
|
||||
"@semantic-release/exec",
|
||||
{
|
||||
"prepareCmd": "flutter build apk"
|
||||
}
|
||||
],
|
||||
[
|
||||
"@semantic-release/git",
|
||||
{
|
||||
"assets": [
|
||||
"pubspec.yaml"
|
||||
]
|
||||
}
|
||||
],
|
||||
[
|
||||
"@semantic-release/github",
|
||||
{
|
||||
"assets": [
|
||||
{
|
||||
"path": "build/app/outputs/apk/release/revanced-manager*.apk"
|
||||
},
|
||||
],
|
||||
"commits": [
|
||||
"message": "chore: Release v${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
|
||||
],
|
||||
"successComment": false
|
||||
}
|
||||
],
|
||||
[
|
||||
"@saithodev/semantic-release-backmerge",
|
||||
{
|
||||
"backmergeBranches": [{"from": "main", "to": "dev"}],
|
||||
"clearWorkspace": true
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
@ -1,6 +0,0 @@
|
||||
<component name="ProjectRunConfigurationManager">
|
||||
<configuration default="false" name="main.dart" type="FlutterRunConfigurationType" factoryName="Flutter">
|
||||
<option name="filePath" value="$PROJECT_DIR$/lib/main.dart" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
</component>
|
91
.vscode/tasks.json
vendored
@ -1,91 +0,0 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Generate (Builder)",
|
||||
"type": "shell",
|
||||
"command": "flutter packages pub run build_runner build --delete-conflicting-outputs",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Build (Android)",
|
||||
"type": "shell",
|
||||
"command": "flutter build apk",
|
||||
"problemMatcher": [],
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"label": "Install (Android)",
|
||||
"type": "shell",
|
||||
"command": "adb install build\\app\\outputs\\flutter-apk\\app-release.apk",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Clean (Flutter)",
|
||||
"type": "shell",
|
||||
"command": "flutter clean && flutter pub get",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Clean (Builder)",
|
||||
"type": "shell",
|
||||
"command": "flutter packages pub run build_runner clean",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Build all (Android)",
|
||||
"dependsOrder": "sequence",
|
||||
"dependsOn": [
|
||||
"Generate (Builder)",
|
||||
"Build (Android)"
|
||||
],
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Clean all",
|
||||
"dependsOrder": "sequence",
|
||||
"dependsOn": [
|
||||
"Clean (Flutter)",
|
||||
"Clean (Builder)"
|
||||
],
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Clean all & Build all (Android)",
|
||||
"dependsOrder": "sequence",
|
||||
"dependsOn": [
|
||||
"Clean all",
|
||||
"Build all (Android)"
|
||||
],
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Clean all & Install (Android)",
|
||||
"dependsOrder": "sequence",
|
||||
"dependsOn": [
|
||||
"Clean all",
|
||||
"Build all (Android)",
|
||||
"Install (Android)",
|
||||
],
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Build & Install (Android)",
|
||||
"dependsOrder": "sequence",
|
||||
"dependsOn": [
|
||||
"Build (Android)",
|
||||
"Install (Android)"
|
||||
],
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Validate translations",
|
||||
"type": "shell",
|
||||
"command": "flutter pub run flutter_i18n diff en.json pt.json",
|
||||
"problemMatcher": []
|
||||
}
|
||||
]
|
||||
}
|
103
CONTRIBUTING.md
Normal file
@ -0,0 +1,103 @@
|
||||
<p align="center">
|
||||
<picture>
|
||||
<source
|
||||
width="256px"
|
||||
media="(prefers-color-scheme: dark)"
|
||||
srcset="assets/revanced-headline/revanced-headline-vertical-dark.svg"
|
||||
>
|
||||
<img
|
||||
width="256px"
|
||||
src="assets/revanced-headline/revanced-headline-vertical-light.svg"
|
||||
>
|
||||
</picture>
|
||||
<br>
|
||||
<a href="https://revanced.app/">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo.svg" />
|
||||
<img height="24px" src="assets/revanced-logo/revanced-logo.svg" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://github.com/ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
|
||||
<img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="http://revanced.app/discord">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://reddit.com/r/revancedapp">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://t.me/app_revanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://x.com/revancedapp">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://www.youtube.com/@ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
Continuing the legacy of Vanced
|
||||
</p>
|
||||
|
||||
# 👋 Contribution guidelines
|
||||
|
||||
This document describes how to contribute to ReVanced Manager.
|
||||
|
||||
## 📖 Resources to help you get started
|
||||
|
||||
* The [documentation](/docs/README.md) provides steps to build ReVanced Manager from source
|
||||
* Our [backlog](https://github.com/orgs/ReVanced/projects/12) is where we keep track of what we're working on
|
||||
* [Issues](https://github.com/ReVanced/revanced-manager/issues) are where we keep track of bugs and feature requests
|
||||
|
||||
## 🙏 Submitting a feature request
|
||||
|
||||
Features can be requested by opening an issue using the
|
||||
[Feature request issue template](https://github.com/ReVanced/revanced-manager/issues/new?assignees=&labels=Feature+request&projects=&template=feature_request.yml&title=feat%3A+).
|
||||
|
||||
> **Note**
|
||||
> Requests can be accepted or rejected at the discretion of maintainers of ReVanced Manager.
|
||||
> Good motivation has to be provided for a request to be accepted.
|
||||
|
||||
## 🐞 Submitting a bug report
|
||||
|
||||
If you encounter a bug while using ReVanced Manager, open an issue using the
|
||||
[Bug report issue template](https://github.com/ReVanced/revanced-manager/issues/new?assignees=&labels=Bug+report&projects=&template=bug_report.yml&title=bug%3A+).
|
||||
|
||||
## 📝 How to contribute
|
||||
|
||||
1. Before contributing, it is recommended to open an issue to discuss your change
|
||||
with the maintainers of ReVanced Manager. This will help you determine whether your change is acceptable
|
||||
and whether it is worth your time to implement it
|
||||
2. Development happens on the `dev` branch. Fork the repository and create your branch from `dev`
|
||||
3. Commit your changes
|
||||
4. Submit a pull request to the `dev` branch of the repository and reference issues
|
||||
that your pull request closes in the description of your pull request
|
||||
5. Our team will review your pull request and provide feedback. Once your pull request is approved,
|
||||
it will be merged into the `dev` branch and will be included in the next release of ReVanced Manager
|
||||
|
||||
## 🤚 I want to contribute but don't know how to code
|
||||
|
||||
Even if you don't know how to code, you can still contribute by
|
||||
translating ReVanced Manager on [Crowdin](https://translate.revanced.app/).
|
||||
|
||||
❤️ Thank you for considering contributing to ReVanced Manager,
|
||||
ReVanced
|
116
README.md
@ -1,35 +1,105 @@
|
||||
<p align="center">
|
||||
<picture>
|
||||
<source
|
||||
width="256px"
|
||||
media="(prefers-color-scheme: dark)"
|
||||
srcset="assets/revanced-headline/revanced-headline-vertical-dark.svg"
|
||||
>
|
||||
<img
|
||||
width="256px"
|
||||
src="assets/revanced-headline/revanced-headline-vertical-light.svg"
|
||||
>
|
||||
</picture>
|
||||
<br>
|
||||
<a href="https://revanced.app/">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo.svg" />
|
||||
<img height="24px" src="assets/revanced-logo/revanced-logo.svg" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://github.com/ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
|
||||
<img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="http://revanced.app/discord">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://reddit.com/r/revancedapp">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://t.me/app_revanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://x.com/revancedapp">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://www.youtube.com/@ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
Continuing the legacy of Vanced
|
||||
</p>
|
||||
|
||||
# 💊 ReVanced Manager
|
||||
|
||||
The official ReVanced Manager based on Flutter.
|
||||

|
||||

|
||||
|
||||
Application to use ReVanced on Android
|
||||
|
||||
## ❓ About
|
||||
|
||||
ReVanced Manager is an application that uses [ReVanced Patcher](https://github.com/revanced/revanced-patcher) to patch Android apps.
|
||||
|
||||
## 💪 Features
|
||||
|
||||
Some of the features ReVanced Manager provides are:
|
||||
|
||||
- 💉 **Patch apps**: Apply any patch of your choice to Android apps
|
||||
- 📱 **Portable**: ReVanced Patcher that fits in your pocket
|
||||
- 🤗 **Simple UI**: Quickly understand the ins and outs of ReVanced Manager
|
||||
- 🛠️ **Customization**: Configurable API, custom sources, language, signing keystore, theme and more
|
||||
|
||||
## 🔽 Download
|
||||
To download the Alpha version of Manager, go [here](https://github.com/revanced/revanced-manager/releases/latest) and install the provided APK file.
|
||||
|
||||
## 📝 Prerequisites
|
||||
1. Android 8 or higher
|
||||
2. Does not work on some armv7 devices
|
||||
3. [Vanced MicroG](https://github.com/TeamVanced/VancedMicroG/releases) required for YouTube and YouTube Music (Only for non-root)
|
||||
You can download the most recent version of ReVanced Manager at [revanced.app/download](https://revanced.app/download) or from [GitHub releases](https://github.com/ReVanced/revanced-manager/releases/latest).
|
||||
Learn how to use ReVanced Manager by following the [documentation](/docs).
|
||||
|
||||
## ⚠️ Disclaimer
|
||||
*Please note that even though we're releasing the Manager, it is an ALPHA version. There's a big chance that the Manager might not work at all for you.*
|
||||
## 📚 Everything else
|
||||
|
||||
## 🔴 Issues
|
||||
For suggestions and bug reports, open an issue [here](https://github.com/revanced/revanced-manager/issues/new/choose).
|
||||
### 📙 Contributing
|
||||
|
||||
## 💭 Discussion
|
||||
If you wish to discuss the Manager, a thread has been made under the [#development](https://discord.com/channels/952946952348270622/1002922226443632761) channel in the Discord server, please note that this thread may be temporary and may be removed in the future.
|
||||
Thank you for considering contributing to ReVanced Manager.
|
||||
You can find the contribution guidelines [here](CONTRIBUTING.md).
|
||||
|
||||
### 🛠️ Building
|
||||
|
||||
## 🌐 Translation
|
||||
[](https://crowdin.com/project/revanced)
|
||||
To build a ReVanced Manager, you can follow the [documentation](/docs).
|
||||
|
||||
If you wish to translate ReVanced Manager, we're accepting translations on [Crowdin](https://translate.revanced.app)
|
||||
### 📄 Documentation
|
||||
|
||||
## 🛠️ Building Manager from source
|
||||
1. Setup flutter environment for your [platform](https://docs.flutter.dev/get-started/install)
|
||||
2. Clone the repository locally
|
||||
3. Add your github token in gradle.properties like [this](https://github.com/revanced/revanced-documentation/wiki/Building-from-source)
|
||||
4. Open the project in terminal
|
||||
5. Run `flutter pub get` in terminal
|
||||
6. Then `flutter packages pub run build_runner build --delete-conflicting-outputs` (Must be done on each git pull)
|
||||
7. To build release apk run `flutter build apk`
|
||||
You can find the documentation for ReVanced Manager [here](/docs).
|
||||
|
||||
## ⚖️ License
|
||||
|
||||
ReVanced Manager is licensed under the GPLv3 license. Please see the [license file](LICENSE) for more information.
|
||||
[tl;dr](https://www.tldrlegal.com/license/gnu-general-public-license-v3-gpl-3) you may copy, distribute and modify ReVanced Manager as long as you track changes/dates in source files.
|
||||
Any modifications to ReVanced Manager must also be made available under the GPL, along with build & install instructions.
|
||||
|
77
SECURITY.md
Normal file
@ -0,0 +1,77 @@
|
||||
<p align="center">
|
||||
<picture>
|
||||
<source
|
||||
width="256px"
|
||||
media="(prefers-color-scheme: dark)"
|
||||
srcset="assets/revanced-headline/revanced-headline-vertical-dark.svg"
|
||||
>
|
||||
<img
|
||||
width="256px"
|
||||
src="assets/revanced-headline/revanced-headline-vertical-light.svg"
|
||||
>
|
||||
</picture>
|
||||
<br>
|
||||
<a href="https://revanced.app/">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo.svg" />
|
||||
<img height="24px" src="assets/revanced-logo/revanced-logo.svg" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://github.com/ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
|
||||
<img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="http://revanced.app/discord">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://reddit.com/r/revancedapp">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://t.me/app_revanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://x.com/revancedapp">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://www.youtube.com/@ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
Continuing the legacy of Vanced
|
||||
</p>
|
||||
|
||||
# 🔒 Security Policy
|
||||
|
||||
This document describes how to report security vulnerabilities for ReVanced Manager.
|
||||
|
||||
## 🚨 Reporting a Vulnerability
|
||||
|
||||
Please open an issue in our [advisory tracker](https://github.com/ReVanced/revanced-manager/security/advisories/new) or reach out privately to us on [Discord](https://discord.gg/revanced).
|
||||
|
||||
If a vulnerability is confirmed and accepted, you can join our [Discord](https://discord.gg/revanced) server to receive a special contributor role.
|
||||
|
||||
### ⏳ Supported Versions
|
||||
|
||||
| Version | Branch | Supported |
|
||||
| --------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------ |
|
||||
|  | main | :white_check_mark: |
|
||||
|  | dev | :white_check_mark: |
|
||||
|  | compose-dev | :white_check_mark: |
|
@ -11,23 +11,147 @@ include: package:flutter_lints/flutter.yaml
|
||||
|
||||
analyzer:
|
||||
exclude:
|
||||
- lib/utils/env_class.g.dart
|
||||
- lib/app/app.locator.dart
|
||||
- lib/app/app.router.dart
|
||||
- lib/models/patch.g.dart
|
||||
- lib/models/patched_application.g.dart
|
||||
|
||||
linter:
|
||||
# The lint rules applied to this project can be customized in the
|
||||
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
|
||||
# included above or to enable additional rules. A list of all available lints
|
||||
# and their documentation is published at
|
||||
# https://dart-lang.github.io/linter/lints/index.html.
|
||||
#
|
||||
# Instead of disabling a lint rule for the entire project in the
|
||||
# section below, it can also be suppressed for a single line of code
|
||||
# or a specific dart file by using the `// ignore: name_of_lint` and
|
||||
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
|
||||
# producing the lint.
|
||||
rules:
|
||||
# avoid_print: false # Uncomment to disable the `avoid_print` rule
|
||||
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
|
||||
|
||||
# Additional information about this file can be found at
|
||||
# https://dart.dev/guides/language/analysis-options
|
||||
- always_declare_return_types
|
||||
- require_trailing_commas
|
||||
- always_put_control_body_on_new_line
|
||||
- always_use_package_imports # we do this commonly
|
||||
- annotate_overrides
|
||||
- avoid_bool_literals_in_conditional_expressions
|
||||
- avoid_double_and_int_checks
|
||||
- avoid_empty_else
|
||||
- avoid_equals_and_hash_code_on_mutable_classes
|
||||
- avoid_escaping_inner_quotes
|
||||
- avoid_field_initializers_in_const_classes
|
||||
- avoid_function_literals_in_foreach_calls
|
||||
- avoid_implementing_value_types
|
||||
- avoid_init_to_null
|
||||
- avoid_js_rounded_ints
|
||||
- avoid_null_checks_in_equality_operators
|
||||
- avoid_print
|
||||
- avoid_redundant_argument_values
|
||||
- avoid_relative_lib_imports
|
||||
- avoid_renaming_method_parameters
|
||||
- avoid_return_types_on_setters
|
||||
- avoid_returning_null_for_void
|
||||
- avoid_setters_without_getters
|
||||
- avoid_shadowing_type_parameters
|
||||
- avoid_single_cascade_in_expression_statements
|
||||
- avoid_type_to_string
|
||||
- avoid_types_as_parameter_names
|
||||
- avoid_unnecessary_containers
|
||||
- avoid_void_async
|
||||
- avoid_web_libraries_in_flutter # we use web libraries in web-specific code, and our tests prevent us from using them elsewhere
|
||||
- await_only_futures
|
||||
- camel_case_extensions
|
||||
- camel_case_types
|
||||
- cancel_subscriptions
|
||||
- cast_nullable_to_non_nullable
|
||||
- close_sinks # not reliable enough
|
||||
- control_flow_in_finally
|
||||
- curly_braces_in_flow_control_structures
|
||||
- depend_on_referenced_packages
|
||||
- deprecated_consistency
|
||||
- directives_ordering
|
||||
- empty_catches
|
||||
- empty_constructor_bodies
|
||||
- empty_statements
|
||||
- eol_at_end_of_file
|
||||
- exhaustive_cases
|
||||
- file_names
|
||||
- flutter_style_todos
|
||||
- hash_and_equals
|
||||
- implementation_imports
|
||||
- collection_methods_unrelated_type
|
||||
- leading_newlines_in_multiline_strings
|
||||
- library_prefixes
|
||||
- library_private_types_in_public_api
|
||||
- missing_whitespace_between_adjacent_strings
|
||||
- no_adjacent_strings_in_list
|
||||
- no_duplicate_case_values
|
||||
- no_logic_in_create_state
|
||||
- non_constant_identifier_names
|
||||
- noop_primitive_operations
|
||||
- null_check_on_nullable_type_parameter
|
||||
- null_closures
|
||||
- overridden_fields
|
||||
- package_api_docs
|
||||
- package_names
|
||||
- prefer_adjacent_string_concatenation
|
||||
- prefer_asserts_in_initializer_lists
|
||||
- prefer_collection_literals
|
||||
- prefer_conditional_assignment
|
||||
- prefer_const_constructors
|
||||
- prefer_const_constructors_in_immutables
|
||||
- prefer_const_declarations
|
||||
- prefer_const_literals_to_create_immutables
|
||||
- prefer_contains
|
||||
- prefer_final_fields
|
||||
- prefer_final_in_for_each
|
||||
- prefer_final_locals
|
||||
- prefer_for_elements_to_map_fromIterable
|
||||
- prefer_foreach
|
||||
- prefer_function_declarations_over_variables
|
||||
- prefer_generic_function_type_aliases
|
||||
- prefer_if_elements_to_conditional_expressions
|
||||
- prefer_if_null_operators
|
||||
- prefer_initializing_formals
|
||||
- prefer_inlined_adds
|
||||
- prefer_interpolation_to_compose_strings
|
||||
- prefer_is_empty
|
||||
- prefer_is_not_empty
|
||||
- prefer_is_not_operator
|
||||
- prefer_iterable_whereType
|
||||
- prefer_null_aware_method_calls # "call()" is confusing to people new to the language since it's not documented anywhere
|
||||
- prefer_null_aware_operators
|
||||
- prefer_single_quotes
|
||||
- prefer_spread_collections
|
||||
- prefer_typing_uninitialized_variables
|
||||
- provide_deprecation_message
|
||||
- recursive_getters
|
||||
- sized_box_for_whitespace
|
||||
- slash_for_doc_comments
|
||||
- sort_child_properties_last
|
||||
- sort_constructors_first
|
||||
- sort_pub_dependencies
|
||||
- sort_unnamed_constructors_first
|
||||
- test_types_in_equals
|
||||
- throw_in_finally
|
||||
- tighten_type_of_initializing_formals
|
||||
- type_init_formals
|
||||
- unnecessary_brace_in_string_interps
|
||||
- unnecessary_const
|
||||
- unnecessary_getters_setters
|
||||
- unnecessary_new
|
||||
- unnecessary_null_aware_assignments
|
||||
- unnecessary_null_checks
|
||||
- unnecessary_null_in_if_null_operators
|
||||
- unnecessary_nullable_for_final_variable_declarations
|
||||
- unnecessary_overrides
|
||||
- unnecessary_parenthesis
|
||||
- unnecessary_statements
|
||||
- unnecessary_string_escapes
|
||||
- unnecessary_string_interpolations
|
||||
- unnecessary_this
|
||||
- unrelated_type_equality_checks
|
||||
- unsafe_html
|
||||
- use_build_context_synchronously
|
||||
- use_full_hex_values_for_flutter_colors
|
||||
- use_function_type_syntax_for_parameters
|
||||
- use_if_null_to_convert_nulls_to_bools
|
||||
- use_is_even_rather_than_modulo
|
||||
- use_key_in_widget_constructors
|
||||
- use_late_for_private_fields_and_variables
|
||||
- use_named_constants
|
||||
- use_raw_strings
|
||||
- use_rethrow_when_possible
|
||||
- use_setters_to_change_properties
|
||||
- use_test_throws_matchers
|
||||
- valid_regexps
|
||||
- void_checks
|
||||
|
2
android/.gitignore
vendored
@ -7,7 +7,7 @@ gradle-wrapper.jar
|
||||
GeneratedPluginRegistrant.java
|
||||
|
||||
# Remember to never publicly share your keystore.
|
||||
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
|
||||
# See https://flutter.dev/to/reference-keystore
|
||||
key.properties
|
||||
**/*.keystore
|
||||
**/*.jks
|
||||
|
@ -1,84 +0,0 @@
|
||||
def localProperties = new Properties()
|
||||
def localPropertiesFile = rootProject.file('local.properties')
|
||||
if (localPropertiesFile.exists()) {
|
||||
localPropertiesFile.withReader('UTF-8') { reader ->
|
||||
localProperties.load(reader)
|
||||
}
|
||||
}
|
||||
|
||||
def flutterRoot = localProperties.getProperty('flutter.sdk')
|
||||
if (flutterRoot == null) {
|
||||
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
|
||||
}
|
||||
|
||||
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
|
||||
if (flutterVersionCode == null) {
|
||||
flutterVersionCode = '1'
|
||||
}
|
||||
|
||||
def flutterVersionName = localProperties.getProperty('flutter.versionName')
|
||||
if (flutterVersionName == null) {
|
||||
flutterVersionName = '1.0'
|
||||
}
|
||||
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'kotlin-android'
|
||||
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
|
||||
|
||||
android {
|
||||
compileSdkVersion 33
|
||||
ndkVersion flutter.ndkVersion
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_11
|
||||
targetCompatibility JavaVersion.VERSION_11
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = '11'
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
main.java.srcDirs += 'src/main/kotlin'
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "app.revanced.manager.flutter"
|
||||
minSdkVersion 26
|
||||
targetSdkVersion 33
|
||||
versionCode flutterVersionCode.toInteger()
|
||||
versionName flutterVersionName
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
shrinkResources false
|
||||
minifyEnabled false
|
||||
signingConfig signingConfigs.debug
|
||||
}
|
||||
}
|
||||
|
||||
packagingOptions {
|
||||
exclude '/prebuilt/**'
|
||||
}
|
||||
}
|
||||
|
||||
flutter {
|
||||
source '../..'
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
|
||||
// ReVanced
|
||||
implementation "app.revanced:revanced-patcher:6.0.0"
|
||||
|
||||
// Signing & aligning
|
||||
implementation("org.bouncycastle:bcpkix-jdk15on:1.70")
|
||||
implementation("com.android.tools.build:apksig:7.2.2")
|
||||
|
||||
// MicroG cronet
|
||||
implementation("org.microg:cronet-common:$cronetVersion")
|
||||
implementation("org.microg:cronet-native:$cronetVersion")
|
||||
|
||||
}
|
104
android/app/build.gradle.kts
Normal file
@ -0,0 +1,104 @@
|
||||
plugins {
|
||||
id("com.android.application")
|
||||
id("kotlin-android")
|
||||
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
|
||||
id("dev.flutter.flutter-gradle-plugin")
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "app.revanced.manager.flutter"
|
||||
compileSdk = 35
|
||||
ndkVersion = "27.0.12077973"
|
||||
|
||||
compileOptions {
|
||||
isCoreLibraryDesugaringEnabled = true
|
||||
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = JavaVersion.VERSION_17.toString()
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "app.revanced.manager.flutter"
|
||||
minSdk = 26
|
||||
targetSdk = 35
|
||||
versionCode = flutter.versionCode
|
||||
versionName = flutter.versionName
|
||||
|
||||
resValue("string", "app_name", "ReVanced Manager")
|
||||
}
|
||||
|
||||
applicationVariants.all {
|
||||
outputs.all {
|
||||
this as com.android.build.gradle.internal.api.ApkVariantOutputImpl
|
||||
|
||||
outputFileName = "revanced-manager-$versionName.apk"
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
configureEach {
|
||||
isShrinkResources = false
|
||||
isMinifyEnabled = false
|
||||
|
||||
signingConfig = signingConfigs["debug"]
|
||||
|
||||
ndk.abiFilters += setOf("armeabi-v7a", "arm64-v8a", "x86_64")
|
||||
}
|
||||
|
||||
release {
|
||||
isShrinkResources = true
|
||||
isMinifyEnabled = true
|
||||
|
||||
val keystoreFile = file("keystore.jks")
|
||||
if (keystoreFile.exists()) {
|
||||
signingConfig = signingConfigs.create("release") {
|
||||
storeFile = keystoreFile
|
||||
storePassword = System.getenv("KEYSTORE_PASSWORD")
|
||||
keyAlias = System.getenv("KEYSTORE_ENTRY_ALIAS")
|
||||
keyPassword = System.getenv("KEYSTORE_ENTRY_PASSWORD")
|
||||
}
|
||||
|
||||
resValue("string", "app_name", "ReVanced Manager")
|
||||
} else {
|
||||
applicationIdSuffix = ".debug"
|
||||
|
||||
signingConfig = signingConfigs["debug"]
|
||||
|
||||
resValue("string", "app_name", "ReVanced Manager (Debug signed)")
|
||||
}
|
||||
}
|
||||
|
||||
debug {
|
||||
applicationIdSuffix = ".debug"
|
||||
|
||||
resValue("string", "app_name", "ReVanced Manager (Debug)")
|
||||
}
|
||||
}
|
||||
|
||||
packaging {
|
||||
jniLibs {
|
||||
useLegacyPackaging = true
|
||||
excludes.add("/prebuilt/**")
|
||||
}
|
||||
|
||||
resources {
|
||||
excludes.add("/prebuilt/**")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
flutter {
|
||||
source = "../.."
|
||||
}
|
||||
|
||||
dependencies {
|
||||
coreLibraryDesugaring(libs.desugar.jdk.libs) // https://pub.dev/packages/flutter_local_notifications#gradle-setup
|
||||
implementation(libs.revanced.patcher)
|
||||
implementation(libs.revanced.library)
|
||||
}
|
||||
|
14
android/app/proguard-rules.pro
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
-dontobfuscate
|
||||
|
||||
-keep class app.revanced.** { *; }
|
||||
-keep class com.android.tools.smali.** { *; }
|
||||
-keep class kotlin.** { *; }
|
||||
-keep class com.google.auto.value.** { *; }
|
||||
-keep class com.android.apksig.internal.** { *; }
|
||||
-keepnames class com.google.common.collect.**
|
||||
-keepnames class org.xmlpull.** { *; }
|
||||
|
||||
-dontwarn com.google.auto.value.**
|
||||
-dontwarn com.google.j2objc.annotations.*
|
||||
-dontwarn java.awt.**
|
||||
-dontwarn javax.**
|
@ -1,4 +1,7 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="app.revanced.manager.flutter">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- The INTERNET permission is required for development. Specifically,
|
||||
the Flutter tool needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
</manifest>
|
||||
|
@ -1,23 +1,33 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="app.revanced.manager.flutter">
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
||||
<manifest xmlns:tools="http://schemas.android.com/tools"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<uses-permission android:name="android.permission.INTERNET" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
|
||||
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
|
||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
|
||||
|
||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="32" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
android:maxSdkVersion="32" />
|
||||
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
|
||||
|
||||
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
|
||||
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
|
||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
|
||||
tools:ignore="QueryAllPackagesPermission" />
|
||||
|
||||
<application
|
||||
android:label="ReVanced Manager"
|
||||
android:label="@string/app_name"
|
||||
android:name="${applicationName}"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:largeHeap="true"
|
||||
android:extractNativeLibs="true">
|
||||
android:requestLegacyExternalStorage="true"
|
||||
android:enableOnBackInvokedCallback="true">
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true"
|
||||
@ -27,14 +37,21 @@
|
||||
android:hardwareAccelerated="true"
|
||||
android:windowSoftInputMode="adjustResize">
|
||||
<meta-data
|
||||
android:name="io.flutter.embedding.android.NormalTheme"
|
||||
android:resource="@style/NormalTheme"
|
||||
/>
|
||||
android:name="io.flutter.embedding.android.NormalTheme"
|
||||
android:resource="@style/NormalTheme" />
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<service
|
||||
android:name="de.julianassmann.flutter_background.IsolateHolderService"
|
||||
android:exported="false"
|
||||
android:foregroundServiceType="shortService" />
|
||||
<activity
|
||||
android:name=".ExportSettingsActivity"
|
||||
android:exported="true">
|
||||
</activity>
|
||||
<meta-data
|
||||
android:name="flutterEmbedding"
|
||||
android:value="2" />
|
||||
@ -47,5 +64,22 @@
|
||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
||||
android:resource="@xml/file_paths" />
|
||||
</provider>
|
||||
|
||||
<receiver
|
||||
android:name=".utils.packageInstaller.InstallerReceiver"
|
||||
android:enabled="true"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="APP_INSTALL_ACTION" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
<receiver
|
||||
android:name=".utils.packageInstaller.UninstallerReceiver"
|
||||
android:enabled="true"
|
||||
android:exported="false">
|
||||
<intent-filter>
|
||||
<action android:name="APP_UNINSTALL_ACTION" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
</application>
|
||||
</manifest>
|
||||
|
@ -0,0 +1,81 @@
|
||||
package app.revanced.manager.flutter
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Bundle
|
||||
import android.util.Base64
|
||||
import org.json.JSONObject
|
||||
import java.io.ByteArrayInputStream
|
||||
import java.io.File
|
||||
import java.security.cert.CertificateFactory
|
||||
import java.security.cert.X509Certificate
|
||||
import java.security.MessageDigest
|
||||
|
||||
class ExportSettingsActivity : Activity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
if (getFingerprint(callingPackage!!) == getFingerprint(packageName)) {
|
||||
// Create JSON Object
|
||||
val json = JSONObject()
|
||||
|
||||
// Default Data
|
||||
json.put("keystorePassword", "s3cur3p@ssw0rd")
|
||||
|
||||
// Load Shared Preferences
|
||||
val sharedPreferences = getSharedPreferences("FlutterSharedPreferences", Context.MODE_PRIVATE)
|
||||
val allEntries: Map<String, *> = sharedPreferences.getAll()
|
||||
for ((key, value) in allEntries.entries) {
|
||||
json.put(key.replace("flutter.", ""), value)
|
||||
}
|
||||
|
||||
// Load keystore
|
||||
val keystoreFile = File(getExternalFilesDir(null), "/revanced-manager.keystore")
|
||||
if (keystoreFile.exists()) {
|
||||
val keystoreBytes = keystoreFile.readBytes()
|
||||
val keystoreBase64 = Base64.encodeToString(keystoreBytes, Base64.DEFAULT)
|
||||
json.put("keystore", keystoreBase64)
|
||||
}
|
||||
|
||||
// Load saved patches
|
||||
val storedPatchesFile = File(filesDir.parentFile.absolutePath, "/app_flutter/selected-patches.json")
|
||||
if (storedPatchesFile.exists()) {
|
||||
val patchesBytes = storedPatchesFile.readBytes()
|
||||
val patches = String(patchesBytes, Charsets.UTF_8)
|
||||
json.put("patches", JSONObject(patches))
|
||||
}
|
||||
|
||||
// Send data back
|
||||
val resultIntent = Intent()
|
||||
resultIntent.putExtra("data", json.toString())
|
||||
setResult(Activity.RESULT_OK, resultIntent)
|
||||
finish()
|
||||
} else {
|
||||
val resultIntent = Intent()
|
||||
setResult(Activity.RESULT_CANCELED)
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
fun getFingerprint(packageName: String): String {
|
||||
// Get the signature of the app that matches the package name
|
||||
val packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
|
||||
val signature = packageInfo.signatures!![0]
|
||||
|
||||
// Get the raw certificate data
|
||||
val rawCert = signature.toByteArray()
|
||||
|
||||
// Generate an X509Certificate from the data
|
||||
val certFactory = CertificateFactory.getInstance("X509")
|
||||
val x509Cert = certFactory.generateCertificate(ByteArrayInputStream(rawCert)) as X509Certificate
|
||||
|
||||
// Get the SHA256 fingerprint
|
||||
val fingerprint = MessageDigest.getInstance("SHA256").digest(x509Cert.encoded).joinToString("") {
|
||||
"%02x".format(it)
|
||||
}
|
||||
|
||||
return fingerprint
|
||||
}
|
||||
}
|
@ -1,313 +1,424 @@
|
||||
package app.revanced.manager.flutter
|
||||
|
||||
import android.app.PendingIntent
|
||||
import android.app.SearchManager
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageInstaller
|
||||
import android.os.Build
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import androidx.annotation.NonNull
|
||||
import app.revanced.library.ApkUtils
|
||||
import app.revanced.library.ApkUtils.applyTo
|
||||
import app.revanced.library.installation.installer.LocalInstaller
|
||||
import app.revanced.manager.flutter.utils.Aapt
|
||||
import app.revanced.manager.flutter.utils.aligning.ZipAligner
|
||||
import app.revanced.manager.flutter.utils.signing.Signer
|
||||
import app.revanced.manager.flutter.utils.zip.ZipFile
|
||||
import app.revanced.manager.flutter.utils.zip.structures.ZipEntry
|
||||
import app.revanced.manager.flutter.utils.packageInstaller.InstallerReceiver
|
||||
import app.revanced.manager.flutter.utils.packageInstaller.UninstallerReceiver
|
||||
import app.revanced.patcher.Patcher
|
||||
import app.revanced.patcher.PatcherOptions
|
||||
import app.revanced.patcher.extensions.PatchExtensions.patchName
|
||||
import app.revanced.patcher.logging.Logger
|
||||
import app.revanced.patcher.util.patch.PatchBundle
|
||||
import dalvik.system.DexClassLoader
|
||||
import app.revanced.patcher.PatcherConfig
|
||||
import app.revanced.patcher.patch.Patch
|
||||
import app.revanced.patcher.patch.PatchResult
|
||||
import app.revanced.patcher.patch.loadPatchesFromDex
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugin.common.MethodChannel
|
||||
import kotlinx.coroutines.flow.FlowCollector
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.json.JSONArray
|
||||
import org.json.JSONObject
|
||||
import java.io.File
|
||||
import java.io.PrintWriter
|
||||
import java.io.StringWriter
|
||||
import java.util.logging.LogRecord
|
||||
import java.util.logging.Logger
|
||||
|
||||
private const val PATCHER_CHANNEL = "app.revanced.manager.flutter/patcher"
|
||||
private const val INSTALLER_CHANNEL = "app.revanced.manager.flutter/installer"
|
||||
|
||||
class MainActivity : FlutterActivity() {
|
||||
private val handler = Handler(Looper.getMainLooper())
|
||||
private lateinit var installerChannel: MethodChannel
|
||||
private var cancel: Boolean = false
|
||||
private var stopResult: MethodChannel.Result? = null
|
||||
|
||||
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
|
||||
private lateinit var patches: Set<Patch<*>>
|
||||
|
||||
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
|
||||
super.configureFlutterEngine(flutterEngine)
|
||||
val mainChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, PATCHER_CHANNEL)
|
||||
installerChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, INSTALLER_CHANNEL)
|
||||
|
||||
val patcherChannel = "app.revanced.manager.flutter/patcher"
|
||||
val installerChannel = "app.revanced.manager.flutter/installer"
|
||||
val openBrowserChannel = "app.revanced.manager.flutter/browser"
|
||||
|
||||
MethodChannel(
|
||||
flutterEngine.dartExecutor.binaryMessenger,
|
||||
openBrowserChannel
|
||||
).setMethodCallHandler { call, result ->
|
||||
if (call.method == "openBrowser") {
|
||||
val searchQuery = call.argument<String>("query")
|
||||
openBrowser(searchQuery)
|
||||
result.success(null)
|
||||
} else {
|
||||
result.notImplemented()
|
||||
}
|
||||
}
|
||||
|
||||
val mainChannel =
|
||||
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, patcherChannel)
|
||||
|
||||
this.installerChannel =
|
||||
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, installerChannel)
|
||||
|
||||
mainChannel.setMethodCallHandler { call, result ->
|
||||
when (call.method) {
|
||||
"runPatcher" -> {
|
||||
val patchBundleFilePath = call.argument<String>("patchBundleFilePath")
|
||||
val originalFilePath = call.argument<String>("originalFilePath")
|
||||
val inputFilePath = call.argument<String>("inputFilePath")
|
||||
val patchedFilePath = call.argument<String>("patchedFilePath")
|
||||
val inFilePath = call.argument<String>("inFilePath")
|
||||
val outFilePath = call.argument<String>("outFilePath")
|
||||
val integrationsPath = call.argument<String>("integrationsPath")
|
||||
val selectedPatches = call.argument<List<String>>("selectedPatches")
|
||||
val cacheDirPath = call.argument<String>("cacheDirPath")
|
||||
val mergeIntegrations = call.argument<Boolean>("mergeIntegrations")
|
||||
val options = call.argument<Map<String, Map<String, Any>>>("options")
|
||||
val tmpDirPath = call.argument<String>("tmpDirPath")
|
||||
val keyStoreFilePath = call.argument<String>("keyStoreFilePath")
|
||||
if (patchBundleFilePath != null &&
|
||||
originalFilePath != null &&
|
||||
inputFilePath != null &&
|
||||
patchedFilePath != null &&
|
||||
val keystorePassword = call.argument<String>("keystorePassword")
|
||||
|
||||
if (
|
||||
inFilePath != null &&
|
||||
outFilePath != null &&
|
||||
integrationsPath != null &&
|
||||
selectedPatches != null &&
|
||||
cacheDirPath != null &&
|
||||
mergeIntegrations != null &&
|
||||
keyStoreFilePath != null
|
||||
options != null &&
|
||||
tmpDirPath != null &&
|
||||
keyStoreFilePath != null &&
|
||||
keystorePassword != null
|
||||
) {
|
||||
cancel = false
|
||||
runPatcher(
|
||||
result,
|
||||
patchBundleFilePath,
|
||||
originalFilePath,
|
||||
inputFilePath,
|
||||
patchedFilePath,
|
||||
inFilePath,
|
||||
outFilePath,
|
||||
integrationsPath,
|
||||
selectedPatches,
|
||||
cacheDirPath,
|
||||
mergeIntegrations,
|
||||
keyStoreFilePath
|
||||
options,
|
||||
tmpDirPath,
|
||||
keyStoreFilePath,
|
||||
keystorePassword
|
||||
)
|
||||
} else {
|
||||
result.notImplemented()
|
||||
}
|
||||
} else result.error(
|
||||
"INVALID_ARGUMENTS",
|
||||
"Invalid arguments",
|
||||
"One or more arguments are missing"
|
||||
)
|
||||
}
|
||||
|
||||
"stopPatcher" -> {
|
||||
cancel = true
|
||||
stopResult = result
|
||||
}
|
||||
|
||||
"getPatches" -> {
|
||||
val patchBundleFilePath = call.argument<String>("patchBundleFilePath")!!
|
||||
|
||||
try {
|
||||
val patchBundleFile = File(patchBundleFilePath)
|
||||
patchBundleFile.setWritable(false)
|
||||
patches = loadPatchesFromDex(
|
||||
setOf(patchBundleFile),
|
||||
optimizedDexDirectory = codeCacheDir
|
||||
)
|
||||
} catch (t: Throwable) {
|
||||
return@setMethodCallHandler result.error(
|
||||
"PATCH_BUNDLE_ERROR",
|
||||
"Failed to load patch bundle",
|
||||
t.stackTraceToString()
|
||||
)
|
||||
}
|
||||
|
||||
JSONArray().apply {
|
||||
patches.forEach {
|
||||
JSONObject().apply {
|
||||
put("name", it.name)
|
||||
put("description", it.description)
|
||||
put("excluded", !it.use)
|
||||
put("compatiblePackages", JSONArray().apply {
|
||||
it.compatiblePackages?.forEach { (name, versions) ->
|
||||
val compatiblePackageJson = JSONObject().apply {
|
||||
put("name", name)
|
||||
put(
|
||||
"versions",
|
||||
JSONArray().apply {
|
||||
versions?.forEach { version ->
|
||||
put(version)
|
||||
}
|
||||
})
|
||||
}
|
||||
put(compatiblePackageJson)
|
||||
}
|
||||
})
|
||||
put("options", JSONArray().apply {
|
||||
it.options.values.forEach { option ->
|
||||
JSONObject().apply {
|
||||
put("key", option.key)
|
||||
put("title", option.title)
|
||||
put("description", option.description)
|
||||
put("required", option.required)
|
||||
|
||||
fun JSONObject.putValue(
|
||||
value: Any?,
|
||||
key: String = "value"
|
||||
) = if (value is Array<*>) put(
|
||||
key,
|
||||
JSONArray().apply {
|
||||
value.forEach { put(it) }
|
||||
})
|
||||
else put(key, value)
|
||||
|
||||
putValue(option.default)
|
||||
|
||||
option.values?.let { values ->
|
||||
put("values",
|
||||
JSONObject().apply {
|
||||
values.forEach { (key, value) ->
|
||||
putValue(value, key)
|
||||
}
|
||||
})
|
||||
} ?: put("values", null)
|
||||
put("type", option.type)
|
||||
}.let(::put)
|
||||
}
|
||||
})
|
||||
}.let(::put)
|
||||
}
|
||||
}.toString().let(result::success)
|
||||
}
|
||||
|
||||
"installApk" -> {
|
||||
val apkPath = call.argument<String>("apkPath")!!
|
||||
PackageInstallerManager.result = result
|
||||
installApk(apkPath)
|
||||
}
|
||||
|
||||
"uninstallApp" -> {
|
||||
val packageName = call.argument<String>("packageName")!!
|
||||
uninstallApp(packageName)
|
||||
PackageInstallerManager.result = result
|
||||
}
|
||||
|
||||
else -> result.notImplemented()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun openBrowser(query: String?) {
|
||||
val intent = Intent(Intent.ACTION_WEB_SEARCH).apply {
|
||||
putExtra(SearchManager.QUERY, query)
|
||||
}
|
||||
if (intent.resolveActivity(packageManager) != null) {
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
||||
|
||||
private fun runPatcher(
|
||||
result: MethodChannel.Result,
|
||||
patchBundleFilePath: String,
|
||||
originalFilePath: String,
|
||||
inputFilePath: String,
|
||||
patchedFilePath: String,
|
||||
inFilePath: String,
|
||||
outFilePath: String,
|
||||
integrationsPath: String,
|
||||
selectedPatches: List<String>,
|
||||
cacheDirPath: String,
|
||||
mergeIntegrations: Boolean,
|
||||
keyStoreFilePath: String
|
||||
options: Map<String, Map<String, Any>>,
|
||||
tmpDirPath: String,
|
||||
keyStoreFilePath: String,
|
||||
keystorePassword: String
|
||||
) {
|
||||
val originalFile = File(originalFilePath)
|
||||
val inputFile = File(inputFilePath)
|
||||
val patchedFile = File(patchedFilePath)
|
||||
val inFile = File(inFilePath)
|
||||
// Necessary because the file is copied from a nonwriteable location.
|
||||
inFile.setWritable(true)
|
||||
inFile.setReadable(true)
|
||||
val outFile = File(outFilePath)
|
||||
val integrations = File(integrationsPath)
|
||||
val keyStoreFile = File(keyStoreFilePath)
|
||||
val tmpDir = File(tmpDirPath)
|
||||
|
||||
Thread {
|
||||
try {
|
||||
val patches = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
|
||||
PatchBundle.Dex(
|
||||
patchBundleFilePath,
|
||||
DexClassLoader(
|
||||
patchBundleFilePath,
|
||||
cacheDirPath,
|
||||
null,
|
||||
javaClass.classLoader
|
||||
)
|
||||
).loadPatches().filter { patch -> selectedPatches.any { it == patch.patchName } }
|
||||
} else {
|
||||
TODO("VERSION.SDK_INT < CUPCAKE")
|
||||
}
|
||||
|
||||
fun updateProgress(progress: Double, header: String, log: String) {
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf(
|
||||
"progress" to 0.1,
|
||||
"header" to "",
|
||||
"log" to "Copying original apk"
|
||||
)
|
||||
)
|
||||
}
|
||||
originalFile.copyTo(inputFile, true)
|
||||
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf(
|
||||
"progress" to 0.2,
|
||||
"header" to "Unpacking apk...",
|
||||
"log" to "Unpacking input apk"
|
||||
)
|
||||
)
|
||||
}
|
||||
val patcher =
|
||||
Patcher(
|
||||
PatcherOptions(
|
||||
inputFile,
|
||||
cacheDirPath,
|
||||
Aapt.binary(applicationContext).absolutePath,
|
||||
cacheDirPath,
|
||||
logger = ManagerLogger()
|
||||
)
|
||||
)
|
||||
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf("progress" to 0.3, "header" to "", "log" to "")
|
||||
)
|
||||
}
|
||||
if (mergeIntegrations) {
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf(
|
||||
"progress" to 0.4,
|
||||
"header" to "Merging integrations...",
|
||||
"log" to "Merging integrations"
|
||||
)
|
||||
)
|
||||
}
|
||||
patcher.addFiles(listOf(integrations)) {}
|
||||
}
|
||||
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf(
|
||||
"progress" to 0.5,
|
||||
"header" to "Applying patches...",
|
||||
"log" to ""
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
patcher.addPatches(patches)
|
||||
patcher.executePatches().forEach { (patch, res) ->
|
||||
if (res.isSuccess) {
|
||||
val msg = "Applied $patch"
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf(
|
||||
"progress" to 0.5,
|
||||
"header" to "",
|
||||
"log" to msg
|
||||
)
|
||||
)
|
||||
}
|
||||
return@forEach
|
||||
}
|
||||
val msg = "$patch failed.\nError:\n" + res.exceptionOrNull()!!.printStackTrace()
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf("progress" to 0.5, "header" to "", "log" to msg)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf(
|
||||
"progress" to 0.7,
|
||||
"header" to "Repacking apk...",
|
||||
"log" to "Repacking patched apk"
|
||||
)
|
||||
)
|
||||
}
|
||||
val res = patcher.save()
|
||||
ZipFile(patchedFile).use { file ->
|
||||
res.dexFiles.forEach {
|
||||
file.addEntryCompressData(
|
||||
ZipEntry.createWithName(it.name),
|
||||
it.stream.readBytes()
|
||||
)
|
||||
}
|
||||
res.resourceFile?.let {
|
||||
file.copyEntriesFromFileAligned(
|
||||
ZipFile(it),
|
||||
ZipAligner::getEntryAlignment
|
||||
)
|
||||
}
|
||||
file.copyEntriesFromFileAligned(
|
||||
ZipFile(inputFile),
|
||||
ZipAligner::getEntryAlignment
|
||||
)
|
||||
}
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf(
|
||||
"progress" to 0.9,
|
||||
"header" to "Signing apk...",
|
||||
"log" to ""
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
// Signer("ReVanced", "s3cur3p@ssw0rd").signApk(patchedFile, outFile, keyStoreFile)
|
||||
|
||||
try {
|
||||
Signer("ReVanced", "s3cur3p@ssw0rd").signApk(patchedFile, outFile, keyStoreFile)
|
||||
} catch (e: Exception) {
|
||||
//log to console
|
||||
print("Error signing apk: ${e.message}")
|
||||
e.printStackTrace()
|
||||
}
|
||||
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf(
|
||||
"progress" to 1.0,
|
||||
"header" to "Finished!",
|
||||
"log" to "Finished!"
|
||||
)
|
||||
)
|
||||
}
|
||||
} catch (ex: Throwable) {
|
||||
val stack = ex.stackTraceToString()
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf(
|
||||
"progress" to -100.0,
|
||||
"header" to "Aborting...",
|
||||
"log" to "An error occurred! Aborting\nError:\n$stack"
|
||||
"progress" to progress,
|
||||
"header" to header,
|
||||
"log" to log
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun postStop() = handler.post { stopResult!!.success(null) }
|
||||
|
||||
fun cancel(block: () -> Unit = {}): Boolean {
|
||||
if (cancel) {
|
||||
block()
|
||||
postStop()
|
||||
}
|
||||
|
||||
return cancel
|
||||
}
|
||||
|
||||
|
||||
// Setup logger
|
||||
Logger.getLogger("").apply {
|
||||
handlers.forEach {
|
||||
it.close()
|
||||
removeHandler(it)
|
||||
}
|
||||
|
||||
object : java.util.logging.Handler() {
|
||||
override fun publish(record: LogRecord) {
|
||||
if (record.loggerName?.startsWith("app.revanced") != true || cancel) return
|
||||
|
||||
updateProgress(-1.0, "", record.message)
|
||||
}
|
||||
|
||||
override fun flush() = Unit
|
||||
override fun close() = flush()
|
||||
}.let(::addHandler)
|
||||
}
|
||||
|
||||
try {
|
||||
updateProgress(0.0, "Reading APK...", "Reading APK")
|
||||
|
||||
val patcher = Patcher(
|
||||
PatcherConfig(
|
||||
inFile,
|
||||
tmpDir,
|
||||
Aapt.binary(applicationContext).absolutePath,
|
||||
tmpDir.path,
|
||||
)
|
||||
)
|
||||
|
||||
if (cancel(patcher::close)) return@Thread
|
||||
updateProgress(0.02, "Loading patches...", "Loading patches")
|
||||
|
||||
val patches = patches.filter { patch ->
|
||||
val isCompatible = patch.compatiblePackages?.any { (name, _) ->
|
||||
name == patcher.context.packageMetadata.packageName
|
||||
} ?: false
|
||||
|
||||
val compatibleOrUniversal =
|
||||
isCompatible || patch.compatiblePackages.isNullOrEmpty()
|
||||
|
||||
compatibleOrUniversal && selectedPatches.any { it == patch.name }
|
||||
}.onEach { patch ->
|
||||
options[patch.name]?.forEach { (key, value) ->
|
||||
patch.options[key] = value
|
||||
}
|
||||
}.toSet()
|
||||
|
||||
if (cancel(patcher::close)) return@Thread
|
||||
updateProgress(0.05, "Executing...", "")
|
||||
|
||||
val patcherResult = patcher.use {
|
||||
it += patches
|
||||
|
||||
runBlocking {
|
||||
// Update the progress bar every time a patch is executed from 0.15 to 0.7
|
||||
val totalPatchesCount = patches.size
|
||||
val progressStep = 0.55 / totalPatchesCount
|
||||
var progress = 0.05
|
||||
|
||||
patcher().collect(FlowCollector { patchResult: PatchResult ->
|
||||
if (cancel(patcher::close)) return@FlowCollector
|
||||
|
||||
val msg = patchResult.exception?.let {
|
||||
val writer = StringWriter()
|
||||
it.printStackTrace(PrintWriter(writer))
|
||||
"${patchResult.patch.name} failed: $writer"
|
||||
} ?: run {
|
||||
"${patchResult.patch.name} succeeded"
|
||||
}
|
||||
|
||||
updateProgress(progress, "", msg)
|
||||
progress += progressStep
|
||||
})
|
||||
}
|
||||
|
||||
if (cancel(patcher::close)) return@Thread
|
||||
updateProgress(0.75, "Building...", "")
|
||||
|
||||
patcher.get()
|
||||
}
|
||||
|
||||
if (cancel(patcher::close)) return@Thread
|
||||
|
||||
patcherResult.applyTo(inFile)
|
||||
|
||||
if (cancel(patcher::close)) return@Thread
|
||||
|
||||
ApkUtils.signApk(
|
||||
inFile,
|
||||
outFile,
|
||||
"ReVanced",
|
||||
ApkUtils.KeyStoreDetails(
|
||||
keyStoreFile,
|
||||
keystorePassword,
|
||||
"alias",
|
||||
keystorePassword
|
||||
)
|
||||
)
|
||||
|
||||
updateProgress(.85, "Patched", "Patched APK")
|
||||
} catch (ex: Throwable) {
|
||||
if (!cancel) {
|
||||
val stack = ex.stackTraceToString()
|
||||
updateProgress(
|
||||
-100.0,
|
||||
"Failed",
|
||||
"An error occurred:\n$stack"
|
||||
)
|
||||
}
|
||||
} finally {
|
||||
inFile.delete()
|
||||
tmpDir.deleteRecursively()
|
||||
}
|
||||
|
||||
handler.post { result.success(null) }
|
||||
}.start()
|
||||
}
|
||||
|
||||
inner class ManagerLogger : Logger {
|
||||
override fun error(msg: String) {
|
||||
handler.post {
|
||||
installerChannel
|
||||
.invokeMethod(
|
||||
"update",
|
||||
mapOf("progress" to -1.0, "header" to "", "log" to msg)
|
||||
)
|
||||
private fun installApk(apkPath: String) {
|
||||
val packageInstaller: PackageInstaller = applicationContext.packageManager.packageInstaller
|
||||
val sessionParams =
|
||||
PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
|
||||
val sessionId: Int = packageInstaller.createSession(sessionParams)
|
||||
val session: PackageInstaller.Session = packageInstaller.openSession(sessionId)
|
||||
session.use { activeSession ->
|
||||
val sessionOutputStream = activeSession.openWrite(applicationContext.packageName, 0, -1)
|
||||
sessionOutputStream.use { outputStream ->
|
||||
val apkFile = File(apkPath)
|
||||
apkFile.inputStream().use { inputStream ->
|
||||
inputStream.copyTo(outputStream)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun warn(msg: String) {
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf("progress" to -1.0, "header" to "", "log" to msg)
|
||||
)
|
||||
}
|
||||
val receiverIntent = Intent(applicationContext, InstallerReceiver::class.java).apply {
|
||||
action = "APP_INSTALL_ACTION"
|
||||
}
|
||||
val receiverPendingIntent = PendingIntent.getBroadcast(
|
||||
context,
|
||||
sessionId,
|
||||
receiverIntent,
|
||||
PackageInstallerManager.flags
|
||||
)
|
||||
session.commit(receiverPendingIntent.intentSender)
|
||||
session.close()
|
||||
}
|
||||
|
||||
override fun info(msg: String) {
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf("progress" to -1.0, "header" to "", "log" to msg)
|
||||
)
|
||||
}
|
||||
private fun uninstallApp(packageName: String) {
|
||||
val packageInstaller: PackageInstaller = applicationContext.packageManager.packageInstaller
|
||||
val receiverIntent = Intent(applicationContext, UninstallerReceiver::class.java).apply {
|
||||
action = "APP_UNINSTALL_ACTION"
|
||||
}
|
||||
val receiverPendingIntent =
|
||||
PendingIntent.getBroadcast(context, 0, receiverIntent, PackageInstallerManager.flags)
|
||||
packageInstaller.uninstall(packageName, receiverPendingIntent.intentSender)
|
||||
}
|
||||
|
||||
override fun trace(_msg: String) { /* unused */ }
|
||||
object PackageInstallerManager {
|
||||
var result: MethodChannel.Result? = null
|
||||
val flags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
||||
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
|
||||
} else {
|
||||
PendingIntent.FLAG_UPDATE_CURRENT
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +0,0 @@
|
||||
package app.revanced.manager.flutter.utils.aligning
|
||||
|
||||
import app.revanced.manager.flutter.utils.zip.structures.ZipEntry
|
||||
|
||||
internal object ZipAligner {
|
||||
private const val DEFAULT_ALIGNMENT = 4
|
||||
private const val LIBRARY_ALIGNMENT = 4096
|
||||
|
||||
fun getEntryAlignment(entry: ZipEntry): Int? =
|
||||
if (entry.compression.toUInt() != 0u) null else if (entry.fileName.endsWith(".so")) LIBRARY_ALIGNMENT else DEFAULT_ALIGNMENT
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package app.revanced.manager.flutter.utils.packageInstaller
|
||||
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageInstaller
|
||||
import app.revanced.manager.flutter.MainActivity
|
||||
|
||||
class InstallerReceiver : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
when (val status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -1)) {
|
||||
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
|
||||
val confirmationIntent = intent.getParcelableExtra<Intent>(Intent.EXTRA_INTENT)
|
||||
if (confirmationIntent != null) {
|
||||
context.startActivity(confirmationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
|
||||
}
|
||||
}
|
||||
|
||||
else -> {
|
||||
val packageName = intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME)
|
||||
val message = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE)
|
||||
val otherPackageName = intent.getStringExtra(PackageInstaller.EXTRA_OTHER_PACKAGE_NAME)
|
||||
MainActivity.PackageInstallerManager.result!!.success(mapOf(
|
||||
"status" to status,
|
||||
"packageName" to packageName,
|
||||
"message" to message,
|
||||
"otherPackageName" to otherPackageName
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
package app.revanced.manager.flutter.utils.packageInstaller
|
||||
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageInstaller
|
||||
import app.revanced.manager.flutter.MainActivity
|
||||
|
||||
class UninstallerReceiver : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
when (val status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -1)) {
|
||||
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
|
||||
val confirmationIntent = intent.getParcelableExtra<Intent>(Intent.EXTRA_INTENT)
|
||||
if (confirmationIntent != null) {
|
||||
context.startActivity(confirmationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
|
||||
}
|
||||
}
|
||||
|
||||
else -> {
|
||||
MainActivity.PackageInstallerManager.result!!.success(status)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
package app.revanced.manager.flutter.utils.signing
|
||||
|
||||
import com.android.apksig.ApkSigner
|
||||
import org.bouncycastle.asn1.x500.X500Name
|
||||
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo
|
||||
import org.bouncycastle.cert.X509v3CertificateBuilder
|
||||
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider
|
||||
import org.bouncycastle.operator.ContentSigner
|
||||
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
import java.io.FileOutputStream
|
||||
import java.math.BigInteger
|
||||
import java.security.*
|
||||
import java.security.cert.X509Certificate
|
||||
import java.util.*
|
||||
|
||||
internal class Signer(
|
||||
private val cn: String, password: String
|
||||
) {
|
||||
private val passwordCharArray = password.toCharArray()
|
||||
private fun newKeystore(out: File) {
|
||||
val (publicKey, privateKey) = createKey()
|
||||
val privateKS = KeyStore.getInstance("BKS", "BC")
|
||||
privateKS.load(null, passwordCharArray)
|
||||
privateKS.setKeyEntry("alias", privateKey, passwordCharArray, arrayOf(publicKey))
|
||||
privateKS.store(FileOutputStream(out), passwordCharArray)
|
||||
}
|
||||
|
||||
private fun createKey(): Pair<X509Certificate, PrivateKey> {
|
||||
val gen = KeyPairGenerator.getInstance("RSA")
|
||||
gen.initialize(2048)
|
||||
val pair = gen.generateKeyPair()
|
||||
var serialNumber: BigInteger
|
||||
do serialNumber =
|
||||
BigInteger.valueOf(SecureRandom().nextLong()) while (serialNumber < BigInteger.ZERO)
|
||||
val x500Name = X500Name("CN=$cn")
|
||||
val builder = X509v3CertificateBuilder(
|
||||
x500Name,
|
||||
serialNumber,
|
||||
Date(System.currentTimeMillis() - 1000L * 60L * 60L * 24L * 30L),
|
||||
Date(System.currentTimeMillis() + 1000L * 60L * 60L * 24L * 366L * 30L),
|
||||
Locale.ENGLISH,
|
||||
x500Name,
|
||||
SubjectPublicKeyInfo.getInstance(pair.public.encoded)
|
||||
)
|
||||
val signer: ContentSigner = JcaContentSignerBuilder("SHA256withRSA").build(pair.private)
|
||||
return JcaX509CertificateConverter().getCertificate(builder.build(signer)) to pair.private
|
||||
}
|
||||
|
||||
fun signApk(input: File, output: File, ks: File) {
|
||||
Security.addProvider(BouncyCastleProvider())
|
||||
|
||||
if (!ks.exists()) newKeystore(ks)
|
||||
|
||||
val keyStore = KeyStore.getInstance("BKS", "BC")
|
||||
FileInputStream(ks).use { fis -> keyStore.load(fis, null) }
|
||||
val alias = keyStore.aliases().nextElement()
|
||||
|
||||
val config = ApkSigner.SignerConfig.Builder(
|
||||
cn,
|
||||
keyStore.getKey(alias, passwordCharArray) as PrivateKey,
|
||||
listOf(keyStore.getCertificate(alias) as X509Certificate)
|
||||
).build()
|
||||
|
||||
val signer = ApkSigner.Builder(listOf(config))
|
||||
signer.setCreatedBy(cn)
|
||||
signer.setInputApk(input)
|
||||
signer.setOutputApk(output)
|
||||
|
||||
signer.build().sign()
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
@file:Suppress("unused")
|
||||
|
||||
package app.revanced.manager.flutter.utils.zip
|
||||
|
||||
import java.io.DataInput
|
||||
import java.io.DataOutput
|
||||
import java.nio.ByteBuffer
|
||||
|
||||
fun UInt.toLittleEndian() =
|
||||
(((this.toInt() and 0xff000000.toInt()) shr 24) or ((this.toInt() and 0x00ff0000) shr 8) or ((this.toInt() and 0x0000ff00) shl 8) or (this.toInt() shl 24)).toUInt()
|
||||
|
||||
fun UShort.toLittleEndian() = (this.toUInt() shl 16).toLittleEndian().toUShort()
|
||||
|
||||
fun UInt.toBigEndian() = (((this.toInt() and 0xff) shl 24) or ((this.toInt() and 0xff00) shl 8)
|
||||
or ((this.toInt() and 0x00ff0000) ushr 8) or (this.toInt() ushr 24)).toUInt()
|
||||
|
||||
fun UShort.toBigEndian() = (this.toUInt() shl 16).toBigEndian().toUShort()
|
||||
|
||||
fun ByteBuffer.getUShort() = this.short.toUShort()
|
||||
fun ByteBuffer.getUInt() = this.int.toUInt()
|
||||
|
||||
fun ByteBuffer.putUShort(ushort: UShort): ByteBuffer = this.putShort(ushort.toShort())
|
||||
fun ByteBuffer.putUInt(uint: UInt): ByteBuffer = this.putInt(uint.toInt())
|
||||
|
||||
fun DataInput.readUShort() = this.readShort().toUShort()
|
||||
fun DataInput.readUInt() = this.readInt().toUInt()
|
||||
|
||||
fun DataOutput.writeUShort(ushort: UShort) = this.writeShort(ushort.toInt())
|
||||
fun DataOutput.writeUInt(uint: UInt) = this.writeInt(uint.toInt())
|
||||
|
||||
fun DataInput.readUShortLE() = this.readUShort().toBigEndian()
|
||||
fun DataInput.readUIntLE() = this.readUInt().toBigEndian()
|
||||
|
||||
fun DataOutput.writeUShortLE(ushort: UShort) = this.writeUShort(ushort.toLittleEndian())
|
||||
fun DataOutput.writeUIntLE(uint: UInt) = this.writeUInt(uint.toLittleEndian())
|
@ -1,176 +0,0 @@
|
||||
package app.revanced.manager.flutter.utils.zip
|
||||
|
||||
import app.revanced.manager.flutter.utils.zip.structures.ZipEndRecord
|
||||
import app.revanced.manager.flutter.utils.zip.structures.ZipEntry
|
||||
import java.io.Closeable
|
||||
import java.io.File
|
||||
import java.io.RandomAccessFile
|
||||
import java.nio.ByteBuffer
|
||||
import java.nio.channels.FileChannel
|
||||
import java.util.zip.CRC32
|
||||
import java.util.zip.Deflater
|
||||
|
||||
class ZipFile(file: File) : Closeable {
|
||||
var entries: MutableList<ZipEntry> = mutableListOf()
|
||||
|
||||
private val filePointer: RandomAccessFile = RandomAccessFile(file, "rw")
|
||||
private var CDNeedsRewrite = false
|
||||
|
||||
private val compressionLevel = 5
|
||||
|
||||
init {
|
||||
//if file isn't empty try to load entries
|
||||
if (file.length() > 0) {
|
||||
val endRecord = findEndRecord()
|
||||
|
||||
if (endRecord.diskNumber > 0u || endRecord.totalEntries != endRecord.diskEntries)
|
||||
throw IllegalArgumentException("Multi-file archives are not supported")
|
||||
|
||||
entries = readEntries(endRecord).toMutableList()
|
||||
}
|
||||
|
||||
//seek back to start for writing
|
||||
filePointer.seek(0)
|
||||
}
|
||||
|
||||
private fun findEndRecord(): ZipEndRecord {
|
||||
//look from end to start since end record is at the end
|
||||
for (i in filePointer.length() - 1 downTo 0) {
|
||||
filePointer.seek(i)
|
||||
//possible beginning of signature
|
||||
if (filePointer.readByte() == 0x50.toByte()) {
|
||||
//seek back to get the full int
|
||||
filePointer.seek(i)
|
||||
val possibleSignature = filePointer.readUIntLE()
|
||||
if (possibleSignature == ZipEndRecord.ECD_SIGNATURE) {
|
||||
filePointer.seek(i)
|
||||
return ZipEndRecord.fromECD(filePointer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw Exception("Couldn't find end record")
|
||||
}
|
||||
|
||||
private fun readEntries(endRecord: ZipEndRecord): List<ZipEntry> {
|
||||
filePointer.seek(endRecord.centralDirectoryStartOffset.toLong())
|
||||
|
||||
val numberOfEntries = endRecord.diskEntries.toInt()
|
||||
|
||||
return buildList(numberOfEntries) {
|
||||
for (i in 1..numberOfEntries) {
|
||||
add(
|
||||
ZipEntry.fromCDE(filePointer).also
|
||||
{
|
||||
//for some reason the local extra field can be different from the central one
|
||||
it.readLocalExtra(
|
||||
filePointer.channel.map(
|
||||
FileChannel.MapMode.READ_ONLY,
|
||||
it.localHeaderOffset.toLong() + 28,
|
||||
2
|
||||
)
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun writeCD() {
|
||||
val CDStart = filePointer.channel.position().toUInt()
|
||||
|
||||
entries.forEach {
|
||||
filePointer.channel.write(it.toCDE())
|
||||
}
|
||||
|
||||
val entriesCount = entries.size.toUShort()
|
||||
|
||||
val endRecord = ZipEndRecord(
|
||||
0u,
|
||||
0u,
|
||||
entriesCount,
|
||||
entriesCount,
|
||||
filePointer.channel.position().toUInt() - CDStart,
|
||||
CDStart,
|
||||
""
|
||||
)
|
||||
|
||||
filePointer.channel.write(endRecord.toECD())
|
||||
}
|
||||
|
||||
private fun addEntry(entry: ZipEntry, data: ByteBuffer) {
|
||||
CDNeedsRewrite = true
|
||||
|
||||
entry.localHeaderOffset = filePointer.channel.position().toUInt()
|
||||
|
||||
filePointer.channel.write(entry.toLFH())
|
||||
filePointer.channel.write(data)
|
||||
|
||||
entries.add(entry)
|
||||
}
|
||||
|
||||
fun addEntryCompressData(entry: ZipEntry, data: ByteArray) {
|
||||
val compressor = Deflater(compressionLevel, true)
|
||||
compressor.setInput(data)
|
||||
compressor.finish()
|
||||
|
||||
val uncompressedSize = data.size
|
||||
val compressedData =
|
||||
ByteArray(uncompressedSize) //i'm guessing compression won't make the data bigger
|
||||
|
||||
val compressedDataLength = compressor.deflate(compressedData)
|
||||
val compressedBuffer =
|
||||
ByteBuffer.wrap(compressedData.take(compressedDataLength).toByteArray())
|
||||
|
||||
compressor.end()
|
||||
|
||||
val crc = CRC32()
|
||||
crc.update(data)
|
||||
|
||||
entry.compression = 8u //deflate compression
|
||||
entry.uncompressedSize = uncompressedSize.toUInt()
|
||||
entry.compressedSize = compressedDataLength.toUInt()
|
||||
entry.crc32 = crc.value.toUInt()
|
||||
|
||||
addEntry(entry, compressedBuffer)
|
||||
}
|
||||
|
||||
private fun addEntryCopyData(entry: ZipEntry, data: ByteBuffer, alignment: Int? = null) {
|
||||
alignment?.let {
|
||||
//calculate where data would end up
|
||||
val dataOffset = filePointer.filePointer + entry.LFHSize
|
||||
|
||||
val mod = dataOffset % alignment
|
||||
|
||||
//wrong alignment
|
||||
if (mod != 0L) {
|
||||
//add padding at end of extra field
|
||||
entry.localExtraField =
|
||||
entry.localExtraField.copyOf((entry.localExtraField.size + (alignment - mod)).toInt())
|
||||
}
|
||||
}
|
||||
|
||||
addEntry(entry, data)
|
||||
}
|
||||
|
||||
fun getDataForEntry(entry: ZipEntry): ByteBuffer {
|
||||
return filePointer.channel.map(
|
||||
FileChannel.MapMode.READ_ONLY,
|
||||
entry.dataOffset.toLong(),
|
||||
entry.compressedSize.toLong()
|
||||
)
|
||||
}
|
||||
|
||||
fun copyEntriesFromFileAligned(file: ZipFile, entryAlignment: (entry: ZipEntry) -> Int?) {
|
||||
for (entry in file.entries) {
|
||||
if (entries.any { it.fileName == entry.fileName }) continue //don't add duplicates
|
||||
|
||||
val data = file.getDataForEntry(entry)
|
||||
addEntryCopyData(entry, data, entryAlignment(entry))
|
||||
}
|
||||
}
|
||||
|
||||
override fun close() {
|
||||
if (CDNeedsRewrite) writeCD()
|
||||
filePointer.close()
|
||||
}
|
||||
}
|
@ -1,78 +0,0 @@
|
||||
package app.revanced.manager.flutter.utils.zip.structures
|
||||
|
||||
import app.revanced.manager.flutter.utils.zip.putUInt
|
||||
import app.revanced.manager.flutter.utils.zip.putUShort
|
||||
import app.revanced.manager.flutter.utils.zip.readUIntLE
|
||||
import app.revanced.manager.flutter.utils.zip.readUShortLE
|
||||
import java.io.DataInput
|
||||
import java.nio.ByteBuffer
|
||||
import java.nio.ByteOrder
|
||||
|
||||
data class ZipEndRecord(
|
||||
val diskNumber: UShort,
|
||||
val startingDiskNumber: UShort,
|
||||
val diskEntries: UShort,
|
||||
val totalEntries: UShort,
|
||||
val centralDirectorySize: UInt,
|
||||
val centralDirectoryStartOffset: UInt,
|
||||
val fileComment: String,
|
||||
) {
|
||||
|
||||
companion object {
|
||||
const val ECD_HEADER_SIZE = 22
|
||||
const val ECD_SIGNATURE = 0x06054b50u
|
||||
|
||||
fun fromECD(input: DataInput): ZipEndRecord {
|
||||
val signature = input.readUIntLE()
|
||||
|
||||
if (signature != ECD_SIGNATURE)
|
||||
throw IllegalArgumentException("Input doesn't start with end record signature")
|
||||
|
||||
val diskNumber = input.readUShortLE()
|
||||
val startingDiskNumber = input.readUShortLE()
|
||||
val diskEntries = input.readUShortLE()
|
||||
val totalEntries = input.readUShortLE()
|
||||
val centralDirectorySize = input.readUIntLE()
|
||||
val centralDirectoryStartOffset = input.readUIntLE()
|
||||
val fileCommentLength = input.readUShortLE()
|
||||
var fileComment = ""
|
||||
|
||||
if (fileCommentLength > 0u) {
|
||||
val fileCommentBytes = ByteArray(fileCommentLength.toInt())
|
||||
input.readFully(fileCommentBytes)
|
||||
fileComment = fileCommentBytes.toString(Charsets.UTF_8)
|
||||
}
|
||||
|
||||
return ZipEndRecord(
|
||||
diskNumber,
|
||||
startingDiskNumber,
|
||||
diskEntries,
|
||||
totalEntries,
|
||||
centralDirectorySize,
|
||||
centralDirectoryStartOffset,
|
||||
fileComment
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun toECD(): ByteBuffer {
|
||||
val commentBytes = fileComment.toByteArray(Charsets.UTF_8)
|
||||
|
||||
val buffer = ByteBuffer.allocate(ECD_HEADER_SIZE + commentBytes.size)
|
||||
.also { it.order(ByteOrder.LITTLE_ENDIAN) }
|
||||
|
||||
buffer.putUInt(ECD_SIGNATURE)
|
||||
buffer.putUShort(diskNumber)
|
||||
buffer.putUShort(startingDiskNumber)
|
||||
buffer.putUShort(diskEntries)
|
||||
buffer.putUShort(totalEntries)
|
||||
buffer.putUInt(centralDirectorySize)
|
||||
buffer.putUInt(centralDirectoryStartOffset)
|
||||
buffer.putUShort(commentBytes.size.toUShort())
|
||||
|
||||
buffer.put(commentBytes)
|
||||
|
||||
buffer.flip()
|
||||
return buffer
|
||||
}
|
||||
}
|
@ -1,190 +0,0 @@
|
||||
package app.revanced.manager.flutter.utils.zip.structures
|
||||
|
||||
import app.revanced.manager.flutter.utils.zip.*
|
||||
import java.io.DataInput
|
||||
import java.nio.ByteBuffer
|
||||
import java.nio.ByteOrder
|
||||
|
||||
data class ZipEntry(
|
||||
val version: UShort,
|
||||
val versionNeeded: UShort,
|
||||
val flags: UShort,
|
||||
var compression: UShort,
|
||||
val modificationTime: UShort,
|
||||
val modificationDate: UShort,
|
||||
var crc32: UInt,
|
||||
var compressedSize: UInt,
|
||||
var uncompressedSize: UInt,
|
||||
val diskNumber: UShort,
|
||||
val internalAttributes: UShort,
|
||||
val externalAttributes: UInt,
|
||||
var localHeaderOffset: UInt,
|
||||
val fileName: String,
|
||||
val extraField: ByteArray,
|
||||
val fileComment: String,
|
||||
var localExtraField: ByteArray = ByteArray(0), //separate for alignment
|
||||
) {
|
||||
val LFHSize: Int
|
||||
get() = LFH_HEADER_SIZE + fileName.toByteArray(Charsets.UTF_8).size + localExtraField.size
|
||||
|
||||
val dataOffset: UInt
|
||||
get() = localHeaderOffset + LFHSize.toUInt()
|
||||
|
||||
companion object {
|
||||
const val CDE_HEADER_SIZE = 46
|
||||
const val CDE_SIGNATURE = 0x02014b50u
|
||||
|
||||
const val LFH_HEADER_SIZE = 30
|
||||
const val LFH_SIGNATURE = 0x04034b50u
|
||||
|
||||
fun createWithName(fileName: String): ZipEntry {
|
||||
return ZipEntry(
|
||||
0x1403u, //made by unix, version 20
|
||||
0u,
|
||||
0u,
|
||||
0u,
|
||||
0x0821u, //seems to be static time google uses, no idea
|
||||
0x0221u, //same as above
|
||||
0u,
|
||||
0u,
|
||||
0u,
|
||||
0u,
|
||||
0u,
|
||||
0u,
|
||||
0u,
|
||||
fileName,
|
||||
ByteArray(0),
|
||||
""
|
||||
)
|
||||
}
|
||||
|
||||
fun fromCDE(input: DataInput): ZipEntry {
|
||||
val signature = input.readUIntLE()
|
||||
|
||||
if (signature != CDE_SIGNATURE)
|
||||
throw IllegalArgumentException("Input doesn't start with central directory entry signature")
|
||||
|
||||
val version = input.readUShortLE()
|
||||
val versionNeeded = input.readUShortLE()
|
||||
var flags = input.readUShortLE()
|
||||
val compression = input.readUShortLE()
|
||||
val modificationTime = input.readUShortLE()
|
||||
val modificationDate = input.readUShortLE()
|
||||
val crc32 = input.readUIntLE()
|
||||
val compressedSize = input.readUIntLE()
|
||||
val uncompressedSize = input.readUIntLE()
|
||||
val fileNameLength = input.readUShortLE()
|
||||
var fileName = ""
|
||||
val extraFieldLength = input.readUShortLE()
|
||||
val extraField = ByteArray(extraFieldLength.toInt())
|
||||
val fileCommentLength = input.readUShortLE()
|
||||
var fileComment = ""
|
||||
val diskNumber = input.readUShortLE()
|
||||
val internalAttributes = input.readUShortLE()
|
||||
val externalAttributes = input.readUIntLE()
|
||||
val localHeaderOffset = input.readUIntLE()
|
||||
|
||||
val variableFieldsLength =
|
||||
fileNameLength.toInt() + extraFieldLength.toInt() + fileCommentLength.toInt()
|
||||
|
||||
if (variableFieldsLength > 0) {
|
||||
val fileNameBytes = ByteArray(fileNameLength.toInt())
|
||||
input.readFully(fileNameBytes)
|
||||
fileName = fileNameBytes.toString(Charsets.UTF_8)
|
||||
|
||||
input.readFully(extraField)
|
||||
|
||||
val fileCommentBytes = ByteArray(fileCommentLength.toInt())
|
||||
input.readFully(fileCommentBytes)
|
||||
fileComment = fileCommentBytes.toString(Charsets.UTF_8)
|
||||
}
|
||||
|
||||
flags = (flags and 0b1000u.inv()
|
||||
.toUShort()) //disable data descriptor flag as they are not used
|
||||
|
||||
return ZipEntry(
|
||||
version,
|
||||
versionNeeded,
|
||||
flags,
|
||||
compression,
|
||||
modificationTime,
|
||||
modificationDate,
|
||||
crc32,
|
||||
compressedSize,
|
||||
uncompressedSize,
|
||||
diskNumber,
|
||||
internalAttributes,
|
||||
externalAttributes,
|
||||
localHeaderOffset,
|
||||
fileName,
|
||||
extraField,
|
||||
fileComment,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun readLocalExtra(buffer: ByteBuffer) {
|
||||
buffer.order(ByteOrder.LITTLE_ENDIAN)
|
||||
localExtraField = ByteArray(buffer.getUShort().toInt())
|
||||
}
|
||||
|
||||
fun toLFH(): ByteBuffer {
|
||||
val nameBytes = fileName.toByteArray(Charsets.UTF_8)
|
||||
|
||||
val buffer = ByteBuffer.allocate(LFH_HEADER_SIZE + nameBytes.size + localExtraField.size)
|
||||
.also { it.order(ByteOrder.LITTLE_ENDIAN) }
|
||||
|
||||
buffer.putUInt(LFH_SIGNATURE)
|
||||
buffer.putUShort(versionNeeded)
|
||||
buffer.putUShort(flags)
|
||||
buffer.putUShort(compression)
|
||||
buffer.putUShort(modificationTime)
|
||||
buffer.putUShort(modificationDate)
|
||||
buffer.putUInt(crc32)
|
||||
buffer.putUInt(compressedSize)
|
||||
buffer.putUInt(uncompressedSize)
|
||||
buffer.putUShort(nameBytes.size.toUShort())
|
||||
buffer.putUShort(localExtraField.size.toUShort())
|
||||
|
||||
buffer.put(nameBytes)
|
||||
buffer.put(localExtraField)
|
||||
|
||||
buffer.flip()
|
||||
return buffer
|
||||
}
|
||||
|
||||
fun toCDE(): ByteBuffer {
|
||||
val nameBytes = fileName.toByteArray(Charsets.UTF_8)
|
||||
val commentBytes = fileComment.toByteArray(Charsets.UTF_8)
|
||||
|
||||
val buffer =
|
||||
ByteBuffer.allocate(CDE_HEADER_SIZE + nameBytes.size + extraField.size + commentBytes.size)
|
||||
.also { it.order(ByteOrder.LITTLE_ENDIAN) }
|
||||
|
||||
buffer.putUInt(CDE_SIGNATURE)
|
||||
buffer.putUShort(version)
|
||||
buffer.putUShort(versionNeeded)
|
||||
buffer.putUShort(flags)
|
||||
buffer.putUShort(compression)
|
||||
buffer.putUShort(modificationTime)
|
||||
buffer.putUShort(modificationDate)
|
||||
buffer.putUInt(crc32)
|
||||
buffer.putUInt(compressedSize)
|
||||
buffer.putUInt(uncompressedSize)
|
||||
buffer.putUShort(nameBytes.size.toUShort())
|
||||
buffer.putUShort(extraField.size.toUShort())
|
||||
buffer.putUShort(commentBytes.size.toUShort())
|
||||
buffer.putUShort(diskNumber)
|
||||
buffer.putUShort(internalAttributes)
|
||||
buffer.putUInt(externalAttributes)
|
||||
buffer.putUInt(localHeaderOffset)
|
||||
|
||||
buffer.put(nameBytes)
|
||||
buffer.put(extraField)
|
||||
buffer.put(commentBytes)
|
||||
|
||||
buffer.flip()
|
||||
return buffer
|
||||
}
|
||||
}
|
||||
|
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 814 B |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 3.4 KiB |
Before Width: | Height: | Size: 5.4 KiB |
30
android/app/src/main/res/drawable/ic_launcher_foreground.xml
Normal file
@ -0,0 +1,30 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:aapt="http://schemas.android.com/aapt"
|
||||
android:width="108dp"
|
||||
android:height="108dp"
|
||||
android:viewportWidth="256"
|
||||
android:viewportHeight="256">
|
||||
<group android:scaleX="0.23"
|
||||
android:scaleY="0.23"
|
||||
android:translateX="98.56"
|
||||
android:translateY="98.56">
|
||||
<path
|
||||
android:pathData="M253.85,4.9C254.32,3.82 254.22,2.57 253.58,1.58C252.93,0.6 251.83,0 250.64,0C243.29,0 230.47,0 225.95,0C224.96,0 224.06,0.59 223.66,1.5C216.03,18.88 144.1,182.7 130.29,214.16C129.89,215.07 128.99,215.66 128,215.66C127.01,215.66 126.11,215.07 125.71,214.16C111.9,182.7 39.97,18.88 32.34,1.5C31.94,0.59 31.04,0 30.05,0C25.53,0 12.71,0 5.36,0C4.17,0 3.07,0.6 2.42,1.58C1.78,2.57 1.68,3.82 2.15,4.9C16.78,38.3 101.47,231.61 111.24,253.9C111.8,255.18 113.06,256 114.45,256C120.29,256 135.71,256 141.55,256C142.94,256 144.2,255.18 144.76,253.9C154.52,231.61 239.22,38.3 253.85,4.9Z"
|
||||
android:fillColor="#ffffff"/>
|
||||
<path
|
||||
android:pathData="M130.59,131.75C130.06,132.68 129.07,133.25 128,133.25C126.93,133.25 125.94,132.68 125.4,131.75C113.45,111.06 63.88,25.19 51.93,4.5C51.4,3.57 51.4,2.43 51.93,1.5C52.47,0.57 53.46,-0 54.53,-0L201.47,-0C202.54,-0 203.53,0.57 204.06,1.5C204.6,2.43 204.6,3.57 204.06,4.5C192.12,25.19 142.54,111.06 130.59,131.75Z">
|
||||
<aapt:attr name="android:fillColor">
|
||||
<gradient
|
||||
android:startX="128"
|
||||
android:startY="-0"
|
||||
android:endX="128"
|
||||
android:endY="254.6"
|
||||
android:type="linear">
|
||||
<item android:offset="0" android:color="#FFF04E98"/>
|
||||
<item android:offset="0.5" android:color="#FF5F65D4"/>
|
||||
<item android:offset="1" android:color="#FF4E98F0"/>
|
||||
</gradient>
|
||||
</aapt:attr>
|
||||
</path>
|
||||
</group>
|
||||
</vector>
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 5.3 KiB |
@ -1,5 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
||||
<background android:drawable="@color/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
</adaptive-icon>
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 2.9 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 7.4 KiB After Width: | Height: | Size: 6.6 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 9.4 KiB |
3
android/app/src/main/res/raw/revanced_manager_keep.xml
Normal file
@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:tools="http://schemas.android.com/tools"
|
||||
tools:keep="@drawable/ic_notification" />
|
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#1B1B1B</color>
|
||||
</resources>
|
||||
</resources>
|
@ -1,4 +1,7 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="app.revanced.manager.flutter">
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- The INTERNET permission is required for development. Specifically,
|
||||
the Flutter tool needs it to communicate with the running application
|
||||
to allow setting breakpoints, to provide hot reload, etc.
|
||||
-->
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
</manifest>
|
||||
|
@ -1,37 +0,0 @@
|
||||
buildscript {
|
||||
ext.cronetVersion = '102.5005.125'
|
||||
ext.kotlin_version = '1.7.20'
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
}
|
||||
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.1.3'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
maven {
|
||||
url = uri("https://maven.pkg.github.com/revanced/revanced-patcher")
|
||||
credentials {
|
||||
username = (project.findProperty("gpr.user") ?: System.getenv("GITHUB_ACTOR")) as String
|
||||
password = (project.findProperty("gpr.key") ?: System.getenv("GITHUB_TOKEN")) as String
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rootProject.buildDir = '../build'
|
||||
subprojects {
|
||||
project.buildDir = "${rootProject.buildDir}/${project.name}"
|
||||
project.evaluationDependsOn(':app')
|
||||
}
|
||||
|
||||
task clean(type: Delete) {
|
||||
delete rootProject.buildDir
|
||||
}
|
40
android/build.gradle.kts
Normal file
@ -0,0 +1,40 @@
|
||||
import com.android.build.api.dsl.CommonExtension
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
maven {
|
||||
name = "GitHubPackages"
|
||||
url = uri("https://maven.pkg.github.com/revanced/registry")
|
||||
credentials {
|
||||
username = providers.gradleProperty("gpr.user").orNull ?: System.getenv("GITHUB_ACTOR")
|
||||
password = providers.gradleProperty("gpr.key").orNull ?: System.getenv("GITHUB_TOKEN")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
layout.buildDirectory = File("../build")
|
||||
|
||||
project(":screenshot_callback") {
|
||||
tasks.withType<KotlinCompile>().configureEach {
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
subprojects {
|
||||
afterEvaluate {
|
||||
extensions.findByName("android")?.let {
|
||||
it as CommonExtension<*, *, *, *, *, *>
|
||||
if (it.compileSdk != null && it.compileSdk!! < 31)
|
||||
it.compileSdk = 34
|
||||
}
|
||||
}
|
||||
|
||||
layout.buildDirectory = rootProject.layout.buildDirectory.file(name).get().asFile
|
||||
evaluationDependsOn(":app")
|
||||
}
|
@ -1,3 +1,7 @@
|
||||
org.gradle.jvmargs=-Xmx1536M
|
||||
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
|
||||
android.useAndroidX=true
|
||||
android.enableJetifier=true
|
||||
org.gradle.parallel=true
|
||||
org.gradle.daemon=true
|
||||
org.gradle.caching=true
|
||||
android.nonTransitiveRClass=false
|
||||
android.nonFinalResIds=false
|
||||
|
9
android/gradle/libs.versions.toml
Normal file
@ -0,0 +1,9 @@
|
||||
[versions]
|
||||
revanced-patcher = "21.0.0"
|
||||
revanced-library = "3.0.2"
|
||||
desugar_jdk_libs = "2.1.3"
|
||||
|
||||
[libraries]
|
||||
revanced-patcher = { module = "app.revanced:revanced-patcher", version.ref = "revanced-patcher" }
|
||||
revanced-library = { module = "app.revanced:revanced-library", version.ref = "revanced-library" }
|
||||
desugar_jdk_libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar_jdk_libs" }
|
@ -1,6 +1,8 @@
|
||||
#Mon May 09 12:07:41 MSK 2022
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-rc-1-bin.zip
|
||||
distributionPath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
distributionSha256Sum=5b9c5eb3f9fc2c94abaea57d90bd78747ca117ddbbf96c859d3741181a12bf2a
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
@ -1,11 +0,0 @@
|
||||
include ':app'
|
||||
|
||||
def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
|
||||
def properties = new Properties()
|
||||
|
||||
assert localPropertiesFile.exists()
|
||||
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
|
||||
|
||||
def flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
|
||||
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"
|
24
android/settings.gradle.kts
Normal file
@ -0,0 +1,24 @@
|
||||
pluginManagement {
|
||||
val properties = java.util.Properties().apply {
|
||||
load(file("local.properties").inputStream())
|
||||
}
|
||||
|
||||
val flutterSdkPath = properties.getProperty("flutter.sdk")
|
||||
assert(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
|
||||
|
||||
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
|
||||
|
||||
repositories {
|
||||
google()
|
||||
mavenCentral()
|
||||
gradlePluginPortal()
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
|
||||
id("com.android.application") version "8.7.2" apply false
|
||||
id("org.jetbrains.kotlin.android") version "2.0.20" apply false
|
||||
}
|
||||
|
||||
include(":app")
|
14
assets/i18n/README.md
Normal file
@ -0,0 +1,14 @@
|
||||
# Nuke:tm:
|
||||
|
||||
> ![CAUTION]
|
||||
> Some of the code are licensed under BSD 3-Clause License, please check inside the code file for more information.
|
||||
|
||||
## Usage
|
||||
|
||||
Move to your desire directory and run
|
||||
|
||||
```bash
|
||||
dart nuke.dart
|
||||
```
|
||||
|
||||
and it will remove all the empty keys from the JSON files in the current folder.
|
@ -1,196 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Cancel",
|
||||
"enabledLabel": "Enabled",
|
||||
"disabledLabel": "Disabled",
|
||||
"yesButton": "Yes",
|
||||
"noButton": "No",
|
||||
"warning": "Warning",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Dashboard",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Settings"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Dashboard",
|
||||
"updatesSubtitle": "Updates",
|
||||
"patchedSubtitle": "Patched applications",
|
||||
"updatesAvailable": "Updates available",
|
||||
"noUpdates": "No updates available",
|
||||
"WIP": "Work in progress...",
|
||||
"noInstallations": "No patched applications installed",
|
||||
"installed": "Installed",
|
||||
"updateDialogTitle": "Update Manager",
|
||||
"updateDialogText": "Are you sure you want to download and update ReVanced Manager?",
|
||||
"notificationTitle": "Update downloaded",
|
||||
"notificationText": "Tap to install the update",
|
||||
"downloadingMessage": "Downloading update...",
|
||||
"installingMessage": "Installing update...",
|
||||
"errorDownloadMessage": "Unable to download update",
|
||||
"errorInstallMessage": "Unable to install update",
|
||||
"noConnection": "No internet connection",
|
||||
"updatesDisabled": "Updating a patched app is currently disabled. Repatch the app again."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Patch",
|
||||
"infoButton": "Info",
|
||||
"changelogLabel": "Changelog"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Loading...",
|
||||
"timeagoLabel": "{time} ago",
|
||||
"patcherLabel": "Patcher: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Update Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Patch",
|
||||
"patchDialogText": "You have selected a resource patch and a split APK installation has been detected, so patching errors may occur.\nAre you sure you want to proceed?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Select an application",
|
||||
"widgetTitleSelected": "Selected application",
|
||||
"widgetSubtitle": "No application selected",
|
||||
"noAppsLabel": "No applications found",
|
||||
"currentVersion": "Current",
|
||||
"recommendedVersion": "Recommended",
|
||||
"anyVersion": "any"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Select patches",
|
||||
"widgetTitleSelected": "Selected patches",
|
||||
"widgetSubtitle": "Select an application first",
|
||||
"widgetEmptySubtitle": "No patches selected"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Socials",
|
||||
"widgetSubtitle": "We are online!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Select an application",
|
||||
"searchBarHint": "Search applications",
|
||||
"storageButton": "Storage",
|
||||
"errorMessage": "Unable to use selected application"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Select patches",
|
||||
"searchBarHint": "Search patches",
|
||||
"doneButton": "Done",
|
||||
"recommended": "Recommended",
|
||||
"all" : "All",
|
||||
"none" : "None",
|
||||
"loadPatchesSelection": "Load patches selection",
|
||||
"noSavedPatches": "No saved patches for the selected app\nPress Done to save current selection",
|
||||
"noPatchesFound": "No patches found for the selected app",
|
||||
"selectAllPatchesWarningContent": "You are about to select all patches, that includes unrecommended patches and can cause unwanted behavior."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Selecting this patch may result in patching errors.\n\nApp version: {packageVersion}\nSupported versions:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "Patch is not supported for this app version. Enable experimental toggle in settings to proceed."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Installer",
|
||||
"installButton": "Install",
|
||||
"installRootButton": "Install as Root",
|
||||
"openButton": "Open",
|
||||
"shareButton": "Share file",
|
||||
"notificationTitle": "ReVanced Manager is patching",
|
||||
"notificationText": "Tap to return to the installer",
|
||||
"shareApkMenuOption": "Share APK",
|
||||
"exportApkMenuOption": "Export APK",
|
||||
"shareLogMenuOption": "Share log",
|
||||
"installErrorDialogTitle": "Error",
|
||||
"installErrorDialogText1": "Root install is not possible with the current patches selection.\nRepatch your app or choose non-root install.",
|
||||
"installErrorDialogText2": "Non-root install is not possible with the current patches selection.\nRepatch your app or choose root install if you have your device rooted.",
|
||||
"installErrorDialogText3": "Root install is not possible as the original APK was selected from storage.\nSelect an installed app or choose non-root install.",
|
||||
"noExit": "Installer is still running, cannot exit..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Settings",
|
||||
"appearanceSectionTitle": "Appearance",
|
||||
"teamSectionTitle": "Team",
|
||||
"infoSectionTitle": "Info",
|
||||
"advancedSectionTitle": "Advanced",
|
||||
"logsSectionTitle": "Logs",
|
||||
"darkThemeLabel": "Dark mode",
|
||||
"darkThemeHint": "Welcome to the dark side",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Enjoy an experience closer to your device",
|
||||
"languageLabel": "Language",
|
||||
"englishOption": "English",
|
||||
"sourcesLabel": "Sources",
|
||||
"sourcesLabelHint": "Configure your custom sources",
|
||||
"orgPatchesLabel": "Patches organization",
|
||||
"sourcesPatchesLabel": "Patches source",
|
||||
"orgIntegrationsLabel": "Integrations organization",
|
||||
"sourcesIntegrationsLabel": "Integrations source",
|
||||
"sourcesResetDialogTitle": "Reset",
|
||||
"sourcesResetDialogText": "Are you sure you want to reset custom sources to their default values?",
|
||||
"apiURLResetDialogText": "Are you sure you want to reset API URL to its default value?",
|
||||
"contributorsLabel": "Contributors",
|
||||
"contributorsHint": "A list of contributors of ReVanced",
|
||||
"logsLabel": "Logs",
|
||||
"logsHint": "Share Manager's logs",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Configure your custom API URL",
|
||||
"selectApiURL": "API URL",
|
||||
"experimentalPatchesLabel": "Experimental patches support",
|
||||
"experimentalPatchesHint": "Enable usage of unsupported patches in any app version",
|
||||
"enabledExperimentalPatches": "Experimental patches support enabled",
|
||||
"exportSectionTitle": "Import & export",
|
||||
"aboutLabel": "About",
|
||||
"snackbarMessage": "Copied to clipboard",
|
||||
"sentryLabel": "Sentry logging",
|
||||
"sentryHint": "Send anonymous logs to help us improve ReVanced Manager",
|
||||
"restartAppForChanges": "Restart the app to apply changes",
|
||||
"deleteKeystoreLabel": "Delete keystore",
|
||||
"deleteKeystoreHint": "Delete the keystore used to sign the app",
|
||||
"deletedKeystore": "Keystore deleted",
|
||||
"deleteTempDirLabel": "Delete temporary files",
|
||||
"deleteTempDirHint": "Delete the unused temporary files",
|
||||
"deletedTempDir": "Temporary files deleted",
|
||||
"exportPatchesLabel": "Export patches selection",
|
||||
"exportPatchesHint": "Export patches selection to a JSON file",
|
||||
"exportedPatches": "Patches selection exported",
|
||||
"noExportFileFound": "No patches selection to export",
|
||||
"importPatchesLabel": "Import patches selection",
|
||||
"importPatchesHint": "Import patches selection from a JSON file",
|
||||
"importedPatches": "Patches selection imported",
|
||||
"resetStoredPatchesLabel": "Reset patches",
|
||||
"resetStoredPatchesHint": "Reset the stored patches selection",
|
||||
"resetStoredPatches": "Patches selection has been reset",
|
||||
"jsonSelectorErrorMessage": "Unable to use selected JSON file",
|
||||
"deleteLogsLabel": "Delete logs",
|
||||
"deleteLogsHint": "Delete collected manager logs",
|
||||
"deletedLogs": "Logs deleted"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "App info",
|
||||
"openButton": "Open",
|
||||
"uninstallButton": "Uninstall",
|
||||
"patchButton": "Patch",
|
||||
"unpatchButton": "Unpatch",
|
||||
"unpatchDialogText": "Are you sure you want to unpatch this app?",
|
||||
"rootDialogTitle": "Error",
|
||||
"rootDialogText": "App was installed with superuser permissions, but currently ReVanced Manager has no permissions.\nPlease grant superuser permissions first.",
|
||||
"packageNameLabel": "Package name",
|
||||
"originalPackageNameLabel": "Original package name",
|
||||
"installTypeLabel": "Installation type",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Non-root",
|
||||
"patchedDateLabel": "Patched date",
|
||||
"patchedDateHint": "{date} at {time}",
|
||||
"appliedPatchesLabel": "Applied patches",
|
||||
"appliedPatchesHint": "{quantity} applied patches",
|
||||
"updateNotImplemented": "This feature has not been implemented yet"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contributors",
|
||||
"patcherContributors": "Patcher contributors",
|
||||
"patchesContributors": "Patches contributors",
|
||||
"integrationsContributors": "Integrations contributors",
|
||||
"cliContributors": "CLI contributors",
|
||||
"managerContributors": "Manager contributors"
|
||||
}
|
||||
}
|
@ -1,197 +0,0 @@
|
||||
{
|
||||
"okButton": "ठीक है",
|
||||
"cancelButton": "रद्द करें",
|
||||
"enabledLabel": "सक्रिय",
|
||||
"disabledLabel": "निष्क्रिय",
|
||||
"yesButton": "हाँ",
|
||||
"noButton": "नहीं",
|
||||
"navigationView": {
|
||||
"dashboardTab": "नियंत्रण-पट्ट",
|
||||
"patcherTab": "पैचर",
|
||||
"settingsTab": "सेटिंग्स"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "नियंत्रण पट्ट",
|
||||
"updatesSubtitle": "अपडेट",
|
||||
"patchedSubtitle": "Patched applications",
|
||||
"updatesAvailable": "अपडेट उपलब्ध है",
|
||||
"noUpdates": "कोई अपडेट उपलब्ध नहीं",
|
||||
"WIP": "Work in progress...",
|
||||
"noInstallations": "कोई पैबंद किये हुआ अनुप्रयोग नहीं है।",
|
||||
"installed": "इंस्टॉल किया हुआ",
|
||||
"updateDialogTitle": "अपडेट Manager",
|
||||
"updateDialogText": "क्या आप ReVanced Manager को डाउनलोड और अपडेट करना चाहते है?",
|
||||
"notificationTitle": "Update downloaded",
|
||||
"notificationText": "Tap to install the update",
|
||||
"downloadingMessage": "अपडेट डाउनलोड हो रहा है",
|
||||
"installingMessage": "अपडेट इंस्टॉल हो रहा है",
|
||||
"errorDownloadMessage": "अपडेट डाउनलोड करने मे असफल",
|
||||
"errorInstallMessage": "अपडेट इंस्टॉल करने में असफल",
|
||||
"noConnection": "कोई इंटरनेट कनेक्शन नहीं",
|
||||
"updatesDisabled": "पैच किए गए ऐप को अपडेट करना वर्तमान में अक्षम है। ऐप को फिर से रीपैच करें।"
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "पैबंद",
|
||||
"infoButton": "जानकारी",
|
||||
"changelogLabel": "परिवर्तन पत्र"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "लोड हो रहा है...",
|
||||
"timeagoLabel": "{time} पहले",
|
||||
"patcherLabel": "पैबंद: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Manager अपडेट करे"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "पैचर",
|
||||
"patchButton": "पैबंद",
|
||||
"patchDialogTitle": "चेतावनी",
|
||||
"patchDialogText": "You have selected a resource patch and a split APK installation has been detected, so patching errors may occur.\nAre you sure you want to proceed?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Select an application",
|
||||
"widgetTitleSelected": "चुना हुआ ऐप्लकैशन",
|
||||
"widgetSubtitle": "कोई ऐप्लकैशन चुना हुआ नहीं",
|
||||
"noAppsLabel": "No applications found",
|
||||
"currentVersion": "वर्तमान",
|
||||
"recommendedVersion": "अनुशंसित",
|
||||
"anyVersion": "कोई"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "पैच चुने",
|
||||
"widgetTitleSelected": "चुने हुए पैच",
|
||||
"widgetSubtitle": "पहले किसी एप्लिकेशन को चुने",
|
||||
"widgetEmptySubtitle": "कोई पैच चुना हुआ नहीं"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "सामाजिक",
|
||||
"widgetSubtitle": "हम ऑनलाइन है"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Select an application",
|
||||
"searchBarHint": "ऐप्लकैशन खोजे",
|
||||
"storageButton": "स्टोरेज",
|
||||
"errorMessage": "Unable to use selected application"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "पैच चुने",
|
||||
"searchBarHint": "पैच खोजे",
|
||||
"doneButton": "पूर्ण",
|
||||
"loadPatchesSelection": "Load patches selection",
|
||||
"noSavedPatches": "No saved patches for the selected app\nPress Done to save current selection",
|
||||
"noPatchesFound": "चुने हुए ऐप्लकैशन के लिए कोई पैच नहीं मिले",
|
||||
"selectAllPatchesWarningTitle": "चेतावनी",
|
||||
"selectAllPatchesWarningContent": "आप सभी पैच का चयन करने वाले हैं, जिसमें अनुशंसित पैच शामिल हैं और अवांछित व्यवहार का कारण बन सकते हैं।"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedWarningButton": "चेतावनी",
|
||||
"unsupportedDialogTitle": "चेतावनी",
|
||||
"unsupportedDialogText": "Selecting this patch may result in patching errors.\n\nApp version: {packageVersion}\nSupported versions:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "इस ऐप संस्करण के लिए पैच समर्थित नहीं है। आगे बढ़ने के लिए सेटिंग में प्रयोगात्मक टॉगल सक्षम करें."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "इंस्टॉल कर्ता",
|
||||
"installButton": "इंस्टॉल करे",
|
||||
"installRootButton": "रूट के रूप मे इंस्टॉल करे",
|
||||
"openButton": "खोलें",
|
||||
"shareButton": "फाइल शेयर करे",
|
||||
"notificationTitle": "ReVanced Manager पैच कर रहा है",
|
||||
"notificationText": "इंस्टॉल कर्ता पर जाने के लिए टैप करे",
|
||||
"shareApkMenuOption": "APK शेयर करे",
|
||||
"exportApkMenuOption": "निर्यात APK",
|
||||
"shareLogMenuOption": "लॉग शेयर करें",
|
||||
"installErrorDialogTitle": "त्रुटि",
|
||||
"installErrorDialogText1": "वर्तमान पैच चयन के साथ रूट इंस्टॉल संभव नहीं है।\nअपने ऐप को रीपैच करें या नॉन-रूट इंस्टॉल चुनें।",
|
||||
"installErrorDialogText2": "वर्तमान पैच चयन के साथ नॉन-रूट इंस्टॉल संभव नहीं है।\nयदि आपने अपना डिवाइस रूट किया है तो अपने ऐप को रीपैच करें या रूट इंस्टॉल चुनें।",
|
||||
"installErrorDialogText3": "रूट इंस्टॉल संभव नहीं है क्योंकि मूल APK को स्टोरेज से चुना गया था।\nएक इंस्टॉल किया गया ऐप चुनें या नॉन-रूट इंस्टॉल चुनें।",
|
||||
"noExit": "Installer is still running, cannot exit..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "सेटिंग्स",
|
||||
"appearanceSectionTitle": "स्वरूप",
|
||||
"teamSectionTitle": "टीम",
|
||||
"infoSectionTitle": "जानकारी",
|
||||
"advancedSectionTitle": "एडवांसड",
|
||||
"logsSectionTitle": "लॉग्स",
|
||||
"darkThemeLabel": "Dark mode",
|
||||
"darkThemeHint": "Welcome to the dark side",
|
||||
"dynamicThemeLabel": "मेटीरियल यू",
|
||||
"dynamicThemeHint": "अपने डिवाइस के करीब एक अनुभव का आनंद लें",
|
||||
"languageLabel": "भाषा",
|
||||
"englishOption": "अंग्रेज़ी",
|
||||
"frenchOption": "फ्रेंच",
|
||||
"sourcesLabel": "स्रोत",
|
||||
"sourcesLabelHint": "अपने कस्टम साधन कॉन्फ़िगर करे",
|
||||
"orgPatchesLabel": "Patches organization",
|
||||
"sourcesPatchesLabel": "Patches source",
|
||||
"orgIntegrationsLabel": "Integrations organization",
|
||||
"sourcesIntegrationsLabel": "Integrations source",
|
||||
"sourcesResetDialogTitle": "रीसेट करें",
|
||||
"sourcesResetDialogText": "क्या आप वाकई कस्टम साधन को डिफ़ॉल्ट वैल्यू पर रीसेट करना चाहते हैं?",
|
||||
"apiURLResetDialogText": "क्या आप वाकई कस्टम API URL को डिफ़ॉल्ट वैल्यू पर रीसेट करना चाहते हैं?",
|
||||
"contributorsLabel": "योगदानकर्ता",
|
||||
"contributorsHint": "ReVanced के योगदानकर्ताओ की सूची",
|
||||
"logsLabel": "लॉग्स",
|
||||
"logsHint": "Share Manager's logs",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "अपनी कस्टम API URL कॉन्फ़िगर करे",
|
||||
"selectApiURL": "API URL",
|
||||
"experimentalPatchesLabel": "Experimental patches support",
|
||||
"experimentalPatchesHint": "Enable usage of unsupported patches in any app version",
|
||||
"enabledExperimentalPatches": "Experimental patches support enabled",
|
||||
"exportSectionTitle": "Import & export",
|
||||
"aboutLabel": "विवरण",
|
||||
"snackbarMessage": "क्लिपबोर्ड में कॉपी हो गया है",
|
||||
"sentryLabel": "Sentry logging",
|
||||
"sentryHint": "उन्नत प्रबंधक को बेहतर बनाने में हमारी सहायता करने के लिए अनाम लॉग भेजें",
|
||||
"restartAppForChanges": "Restart the app to apply changes",
|
||||
"deleteKeystoreLabel": "कीस्टोर मिटाएं",
|
||||
"deleteKeystoreHint": "ऐप पर हस्ताक्षर करने के लिए उपयोग की जाने वाली कीस्टोर हटाएं",
|
||||
"deletedKeystore": "कीस्टोर हटा दिया गया",
|
||||
"deleteTempDirLabel": "Delete temporary files",
|
||||
"deleteTempDirHint": "Delete the unused temporary files",
|
||||
"deletedTempDir": "Temporary files deleted",
|
||||
"exportPatchesLabel": "Export patches selection",
|
||||
"exportPatchesHint": "Export patches selection to a JSON file",
|
||||
"exportedPatches": "Patches selection exported",
|
||||
"noExportFileFound": "No patches selection to export",
|
||||
"importPatchesLabel": "Import patches selection",
|
||||
"importPatchesHint": "Import patches selection from a JSON file",
|
||||
"importedPatches": "Patches selection imported",
|
||||
"resetStoredPatchesLabel": "Reset patches",
|
||||
"resetStoredPatchesHint": "Reset the stored patches selection",
|
||||
"resetStoredPatches": "Patches selection has been reset",
|
||||
"jsonSelectorErrorMessage": "Unable to use selected JSON file",
|
||||
"deleteLogsLabel": "लॉग हटाएं",
|
||||
"deleteLogsHint": "एकत्रित प्रबंधक लॉग हटाएं",
|
||||
"deletedLogs": "लॉग हटा दिए गए"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "App info",
|
||||
"openButton": "खोलें",
|
||||
"uninstallButton": "अनइंस्टॉल करें",
|
||||
"patchButton": "पैच",
|
||||
"unpatchButton": "अनपैच करे",
|
||||
"unpatchDialogText": "क्या वाकई आप इस एप को अनपैच करना चाहते हैं?",
|
||||
"rootDialogTitle": "त्रुटि",
|
||||
"rootDialogText": "App was installed with superuser permissions, but currently ReVanced Manager has no permissions.\nPlease grant superuser permissions first.",
|
||||
"packageNameLabel": "Package name",
|
||||
"originalPackageNameLabel": "Original package name",
|
||||
"installTypeLabel": "Installation type",
|
||||
"rootTypeLabel": "रूट",
|
||||
"nonRootTypeLabel": "नॉन-रूट",
|
||||
"patchedDateLabel": "Patched date",
|
||||
"patchedDateHint": "{date} {time} पर",
|
||||
"appliedPatchesLabel": "Applied patches",
|
||||
"appliedPatchesHint": "{quantity} लागू किए हुआ पैच",
|
||||
"updateNotImplemented": "This feature has not been implemented yet"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "योगदानकर्ता",
|
||||
"patcherContributors": "Patcher contributors",
|
||||
"patchesContributors": "Patches contributors",
|
||||
"integrationsContributors": "Integrations contributors",
|
||||
"cliContributors": "CLI contributors",
|
||||
"managerContributors": "Manager contributors"
|
||||
}
|
||||
}
|
79
assets/i18n/nuke.dart
Normal file
@ -0,0 +1,79 @@
|
||||
// ignore_for_file: avoid_print
|
||||
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
T? removeBlankEntries<T>(T? json) {
|
||||
// This function is protected by BSD 3-Clause License
|
||||
// Changes made to this section are allow removing of '' values from JSON
|
||||
|
||||
/*
|
||||
https://pub.dev/documentation/swiss_knife/latest/swiss_knife/removeEmptyEntries.html
|
||||
|
||||
Copyright 2014, the Dart project authors. All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
if (json == null) {
|
||||
return null;
|
||||
}
|
||||
if (json is List) {
|
||||
json.removeWhere((e) => e == null);
|
||||
json.forEach(removeBlankEntries);
|
||||
} else if (json is Map) {
|
||||
json.removeWhere(
|
||||
(key, value) => key == null || value == null || value == '',
|
||||
);
|
||||
json.values.forEach(removeBlankEntries);
|
||||
}
|
||||
return json;
|
||||
}
|
||||
|
||||
Future<void> processJsonFiles() async {
|
||||
final Directory directory = Directory.current;
|
||||
final List<FileSystemEntity> files = directory.listSync();
|
||||
|
||||
for (final file in files) {
|
||||
try {
|
||||
if (file is File && file.path.endsWith('.json')) {
|
||||
final String contents = await file.readAsString();
|
||||
final dynamic json = jsonDecode(contents);
|
||||
final dynamic processedJson = removeBlankEntries(json);
|
||||
|
||||
file.writeAsString(
|
||||
const JsonEncoder.withIndent(' ').convert(processedJson),
|
||||
);
|
||||
print('🥞 Task successful on: ${file.path}');
|
||||
}
|
||||
} catch (e) {
|
||||
print('💥 Task failed on: ${file.path}: $e');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void main() async {
|
||||
processJsonFiles();
|
||||
}
|
298
assets/i18n/strings.i18n.json
Executable file
@ -0,0 +1,298 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Cancel",
|
||||
"dismissButton": "Dismiss",
|
||||
"quitButton": "Quit",
|
||||
"updateButton": "Update",
|
||||
"suggested": "Suggested: ${version}",
|
||||
"yesButton": "Yes",
|
||||
"noButton": "No",
|
||||
"warning": "Warning",
|
||||
"notice": "Notice",
|
||||
"noShowAgain": "Don't show this again",
|
||||
"add": "Add",
|
||||
"remove": "Remove",
|
||||
"showChangelogButton": "Show changelog",
|
||||
"showUpdateButton": "Show update",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Dashboard",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Settings"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Refreshed successfully",
|
||||
"widgetTitle": "Dashboard",
|
||||
"updatesSubtitle": "Updates",
|
||||
"lastPatchedAppSubtitle": "Last patched app",
|
||||
"patchedSubtitle": "Installed apps",
|
||||
"changeLaterSubtitle": "You can change this in the settings at a later time.",
|
||||
"noSavedAppFound": "No app found",
|
||||
"noInstallations": "No patched apps installed",
|
||||
"installUpdate": "Continue to install the update?",
|
||||
"updateSheetTitle": "Update ReVanced Manager",
|
||||
"updateDialogTitle": "New update available",
|
||||
"updatePatchesSheetTitle": "Update ReVanced Patches",
|
||||
"updateChangelogTitle": "Changelog",
|
||||
"updateDialogText": "A new update is available for ${file}.\n\nThe currently installed version is ${version}.",
|
||||
"downloadConsentDialogTitle": "Download necessary files?",
|
||||
"downloadConsentDialogText": "ReVanced Manager needs to download necessary files to work properly.",
|
||||
"downloadConsentDialogText2": "This will connect you to ${url}.",
|
||||
"downloadingMessage": "Downloading update...",
|
||||
"downloadedMessage": "Update downloaded",
|
||||
"installingMessage": "Installing update...",
|
||||
"errorDownloadMessage": "Unable to download update",
|
||||
"errorInstallMessage": "Unable to install update",
|
||||
"noConnection": "No internet connection"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Info"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Loading...",
|
||||
"timeagoLabel": "${time} ago"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Patch",
|
||||
"incompatibleArchWarningDialogText": "Patching on this architecture is not yet supported and might fail. Continue anyways?",
|
||||
"removedPatchesWarningDialogText": "Removed patches since the last time you patched this app:\n\n${patches}\n\n${newPatches}Continue anyways?",
|
||||
"addedPatchesDialogText": "Added patches since the last time you patched this app:\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "Some patch options have to be set."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Select an app",
|
||||
"widgetTitleSelected": "Selected app",
|
||||
"widgetSubtitle": "No app selected",
|
||||
"noAppsLabel": "No applications found",
|
||||
"anyVersion": "Any version"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Select patches",
|
||||
"widgetTitleSelected": "Selected patches",
|
||||
"widgetSubtitle": "Select an application first",
|
||||
"widgetEmptySubtitle": "No patches selected"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Socials",
|
||||
"widgetSubtitle": "We are online!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Select an app",
|
||||
"searchBarHint": "Search app",
|
||||
"storageButton": "Storage",
|
||||
"selectFromStorageButton": "Select from storage",
|
||||
"errorMessage": "Unable to use selected application",
|
||||
"downloadToast": "Download function is not available yet",
|
||||
"requireSuggestedAppVersionDialogText": "The version of the app you have selected does not match the suggested version which can lead to unexpected issues. Please use the suggested version.\n\nSelected version: ${selected}\nSuggested version: ${suggested}\n\nTo continue anyway, disable \"Require suggested app version\" in the settings.",
|
||||
"featureNotAvailable": "Feature not implemented",
|
||||
"featureNotAvailableText": "This app is a split APK and can only be patched and installed reliably by mounting with root permissions. However, you can patch and install a full APK by selecting it from storage."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Select patches",
|
||||
"searchBarHint": "Search patches",
|
||||
"universalPatches": "Universal patches",
|
||||
"newPatches": "New patches",
|
||||
"patches": "Patches",
|
||||
"doneButton": "Done",
|
||||
"defaultChip": "Default",
|
||||
"defaultTooltip": "Select all default patches",
|
||||
"noneChip": "None",
|
||||
"noneTooltip": "Deselect all patches",
|
||||
"loadPatchesSelection": "Load patch selection",
|
||||
"noSavedPatches": "No saved patch selection for the selected app.\nPress Done to save the current selection.",
|
||||
"noPatchesFound": "No patches found for the selected app",
|
||||
"setRequiredOption": "Some patches require options to be set:\n\n${patches}\n\nPlease set them before continuing."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Custom value",
|
||||
"setToNull": "Set to null",
|
||||
"nullValue": "This option value is currently null",
|
||||
"viewTitle": "Patch options",
|
||||
"saveOptions": "Save",
|
||||
"unselectPatch": "Unselect patch",
|
||||
"tooltip": "More input options",
|
||||
"selectFilePath": "Select file path",
|
||||
"selectFolder": "Select folder",
|
||||
"requiredOption": "Setting this option is required",
|
||||
"unsupportedOption": "This option is not supported",
|
||||
"requiredOptionNull": "The following options have to be set:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Selecting this patch may result in patching errors.\n\nApp version: ${packageVersion}\nSupported versions:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Patch is not supported for this app version.",
|
||||
"unsupportedRequiredOption": "This patch contains a required option that is not supported by this app",
|
||||
"patchesChangeWarningDialogText": "It is recommended to use the default patch selection and options. Changing them may result in unexpected issues.\n\nYou'll need to turn on \"Allow changing patch selection\" in the settings before changing any patch selection.",
|
||||
"patchesChangeWarningDialogButton": "Use default selection"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Select install type",
|
||||
"installTypeDescription": "Select the installation type to continue with.",
|
||||
"installButton": "Install",
|
||||
"installRootType": "Mount",
|
||||
"installNonRootType": "Regular",
|
||||
"warning": "Disable auto updates for the patched app to avoid unexpected issues.",
|
||||
"pressBackAgain": "Press back again to cancel",
|
||||
"openButton": "Open",
|
||||
"notificationTitle": "ReVanced Manager is patching",
|
||||
"notificationText": "Tap to return to the installer",
|
||||
"exportApkButtonTooltip": "Export patched APK",
|
||||
"exportLogButtonTooltip": "Export log",
|
||||
"screenshotDetected": "A screenshot has been detected. If you are trying to share the log, please share a text copy instead.\n\nCopy log to clipboard?",
|
||||
"copiedToClipboard": "Copied log to clipboard",
|
||||
"noExit": "Installer is still running, cannot exit..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Settings",
|
||||
"appearanceSectionTitle": "Appearance",
|
||||
"teamSectionTitle": "Team",
|
||||
"debugSectionTitle": "Debugging",
|
||||
"advancedSectionTitle": "Advanced",
|
||||
"exportSectionTitle": "Import & export",
|
||||
"dataSectionTitle": "Data sources",
|
||||
"themeModeLabel": "App theme",
|
||||
"systemThemeLabel": "System",
|
||||
"lightThemeLabel": "Light",
|
||||
"darkThemeLabel": "Dark",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Enjoy an experience closer to your device",
|
||||
"languageLabel": "Language",
|
||||
"languageUpdated": "Language updated",
|
||||
"sourcesLabel": "Alternative sources",
|
||||
"sourcesLabelHint": "Configure the alternative sources for ReVanced Patches",
|
||||
"useAlternativeSources": "Use alternative sources",
|
||||
"useAlternativeSourcesHint": "Use alternative sources for ReVanced Patches instead of the API",
|
||||
"sourcesResetDialogTitle": "Reset",
|
||||
"sourcesResetDialogText": "Are you sure you want to reset your sources to their default values?",
|
||||
"apiURLResetDialogText": "Are you sure you want to reset your API URL to its default value?",
|
||||
"sourcesUpdateNote": "Note: This will automatically download ReVanced Patches from the alternative sources.\n\nThis will connect you to the alternative source.",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Configure the API URL of ReVanced Manager",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "Patches organization",
|
||||
"sourcesPatchesLabel": "Patches source",
|
||||
"contributorsLabel": "Contributors",
|
||||
"contributorsHint": "A list of contributors of ReVanced",
|
||||
"logsLabel": "Share logs",
|
||||
"logsHint": "Share ReVanced Manager logs",
|
||||
"enablePatchesSelectionLabel": "Allow changing patch selection",
|
||||
"enablePatchesSelectionHint": "Do not prevent selecting or deselecting patches",
|
||||
"enablePatchesSelectionWarningText": "Changing the selection of patches may cause unexpected issues.\n\nEnable anyways?",
|
||||
"disablePatchesSelectionWarningText": "You are about to disable changing the selection of patches.\nThe default selection of patches will be restored.\n\nDisable anyways?",
|
||||
"autoUpdatePatchesLabel": "Auto update patches",
|
||||
"autoUpdatePatchesHint": "Automatically update patches to the latest version",
|
||||
"showUpdateDialogLabel": "Show update dialog",
|
||||
"showUpdateDialogHint": "Show a dialog when a new update is available",
|
||||
"universalPatchesLabel": "Show universal patches",
|
||||
"universalPatchesHint": "Display all apps and universal patches (may slow down the app list)",
|
||||
"lastPatchedAppLabel": "Save patched app",
|
||||
"lastPatchedAppHint": "Save the last patch to install or export later",
|
||||
"versionCompatibilityCheckLabel": "Version compatibility check",
|
||||
"versionCompatibilityCheckHint": "Prevent selecting patches that are not compatible with the selected app version",
|
||||
"requireSuggestedAppVersionLabel": "Require suggested app version",
|
||||
"requireSuggestedAppVersionHint": "Prevent selecting an app with a version that is not the suggested",
|
||||
"requireSuggestedAppVersionDialogText": "Selecting an app that is not the suggested version may cause unexpected issues.\n\nDo you want to proceed anyways?",
|
||||
"aboutLabel": "About",
|
||||
"snackbarMessage": "Copied to clipboard",
|
||||
"restartAppForChanges": "Restart the app to apply changes",
|
||||
"deleteTempDirLabel": "Delete temporary files",
|
||||
"deleteTempDirHint": "Delete unused temporary files",
|
||||
"deletedTempDir": "Temporary files deleted",
|
||||
"exportSettingsLabel": "Export settings",
|
||||
"exportSettingsHint": "Export settings to a JSON file",
|
||||
"exportedSettings": "Settings exported",
|
||||
"importSettingsLabel": "Import settings",
|
||||
"importSettingsHint": "Import settings from a JSON file",
|
||||
"importedSettings": "Settings imported",
|
||||
"exportPatchesLabel": "Export patch selection",
|
||||
"exportPatchesHint": "Export patch selection to a JSON file",
|
||||
"exportedPatches": "Patch selection exported",
|
||||
"noExportFileFound": "No patch selection to export",
|
||||
"importPatchesLabel": "Import patch selection",
|
||||
"importPatchesHint": "Import patch selection from a JSON file",
|
||||
"importedPatches": "Patch selection imported",
|
||||
"resetStoredPatchesLabel": "Reset patch selection",
|
||||
"resetStoredPatchesHint": "Reset the stored patch selection",
|
||||
"resetStoredPatchesDialogTitle": "Reset patch selection?",
|
||||
"resetStoredPatchesDialogText": "The default selection of patches will be restored.",
|
||||
"resetStoredPatches": "Patch selection has been reset",
|
||||
"resetStoredOptionsLabel": "Reset patch options",
|
||||
"resetStoredOptionsHint": "Reset all patch options",
|
||||
"resetStoredOptionsDialogTitle": "Reset patch options?",
|
||||
"resetStoredOptionsDialogText": "Resetting patch options will remove all saved options.",
|
||||
"resetStoredOptions": "Options have been reset",
|
||||
"deleteLogsLabel": "Clear logs",
|
||||
"deleteLogsHint": "Delete collected ReVanced Manager logs",
|
||||
"deletedLogs": "Logs deleted",
|
||||
"regenerateKeystoreLabel": "Regenerate keystore",
|
||||
"regenerateKeystoreHint": "Regenerate the keystore used to sign apps",
|
||||
"regenerateKeystoreDialogTitle": "Regenerate keystore?",
|
||||
"regenerateKeystoreDialogText": "Patched apps signed with the old keystore will no longer be able to be updated.",
|
||||
"regeneratedKeystore": "Keystore regenerated",
|
||||
"exportKeystoreLabel": "Export keystore",
|
||||
"exportKeystoreHint": "Export the keystore used to sign apps",
|
||||
"exportedKeystore": "Keystore exported",
|
||||
"noKeystoreExportFileFound": "No keystore to export",
|
||||
"importKeystoreLabel": "Import keystore",
|
||||
"importKeystoreHint": "Import a keystore used to sign apps",
|
||||
"importedKeystore": "Keystore imported",
|
||||
"selectKeystorePassword": "Keystore password",
|
||||
"selectKeystorePasswordHint": "Select keystore password used to sign apps",
|
||||
"jsonSelectorErrorMessage": "Unable to use selected JSON file",
|
||||
"keystoreSelectorErrorMessage": "Unable to use selected keystore file"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "App info",
|
||||
"openButton": "Open",
|
||||
"installButton": "Install",
|
||||
"uninstallButton": "Uninstall",
|
||||
"unmountButton": "Unmount",
|
||||
"exportButton": "Export",
|
||||
"deleteButton": "Delete",
|
||||
"rootDialogTitle": "Error",
|
||||
"lastPatchedAppDescription": "This is a backup of the app that was last patched.",
|
||||
"unmountDialogText": "Are you sure you want to unmount this app?",
|
||||
"uninstallDialogText": "Are you sure you want to uninstall this app?",
|
||||
"rootDialogText": "App was installed with superuser permissions, but currently ReVanced Manager has no permissions.\nPlease grant superuser permissions first.",
|
||||
"removeAppDialogTitle": "Delete app?",
|
||||
"removeAppDialogText": "Are you sure you want to delete this backup?",
|
||||
"packageNameLabel": "Package name",
|
||||
"installTypeLabel": "Installation type",
|
||||
"mountTypeLabel": "Mount",
|
||||
"regularTypeLabel": "Regular",
|
||||
"patchedDateLabel": "Patched date",
|
||||
"appliedPatchesLabel": "Applied patches",
|
||||
"sizeLabel": "File size",
|
||||
"patchedDateHint": "${date} at ${time}",
|
||||
"appliedPatchesHint": "${quantity} applied patches",
|
||||
"updateNotImplemented": "This feature has not been implemented yet"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contributors"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Version mismatch",
|
||||
"mount_no_root": "No root access",
|
||||
"mount_missing_installation": "Installation not found",
|
||||
"status_failure_blocked": "Installation blocked",
|
||||
"install_failed_verification_failure": "Verification failed",
|
||||
"status_failure_invalid": "Installation invalid",
|
||||
"install_failed_version_downgrade": "Can't downgrade",
|
||||
"status_failure_conflict": "Installation conflict",
|
||||
"status_failure_storage": "Installation storage issue",
|
||||
"status_failure_incompatible": "Installation incompatible",
|
||||
"status_failure_timeout": "Installation timeout",
|
||||
"status_unknown": "Installation failed",
|
||||
"mount_version_mismatch_description": "The installation failed due to the installed app being a different version than the patched app.\n\nInstall the version of the app you are mounting and try again.",
|
||||
"mount_no_root_description": "The installation failed due to root access not being granted.\n\nGrant root access to ReVanced Manager and try again.",
|
||||
"mount_missing_installation_description": "The installation failed due to the unpatched app not being installed on this device in order to mount over it.\n\nInstall the unpatched app before mounting and try again.",
|
||||
"status_failure_timeout_description": "The installation took too long to finish.\n\nWould you like to try again?",
|
||||
"status_failure_storage_description": "The installation failed due to insufficient storage.\n\nFree up some space and try again.",
|
||||
"status_failure_invalid_description": "The installation failed due to the patched app being invalid.\n\nUninstall the app and try again?",
|
||||
"status_failure_incompatible_description": "The app is incompatible with this device.\n\nUse an APK that is supported by this device and try again.",
|
||||
"status_failure_conflict_description": "The installation was prevented by an existing installation of the app.\n\nUninstall the installed app and try again?",
|
||||
"status_failure_blocked_description": "The installation was blocked by ${packageName}.\n\nAdjust your security settings and try again.",
|
||||
"install_failed_verification_failure_description": "The installation failed due to a verification issue.\n\nAdjust your security settings and try again.",
|
||||
"install_failed_version_downgrade_description": "The installation failed due to the patched app being a lower version than the installed app.\n\nUninstall the app and try again?",
|
||||
"status_unknown_description": "The installation failed due to an unknown reason. Please try again."
|
||||
}
|
||||
}
|
19
assets/i18n/strings_af_ZA.i18n.json
Executable file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"navigationView": {},
|
||||
"homeView": {},
|
||||
"applicationItem": {},
|
||||
"latestCommitCard": {},
|
||||
"patcherView": {},
|
||||
"appSelectorCard": {},
|
||||
"patchSelectorCard": {},
|
||||
"socialMediaCard": {},
|
||||
"appSelectorView": {},
|
||||
"patchesSelectorView": {},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {},
|
||||
"installerView": {},
|
||||
"settingsView": {},
|
||||
"appInfoView": {},
|
||||
"contributorsView": {},
|
||||
"installErrorDialog": {}
|
||||
}
|
19
assets/i18n/strings_am_ET.i18n.json
Executable file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"navigationView": {},
|
||||
"homeView": {},
|
||||
"applicationItem": {},
|
||||
"latestCommitCard": {},
|
||||
"patcherView": {},
|
||||
"appSelectorCard": {},
|
||||
"patchSelectorCard": {},
|
||||
"socialMediaCard": {},
|
||||
"appSelectorView": {},
|
||||
"patchesSelectorView": {},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {},
|
||||
"installerView": {},
|
||||
"settingsView": {},
|
||||
"appInfoView": {},
|
||||
"contributorsView": {},
|
||||
"installErrorDialog": {}
|
||||
}
|
298
assets/i18n/strings_ar_SA.i18n.json
Executable file
@ -0,0 +1,298 @@
|
||||
{
|
||||
"okButton": "موافق",
|
||||
"cancelButton": "إلغاء",
|
||||
"dismissButton": "تجاهل",
|
||||
"quitButton": "إنهاء",
|
||||
"updateButton": "تحديث",
|
||||
"suggested": "المقترح: ${version}",
|
||||
"yesButton": "نعم",
|
||||
"noButton": "لا",
|
||||
"warning": "تحذير",
|
||||
"notice": "تنويه",
|
||||
"noShowAgain": "لا تعرض هذا مرة أخرى",
|
||||
"add": "إضافة",
|
||||
"remove": "إزالة",
|
||||
"showChangelogButton": "عرض سجل التغييرات",
|
||||
"showUpdateButton": "عرض التحديث",
|
||||
"navigationView": {
|
||||
"dashboardTab": "لوحة التحكم",
|
||||
"patcherTab": "المعدّل",
|
||||
"settingsTab": "الإعدادات"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "تم التحديث بنجاح",
|
||||
"widgetTitle": "لوحة التحكم",
|
||||
"updatesSubtitle": "تحديثات",
|
||||
"lastPatchedAppSubtitle": "آخر تطبيق تم تعديله",
|
||||
"patchedSubtitle": "التطبيقات المثبتة",
|
||||
"changeLaterSubtitle": "يمكنك تغيير هذا في الإعدادات في وقت لاحق.",
|
||||
"noSavedAppFound": "لم يتم العثور على تطبيق",
|
||||
"noInstallations": "لا توجد تطبيقات معدلة مثبتة",
|
||||
"installUpdate": "هل تريد الاستمرار في تثبيت التحديث؟",
|
||||
"updateSheetTitle": "تحديث ReVanced Manager",
|
||||
"updateDialogTitle": "تحديث جديد متوفر",
|
||||
"updatePatchesSheetTitle": "تحديث تعديلات ReVanced",
|
||||
"updateChangelogTitle": "سجل التغييرات",
|
||||
"updateDialogText": "يتوفر تحديث جديد لـ ${file}.\n\nالإصدار المثبت حاليًا هو ${version}.",
|
||||
"downloadConsentDialogTitle": "تنزيل الملفات اللازمة؟",
|
||||
"downloadConsentDialogText": "يحتاج مدير ReVanced إلى تنزيل الملفات اللازمة ليعمل بشكل صحيح.",
|
||||
"downloadConsentDialogText2": "سيؤدي هذا إلى توصيلك بـ ${url}.",
|
||||
"downloadingMessage": "جارٍ تنزيل التحديث...",
|
||||
"downloadedMessage": "تم تنزيل التحديث",
|
||||
"installingMessage": "جارٍ تثبيت التحديث...",
|
||||
"errorDownloadMessage": "تعذر تنزيل التحديث",
|
||||
"errorInstallMessage": "تعذّر تثبيت التحديث",
|
||||
"noConnection": "لا يوجد اتصال بالإنترنت"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "معلومات"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "جارٍ التحميل...",
|
||||
"timeagoLabel": "منذ ${time}"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "المُعَّدِّل",
|
||||
"patchButton": "تعديل",
|
||||
"incompatibleArchWarningDialogText": "لم يتم دعم التعديلات الخاصة بهذه البنية حتى الآن وقد تفشل. هل تريد المتابعة على أي حال؟",
|
||||
"removedPatchesWarningDialogText": "تمت إزالة التعديلات منذ آخر مرة قمت فيها بتعديل هذا التطبيق:\n\n${patches}\n\n${newPatches}هل تريد المتابعة على أي حال؟",
|
||||
"addedPatchesDialogText": "تمت إضافة التعديلات منذ آخر مرة قمت فيها بتعديل هذا التطبيق:\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "يجب ضبط بعض خيارات التعديل."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "حدد تطبيق",
|
||||
"widgetTitleSelected": "التطبيق المحدد",
|
||||
"widgetSubtitle": "لم يتم تحديد أي تطبيق",
|
||||
"noAppsLabel": "لم يتم العثور على تطبيقات",
|
||||
"anyVersion": "أي إصدار"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "حدد التعديلات",
|
||||
"widgetTitleSelected": "التعديلات التي تم تحديدها",
|
||||
"widgetSubtitle": "حدد تطبيق أولاً",
|
||||
"widgetEmptySubtitle": "لم يتم تحديد أي تعديلات"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "وسائل التواصل",
|
||||
"widgetSubtitle": "تابعونا!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "حدد تطبيق",
|
||||
"searchBarHint": "البحث عن تطبيق",
|
||||
"storageButton": "التخزين",
|
||||
"selectFromStorageButton": "تحديد من التخزين",
|
||||
"errorMessage": "لا يمكن استخدام التطبيق المحدد",
|
||||
"downloadToast": "خاصية التنزيل غير متوفرة بعد",
|
||||
"requireSuggestedAppVersionDialogText": "الإصدار من التطبيق الذي حددته لا يتطابق مع الإصدار المقترح الذي يمكن أن يؤدي إلى مشاكل غير متوقعة. الرجاء استخدام الإصدار المقترح.\n\nالإصدار المحدد: ${selected}\nالإصدار المقترح: ${suggested}\n\nللاستمرار على أي حال، قم بتعطيل \"طلب إصدار التطبيق المقترح\" في الإعدادات.",
|
||||
"featureNotAvailable": "الميزة غير مُدمَجة بعد",
|
||||
"featureNotAvailableText": "هذا التطبيق عبارة عن ملف Spilt APK ولا يمكن تعديله وتثبيته بشكل موثوق إلا عن طريق التثبيت باستخدام أذونات Root. ومع ذلك، يمكنك تعديل وتثبيت ملف APK كاملًا عن طريق تحديده من وحدة التخزين."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "حدد التعديلات",
|
||||
"searchBarHint": "البحث عن التعديلات",
|
||||
"universalPatches": "التعديلات العامة",
|
||||
"newPatches": "تعديلات جديدة",
|
||||
"patches": "تعديلات",
|
||||
"doneButton": "تم",
|
||||
"defaultChip": "إفتراضي",
|
||||
"defaultTooltip": "تحديد كل التعديلات الافتراضية",
|
||||
"noneChip": "لا شيء",
|
||||
"noneTooltip": "إلغاء تحديد كل التعديلات",
|
||||
"loadPatchesSelection": "تحميل التعديل المحدد",
|
||||
"noSavedPatches": "لا يوجد تحديد تعديل محفوظ للتطبيق المحدد.\nاضغط على تم لحفظ التحديد الحالي.",
|
||||
"noPatchesFound": "لم يتم العثور على تعديلات للتطبيق المحدد",
|
||||
"setRequiredOption": "تتطلب بعض التعديلات تعيين خيارات:\n\n${patches}\n\nالرجاء تعيينها قبل المتابعة."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "تخصيص القيمة",
|
||||
"setToNull": "تعيين إلى ملغي",
|
||||
"nullValue": "قيمة هذا الخيار فارغة حاليًا",
|
||||
"viewTitle": "خيارات التعديل",
|
||||
"saveOptions": "حفظ",
|
||||
"unselectPatch": "إلغاء تحديد التعديل",
|
||||
"tooltip": "المزيد من خيارات الإدخال",
|
||||
"selectFilePath": "تحديد مسار الملف",
|
||||
"selectFolder": "تحديد مجلد",
|
||||
"requiredOption": "إعداد هذا الخيار مطلوب",
|
||||
"unsupportedOption": "هذا الخيار غير مدعوم",
|
||||
"requiredOptionNull": "يجب تعيين الخيارات التالية:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "قد يؤدي تحديد هذا التعديل إلى حدوث أخطاء في عملية التعديل.\n\nإصدار التطبيق: ${packageVersion}\nالإصدارات المدعومة حاليًا:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "التعديل غير مدعوم لإصدار التطبيق هذا.",
|
||||
"unsupportedRequiredOption": "يحتوي هذا التعديل على خيار مطلوب لا يدعمه هذا التطبيق",
|
||||
"patchesChangeWarningDialogText": "يوصى باستخدام تحديد التعديل وخياراته الافتراضية. قد يؤدي تغييرها إلى حدوث مشكلات غير متوقعة.\n\nستحتاج إلى تشغيل \"السماح بتغيير تحديد التعديل\" في الإعدادات قبل تغيير أي تحديد تعديل.",
|
||||
"patchesChangeWarningDialogButton": "استخدام التحديد الافتراضي"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "تحديد نوع التثبيت",
|
||||
"installTypeDescription": "تحديد نوع التثبيت للمتابعة.",
|
||||
"installButton": "تثبيت",
|
||||
"installRootType": "Mount",
|
||||
"installNonRootType": "عادي",
|
||||
"warning": "قم بتعطيل التحديثات التلقائية للتطبيق المعدل لتجنب المشكلات غير المتوقعة.",
|
||||
"pressBackAgain": "اضغط رجوع مرة اخرى للإلغاء",
|
||||
"openButton": "فتح",
|
||||
"notificationTitle": "ReVanced Manager يقوم بعملية التعديل",
|
||||
"notificationText": "انقر للعودة إلى المثبت",
|
||||
"exportApkButtonTooltip": "تصدير APK المعدل",
|
||||
"exportLogButtonTooltip": "تصدير السجل",
|
||||
"screenshotDetected": "تم اكتشاف لقطة شاشة. إذا كنت تحاول مشاركة السجل، فيرجى مشاركة نسخة نصية بدلاً من ذلك.\n\nهل تريد نسخ السجل إلى الحافظة؟",
|
||||
"copiedToClipboard": "تم نسخ السجل إلى الحافظة",
|
||||
"noExit": "المثبت لا يزال قيد التشغيل، لا يمكن الخروج..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "الإعدادات",
|
||||
"appearanceSectionTitle": "المظهر",
|
||||
"teamSectionTitle": "الفريق",
|
||||
"debugSectionTitle": "تصحيح الأخطاء",
|
||||
"advancedSectionTitle": "إعدادات متقدمة",
|
||||
"exportSectionTitle": "استيراد و تصدير",
|
||||
"dataSectionTitle": "مصدر البيانات",
|
||||
"themeModeLabel": "مظهر التطبيق",
|
||||
"systemThemeLabel": "النظام",
|
||||
"lightThemeLabel": "فاتح (ابيض)",
|
||||
"darkThemeLabel": "الوضع الداكن",
|
||||
"dynamicThemeLabel": "تصميم Material You",
|
||||
"dynamicThemeHint": "استمتع بتجربة أقرب إلى جهازك",
|
||||
"languageLabel": "اللغة",
|
||||
"languageUpdated": "تم تحديث اللغة",
|
||||
"sourcesLabel": "مصادر بديلة",
|
||||
"sourcesLabelHint": "تكوين المصادر البديلة لتعديلات ReVanced",
|
||||
"useAlternativeSources": "استخدام مصادر بديلة",
|
||||
"useAlternativeSourcesHint": "استخدام مصادر بديلة لتعديلات ReVanced بدلاً من واجهة برمجة التطبيقات",
|
||||
"sourcesResetDialogTitle": "إعادة التعيين",
|
||||
"sourcesResetDialogText": "هل أنت متأكد من أنك تريد إعادة تعيين المصادر الخاصة بك إلى قيمها الافتراضية؟",
|
||||
"apiURLResetDialogText": "هل أنت متأكد من أنك تريد إعادة تعيين رابط API الخاص بك إلى قيمته الافتراضية؟",
|
||||
"sourcesUpdateNote": "ملاحظة: سيؤدي هذا إلى تنزيل تعديلات ReVanced تلقائيًا من المصادر البديلة.\n\nسيؤدي هذا إلى توصيلك بالمصدر البديل.",
|
||||
"apiURLLabel": "رابط API",
|
||||
"apiURLHint": "تكوين عنوان URL لواجهة برمجة التطبيقات الخاصة بـ ReVanced Manager",
|
||||
"selectApiURL": "رابط API",
|
||||
"orgPatchesLabel": "تنظيم التعديلات",
|
||||
"sourcesPatchesLabel": "مصدر التعديلات",
|
||||
"contributorsLabel": "المساهمون",
|
||||
"contributorsHint": "قائمة المساهمين في ReVanced",
|
||||
"logsLabel": "مشاركة السجلات",
|
||||
"logsHint": "مشاركة سجلات ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "السماح بتغيير تحديد التعديل",
|
||||
"enablePatchesSelectionHint": "لا تمنع تحديد أو إلغاء تحديد التعديلات",
|
||||
"enablePatchesSelectionWarningText": "قد يؤدي تغيير تحديد التعديلات إلى حدوث مشكلات غير متوقعة.\n\nهل تريد التمكين على أي حال؟",
|
||||
"disablePatchesSelectionWarningText": "أنت على وشك تعطيل تغيير تحديد التعديلات.\nستتم استعادة التحديد الافتراضي للتعديلات.\n\nهل تريد التعطيل على أي حال؟",
|
||||
"autoUpdatePatchesLabel": "تحديث التعديلات تلقائيًا",
|
||||
"autoUpdatePatchesHint": "تحديث التعديلات تلقائيًا إلى الإصدار الأحدث",
|
||||
"showUpdateDialogLabel": "عرض مربع حوار التحديث",
|
||||
"showUpdateDialogHint": "عرض مربع حوار عندما يتوفر تحديث جديد",
|
||||
"universalPatchesLabel": "عرض التعديلات العامة",
|
||||
"universalPatchesHint": "عرض جميع التطبيقات والتعديلات العامة (قد تؤدي إلى إبطاء قائمة التطبيقات)",
|
||||
"lastPatchedAppLabel": "حفظ التطبيق المعدل",
|
||||
"lastPatchedAppHint": "حفظ آخر تعديل لتثبيته أو تصديره لاحقًا",
|
||||
"versionCompatibilityCheckLabel": "التحقق من توافق الإصدار",
|
||||
"versionCompatibilityCheckHint": "منع تحديد التعديلات غير المتوافقة مع إصدار التطبيق المحدد",
|
||||
"requireSuggestedAppVersionLabel": "يتطلب إصدار التطبيق المقترح",
|
||||
"requireSuggestedAppVersionHint": "منع تحديد تطبيق بإصدار غير المقترح",
|
||||
"requireSuggestedAppVersionDialogText": "قد يؤدي تحديد تطبيق ليس هو الإصدار المقترح إلى حدوث مشكلات غير متوقعة.\n\nهل تريد المتابعة على أية حال؟",
|
||||
"aboutLabel": "لمحة",
|
||||
"snackbarMessage": "نُسِخ إلى الحافظة",
|
||||
"restartAppForChanges": "أعد تشغيل التطبيق لتطبيق التغييرات",
|
||||
"deleteTempDirLabel": "حذف الملفات المؤقتة",
|
||||
"deleteTempDirHint": "حذف الملفات المؤقتة غير المستخدمة",
|
||||
"deletedTempDir": "تم حذف الملفات المؤقتة",
|
||||
"exportSettingsLabel": "تصدير الإعدادات",
|
||||
"exportSettingsHint": "تصدير الإعدادات إلى ملف JSON",
|
||||
"exportedSettings": "تم تصدير الإعدادات",
|
||||
"importSettingsLabel": "استيراد الإعدادات",
|
||||
"importSettingsHint": "استيراد الإعدادات من ملف JSON",
|
||||
"importedSettings": "تم استيراد الإعدادات",
|
||||
"exportPatchesLabel": "تصدير التعديل المحدد",
|
||||
"exportPatchesHint": "تصدير التعديل المحدد إلى مِلَفّ JSON",
|
||||
"exportedPatches": "تم تصدير التعديل المحدد",
|
||||
"noExportFileFound": "لا يوجد تعديل محدد للتصدير",
|
||||
"importPatchesLabel": "استيراد التعديل المحدد",
|
||||
"importPatchesHint": "استيراد التعديل المحدد من مِلَفّ JSON",
|
||||
"importedPatches": "تم استيراد التعديل المحدد",
|
||||
"resetStoredPatchesLabel": "إعادة تعيين التعديل المحدد",
|
||||
"resetStoredPatchesHint": "إعادة تعيين التعديل المحدد المخزن",
|
||||
"resetStoredPatchesDialogTitle": "إعادة تعيين التعديل المحدد؟",
|
||||
"resetStoredPatchesDialogText": "ستتم استعادة التحديد الافتراضي للتعديلات.",
|
||||
"resetStoredPatches": "تم إعادة تعيين التعديل المحدد",
|
||||
"resetStoredOptionsLabel": "إعادة تعيين خيارات التعديل",
|
||||
"resetStoredOptionsHint": "إعادة تعيين جميع خيارات التعديل",
|
||||
"resetStoredOptionsDialogTitle": "إعادة تعيين خيارات التعديل؟",
|
||||
"resetStoredOptionsDialogText": "سيؤدي إعادة تعيين خيارات التعديل إلى إزالة جميع الخيارات المحفوظة.",
|
||||
"resetStoredOptions": "تم إعادة تعيين الخيارات",
|
||||
"deleteLogsLabel": "مسح السجلات",
|
||||
"deleteLogsHint": "حذف سجلات ReVanced Manager التي تم جمعها",
|
||||
"deletedLogs": "تم حذف السجلات",
|
||||
"regenerateKeystoreLabel": "إعادة إنشاء مخزن المفاتيح",
|
||||
"regenerateKeystoreHint": "إعادة إنشاء مخزن المفاتيح المستخدم لتوقيع التطبيقات",
|
||||
"regenerateKeystoreDialogTitle": "إعادة إنشاء مخزن المفاتيح؟",
|
||||
"regenerateKeystoreDialogText": "لن تتمكن التطبيقات المعدلة الموقعة باستخدام مخزن المفاتيح القديم من التحديث بعد الآن.",
|
||||
"regeneratedKeystore": "تم تجديد مخزن المفاتيح",
|
||||
"exportKeystoreLabel": "تصدير مخزن المفاتيح",
|
||||
"exportKeystoreHint": "تصدير مخزن المفاتيح المستخدم لتوقيع التطبيقات",
|
||||
"exportedKeystore": "تم تصدير مخزن المفاتيح",
|
||||
"noKeystoreExportFileFound": "لا يوجد مخزن مفاتيح للتصدير",
|
||||
"importKeystoreLabel": "استيراد مخزن المفاتيح",
|
||||
"importKeystoreHint": "استيراد مخزن المفاتيح المستخدم لتوقيع التطبيقات",
|
||||
"importedKeystore": "تم استيراد مخزن المفاتيح",
|
||||
"selectKeystorePassword": "كلمة مرور مخزن المفاتيح",
|
||||
"selectKeystorePasswordHint": "حدد كلمة مرور تخزين المفاتيح المستخدمة للتوقيع على التطبيقات",
|
||||
"jsonSelectorErrorMessage": "تعذر استخدام مِلَفّ JSON المحدد",
|
||||
"keystoreSelectorErrorMessage": "غير قادر على استخدام ملف تخزين المفاتيح المحدد"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "معلومات التطبيق",
|
||||
"openButton": "فتح",
|
||||
"installButton": "تثبيت",
|
||||
"uninstallButton": "إلغاء التثبيت",
|
||||
"unmountButton": "Unmount",
|
||||
"exportButton": "تصدير",
|
||||
"deleteButton": "حذف",
|
||||
"rootDialogTitle": "خطأ",
|
||||
"lastPatchedAppDescription": "هذه نسخة احتياطية من التطبيق الذي تم تعديله آخر مرة.",
|
||||
"unmountDialogText": "هل أنت متأكد من أنك تريد Unmount لهذا التطبيق؟",
|
||||
"uninstallDialogText": "هل أنت متأكد من أنك تريد إلغاء تثبيت هذا التطبيق؟",
|
||||
"rootDialogText": "تم تثبيت التطبيق بأذونات المستخدم المتميز، لكن ReVanced Manager ليس لديه أذونات حاليًا.\nالرجاء منح أذونات المستخدم المتميز أولاً.",
|
||||
"removeAppDialogTitle": "حذف التطبيق؟",
|
||||
"removeAppDialogText": "هل أنت متأكد من أنك تريد حذف هذه النسخة الاحتياطية؟",
|
||||
"packageNameLabel": "اسم الحُزْمَة",
|
||||
"installTypeLabel": "نوع التثبيت",
|
||||
"mountTypeLabel": "Mount",
|
||||
"regularTypeLabel": "عادي",
|
||||
"patchedDateLabel": "تاريخ التعديل",
|
||||
"appliedPatchesLabel": "التعديلات المطبقة",
|
||||
"sizeLabel": "حجم الملف",
|
||||
"patchedDateHint": "${date} في ${time}",
|
||||
"appliedPatchesHint": "${quantity} تعديلات مطبقة",
|
||||
"updateNotImplemented": "لم يتم تنفيذ هذه الميزة بعد"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "المساهمون"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "الإصدار غير متطابق",
|
||||
"mount_no_root": "لا توجد صلاحيات Root",
|
||||
"mount_missing_installation": "التثبيت غير متوفر",
|
||||
"status_failure_blocked": "التثبيت محظور",
|
||||
"install_failed_verification_failure": "فشل التحقق",
|
||||
"status_failure_invalid": "التثبيت غير صالح",
|
||||
"install_failed_version_downgrade": "لا يمكن الرجوع إلى إصدار سابق",
|
||||
"status_failure_conflict": "تعارض التثبيت",
|
||||
"status_failure_storage": "مشكلة تخزين التثبيت",
|
||||
"status_failure_incompatible": "التثبيت غير متوافق",
|
||||
"status_failure_timeout": "مهلة التثبيت",
|
||||
"status_unknown": "فشل التثبيت",
|
||||
"mount_version_mismatch_description": "فشل التثبيت نظرًا لكون التطبيق المثبت إصدارًا مختلفًا عن التطبيق الذي تم تعديله.\n\nقم بتثبيت إصدار التطبيق الذي تقوم بتثبيته وحاول مرة أخرى.",
|
||||
"mount_no_root_description": "فشل التثبيت بسبب عدم منح الوصول إلى Root.\n\nامنح حق الوصول Root إلى ReVanced Manager وحاول مرة أخرى.",
|
||||
"mount_missing_installation_description": "فشل التثبيت بسبب عدم تثبيت التطبيق غير المعدل على هذا الجهاز من أجل تثبيته عليه.\n\nقم بتثبيت التطبيق غير المعدل قبل التثبيت وحاول مرة أخرى.",
|
||||
"status_failure_timeout_description": "استغرق التثبيت وقتا طويلا للانتهاء.\n\nهل تود أن تجرب مجددا؟",
|
||||
"status_failure_storage_description": "فشل التثبيت بسبب عدم كفاية مساحة التخزين.\n\nقم بتحرير بعض المساحة وحاول مرة أخرى.",
|
||||
"status_failure_invalid_description": "فشل التثبيت نظرًا لأن التطبيق المعدل غير صالح.\n\nهل تريد إلغاء تثبيت التطبيق والمحاولة مرة أخرى؟",
|
||||
"status_failure_incompatible_description": "التطبيق غير متوافق مع هذا الجهاز.\n\nاستخدم ملف APK متوافق مع هذا الجهاز وحاول مجددًا.",
|
||||
"status_failure_conflict_description": "تم منع التثبيت من خلال تثبيت موجود للتطبيق.\n\nهل ترغب في إلغاء تثبيت التطبيق المثبت والمحاولة مرة أخرى؟",
|
||||
"status_failure_blocked_description": "تم حظر التثبيت بواسطة ${packageName}.\n\nاضبط إعدادات الأمان الخاصة بك وحاول مرة أخرى.",
|
||||
"install_failed_verification_failure_description": "فشل التثبيت بسبب مشكلة التحقق.\n\nاضبط إعدادات الأمان وحاول مرة أخرى.",
|
||||
"install_failed_version_downgrade_description": "فشل التثبيت نظرًا لكون التطبيق المعدل إصدارًا أقل من التطبيق المثبت.\n\nهل تريد إلغاء تثبيت التطبيق والمحاولة مرة أخرى؟",
|
||||
"status_unknown_description": "فشل التثبيت لسبب غير معروف. الرجاء المحاولة مرة أخرى."
|
||||
}
|
||||
}
|
19
assets/i18n/strings_as_IN.i18n.json
Executable file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"navigationView": {},
|
||||
"homeView": {},
|
||||
"applicationItem": {},
|
||||
"latestCommitCard": {},
|
||||
"patcherView": {},
|
||||
"appSelectorCard": {},
|
||||
"patchSelectorCard": {},
|
||||
"socialMediaCard": {},
|
||||
"appSelectorView": {},
|
||||
"patchesSelectorView": {},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {},
|
||||
"installerView": {},
|
||||
"settingsView": {},
|
||||
"appInfoView": {},
|
||||
"contributorsView": {},
|
||||
"installErrorDialog": {}
|
||||
}
|
298
assets/i18n/strings_az_AZ.i18n.json
Executable file
@ -0,0 +1,298 @@
|
||||
{
|
||||
"okButton": "Oldu",
|
||||
"cancelButton": "Ləğv et",
|
||||
"dismissButton": "İmtina et",
|
||||
"quitButton": "Çıxış",
|
||||
"updateButton": "Yenilə",
|
||||
"suggested": "Təklif edilən: ${version}",
|
||||
"yesButton": "Bəli",
|
||||
"noButton": "Xeyr",
|
||||
"warning": "Xәbәrdarlıq",
|
||||
"notice": "Bildiriş",
|
||||
"noShowAgain": "Bunu təkrar göstərmə",
|
||||
"add": "Əlavə et",
|
||||
"remove": "Təmizlə",
|
||||
"showChangelogButton": "Dəyişiklik jurnalını göstər",
|
||||
"showUpdateButton": "Yeniləməni göstər",
|
||||
"navigationView": {
|
||||
"dashboardTab": "İdarəetmə lövhəsi",
|
||||
"patcherTab": "Yamaqlayıcı",
|
||||
"settingsTab": "Tənzimləmələr"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Uğurla yeniləndi",
|
||||
"widgetTitle": "İdarəetmə lövhəsi",
|
||||
"updatesSubtitle": "Yeniləmələr",
|
||||
"lastPatchedAppSubtitle": "Son yamaqlanmış tətbiq",
|
||||
"patchedSubtitle": "Quraşdırılmış tətbiqlər",
|
||||
"changeLaterSubtitle": "Bunu sonra tənzimləmələrdə dəyişə bilərsiniz.",
|
||||
"noSavedAppFound": "Heç bir tətbiq tapılmadı",
|
||||
"noInstallations": "Yamaqlanmış tətbiq quraşdırılmayıb",
|
||||
"installUpdate": "Yeniləməni quraşdırmağa davam edilsin?",
|
||||
"updateSheetTitle": "ReVanced Manager-ni Yenilə",
|
||||
"updateDialogTitle": "Yeniləmə mövcuddur",
|
||||
"updatePatchesSheetTitle": "ReVanced Yamaqlarını Yenilə",
|
||||
"updateChangelogTitle": "Dəyişiklik jurnalı",
|
||||
"updateDialogText": "${file} üçün yeni bir yenilənmə var.\n\nCari quraşdırılmış versiya: ${version}.",
|
||||
"downloadConsentDialogTitle": "Zəruri fayllar yüklənilsin?",
|
||||
"downloadConsentDialogText": "\"ReVanced Manager\" düzgün işləməsi üçün zəruri faylları yükləməlidir.",
|
||||
"downloadConsentDialogText2": "Bu, sizi ${url} ünvanına bağlayacaq.",
|
||||
"downloadingMessage": "Yenilənmə yüklənilir...",
|
||||
"downloadedMessage": "Yenilənmə yüklənildi",
|
||||
"installingMessage": "Yenilənmə quraşdırılır...",
|
||||
"errorDownloadMessage": "Yeniləmə yüklənilə bilmir",
|
||||
"errorInstallMessage": "Yeniləmə quraşdırılmır",
|
||||
"noConnection": "İnternet bağlantısı yoxdur"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Məlumat"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Yüklənilir...",
|
||||
"timeagoLabel": "${time} əvvəl"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Yamaqlayıcı",
|
||||
"patchButton": "Yamaqla",
|
||||
"incompatibleArchWarningDialogText": "Bu quruluşda yamaqlama hələ dəstəklənmir və uğursuz ola bilər. Yenə də davam edilsin?",
|
||||
"removedPatchesWarningDialogText": "Bu tətbiqi son yamaqladığınız müddətdən bəri silinmiş yamaqlar:\n\n${patches}\n\n${newPatches}Yenə də davam edilsin?",
|
||||
"addedPatchesDialogText": "Bu tətbiqi son yamaqladığınız müddətdən bəri əlavə edilən yamaqlar:\n\n${addedPatches}",
|
||||
"requiredOptionDialogText": "Bəzi yamaq seçimləri təyin edilməlidir."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Bir tətbiq seçin",
|
||||
"widgetTitleSelected": "Seçilmiş tətbiq",
|
||||
"widgetSubtitle": "Heç bir tətbiq seçilmədi",
|
||||
"noAppsLabel": "Heç bir tətbiq tapılmadı",
|
||||
"anyVersion": "İstənilən versiya"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Yamaqları seçin",
|
||||
"widgetTitleSelected": "Seçilmiş yamaqlar",
|
||||
"widgetSubtitle": "Əvvəlcə bir tətbiq seçin",
|
||||
"widgetEmptySubtitle": "Heç bir yamaq seçilməyib"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Sosial",
|
||||
"widgetSubtitle": "Xətdəyik!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Bir tətbiq seçin",
|
||||
"searchBarHint": "Tətbiq axtar",
|
||||
"storageButton": "Yaddaş",
|
||||
"selectFromStorageButton": "Yaddaşdan seçin",
|
||||
"errorMessage": "Seçilmiş tətbiq istifadəyə yararsızdır",
|
||||
"downloadToast": "Yükləmə funksiyası hələ əlçatan deyil",
|
||||
"requireSuggestedAppVersionDialogText": "Seçdiyiniz tətbiqin versiyası təklif edilən versiyaya uyuşmur və gözlənilməz problemlərə səbəb ola bilər. Lütfən təklif edilən versiyanı istifadə edin.\n\nSeçilmiş versiya: v${selected}\nTəklif edilən versiya: v${suggested}\n\nHər halda davam etmək üçün, seçimlərdə \"Təklif edilən versiyanı tələb et\"i qeyri-aktiv edə bilərsiniz.",
|
||||
"featureNotAvailable": "Xüsusiyyət tətbiq edilmədi",
|
||||
"featureNotAvailableText": "Bu tətbiq bölünmüş APK-dır və yalnız root icazələri ilə montajlanıb yamaqlana və quraşdırıla bilər. Ancaq, yaddaşdan tam APK-ni seçərək yamaqlaya və quraşdıra bilərsiniz."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Yamaqları seçin",
|
||||
"searchBarHint": "Yamaqları axtarın",
|
||||
"universalPatches": "Ümumi yamaqlar",
|
||||
"newPatches": "Yeni yamaqlar",
|
||||
"patches": "Yamaqlar",
|
||||
"doneButton": "Bitdi",
|
||||
"defaultChip": "İlkin",
|
||||
"defaultTooltip": "Bütün ilkin yamaqları seç",
|
||||
"noneChip": "Heç nə",
|
||||
"noneTooltip": "Yamaqların heç birini seçmə",
|
||||
"loadPatchesSelection": "Yamaq seçimini yüklə",
|
||||
"noSavedPatches": "Seçilmiş tətbiq üçün saxlanılmış yamaq yoxdur.\nCari seçimi saxlamaq üçün \"Bitdi\"ə toxunun.",
|
||||
"noPatchesFound": "Seçilmiş tətbiq üçün yamaqlar tapılmadı",
|
||||
"setRequiredOption": "Bəzi yamaqlar seçimlərin tənzimlənməsin tələb edir:\n\n${patches}\n\nLütfən davam etməzdən əvvəl onları tənzimləyin."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Xüsusi dəyər",
|
||||
"setToNull": "Boş olaraq təyin et",
|
||||
"nullValue": "Bu seçim dəyəri hazırda boşdur",
|
||||
"viewTitle": "Yamaq seçimləri",
|
||||
"saveOptions": "Saxla",
|
||||
"unselectPatch": "Yamağı seçmə",
|
||||
"tooltip": "Daha çox giriş seçimləri",
|
||||
"selectFilePath": "Fayl yolunu seç",
|
||||
"selectFolder": "Qovluq seç",
|
||||
"requiredOption": "Bu seçimi tənzimləmək tələb olunur",
|
||||
"unsupportedOption": "Bu seçim dəstəklənmir",
|
||||
"requiredOptionNull": "Aşağıdakı seçimlər tənzimlənməlidir:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Bu yamağı seçmək, yamaqlanma xətalarına səbəb ola bilər.\n\nTətbiq versiyası: ${packageVersion} \nDəstəklənən versiyalar:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Yamaq, bu tətbiq versiyası üçün dəstəklənmir.",
|
||||
"unsupportedRequiredOption": "Bu yamaq, bu tətbiq vasitəsilə dəstəklənməyən, tələb edilən seçim saxlayır",
|
||||
"patchesChangeWarningDialogText": "İlkin yamaq seçimi və seçimlərin istifadəsi tövsiyə olunur. Onların dəyişdirilməsi gözlənilməz problemlərlə nəticələnə bilər.\n\nİstənilən yamaq seçimini dəyişdirməzdən əvvəl seçimlərdə \"Yamaq seçimini dəyişdirməyə icazə ver\"i aktiv etməlisiniz.",
|
||||
"patchesChangeWarningDialogButton": "İlkin seçimi istifadə et"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Quraşdırma növünü seçin",
|
||||
"installTypeDescription": "Davam etmək üçün quraşdırma növünü seçin.",
|
||||
"installButton": "Quraşdır",
|
||||
"installRootType": "Montajla",
|
||||
"installNonRootType": "Normal",
|
||||
"warning": "Gözlənilməz problemlərin qarşısını almaq üçün yamaqlanmış tətbiq üçün avto-yeniləmələri qeyri-aktiv et.",
|
||||
"pressBackAgain": "Ləğv etmək üçün təkrar geri düyməsinə bas",
|
||||
"openButton": "Aç",
|
||||
"notificationTitle": "ReVanced Manager yamaqlayır",
|
||||
"notificationText": "Quraşdırıcıya qayıtmaq üçün toxunun",
|
||||
"exportApkButtonTooltip": "Yamaqlı APK-ni ixrac et",
|
||||
"exportLogButtonTooltip": "Jurnalı ixrac et",
|
||||
"screenshotDetected": "Ekran görüntüsü aşkarlandı. Jurnalı paylaşmağa çalışırsınızsa, əvəzində mətn nüsxəsini paylaşın. \n\nJurnal buferə köçürülsün?",
|
||||
"copiedToClipboard": "Jurnal buferə köçürüldü",
|
||||
"noExit": "Quraşdırıcı hələ də işləyir, çıxış edilə bilməz..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Tənzimləmələr",
|
||||
"appearanceSectionTitle": "Görünüş",
|
||||
"teamSectionTitle": "Komanda",
|
||||
"debugSectionTitle": "Sazlama",
|
||||
"advancedSectionTitle": "Qabaqcıl",
|
||||
"exportSectionTitle": "İdxal & ixrac et",
|
||||
"dataSectionTitle": "Məlumat mənbələri",
|
||||
"themeModeLabel": "Tətbiq teması",
|
||||
"systemThemeLabel": "Sistem",
|
||||
"lightThemeLabel": "İşıqlı",
|
||||
"darkThemeLabel": "Qaranlıq",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Cihazınıza yaxın təcrübədən zövq alın",
|
||||
"languageLabel": "Dil",
|
||||
"languageUpdated": "Dil yeniləndi",
|
||||
"sourcesLabel": "Seçmə mənbələr",
|
||||
"sourcesLabelHint": "ReVanced Patches üçün alternativ mənbələri konfiqurasiya et",
|
||||
"useAlternativeSources": "Seçmə mənbələri istifadə et",
|
||||
"useAlternativeSourcesHint": "API əvəzinə ReVanced Patches üçün alternativ mənbələr istifadə et",
|
||||
"sourcesResetDialogTitle": "Sıfırla",
|
||||
"sourcesResetDialogText": "Mənbələrinizi ilkin dəyərlərinə sıfırlamaq istədiyinizə əminsiniz?",
|
||||
"apiURLResetDialogText": "API URL-nizi ilkin dəyərinə sıfırlamaq istədiyinizə əminsiz?",
|
||||
"sourcesUpdateNote": "Qeyd: Bu, ReVanced Yamaqlarını birbaşa seçmə mənbələrdən yükləyəcək.\n\nBu sizi alternativ mənbəyə bağlayacaq.",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "\"ReVacned Manager\"in API URL-sini konfiqurasiya et",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "Yamaq qurumu",
|
||||
"sourcesPatchesLabel": "Yamaqların mənbəyi",
|
||||
"contributorsLabel": "Töhfə verənlər",
|
||||
"contributorsHint": "ReVanced-ə töhfə verənlərin siyahısı",
|
||||
"logsLabel": "Jurnalları paylaş",
|
||||
"logsHint": "ReVanced Manager jurnallarını paylaş",
|
||||
"enablePatchesSelectionLabel": "Yamaq seçimini dəyişdirməyə icazə ver",
|
||||
"enablePatchesSelectionHint": "Yamaqların seçilməsi və ya seçimin ləğv edilməsinə mane olunmasın",
|
||||
"enablePatchesSelectionWarningText": "Yamaq seçimini dəyişdirmək gözlənilməz problemlərə səbəb ola bilər.\n\nHər halda aktivləşdirilsin?",
|
||||
"disablePatchesSelectionWarningText": "Yamaq seçiminin dəyişdirilməsini bağlamaq üzrəsiniz.\nİlkin yamaq seçimi bərpa ediləcək.\n\nHər halda bağlansın?",
|
||||
"autoUpdatePatchesLabel": "Yamaqları avto-güncəllə",
|
||||
"autoUpdatePatchesHint": "Yamaqları son versiyaya avtomatik yenilə",
|
||||
"showUpdateDialogLabel": "Yenilənmə dialoqunu göstər",
|
||||
"showUpdateDialogHint": "Yeni yenilənmə mövcud olduqda dialoq pəncərəsi göstər",
|
||||
"universalPatchesLabel": "Ümumi yamaqları göstər",
|
||||
"universalPatchesHint": "Bütün tətbiqləri və ümumi yamaqları göstər (tətbiq siyahısı yavaşlaya bilər)",
|
||||
"lastPatchedAppLabel": "Yamaqlanmış tətbiqi saxla",
|
||||
"lastPatchedAppHint": "Daha sonra quraşdırmaq və ya ixrac etmək üçün son yamağı saxla",
|
||||
"versionCompatibilityCheckLabel": "Versiya uyumluluq yoxlanışı",
|
||||
"versionCompatibilityCheckHint": "Seçilmiş tətbiq versiyası ilə uyumlu olmayan yamaqların seçilməsini əngəllə",
|
||||
"requireSuggestedAppVersionLabel": "Təklif edilən tətbiq versiyasın tələb et",
|
||||
"requireSuggestedAppVersionHint": "Təklif edilməyən versiya ilə tətbiq seçilməsini əngəllə",
|
||||
"requireSuggestedAppVersionDialogText": "Təklif edilən versiya deyilsə tətbiq seçilməsi gözlənilməz problemlər yarada bilər.\n\nHər halda davam etmək istəyirsiniz?",
|
||||
"aboutLabel": "Haqqında",
|
||||
"snackbarMessage": "Buferə köçürüldü",
|
||||
"restartAppForChanges": "Dəyişiklikləri işlətmək üçün tətbiqi yenidən başlat",
|
||||
"deleteTempDirLabel": "Müvəqqəti faylları sil",
|
||||
"deleteTempDirHint": "İstifadəsiz, müvəqqəti faylları sil",
|
||||
"deletedTempDir": "Müvəqqəti fayllar silindi",
|
||||
"exportSettingsLabel": "Tənzimləmələri köçür",
|
||||
"exportSettingsHint": "Tənzimləmələri JSON faylına köçür",
|
||||
"exportedSettings": "Tənzimləmələr ixrac edildi",
|
||||
"importSettingsLabel": "Tənzimləmələri idxal et",
|
||||
"importSettingsHint": "Tənzimləmələri JSON faylından idxal et",
|
||||
"importedSettings": "Tənzimləmələr idxal edildi",
|
||||
"exportPatchesLabel": "Yamaq seçimini ixrac et",
|
||||
"exportPatchesHint": "Yamaq seçimini JSON faylına köçür",
|
||||
"exportedPatches": "Yamaq seçimi ixrac edildi",
|
||||
"noExportFileFound": "İxrac ediləcək yamaq seçimi yoxdur",
|
||||
"importPatchesLabel": "Yamaq seçimini idxal et",
|
||||
"importPatchesHint": "Yamaq seçimini JSON faylından əldə et",
|
||||
"importedPatches": "Yamaq seçimi idxal edildi",
|
||||
"resetStoredPatchesLabel": "Yamaq seçimini sıfırla",
|
||||
"resetStoredPatchesHint": "Saxlanılmış yamaq seçimini sıfırla",
|
||||
"resetStoredPatchesDialogTitle": "Yamaq seçimi sıfırlansın?",
|
||||
"resetStoredPatchesDialogText": "İlkin yamaq seçimi bərpa olunacaq.",
|
||||
"resetStoredPatches": "Yamaq seçimi sıfırlandı",
|
||||
"resetStoredOptionsLabel": "Yamaq seçimlərini sıfırla",
|
||||
"resetStoredOptionsHint": "Bütün yamaq seçimlərini sıfırla",
|
||||
"resetStoredOptionsDialogTitle": "Yamaq seçimləri sıfırlansın?",
|
||||
"resetStoredOptionsDialogText": "Yamaq seçimlərin sıfırlama, bütün saxlanılmış seçimləri siləcək.",
|
||||
"resetStoredOptions": "Seçimlər sıfırlandı",
|
||||
"deleteLogsLabel": "Jurnalları təmizlə",
|
||||
"deleteLogsHint": "Toplanmış ReVanced Manager jurnallarını sil",
|
||||
"deletedLogs": "Jurnallar silindi",
|
||||
"regenerateKeystoreLabel": "Keystore-u yenidən yarat",
|
||||
"regenerateKeystoreHint": "Tətbiqləri imzalamaq üçün istifadə edilən keystoru-u yenidən yarat",
|
||||
"regenerateKeystoreDialogTitle": "Keystore yenidən yaradılsın?",
|
||||
"regenerateKeystoreDialogText": "Köhnə keystore ilə imzalı yamaqlanan tətbiqlər artıq yenilənə bilməyəcək.",
|
||||
"regeneratedKeystore": "Keystore yenidən yaradıldı",
|
||||
"exportKeystoreLabel": "Keystore-u ixrac et",
|
||||
"exportKeystoreHint": "Tətbiqləri imzalamaq üçün istifadə olunan keystore-u ixrac et",
|
||||
"exportedKeystore": "Keystore ixrac edildi",
|
||||
"noKeystoreExportFileFound": "İxrac edilməli keystore yoxdur",
|
||||
"importKeystoreLabel": "Keystore-u idxal et",
|
||||
"importKeystoreHint": "Tətbiqləri imzalamaq üçün istifadə olunan keystore-u idxal et",
|
||||
"importedKeystore": "Keystore idxal edildi",
|
||||
"selectKeystorePassword": "Keystore parolu",
|
||||
"selectKeystorePasswordHint": "Tətbiqləri imzalamaq üçün istifadə olunan keystore parolu seç",
|
||||
"jsonSelectorErrorMessage": "Seçilmiş JSON faylı istifadə edilə bilmir",
|
||||
"keystoreSelectorErrorMessage": "Seçilmiş keystore faylı istifadə edilə bilmir"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Tətbiq məlumatı",
|
||||
"openButton": "Aç",
|
||||
"installButton": "Quraşdır",
|
||||
"uninstallButton": "Sil",
|
||||
"unmountButton": "Ayır",
|
||||
"exportButton": "İxrac et",
|
||||
"deleteButton": "Sil",
|
||||
"rootDialogTitle": "Xəta",
|
||||
"lastPatchedAppDescription": "Bu, son yamaqlanmış tətbiqin nüsxəsidir.",
|
||||
"unmountDialogText": "Bu tətbiqi ayırmaq istədiyinizə əminsiniz?",
|
||||
"uninstallDialogText": "Bu tətbiqi silmək istədiyinizə əminsiniz?",
|
||||
"rootDialogText": "Tətbiq, superuser icazələri ilə quraşdırıldı, ancaq hazırda ReVanced Manager-in heç bir icazəsi yoxdur.\nLütfən əvvəlcə superuser icazələrini qəbul edin.",
|
||||
"removeAppDialogTitle": "Tətbiq silinsin?",
|
||||
"removeAppDialogText": "Bu nüsxəni silmək istədiyinizə əminsiniz?",
|
||||
"packageNameLabel": "Paket adı",
|
||||
"installTypeLabel": "Quraşdırma növü",
|
||||
"mountTypeLabel": "Montajla",
|
||||
"regularTypeLabel": "Normal",
|
||||
"patchedDateLabel": "Yamaqlanma vaxtı",
|
||||
"appliedPatchesLabel": "Tətbiq edilmiş yamaqlar",
|
||||
"sizeLabel": "Fayl həcmi",
|
||||
"patchedDateHint": "${time} ${date}",
|
||||
"appliedPatchesHint": "${quantity} tətbiq edilmiş yamaq",
|
||||
"updateNotImplemented": "Bu funksiya hələ hazır deyil"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Töhfə verənlər"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Versiya uyuşmur",
|
||||
"mount_no_root": "Root girişi yoxdur",
|
||||
"mount_missing_installation": "Quraşdırma tapılmadı",
|
||||
"status_failure_blocked": "Quraşdırma əngəlləndi",
|
||||
"install_failed_verification_failure": "Təsdiqləmə uğursuz oldu",
|
||||
"status_failure_invalid": "Quraşdırma etibarsızdır",
|
||||
"install_failed_version_downgrade": "Köhnə versiyaya keçilə bilmir",
|
||||
"status_failure_conflict": "Quraşdırma ziddiyəti",
|
||||
"status_failure_storage": "Quraşdırma yaddaş sahəsi problemi",
|
||||
"status_failure_incompatible": "Quraşdırma uyumsuzdur",
|
||||
"status_failure_timeout": "Quraşdırma vaxtı bitdi",
|
||||
"status_unknown": "Quraşdırma uğursuz oldu",
|
||||
"mount_version_mismatch_description": "Quraşdırılmış tətbiq, yamaqlanmış tətbiqdən fərqli versiyaya sahib olduğu üçün quraşdırma uğursuz oldu.\n\nMontajlı tətbiq versiyasını quraşdırıb təkrar sınayın.",
|
||||
"mount_no_root_description": "Root girişinə icazə verilmədiyi üçün quraşdırma uğursuz oldu.\n\n\"ReVanced Manager\"ə root girişi icazəsini verin və yenidən sınayın.",
|
||||
"mount_missing_installation_description": "Montajlanmalı yamaqlanmayan tətbiq bu cihazda quraşdırılmadığı üçün quraşdırma uğursuz oldu.\n\nMontajlamadan əvvəl yamaqlanmamış tətbiqi quraşdırın və təkrar sınayın.",
|
||||
"status_failure_timeout_description": "Quraşdırmanın bitməsi çox uzun çəkdi.\n\nYenidən cəhd etmək istəyirsiniz?",
|
||||
"status_failure_storage_description": "Yetərsiz yaddaş sahəsinə görə quraşdırma uğursuz oldu.\n\nBir az yer boşaldıb yenidən sınayın.",
|
||||
"status_failure_invalid_description": "Yamaqlanmış tətbiq etibarsız olduğu üçün quraşdırma uğursuz oldu.\n\nTətbiqi silib yenidən sınayırsınız?",
|
||||
"status_failure_incompatible_description": "Tətbiq bu cihazla uyğun deyil.\n\nBu cihaz tərəfindən dəstəklənən APK istifadə et və təkrar cəhd et.",
|
||||
"status_failure_conflict_description": "Quraşdırma, tətbiqin mövcud quraşdırmasına görə əngəlləndi.\n\nQuraşdırılmış tətbiqi silib yenidən sınayırsınız?",
|
||||
"status_failure_blocked_description": "${packageName} quraşdırmanı əngəllədi.\n\nTəhlükəsizlik seçimlərinizi tənzimləyib yenidən sınayın.",
|
||||
"install_failed_verification_failure_description": "Təsdiqləmə probleminə görə quraşdırma uğursuz oldu.\n\nTəhlükəsizlik seçimlərinizi tənzimləyib təkrar sınayın.",
|
||||
"install_failed_version_downgrade_description": "Yamaqlanmış tətbiq, quraşdırılmış tətbiqdən daha aşağı versiyaya sahib olduğu üçün quraşdırma uğursuz oldu.\n\nTətbiqi silib yenidən sınayırsınız?",
|
||||
"status_unknown_description": "Naməlum səbəbə görə quraşdırma uğursuz oldu. Lütfən yenidən sınayın."
|
||||
}
|
||||
}
|
286
assets/i18n/strings_be_BY.i18n.json
Executable file
@ -0,0 +1,286 @@
|
||||
{
|
||||
"okButton": "ОК",
|
||||
"cancelButton": "Скасаваць",
|
||||
"dismissButton": "Адхіліць",
|
||||
"quitButton": "Выйсці",
|
||||
"updateButton": "Абнавіць",
|
||||
"suggested": "Прапанавана: ${version}",
|
||||
"yesButton": "Так",
|
||||
"noButton": "Не",
|
||||
"warning": "Увага",
|
||||
"notice": "Заўвага",
|
||||
"noShowAgain": "Больш не паказваць",
|
||||
"add": "Дадаць",
|
||||
"remove": "Выдаліць",
|
||||
"showChangelogButton": "Паказаць журнал змяненняў",
|
||||
"showUpdateButton": "Паказаць абнаўленне",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Галоўная",
|
||||
"patcherTab": "Праграма выпраўлення",
|
||||
"settingsTab": "Налады"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Паспяхова абноўлена",
|
||||
"widgetTitle": "Галоўная",
|
||||
"updatesSubtitle": "Абнаўленні",
|
||||
"lastPatchedAppSubtitle": "Апошняя абноўленая праграма",
|
||||
"patchedSubtitle": "Устаноўленыя праграмы",
|
||||
"changeLaterSubtitle": "Вы можаце змяніць гэта ў наладах пазней.",
|
||||
"noSavedAppFound": "Праграма не знойдзена",
|
||||
"noInstallations": "Няма ўсталяваных праграм з выпраўленнямі",
|
||||
"installUpdate": "Працягнуць усталяванне абнаўлення?",
|
||||
"updateSheetTitle": "Абнавіць ReVanced Manager",
|
||||
"updateDialogTitle": "Даступна новае абнаўленне",
|
||||
"updatePatchesSheetTitle": "Абнавіць выпраўленні ReVanced",
|
||||
"updateChangelogTitle": "Спіс змяненняў",
|
||||
"updateDialogText": "Даступна новае абнаўленне для ${file}\n\nЦяпер усталявана версія ${version}.",
|
||||
"downloadConsentDialogTitle": "Спампаваць неабходныя файлы?",
|
||||
"downloadConsentDialogText": "ReVanced Manager неабходна спампаваць неабходныя файлы для правільнай працы.",
|
||||
"downloadConsentDialogText2": "Гэта падключыць вас да ${url}.",
|
||||
"downloadingMessage": "Спампоўваецца абнаўленне...",
|
||||
"downloadedMessage": "Абнаўленне спампавана",
|
||||
"installingMessage": "Усталяванне абнаўлення...",
|
||||
"errorDownloadMessage": "Немагчыма спампаваць абнаўленне",
|
||||
"errorInstallMessage": "Немагчыма ўсталяваць абнаўленне",
|
||||
"noConnection": "Няма злучэння з інтэрнэтам"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Звесткі"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Загрузка...",
|
||||
"timeagoLabel": "${time} таму"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Праграма выпраўлення",
|
||||
"patchButton": "Выправіць",
|
||||
"incompatibleArchWarningDialogText": "Выпраўленні на гэтай архітэктуры пакуль не падтрымліваюцца і могуць не працаваць. Працягнуць?",
|
||||
"requiredOptionDialogText": "Неабходна задаць некаторыя параметры выпраўленняў."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Выбраць праграму",
|
||||
"widgetTitleSelected": "Выбраная праграма",
|
||||
"widgetSubtitle": "Праграма не выбрана",
|
||||
"noAppsLabel": "Праграмы не знойдзены",
|
||||
"anyVersion": "Любая версія"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Выберыце выпраўленні",
|
||||
"widgetTitleSelected": "Выбраныя выпраўленні",
|
||||
"widgetSubtitle": "Спачатку выберыце праграму",
|
||||
"widgetEmptySubtitle": "Выпраўленні не выбраны"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Сацсеткі",
|
||||
"widgetSubtitle": "Мы ў інтэрнэце!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Выбраць праграму",
|
||||
"searchBarHint": "Пошук праграмы",
|
||||
"storageButton": "Сховішча",
|
||||
"selectFromStorageButton": "Выбраць са сховішча",
|
||||
"errorMessage": "Немагчыма выкарыстоўваць выбраную праграму",
|
||||
"downloadToast": "Функцыя спампоўвання пакуль недаступна",
|
||||
"requireSuggestedAppVersionDialogText": "Версія праграмы, якую вы выбралі не супадае з прапанаванай версіяй і гэта можа прывесці да нечаканых праблем. Скарыстайцеся прапанаванай версіяй.\n\nВыбраная версія: ${selected}\nПрапанаваная версія: ${suggested}\n\nАдключыце \"Патрабаваць прапанаваную версію праграмы\" ў наладах, каб праігнараваць гэта паведамленне.",
|
||||
"featureNotAvailable": "Функцыя не рэалізавана",
|
||||
"featureNotAvailableText": "Гэта праграма з'яўляецца раздзеленым файлам APK і яе можна надзейна выправіць і ўсталяваць толькі падключэннем з правамі суперкарыстальніка. Аднак вы можаце выправіць і ўсталяваць поўны файл APK выбраўшы яго са сховішча."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Выберыце выпраўленні",
|
||||
"searchBarHint": "Пошук выпраўленняў",
|
||||
"universalPatches": "Універсальныя выпраўленні",
|
||||
"newPatches": "Новыя выпраўленні",
|
||||
"patches": "Выпраўленні",
|
||||
"doneButton": "Гатова",
|
||||
"defaultChip": "Прадвызначана",
|
||||
"defaultTooltip": "Выбраць усе прадвызначаныя выпраўленні",
|
||||
"noneChip": "Няма",
|
||||
"noneTooltip": "Зняць выбар з усіх выпраўленняў",
|
||||
"loadPatchesSelection": "Загрузіць выбраныя выпраўленні",
|
||||
"noSavedPatches": "Адсутнічае захаваны выбар выпраўленняў для выбранай праграмы.\nНацісніце \"Гатова\", каб захаваць бягучы выбар.",
|
||||
"noPatchesFound": "Для выбранай праграмы выпраўленні не знойдзены",
|
||||
"setRequiredOption": "Некаторыя выпраўленні патрабуюць зададзеных параметраў:\n\n${patches}\n\nЗадайце іх перад працягам."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Уласнае значэнне",
|
||||
"setToNull": "Усталюйце значэнне нуль",
|
||||
"nullValue": "Зараз значэнне гэтага параметра роўна нулю",
|
||||
"viewTitle": "Параметры выпраўлення",
|
||||
"saveOptions": "Захаваць",
|
||||
"unselectPatch": "Скасаваць выбар патча",
|
||||
"tooltip": "Больш уваходных параметраў",
|
||||
"selectFilePath": "Выбраць шлях да файла",
|
||||
"selectFolder": "Выбраць папку",
|
||||
"requiredOption": "Неабходна наладзіць гэты параметр",
|
||||
"unsupportedOption": "Гэты параметр не падтрымліваецца",
|
||||
"requiredOptionNull": "Наступныя параметры павінны быць зададзены:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Выбар гэтага выпраўлення можа прывесці да памылак падчас яго ўжывання.\n\nВерсія праграмы: ${packageVersion}\nВерсіі, якія падтрымліваюцца:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Выпраўленне не падтрымліваецца гэтай версіяй праграмы.",
|
||||
"unsupportedRequiredOption": "Гэта выпраўленне змяшчае неабходныя параметры, якія не падтрымліваюцца гэтай праграмай",
|
||||
"patchesChangeWarningDialogText": "Рэкамендуецца выкарыстоўваць прадвызначаны выбар выпраўлення і параметры. Іх змяненне можа прывесці да нечаканых праблем.\n\nПерад змяненнем выбару выпраўлення, вам неабходна ўключыць параметр \"Дазволіць змяненне выбару выпраўлення\" ў наладах.",
|
||||
"patchesChangeWarningDialogButton": "Выкарыстоўваць прадвызначаны выбар"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Выберыце тып устаноўкі",
|
||||
"installTypeDescription": "Выберыце тып устаноўкі для працягу.",
|
||||
"installButton": "Усталяваць",
|
||||
"installRootType": "Падключыць",
|
||||
"installNonRootType": "Звычайны",
|
||||
"warning": "Адключыць аўтаматычныя абнаўленні для выпраўленых праграм, каб пазбегнуць нечаканых праблем.",
|
||||
"pressBackAgain": "Націсніце назад яшчэ раз, каб скасаваць",
|
||||
"openButton": "Адкрыць",
|
||||
"notificationTitle": "ReVanced Manager працуе над выпраўленнем",
|
||||
"notificationText": "Націсніце для вяртання ва ўсталёўшчык праграм",
|
||||
"exportApkButtonTooltip": "Экспартаваць выпраўленыя APK",
|
||||
"exportLogButtonTooltip": "Экспартаваць журнал",
|
||||
"screenshotDetected": "Выяўлены здымак экрана. Калі вы хочаце абагуліць журнал, то замест гэтага адпраўце тэкставую копію\n\nСкапіраваць журнал у буфер абмену?",
|
||||
"copiedToClipboard": "Журнал скапіяваны ў буфер абмену",
|
||||
"noExit": "Усталёўшчык усё яшчэ працуе, нельга выйсці..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Налады",
|
||||
"appearanceSectionTitle": "Знешні выгляд",
|
||||
"teamSectionTitle": "Каманда",
|
||||
"debugSectionTitle": "Адладка",
|
||||
"advancedSectionTitle": "Дадаткова",
|
||||
"exportSectionTitle": "Імпарт і экспарт",
|
||||
"dataSectionTitle": "Крыніцы даных",
|
||||
"themeModeLabel": "Тэма праграмы",
|
||||
"systemThemeLabel": "Сістэма",
|
||||
"lightThemeLabel": "Светлая",
|
||||
"darkThemeLabel": "Цёмная",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Атрымлівайце асалоду ад тэмы сваёй прылады",
|
||||
"languageLabel": "Мова",
|
||||
"languageUpdated": "Мова абноўлена",
|
||||
"sourcesLabel": "Альтэрнатыўныя крыніцы",
|
||||
"useAlternativeSources": "Выкарыстоўваць альтэрнатыўныя крыніцы",
|
||||
"sourcesResetDialogTitle": "Скінуць",
|
||||
"sourcesResetDialogText": "Вы сапраўды хочаце скінуць свае крыніцы да іх прадвызначаных значэнняў?",
|
||||
"apiURLResetDialogText": "Вы сапраўды хочаце скінуць свае API URL да іх прадвызначаных значэнняў?",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Сканфігурыруйце URL API для ReVanced Manager",
|
||||
"selectApiURL": "URL-адрас API",
|
||||
"orgPatchesLabel": "Арганізацыя выпраўленняў",
|
||||
"sourcesPatchesLabel": "Крыніца выпраўленняў",
|
||||
"contributorsLabel": "Удзельнікі",
|
||||
"contributorsHint": "Спіс усіх удзельнікаў праекта ReVanced",
|
||||
"logsLabel": "Абагуліць журнал",
|
||||
"logsHint": "Абагуліць журнал ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Дазволіць змяненне выбару выпраўлення",
|
||||
"enablePatchesSelectionHint": "Не прадухіляць выбар або скасаванне выбару выпраўленняў",
|
||||
"enablePatchesSelectionWarningText": "Змяненне выбару выпраўленняў можа стаць прычынай нечаканых праблем.\n\nУключыць усё роўна?",
|
||||
"disablePatchesSelectionWarningText": "Вы збіраецеся адключыць змяненне выбару выпраўленняў.\nБудзе адноўлены прадвызначаны выбар выпраўленняў.\n\nАдключыць усё роўна?",
|
||||
"autoUpdatePatchesLabel": "Аўтаматычнае абнаўленне выпраўленняў",
|
||||
"autoUpdatePatchesHint": "Аўтаматычна абнаўляць выпраўленні да апошняй версіі",
|
||||
"showUpdateDialogLabel": "Паказваць акно абнаўлення",
|
||||
"showUpdateDialogHint": "Паказваць акно, калі даступна новае абнаўленне",
|
||||
"universalPatchesLabel": "Паказваць універсальныя выпраўленні",
|
||||
"universalPatchesHint": "Адлюстраваць усе праграмы і ўніверсальныя выпраўленні (можа запаволіць спіс праграм)",
|
||||
"lastPatchedAppLabel": "Захаваць прапатчаную праграму",
|
||||
"lastPatchedAppHint": "Захавайце апошні патч, каб усталяваць або экспартаваць пазней",
|
||||
"versionCompatibilityCheckLabel": "Праверка сумяшчальнасці версіі",
|
||||
"versionCompatibilityCheckHint": "Прадухіляць выбар выпраўленняў, якія несумяшчальныя з выбранай версіяй праграмы",
|
||||
"requireSuggestedAppVersionLabel": "Запыт прапанаванай версіі праграмы",
|
||||
"requireSuggestedAppVersionHint": "Прадухіляць выбар праграмы з не прапанаванай версіяй",
|
||||
"requireSuggestedAppVersionDialogText": "Выбар праграмы не прапанаванай версіі можа стаць прычынай нечаканых праблем.\n\nВы ўсё роўна хочаце працягнуць?",
|
||||
"aboutLabel": "Пра праграму",
|
||||
"snackbarMessage": "Скапіявана ў буфер абмену",
|
||||
"restartAppForChanges": "Перазапусціце праграму, каб ужыць змены",
|
||||
"deleteTempDirLabel": "Выдаліць часовыя файлы",
|
||||
"deleteTempDirHint": "Выдаліць нявыкарыстаныя часовыя файлы",
|
||||
"deletedTempDir": "Часовыя файлы выдалены",
|
||||
"exportPatchesLabel": "Экспартаваць выбар выпраўленняў",
|
||||
"exportPatchesHint": "Экспартаваць выбар выпраўленняў у файл JSON",
|
||||
"exportedPatches": "Выбар выпраўленняў экспартаваны",
|
||||
"noExportFileFound": "Адсутнічае выбар выпраўленняў для экспартавання",
|
||||
"importPatchesLabel": "Імпартаваць выбар выпраўленняў",
|
||||
"importPatchesHint": "Імпартаваць выбар выпраўленняў у файл JSON",
|
||||
"importedPatches": "Выбар выпраўленняў імпартаваны",
|
||||
"resetStoredPatchesLabel": "Скінуць выбар выпраўлення",
|
||||
"resetStoredPatchesHint": "Скінуць захаванне выбару выпраўлення",
|
||||
"resetStoredPatchesDialogTitle": "Скінуць выбар выпраўленняў?",
|
||||
"resetStoredPatchesDialogText": "Прадвызначаны выбар выпраўленняў будзе адноўлены.",
|
||||
"resetStoredPatches": "Выбар выпраўленняў будзе скінуты",
|
||||
"resetStoredOptionsLabel": "Скінуць параметры выпраўлення",
|
||||
"resetStoredOptionsHint": "Скінуць усе параметры выпраўлення",
|
||||
"resetStoredOptionsDialogTitle": "Скінуць параметры выпраўлення?",
|
||||
"resetStoredOptionsDialogText": "Скіданне параметраў выпраўлення выдаліць усе захаваныя параметры.",
|
||||
"resetStoredOptions": "Параметры былі скінуты",
|
||||
"deleteLogsLabel": "Ачысціць журнал",
|
||||
"deleteLogsHint": "Выдаліць сабраны журнал ReVanced Manager",
|
||||
"deletedLogs": "Журнал выдалены",
|
||||
"regenerateKeystoreLabel": "Перагенерыраваць сховішча ключоў",
|
||||
"regenerateKeystoreHint": "Паўторна генерыраваць сховішча ключоў, якое выкарыстоўваецца для падпісання праграм",
|
||||
"regenerateKeystoreDialogTitle": "Паўторна генерыраваць сховішча ключоў?",
|
||||
"regenerateKeystoreDialogText": "Выпраўленыя праграмы, якія падпісаны старым сховішчам ключоў, больш немагчыма будзе абнавіць.",
|
||||
"regeneratedKeystore": "Сховішча ключоў генерыравана паўторна",
|
||||
"exportKeystoreLabel": "Экспартаваць сховішча ключоў",
|
||||
"exportKeystoreHint": "Экспартаваць сховішча ключоў, якое выкарыстоўваецца для падпісання праграм",
|
||||
"exportedKeystore": "Сховішча ключоў экспартавана",
|
||||
"noKeystoreExportFileFound": "Адсутнічае сховішча ключоў для экспартавання",
|
||||
"importKeystoreLabel": "Імпартаваць сховішча ключоў",
|
||||
"importKeystoreHint": "Імпартаваць сховішча ключоў, якое выкарыстоўваецца для падпісання праграм",
|
||||
"importedKeystore": "Сховішча ключоў імпартавана",
|
||||
"selectKeystorePassword": "Пароль сховішча ключоў",
|
||||
"selectKeystorePasswordHint": "Выбраць пароль сховішча ключоў, які выкарыстоўваецца для падпісання праграм",
|
||||
"jsonSelectorErrorMessage": "Немагчыма выкарыстоўваць выбраны файл JSON",
|
||||
"keystoreSelectorErrorMessage": "Немагчыма выкарыстоўваць выбраны файл сховішча ключоў"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Пра праграму",
|
||||
"openButton": "Адкрыць",
|
||||
"installButton": "Усталяваць",
|
||||
"uninstallButton": "Выдаліць",
|
||||
"unmountButton": "Адключыць",
|
||||
"exportButton": "Экспарт",
|
||||
"deleteButton": "Выдаліць",
|
||||
"rootDialogTitle": "Памылка",
|
||||
"lastPatchedAppDescription": "Гэта рэзервовая копія праграмы, якая была выпраўлена ў апошні раз.",
|
||||
"unmountDialogText": "Вы сапраўды хочаце адключыць гэту праграму?",
|
||||
"uninstallDialogText": "Вы сапраўды хочаце выдаліць гэту праграму?",
|
||||
"rootDialogText": "Праграма ўсталявана з правамі суперкарыстальніка, але ў цяперашні час у ReVanced Manager адсутнічаюць такія правы.\nСпачатку дайце праграме правы суперкарыстальніка.",
|
||||
"removeAppDialogTitle": "Выдаліць праграму?",
|
||||
"removeAppDialogText": "Вы ўпэўнены, што хочаце выдаліць гэту рэзервовую копію?",
|
||||
"packageNameLabel": "Назва пакета",
|
||||
"installTypeLabel": "Тып усталявання",
|
||||
"mountTypeLabel": "Падключыць",
|
||||
"regularTypeLabel": "Звычайны",
|
||||
"patchedDateLabel": "Дата выпраўлення",
|
||||
"appliedPatchesLabel": "Ужытыя выпраўленні",
|
||||
"sizeLabel": "Памер файла",
|
||||
"patchedDateHint": "${date} у ${time}",
|
||||
"appliedPatchesHint": "Ужыта выпраўленняў: ${quantity}",
|
||||
"updateNotImplemented": "Пакуль яшчэ гэта функцыя не рэалізавана"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Удзельнікі"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Неадпаведнасць версій",
|
||||
"mount_no_root": "Няма праў суперкарыстальніка",
|
||||
"mount_missing_installation": "Усталяванне не знойдзена",
|
||||
"status_failure_blocked": "Усталяванне заблакіравана",
|
||||
"install_failed_verification_failure": "Збой праверкі",
|
||||
"status_failure_invalid": "Памылковае ўсталяванне",
|
||||
"install_failed_version_downgrade": "Немагчыма панізіць",
|
||||
"status_failure_conflict": "Канфлікт усталявання",
|
||||
"status_failure_storage": "Праблема са сховішчам усталявання",
|
||||
"status_failure_incompatible": "Несумяшчальнае ўсталяванне",
|
||||
"status_failure_timeout": "Час чакання ўсталявання",
|
||||
"status_unknown": "Збой усталявання",
|
||||
"mount_version_mismatch_description": "Збой усталявання, бо версія ўсталяванай праграмы адрозніваецца ад версіі выпраўленай праграмы.",
|
||||
"mount_no_root_description": "Збой усталявання, бо не атрыманы правы суперкарыстальніка.\n\nДайце правы суперкарыстальніка ReVanced Manager і паспрабуйце яшчэ раз.",
|
||||
"mount_missing_installation_description": "Збой усталявання, бо спачатку неабходна ўсталяваць не выпраўленую праграму на гэту прыладу для падключэння паверх яе.\n\nУсталюйце не выпраўленую праграму перад падключэннем і паспрабуйце яшчэ раз.",
|
||||
"status_failure_timeout_description": "Працэс усталявання адбываўся занадта доўга.\n\nВы сапраўды хочаце паспрабаваць яшчэ раз?",
|
||||
"status_failure_storage_description": "Збой усталявання, бо на прыладзе недастаткова памяці.\n\nВызваліце крыху месца і паўтарыце спробу яшчэ раз.",
|
||||
"status_failure_invalid_description": "Збой усталявання, бо выпраўленая праграма пашкоджана.\n\nВыдаліць праграму і паспрабаваць яшчэ раз?",
|
||||
"status_failure_conflict_description": "Усталяванне прадухілена іншай праграмай, якая цяпер усталёўваецца.\n\nВыдаліць усталяваную праграму і паспрабаваць яшчэ раз?",
|
||||
"status_failure_blocked_description": "Усталяванне было заблакіравана ${packageName}.\n\nНаладзьце свае параметры бяспекі і паспрабуйце яшчэ раз.",
|
||||
"install_failed_verification_failure_description": "Збой усталявання, бо адбылася праблема праверкі.\n\nНаладзьце свае параметры бяспекі і паспрабуйце яшчэ раз.",
|
||||
"install_failed_version_downgrade_description": "Збой усталявання, бо выпраўленая праграма мае больш новую версію, чым усталяваная праграма.\n\nВыдаліць праграму і паспрабаваць яшчэ раз?",
|
||||
"status_unknown_description": "Збой усталявання, бо адбылася невядомая памылка. Паўтарыце спробу яшчэ раз."
|
||||
}
|
||||
}
|
298
assets/i18n/strings_bg_BG.i18n.json
Executable file
@ -0,0 +1,298 @@
|
||||
{
|
||||
"okButton": "Ок",
|
||||
"cancelButton": "Отказ",
|
||||
"dismissButton": "Отхвърли",
|
||||
"quitButton": "Изход",
|
||||
"updateButton": "Актуализация",
|
||||
"suggested": "Предложена версия: ${version}",
|
||||
"yesButton": "Да",
|
||||
"noButton": "Не",
|
||||
"warning": "Внимание",
|
||||
"notice": "Известие",
|
||||
"noShowAgain": "Не показвай повече",
|
||||
"add": "Добави",
|
||||
"remove": "Премахни",
|
||||
"showChangelogButton": "Покажи промените",
|
||||
"showUpdateButton": "Покажи обновяванията",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Табло за управление",
|
||||
"patcherTab": "Пачър",
|
||||
"settingsTab": "Настройки"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Успешно обновяване",
|
||||
"widgetTitle": "Табло за управление",
|
||||
"updatesSubtitle": "Актуализации",
|
||||
"lastPatchedAppSubtitle": "Последно модифицирано приложение",
|
||||
"patchedSubtitle": "Инсталирани приложения",
|
||||
"changeLaterSubtitle": "Можете да промените това в настройките на по-късен етап.",
|
||||
"noSavedAppFound": "Не са открити приложения",
|
||||
"noInstallations": "Няма инсталирани модифицирани приложения",
|
||||
"installUpdate": "Продължете към инсталирането на актуализациите?",
|
||||
"updateSheetTitle": "Актуализирай ReVanced Manager",
|
||||
"updateDialogTitle": "Налична е нова актуализация",
|
||||
"updatePatchesSheetTitle": "Актуализирай ReVanced модификациите",
|
||||
"updateChangelogTitle": "Списък с промени",
|
||||
"updateDialogText": "Налична е актуализация за ${file}.\n\nНастоящата инсталирана версия е ${version}.",
|
||||
"downloadConsentDialogTitle": "Да се изтеглят ли необходимите файлове?",
|
||||
"downloadConsentDialogText": "ReVanced Manager трябва да изтегли необходими файлове, за да работи правилно.",
|
||||
"downloadConsentDialogText2": "Това ще ви свърже към ${url}.",
|
||||
"downloadingMessage": "Изтегляне на актуализация...",
|
||||
"downloadedMessage": "Актуализацията е изтеглена",
|
||||
"installingMessage": "Инсталиране на актуализация...",
|
||||
"errorDownloadMessage": "Свалянето на актуализацията не беше успешно",
|
||||
"errorInstallMessage": "Инсталирането на актуализацията не беше успешно",
|
||||
"noConnection": "Няма връзка с интернет"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Информация"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Зареждане...",
|
||||
"timeagoLabel": "Преди ${time}"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Модификатор",
|
||||
"patchButton": "Модифицирайте",
|
||||
"incompatibleArchWarningDialogText": "Процесът на модифициране в момента не се поддържа на устройства с тази архитектура и може да се провали. Ще продължите ли?",
|
||||
"removedPatchesWarningDialogText": "Премахнати пачове след последната корекция на приложението:\n\n${patches}\n\n${newPatches}Да продължа ли все пак?",
|
||||
"addedPatchesDialogText": "След последната промяна на това приложение бяха добавени следните модификации:\n\n${addedPatches}",
|
||||
"requiredOptionDialogText": "Опциите на някои модификации трябва да бъдат зададени."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Изберете приложение",
|
||||
"widgetTitleSelected": "Избрани приложения",
|
||||
"widgetSubtitle": "Няма избрано приложение",
|
||||
"noAppsLabel": "Няма намерени приложения",
|
||||
"anyVersion": "Всички версии"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Изберете модификации",
|
||||
"widgetTitleSelected": "Избрани модификации",
|
||||
"widgetSubtitle": "Първо изберете приложение",
|
||||
"widgetEmptySubtitle": "Няма избрани модификации"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Социални мрежи",
|
||||
"widgetSubtitle": "Открийте ни онлайн!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Изберете приложение",
|
||||
"searchBarHint": "Търсене на приложение",
|
||||
"storageButton": "Хранилище",
|
||||
"selectFromStorageButton": "Избери от хранилище",
|
||||
"errorMessage": "Избраното приложение не може да се използва",
|
||||
"downloadToast": "Функцията за изтегляне все още не е налична",
|
||||
"requireSuggestedAppVersionDialogText": "Избраната от вас версия на приложението не съответства на препоръчаната версия, което може да доведе до непредвидени проблеми. Моля, използвайте препоръчаната версия.\n\nИзбрана версия: ${selected}\nПрепоръчана версия: ${suggested}\n\nАко желаете да продължите въпреки това, деактивирайте \"Изискване на препоръчана версия на приложението\" в настройките.",
|
||||
"featureNotAvailable": "Функцията не е внедрена",
|
||||
"featureNotAvailableText": "Това приложение е разделено APK и не може да бъде актуализирано и инсталирано надеждно, освен ако не бъде монтирано с административни права. Въпреки това, можете да актуализирате и инсталирате цяло APK, като го изберете от хранилището."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Изберете модификации",
|
||||
"searchBarHint": "Търсене на модификации",
|
||||
"universalPatches": "Универсални модификации",
|
||||
"newPatches": "Нови модификации",
|
||||
"patches": "Модификации",
|
||||
"doneButton": "Готово",
|
||||
"defaultChip": "По подразбиране",
|
||||
"defaultTooltip": "Изберете всички модификации по подразбиране",
|
||||
"noneChip": "Нито една",
|
||||
"noneTooltip": "Отмяна на всички модификации",
|
||||
"loadPatchesSelection": "Заредете избраните модификации",
|
||||
"noSavedPatches": "Няма запазени избрани модификации за настоящото приложение.\nНатиснете Готово за да запазите текущия избор.",
|
||||
"noPatchesFound": "Няма налични модификации за избраното приложение",
|
||||
"setRequiredOption": "Някои модификации изискват опциите им да бъдат зададени:\n\n${patches}\n\nМоля задайте тези опции преди да продължите."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Стойност по избор",
|
||||
"setToNull": "Задайте нулева стойност",
|
||||
"nullValue": "Стойността на този параметър в момента е нула",
|
||||
"viewTitle": "Опции за модификациите",
|
||||
"saveOptions": "Запази",
|
||||
"unselectPatch": "Отмяна на всички модификации",
|
||||
"tooltip": "Повече опции за въвеждане",
|
||||
"selectFilePath": "Изберете път към файла",
|
||||
"selectFolder": "Изберете папка",
|
||||
"requiredOption": "Настройката на тази опция е задължителна",
|
||||
"unsupportedOption": "Тази опция не се поддържа",
|
||||
"requiredOptionNull": "Следните опции трябва да бъдат зададени:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Изборът на тази модификация може да доведе до грешки.\n\nВерсия: ${packageVersion}\nПоддържани версии: ${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Модифицирането на избраната версия на приложението не се поддържа.",
|
||||
"unsupportedRequiredOption": "Настоящата модификация съдържа задължителна опция, която не се поддържа от избраното приложение",
|
||||
"patchesChangeWarningDialogText": "Препоръчително е да използвате избраните модификации и опции по подразбиране. Всяка промяна може да доведе до неочаквани проблеми.\n\nАко все пак желаете да да промените избраните модификации, първо трябва да изключите \"Позволи промяна в избраните модификации\" от настройките.",
|
||||
"patchesChangeWarningDialogButton": "Използвайте избора по подразбиране"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Изберете вида на инсталацията",
|
||||
"installTypeDescription": "Изберете с кой вид инсталация да продължите.",
|
||||
"installButton": "Инсталиране",
|
||||
"installRootType": "Монтирай",
|
||||
"installNonRootType": "Нормален",
|
||||
"warning": "Деактивирайте автоматичните актуализации на модифираното приложение, за да избегнете неочаквани проблеми.",
|
||||
"pressBackAgain": "Натиснете \"назад\" отново, за да откажете",
|
||||
"openButton": "Отвори",
|
||||
"notificationTitle": "ReVanced Мениджър модифицира",
|
||||
"notificationText": "Натиснете за да се върнете при инсталатора",
|
||||
"exportApkButtonTooltip": "Експортиране на модифицираното APK",
|
||||
"exportLogButtonTooltip": "Експорт на дневника",
|
||||
"screenshotDetected": "Беше направена снимка на екрана. Ако се опитвате да споделите дневника, моля направете го в текстов формат.\n\nДа се копира ли дневника в клипборда?",
|
||||
"copiedToClipboard": "Дневникът беше копиран в клипборда",
|
||||
"noExit": "Инсталаторът все още работи, не може да излезе..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Настройки",
|
||||
"appearanceSectionTitle": "Облик",
|
||||
"teamSectionTitle": "Екип",
|
||||
"debugSectionTitle": "Отстраняване на грешки",
|
||||
"advancedSectionTitle": "Разширени",
|
||||
"exportSectionTitle": "Импортиране и експортиране",
|
||||
"dataSectionTitle": "Източници на данни",
|
||||
"themeModeLabel": "Тема на приложението",
|
||||
"systemThemeLabel": "Система",
|
||||
"lightThemeLabel": "Светъл",
|
||||
"darkThemeLabel": "Тъмен режим",
|
||||
"dynamicThemeLabel": "Материална Тема",
|
||||
"dynamicThemeHint": "Насладете се на преживяване по-близо до устройството си",
|
||||
"languageLabel": "Език",
|
||||
"languageUpdated": "Езикът е обновен",
|
||||
"sourcesLabel": "Алтернативни източници",
|
||||
"sourcesLabelHint": "Конфигурирайте алтернативните източници за ReVanced Patches",
|
||||
"useAlternativeSources": "Използвайте алтернативни източници",
|
||||
"useAlternativeSourcesHint": "Използвайте алтернативни източници за ReVanced Patches вместо API",
|
||||
"sourcesResetDialogTitle": "Нулиране",
|
||||
"sourcesResetDialogText": "Искате ли да възстановите източниците до стойностите им по подразбиране?",
|
||||
"apiURLResetDialogText": "Сигурни ли сте, че искате да възстановите адреса на ППИ (API) до стойността му по подразбиране?",
|
||||
"sourcesUpdateNote": "Забележка: Това автоматично ще изтегли ReVanced Patches от алтернативните източници.\n\nТова ще ви свърже с алтернативния източник.",
|
||||
"apiURLLabel": "API линк",
|
||||
"apiURLHint": "Конфигуриране на URL адреса на ППИ (API) на ReVanced Manager",
|
||||
"selectApiURL": "API линк",
|
||||
"orgPatchesLabel": "Организация на модификациите",
|
||||
"sourcesPatchesLabel": "Източник на модификациите",
|
||||
"contributorsLabel": "Хора, които допринесоха",
|
||||
"contributorsHint": "Списък с хората, допринесли за ReVanced",
|
||||
"logsLabel": "Сподели дневника",
|
||||
"logsHint": "Споделете дневника на ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Позволи промяна в избраните модификации",
|
||||
"enablePatchesSelectionHint": "Не предотвратявай избирането или премахването на модификации",
|
||||
"enablePatchesSelectionWarningText": "Промяната на избора на модификациите може да доведе до неочаквани проблеми.\n\nРазрешавате ли въпреки това?",
|
||||
"disablePatchesSelectionWarningText": "Предстои да забраните промени в избора на модификации.\nИзбраните модификации по подразбиране ще бъдат възстановени.\n\nЗабранявате ли въпреки това?",
|
||||
"autoUpdatePatchesLabel": "Автоматична актуализация на модификациите",
|
||||
"autoUpdatePatchesHint": "Автоматично актуализира модификациите до последната им версия",
|
||||
"showUpdateDialogLabel": "Показване на диалоговия прозорец за актуализиране",
|
||||
"showUpdateDialogHint": "Показва диалогов прозорец, когато е налична нова актуализация",
|
||||
"universalPatchesLabel": "Покажи универсални модификации",
|
||||
"universalPatchesHint": "Показване на всички приложения и универсални пачове (може да забави списъка с приложения)",
|
||||
"lastPatchedAppLabel": "Запазете модифицираното приложение",
|
||||
"lastPatchedAppHint": "Запазете последната модификация, за да инсталирате или експортирате по-късно",
|
||||
"versionCompatibilityCheckLabel": "Проверка на съвместимост на версиите",
|
||||
"versionCompatibilityCheckHint": "Предотвратява избирането на модификации, които не са съвместими с избраната версия на приложението",
|
||||
"requireSuggestedAppVersionLabel": "Изискване на препоръчана версия на приложението",
|
||||
"requireSuggestedAppVersionHint": "Предотвратяване на избора на приложение с версия, която не е препоръчана",
|
||||
"requireSuggestedAppVersionDialogText": "Избирането на приложение, чиято версия не е препоръчана, може да доведе до неочаквани проблеми.\n\nИскате ли да продължите все пак?",
|
||||
"aboutLabel": "Относно",
|
||||
"snackbarMessage": "Копирано",
|
||||
"restartAppForChanges": "Рестартирайте приложението, за да се приложат промените",
|
||||
"deleteTempDirLabel": "Изтриване на временни файлове",
|
||||
"deleteTempDirHint": "Изтриване на неизползвани временни файлове",
|
||||
"deletedTempDir": "Временните файлове са изтрити",
|
||||
"exportSettingsLabel": "Експорт на настройките",
|
||||
"exportSettingsHint": "Експорт на настройки в JSON файл",
|
||||
"exportedSettings": "Настройките са съхранени",
|
||||
"importSettingsLabel": "Внасяне на настройки",
|
||||
"importSettingsHint": "Внасяне на настройки в JSON файл",
|
||||
"importedSettings": "Настройките са импортирани",
|
||||
"exportPatchesLabel": "Експортиране на избраните актуализации",
|
||||
"exportPatchesHint": "Експортиране на избраните модификации в JSON файл",
|
||||
"exportedPatches": "Избраните модификации са експортирани",
|
||||
"noExportFileFound": "Няма избрани модификации за експортиране",
|
||||
"importPatchesLabel": "Импортиране на избраните модификации",
|
||||
"importPatchesHint": "Импортиране на избраните модификации от JSON файл",
|
||||
"importedPatches": "Избраните модификации са импортирани",
|
||||
"resetStoredPatchesLabel": "Възстановяване на избраните модификации по подразбиране",
|
||||
"resetStoredPatchesHint": "Нулиране на избраните запазени модификации",
|
||||
"resetStoredPatchesDialogTitle": "Да се нулират ли избраните модификации?",
|
||||
"resetStoredPatchesDialogText": "Избраните модификации ще бъдат нулирани.",
|
||||
"resetStoredPatches": "Избраните модификации бяха нулирани",
|
||||
"resetStoredOptionsLabel": "Нулиране на избраните модификации",
|
||||
"resetStoredOptionsHint": "Нулиране на всички избрани опции за модификациите",
|
||||
"resetStoredOptionsDialogTitle": "Да се нулират ли избраните опции за модификациите?",
|
||||
"resetStoredOptionsDialogText": "Нулиране на опциите за модификациите ще премахне всички запазени опции.",
|
||||
"resetStoredOptions": "Опциите бяха нулирани",
|
||||
"deleteLogsLabel": "Изчистване на дневника",
|
||||
"deleteLogsHint": "Изтриване на всички дневници, събрани от ReVanced Manager",
|
||||
"deletedLogs": "Дневникът е изтрит",
|
||||
"regenerateKeystoreLabel": "Регенериране на keystore-а",
|
||||
"regenerateKeystoreHint": "Регенериране на keystore-а, който се използва за подписване на приложението",
|
||||
"regenerateKeystoreDialogTitle": "Да се регенерира ли keystore-а?",
|
||||
"regenerateKeystoreDialogText": "Модифицираните приложения, подписани със стария keystore, вече няма да могат да бъдат актуализирани.",
|
||||
"regeneratedKeystore": "Keystore-ът беше регенериран",
|
||||
"exportKeystoreLabel": "Експортирай Keystore-а",
|
||||
"exportKeystoreHint": "Експортиране на keystore-а, който се използва за подписване на приложенията",
|
||||
"exportedKeystore": "Keystore беше експортиран",
|
||||
"noKeystoreExportFileFound": "Няма Keystore за експортиране",
|
||||
"importKeystoreLabel": "Импортирай Keystore",
|
||||
"importKeystoreHint": "Импортиране на keystore, който да бъде използван за подписване на приложенията",
|
||||
"importedKeystore": "Keystorе е импортиран",
|
||||
"selectKeystorePassword": "Парола за keystore-а",
|
||||
"selectKeystorePasswordHint": "Изберете парола за keystore-а, който се използва за подписване на приложенията",
|
||||
"jsonSelectorErrorMessage": "Избраният JSON файл не може да се изплозва",
|
||||
"keystoreSelectorErrorMessage": "Избранията keystore файл не може да бъде използва"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Информация за приложението",
|
||||
"openButton": "Отвори",
|
||||
"installButton": "Инсталиране",
|
||||
"uninstallButton": "Деинсталирай",
|
||||
"unmountButton": "Демонтиране",
|
||||
"exportButton": "Експортиране",
|
||||
"deleteButton": "Изтрий",
|
||||
"rootDialogTitle": "Грешка",
|
||||
"lastPatchedAppDescription": "Това е резервно копие на последното модифицирано приложение.",
|
||||
"unmountDialogText": "Сигурни ли сте, че искате да демонтирате това приложение?",
|
||||
"uninstallDialogText": "Сигурни ли сте, че искате да деиснталирате това приложение?",
|
||||
"rootDialogText": "Приложението е инсталирано с superuser разрешения, но в момента ReVanced Manager няма разрешения. Моля, първо дайте superuser разрешения.",
|
||||
"removeAppDialogTitle": "Изтриване на приложението?",
|
||||
"removeAppDialogText": "Сигурни ли сте, че искате да изтриете това резервно копие?",
|
||||
"packageNameLabel": "Име на пакета",
|
||||
"installTypeLabel": "Тип инсталация",
|
||||
"mountTypeLabel": "Монтиране",
|
||||
"regularTypeLabel": "Нормален",
|
||||
"patchedDateLabel": "Дата на модификацията",
|
||||
"appliedPatchesLabel": "Приложени модификации",
|
||||
"sizeLabel": "Размер на файла",
|
||||
"patchedDateHint": "на ${date} в ${time}",
|
||||
"appliedPatchesHint": "${quantity} приложени модификации",
|
||||
"updateNotImplemented": "Тази функция все още не е внедрена"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Хора, които допринесоха"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Несъответствие на версиите",
|
||||
"mount_no_root": "Няма Root достъп",
|
||||
"mount_missing_installation": "Инсталацията не беше намерене",
|
||||
"status_failure_blocked": "Инсталацията беше блокирана",
|
||||
"install_failed_verification_failure": "Проверката беше неуспешна",
|
||||
"status_failure_invalid": "Инсталацията е невалидна",
|
||||
"install_failed_version_downgrade": "Версията не може да бъде понижена",
|
||||
"status_failure_conflict": "Имаше конфликт по време на инсталацията",
|
||||
"status_failure_storage": "Имаше проблем с хранилището по време на инсталацията",
|
||||
"status_failure_incompatible": "Инсталацията е несъвместима",
|
||||
"status_failure_timeout": "Настъпи таймаут по време на инсталацията",
|
||||
"status_unknown": "Инсталацията беше неуспешна",
|
||||
"mount_version_mismatch_description": "Инсталацията се провали поради това, че инсталираното приложение е с различна версия от тази на модифицираното приложение.\n\nИнсталирайте версията на приложението, което монтирате, и опитайте отново.",
|
||||
"mount_no_root_description": "Инсталацията се провали поради липса на Root достъп.\n\nМоля позволете Root достъп на ReVanced Manager и опитайте отново.",
|
||||
"mount_missing_installation_description": "Инсталацията се провали поради това, че немодифицираното приложение не е инсталирано на това устройство, за да може да се монтира върху него.\n\nИнсталирайте неподправеното приложение, преди да го монтирате, и опитайте отново.",
|
||||
"status_failure_timeout_description": "Инсталацията отне твърде много време.\n\nИскате ли да опитате отново?",
|
||||
"status_failure_storage_description": "Инсталацията се провали поради недостатъчно място в хранилището.\n\nОсвободете малко място и опитайте отново.",
|
||||
"status_failure_invalid_description": "Инсталацията се провали поради невалидност на модифицираното приложение.\n\nДеинсталирайте приложението и опитайте отново?",
|
||||
"status_failure_incompatible_description": "Приложението е несъвместимо с това устройство. \n\nИзползвайте APK, който се поддържа от това устройство, и опитайте отново.",
|
||||
"status_failure_conflict_description": "Инсталацията беше възпрепятствана от съществуваща инсталация на това приложение.\n\nДеинсталирайте инсталираното приложение и опитайте отново?",
|
||||
"status_failure_blocked_description": "Инсталацията беше блокирана от ${packageName}.\n\nПроменете настройките си за сигурност и опитайте отново.",
|
||||
"install_failed_verification_failure_description": "Инсталацията се провали поради проблем с проверката.\n\nПроменете настройките си за сигурност и опитайте отново.",
|
||||
"install_failed_version_downgrade_description": "Инсталацията се провали поради това, че модифицираното приложение е с по-ниска версия от инсталираното приложение.\n\nДеинсталирайте приложението и опитайте отново?",
|
||||
"status_unknown_description": "Инсталацията не е успешна поради неизвестна причина. Моля, опитайте отново."
|
||||
}
|
||||
}
|
279
assets/i18n/strings_bn_BD.i18n.json
Executable file
@ -0,0 +1,279 @@
|
||||
{
|
||||
"okButton": "ঠিক আছে",
|
||||
"cancelButton": "বাতিল করুন",
|
||||
"dismissButton": "বাতিল করুন",
|
||||
"quitButton": "কাটুন",
|
||||
"updateButton": "হালনাগাদ করুন",
|
||||
"suggested": "প্রস্তাবিত: ${version}",
|
||||
"yesButton": "হ্যাঁ",
|
||||
"noButton": "না",
|
||||
"warning": "সতর্কতা",
|
||||
"notice": "বিজ্ঞপ্তি",
|
||||
"noShowAgain": "পুনরায় দেখাবেন না",
|
||||
"add": "যুক্ত করুন",
|
||||
"remove": "অপসারণ করুন",
|
||||
"showChangelogButton": "পরিবর্তনসূচী দেখান",
|
||||
"showUpdateButton": "আপডেট দেখান",
|
||||
"navigationView": {
|
||||
"dashboardTab": "ড্যাশবোর্ড",
|
||||
"patcherTab": "প্যাচার",
|
||||
"settingsTab": "সেটিংস"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "সফলভাবে রিফ্রেশ করা হয়েছে",
|
||||
"widgetTitle": "ড্যাশবোর্ড",
|
||||
"updatesSubtitle": "আপডেটসমূহ",
|
||||
"lastPatchedAppSubtitle": "সর্বশেষ প্যাচকৃত অ্যাপ",
|
||||
"patchedSubtitle": "ইনস্টল করা অ্যাপ",
|
||||
"changeLaterSubtitle": "পরবর্তীতে আপনি এটি সেটিং থেকে পরিবর্তন করতে পারবেন।",
|
||||
"noSavedAppFound": "কোনো অ্যাপ পাওয়া যায় নি",
|
||||
"noInstallations": "কোন প্যাচড অ্যাপ্লিকেশন ইনস্টল করা হয়নি",
|
||||
"installUpdate": "আপডেট ইনস্টল করতে এগিয়ে যেতে চান?",
|
||||
"updateSheetTitle": "ReVanced Manager আপডেট করুন",
|
||||
"updateDialogTitle": "নতুন আপডেট পাওয়া যাচ্ছে",
|
||||
"updatePatchesSheetTitle": "ReVanced প্যাচসমূহ আপডেট করুন",
|
||||
"updateChangelogTitle": "পরিবর্তনসমূহ",
|
||||
"updateDialogText": "${file} এর জন্য নতুন আপডেট পাওয়া যাচ্ছে।\n\nবর্তমানে ইনস্টল করা সংস্করণ ${version}।",
|
||||
"downloadConsentDialogTitle": "প্রয়োজনীয় ফাইল ডাউনলোড করবেন?",
|
||||
"downloadConsentDialogText": "ReVanced Manager সঠিকভাবে কাজ করার জন্য কিছু প্রয়োজনীয় ফাইল ডাউনলোড করতে হবে।",
|
||||
"downloadConsentDialogText2": "এটি আপনাকে যুক্ত করবে ${url}.",
|
||||
"downloadingMessage": "আপডেট ডাউনলোড হচ্ছে...",
|
||||
"downloadedMessage": "আপডেট ডাউনলোড করা হয়েছে",
|
||||
"installingMessage": "আপডেট ইনস্টল করা হচ্ছে...",
|
||||
"errorDownloadMessage": "আপডেট ডাউনলোড করতে সফল হয় নি",
|
||||
"errorInstallMessage": "আপডেট ইনস্টল করতে সফল হয় নি",
|
||||
"noConnection": "কোন ইন্টারনেট সংযোগ নেই"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "তথ্য"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "লোড হচ্ছে...",
|
||||
"timeagoLabel": "${time} আগে"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "প্যাচার",
|
||||
"patchButton": "প্যাচ",
|
||||
"incompatibleArchWarningDialogText": "এই আর্কিটেকচারে প্যাচিং এখনো সমর্থিত নয় এবং সফল নাও হতে পারে। যেকোন ভাবে এগিয়ে যেতে চান?",
|
||||
"requiredOptionDialogText": "কিছু প্যাচ অপশন সেট করতে হবে।"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "একটি অ্যাপ নির্বাচন করুন",
|
||||
"widgetTitleSelected": "নির্বাচিত অ্যাপ",
|
||||
"widgetSubtitle": "কোন অ্যাপ নির্বাচন করা হয়নি",
|
||||
"noAppsLabel": "কোন অ্যাপ্লিকেশন পাওয়া যায়নি",
|
||||
"anyVersion": "যেকোন সংস্করণ"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "প্যাচসমূহ নির্বাচন করুন",
|
||||
"widgetTitleSelected": "নির্বাচিত প্যাচসমূহ",
|
||||
"widgetSubtitle": "প্রথমে একটি অ্যাপ্লিকেশন নির্বাচন করুন",
|
||||
"widgetEmptySubtitle": "কোন প্যাচ নির্বাচন করা হয়নি"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "সামাজিক যোগাযোগ মাধ্যম",
|
||||
"widgetSubtitle": "আমরা অনলাইনে!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "একটি অ্যাপ নির্বাচন করুন",
|
||||
"searchBarHint": "অ্যাপ খুঁজুন",
|
||||
"storageButton": "স্টোরেজ",
|
||||
"selectFromStorageButton": "স্টোরেজ থেকে নির্বাচন করুন",
|
||||
"errorMessage": "নির্বাচিত অ্যাপ্লিকেশনটি ব্যবহার করা সম্ভব নয়",
|
||||
"downloadToast": "ডাউনলোড ফাংশন এখনো উপলব্ধ হয়নি",
|
||||
"requireSuggestedAppVersionDialogText": "আপনার নির্বাচিত অ্যাপ সংস্করণটি প্রস্তাবিত অ্যাপ সংস্করণের সাথে মিলছে না এতে অনাকাঙ্খিত ত্রুটি ঘটতে পারে। অনুগ্রহপূর্বক প্রস্তাবিত অ্যাপ সংস্করণ ব্যবহার করুন।\n\nনির্বাচিত সংস্করণ: ${selected}\nপ্রস্তাবিত সংসকরণ: ${suggested}\n\nযেকোন ভাবে এগিয়ে যেতে চাইলে, সেটিং থেকে \"প্রস্তাবিত অ্যঅপ সংস্করণ প্রয়োজন\" সেটিংটি নিষ্ক্রিয় করুন।",
|
||||
"featureNotAvailable": "ফিচার সম্পাদন করা হয়নি",
|
||||
"featureNotAvailableText": "এই অ্যাপটি একটি খন্ডিত APK এবং শুধুমাত্র রুট পারমিশন এর উপর ভিত্তি করে এটি প্যাচ ও ইনস্টল করা যেতে পারে। যাইহোক, আপনি স্টোরেজ থেকে সম্পূর্ণ APK নির্বাচন করে অ্যাপ প্যাচ ও ইনস্টল করতে পারেন।"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "প্যাচ নির্বাচন করুন",
|
||||
"searchBarHint": "প্যাচ খুঁজুন",
|
||||
"universalPatches": "বৈশ্বিক প্যাচসমূহ",
|
||||
"newPatches": "নতুন প্যাচসমূহ",
|
||||
"patches": "প্যাচসমূহ",
|
||||
"doneButton": "সম্পন্ন হয়েছে",
|
||||
"defaultChip": "পূর্ব-নির্ধারিত",
|
||||
"defaultTooltip": "সকল পূর্ব-নির্ধারিত প্যাচ নির্বাচন করুন",
|
||||
"noneChip": "কোনটি নয়",
|
||||
"noneTooltip": "সকল প্যাচ অনির্বাচন করুন",
|
||||
"loadPatchesSelection": "নির্বাচিত প্যাচ লোড করুন",
|
||||
"noSavedPatches": "নির্বাচিত অ্যাপের জন্য কোন সংরক্ষিত প্যাচ নেই।\nবর্তমানে নির্বাচিত প্যাচ সংরক্ষণ করতে সম্পন্ন হয়েছে চাপুন।",
|
||||
"noPatchesFound": "নির্বাচিত অ্যাপের জন্য কোনো প্যাচ পাওয়া যায়নি",
|
||||
"setRequiredOption": "কিচু প্যাচের জন্য অপশন সেট করতে হবে:\n\n${patches}\n\nএগিয়ে যাওয়ার পূর্বে অনুগ্রহপূর্বক সেগুলো সেট করুন।"
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "কাস্টম ভ্যালু",
|
||||
"setToNull": "null সেট করুন",
|
||||
"nullValue": "এই অপশন ভ্যালু বর্তমানে null",
|
||||
"viewTitle": "প্যাচ অপশন",
|
||||
"saveOptions": "সংরক্ষণ করুন",
|
||||
"unselectPatch": "প্যাচ অনির্বাচন করুন",
|
||||
"tooltip": "আরও ইনপুট অপশন",
|
||||
"selectFilePath": "ফাইলের স্থান নির্বাচন করুন",
|
||||
"selectFolder": "ফোল্ডার নির্বাচন করুন",
|
||||
"requiredOption": "এই অপশনটি সেট করা আবশ্যক",
|
||||
"unsupportedOption": "এই অপশনসটি অসমর্থিত",
|
||||
"requiredOptionNull": "এই অপশনগুলো সেট করতে হবে:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "এই প্যাচটি নির্বাচন করলে প্যাচিং ত্রুটিপূর্ণ হতে পারে।\n\nঅ্যাপ সংস্করণ: ${packageVersion}\nসমর্থিত সংস্করণ:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "এই অ্যাপ সংস্করণের জন্য প্যাচ সমর্থিত নয়।",
|
||||
"unsupportedRequiredOption": "এই প্যাচটিতে একটি প্রয়োজনীয় অপশন রয়েছে যা এই অ্যাপটি সমর্থন করে না",
|
||||
"patchesChangeWarningDialogText": "পূর্ব নির্ধারিত নির্বাচিত প্যাচ এবং অপশন ব্যবহার করার প্রস্তাব রাখে। এগুলো পরিবর্তন করার মাধ্যমে অনাকাঙ্খিত ইস্যু হতে পারে।\n\nপ্যাচ নির্বাচন পরিবর্তন করার পূর্বে আপনাকে অবশ্যই সেটিং থেকে \"প্যাচ নির্বাচন পরিবর্তন করার অনুমতি\" সচল করতে হবে।",
|
||||
"patchesChangeWarningDialogButton": "পূর্বনির্ধারিত নির্বাচন ব্যবহার করুন"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "ইনস্টল করার ধরণ নির্বাচন করুন",
|
||||
"installTypeDescription": "যে প্রক্রিয়ায় ইনস্টল করা এগিয়ে নিতে চান তা নির্বাচন করুন।",
|
||||
"installButton": "ইনস্টল করুন",
|
||||
"installRootType": "মাউন্ট",
|
||||
"installNonRootType": "সাধারণ",
|
||||
"warning": "অনাকাঙ্ক্ষিত ইস্যু এড়াতে প্যাচকৃত অ্যাপের স্বয়ংক্রিয় আপডেট নিষ্ক্রিয় করুন।",
|
||||
"pressBackAgain": "বাতিল করতে ব্যাক প্রেস করুন",
|
||||
"openButton": "অ্যাপ খুলুন",
|
||||
"notificationTitle": "ReVanced Manager প্যাচ করছে",
|
||||
"notificationText": "ইনস্টলারে ফিরে যেতে আলতো চাপুন",
|
||||
"exportApkButtonTooltip": "প্যাচ হওয়া APK রপ্তানি করুন",
|
||||
"exportLogButtonTooltip": "লগ রপ্তানি করুন",
|
||||
"screenshotDetected": "একটি স্ক্রিনশট শনাক্ত করা হয়েছে। আপনি যদি লগ শেয়ার করার চেষ্টা করে থাকেন, অনুগ্রপূর্বক এর পরিবর্তে টেক্সট শেয়ার করুন।\n\nক্লিপবোর্ডে লগ কপি করতে চান?",
|
||||
"copiedToClipboard": "ক্লিপবোর্ডে লগ কপি করা হয়েছে",
|
||||
"noExit": "ইনস্টলার এখনো চলমান, বের হওয়া সম্ভব নয়..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "সেটিংস",
|
||||
"appearanceSectionTitle": "রূপ",
|
||||
"teamSectionTitle": "দল",
|
||||
"debugSectionTitle": "ডিবাগিং",
|
||||
"advancedSectionTitle": "উন্নত",
|
||||
"exportSectionTitle": "আমদানি ও রপ্তানি",
|
||||
"dataSectionTitle": "তথ্যের উৎস",
|
||||
"themeModeLabel": "অ্যাপের থীম",
|
||||
"systemThemeLabel": "সিস্টেম",
|
||||
"lightThemeLabel": "উজ্জ্বল",
|
||||
"darkThemeLabel": "অন্ধকার মোড",
|
||||
"dynamicThemeLabel": "ম্যাটেরিয়াল ইউ",
|
||||
"dynamicThemeHint": "আপনার ডিভাইসের লুকের কাছাকাছি অভিজ্ঞতা নিন",
|
||||
"languageLabel": "ভাষা",
|
||||
"languageUpdated": "ভাষা হালনাগাদ করা হয়েছে",
|
||||
"sourcesLabel": "বিকল্প উৎস",
|
||||
"useAlternativeSources": "বিকল্প উৎস ব্যবহার করুন",
|
||||
"sourcesResetDialogTitle": "পুনরায় সেট করুন",
|
||||
"sourcesResetDialogText": "আপনি কি নিশ্চিতভাবে আপনার উৎসগুলোকে পূর্বনির্ধারিত উৎসে ফিরিয়ে নিতে চান?",
|
||||
"apiURLResetDialogText": "আপনি কি নিশ্চিতভাবে আপনার API URL কে তার মূল ভ্যালুতে পুনরায় সেট করতে চান?",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "ReVanced Manager এর API URL কনফিগার করুন",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "প্যাচ এর উদ্ভাবক",
|
||||
"sourcesPatchesLabel": "প্যাচ এর উৎস",
|
||||
"contributorsLabel": "অবদানকারীগণ",
|
||||
"contributorsHint": "ReVanced-এ অবদানকারীদের তালিকা",
|
||||
"logsLabel": "লগ শেয়ার করুন",
|
||||
"logsHint": "ReVanced Manager লগ শেয়ার করুন",
|
||||
"enablePatchesSelectionLabel": "প্যাচ নির্বাচন পরিবর্তন করার অনুমতি",
|
||||
"enablePatchesSelectionHint": "প্যাচ নির্বাচন করা বা নির্বাচন বাতিল করা আটকাবে না",
|
||||
"enablePatchesSelectionWarningText": "নির্বাচিত প্যাচগুলো পরিবর্তন করলে অনাকাঙ্খিত ত্রুটি ঘটতে পারে।\n\nযেকোন ভাবে এগিয়ে যেতে চান?",
|
||||
"disablePatchesSelectionWarningText": "আপনি নির্বাচিত প্যাচ পরিবর্তনকে নিষ্ক্রিয় করতে যাচ্ছেন।\nপূর্বনির্ধারিত নির্বাচিত প্যাচসমূহ ফিরিয়ে আনা হবে।\n\nযেকোন ভাবে নিষ্ক্রিয় করতে চান?",
|
||||
"autoUpdatePatchesLabel": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে আপডেট করুন",
|
||||
"autoUpdatePatchesHint": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে সর্বশেষ সংস্করণে আপডেট হবে",
|
||||
"showUpdateDialogLabel": "হালনাগাদ ডায়ালগ দেখান",
|
||||
"showUpdateDialogHint": "যখন হালনাগাদ উপলব্ধ থাকবে তখন একটি ডায়ালগ দেখান",
|
||||
"universalPatchesLabel": "বৈশ্বিক প্যাচসমূহ দেখান",
|
||||
"universalPatchesHint": "সকল অ্যাপ এবং বৈশ্বিক প্যাচসমূহ দেখায় (অ্যাপ লিস্ট দেখানো একটু ধীর হতে পারে)",
|
||||
"lastPatchedAppLabel": "প্যাচকৃত অ্যাপ সংরক্ষণ করুন",
|
||||
"versionCompatibilityCheckLabel": "সংস্করণ সামঞ্জস্যতা পরীক্ষা করা",
|
||||
"versionCompatibilityCheckHint": "নির্বাচিত অ্যাপ সংস্করণের সাথে সামঞ্জস্যপূর্ণ নয় এমন প্যাচ নির্বাচন করা আটকায়",
|
||||
"requireSuggestedAppVersionLabel": "প্রস্তাবিত অ্যাপ সংস্করণ প্রয়োজন",
|
||||
"requireSuggestedAppVersionHint": "প্রস্তাবিত নয় এমন অ্যাপ সংস্করণ নির্বাচন করা আটকায়",
|
||||
"requireSuggestedAppVersionDialogText": "অপ্রস্তাবিত সংস্করণের অ্যাপ নির্বাচন করার ফলে অজানা ইস্যু হতে পারে।\n\nআপনি কি যেকোন ভাবে এগিয়ে যেতে চান?",
|
||||
"aboutLabel": "সম্পর্কিত",
|
||||
"snackbarMessage": "ক্লিপবোর্ডে কপি করা হয়েছে",
|
||||
"restartAppForChanges": "পরিবর্তনগুলি প্রয়োগ করতে অ্যাপটি পুনরায় চালু করুন",
|
||||
"deleteTempDirLabel": "অস্থায়ী ফাইল মুছুন",
|
||||
"deleteTempDirHint": "অব্যবহৃত অস্থায়ী ফাইল মুছুন",
|
||||
"deletedTempDir": "অস্থায়ী ফাইল মুছে ফেলা হয়েছে",
|
||||
"exportPatchesLabel": "নির্বাচিত প্যাচ রপ্তানি করুন",
|
||||
"exportPatchesHint": "নির্বাচিত প্যাচ একটি JSON ফাইলে রপ্তানি করুন",
|
||||
"exportedPatches": "নির্বাচিত প্যাচ রপ্তানি করা হয়েছে",
|
||||
"noExportFileFound": "রপ্তানি করার জন্য কোন প্যাচ নির্বাচন করা হয়নি",
|
||||
"importPatchesLabel": "নির্বাচিত প্যাচ আমদানি করুন",
|
||||
"importPatchesHint": "একটি JOSN ফাইল থেকে প্যাচ আমদানি করুন",
|
||||
"importedPatches": "নির্বাচিত প্যাচ আমদানি করা হয়েছে",
|
||||
"resetStoredPatchesLabel": "নির্বাচিত প্যাচ আবার সেট করুন",
|
||||
"resetStoredPatchesHint": "সংরক্ষিত নির্বাচিত প্যাচ আবার সেট করুন",
|
||||
"resetStoredPatchesDialogTitle": "নির্বাচিত প্যাচ আবার সেট করবেন?",
|
||||
"resetStoredPatchesDialogText": "পূর্বনির্ধারিত নির্বাচিত প্যাচ ফিরিয়ে আনা হবে।",
|
||||
"resetStoredPatches": "নির্বাচিত প্যাচ আবার সেট করা হয়েছে",
|
||||
"resetStoredOptionsLabel": "প্যাচ অপশন আবার সেট করুন",
|
||||
"resetStoredOptionsHint": "সকল প্যাচ অপশন আবার সেট করুন",
|
||||
"resetStoredOptionsDialogTitle": "প্যাচ অপশন আবার সেট করবেন?",
|
||||
"resetStoredOptionsDialogText": "প্যাচ অপশন আবার সেট করলে সকল সংরক্ষিত প্যাচ অপশন অপসারণ করা হবে।",
|
||||
"resetStoredOptions": "অপশন আবার সেট করা হয়েছে",
|
||||
"deleteLogsLabel": "লগ পরিস্কার করুন",
|
||||
"deleteLogsHint": "ReVanced Manager এর সংগৃহীত লগ মুছুন",
|
||||
"deletedLogs": "লগ মুছে ফেলা হয়েছে",
|
||||
"regenerateKeystoreLabel": "কীস্টোর পুনরায় তৈরি করুন",
|
||||
"regenerateKeystoreHint": "অ্যাপ সাইন করতে ব্যবহৃত কীস্টোর পুনরায় তৈরি করুন",
|
||||
"regenerateKeystoreDialogTitle": "কীস্টোর পুনরায় তৈরি করবেন?",
|
||||
"regenerateKeystoreDialogText": "পুরোনো কীস্টোর দিয়ে সাইন করা প্যাচড অ্যাপগুলো আপডেট করতে পারবেন না।",
|
||||
"regeneratedKeystore": "কীস্টোর আবার তৈরি করা হয়েছে",
|
||||
"exportKeystoreLabel": "কীস্টোর রপ্তানি করুন",
|
||||
"exportKeystoreHint": "অ্যাপ সাইন করতে ব্যবহৃত কীস্টোর রপ্তানি করুন",
|
||||
"exportedKeystore": "কীস্টোর এক্সপোর্ট করা হয়েছে",
|
||||
"noKeystoreExportFileFound": "এক্সপোর্ট করার জন্য কোন কীস্টোর নেই",
|
||||
"importKeystoreLabel": "কীস্টোর ইমপোর্ট করুন",
|
||||
"importKeystoreHint": "অ্যাপ সাইন করতে ব্যবহৃত কীস্টোর আমদানি করুন",
|
||||
"importedKeystore": "কীস্টোর আমদানি করা হয়েছে",
|
||||
"selectKeystorePassword": "কীস্টোরটির পাসওয়ার্ড",
|
||||
"selectKeystorePasswordHint": "অ্যাপ সাইন করতে ব্যবহৃত কীস্টোরের পাসওয়ার্ড নির্বাচন করুন",
|
||||
"jsonSelectorErrorMessage": "নির্বাচিত JSON ফাইল ব্যবহার করা সম্ভব নয়",
|
||||
"keystoreSelectorErrorMessage": "নির্বাচিত কীস্টোর ফাইল ব্যবহার করা সম্ভব নয়"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "অ্যাপের তথ্য",
|
||||
"openButton": "খুলুন",
|
||||
"installButton": "ইনস্টল করুন",
|
||||
"uninstallButton": "আনইন্সটল করুন",
|
||||
"unmountButton": "আনমাউন্ট",
|
||||
"rootDialogTitle": "ত্রুটি দেখা দিয়েছে",
|
||||
"unmountDialogText": "আপনি কি অ্যাপটি আনমাউন্ট করার ব্যপারে নিশ্চিত?",
|
||||
"uninstallDialogText": "আপনি কি অ্যাপটি আনইনস্টল করার ব্যপারে নিশ্চিত?",
|
||||
"rootDialogText": "অ্যাপটি Superuser অনুমতি নিয়ে ইনস্টল করা হয়েছে, কিন্তু বর্তমানে ReVanced Manager এর Superuser অনুমতি নেই। অনুগ্রহপূর্বক প্রথমে Superuser অনুমতি দিন।",
|
||||
"packageNameLabel": "প্যাকেজের নাম",
|
||||
"installTypeLabel": "ইনস্টলের ধরন",
|
||||
"mountTypeLabel": "মাউন্ট",
|
||||
"regularTypeLabel": "সাধারণ",
|
||||
"patchedDateLabel": "প্যাচ করার তারিখ",
|
||||
"appliedPatchesLabel": "ব্যবহৃত প্যাচ",
|
||||
"patchedDateHint": "${date} তারিখে ${time} টায়",
|
||||
"appliedPatchesHint": "${quantity} টি প্যাচ ব্যবহৃত",
|
||||
"updateNotImplemented": "এই ফিচারটি এখনো কার্যকর করা হয়নি"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "অবদানকারীগণ"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "সংস্করণ মেলেনি",
|
||||
"mount_no_root": "রুট অ্যাক্সেস নেই",
|
||||
"mount_missing_installation": "ইনস্টল পাওয়া যায়নি",
|
||||
"status_failure_blocked": "ইনস্টল আটকানো হয়েছে",
|
||||
"install_failed_verification_failure": "যাচাইকরণ ব্যর্থ হয়েছে",
|
||||
"status_failure_invalid": "ইনস্টল সঠিক নয়",
|
||||
"install_failed_version_downgrade": "ডাউনগ্রেড সম্ভব নয়",
|
||||
"status_failure_conflict": "ইনস্টল কনফ্লিক্ট হচ্ছে",
|
||||
"status_failure_storage": "ইনস্টলেশন স্টোরেজ সমস্যা",
|
||||
"status_failure_incompatible": "ইনস্টলেশন অনুপযুক্ত",
|
||||
"status_failure_timeout": "ইনস্টলেশন সময় পার হয়েছে",
|
||||
"status_unknown": "ইনস্টলেশন ব্যর্থ হয়েছে",
|
||||
"mount_version_mismatch_description": "প্যাচ অ্যাপ ও ইনস্টলকৃত অ্যাপের সংস্করণ ভিন্ন হওয়ার কারণে ইনস্টলেশন ব্যর্থ হয়েছে।\n\nআপনি যে সংস্করণটি মাউন্ট করতে চাচ্ছেন তা আগে ইনস্টল করুন অতঃপর আবার চেষ্টা করুন।",
|
||||
"mount_no_root_description": "রুট প্রবেশাধিকারের অনুমতি না দেয়ার কারণে ইনস্টলেশন ব্যর্থ হয়েছে।\n\nReVanced Manager এর রুট প্রবেশাধিকার অনুমতি দিন এবং আবার চেষ্টা করুন।",
|
||||
"mount_missing_installation_description": "এটির উপর মাউন্ট করার জন্য এই ডিভাইসে আনপ্যাচড অ্যাপ ইনস্টল না হওয়ার কারণে ইনস্টলেশন ব্যর্থ হয়েছে।\n\nমাউন্ট করার আগে আনপ্যাচড অ্যাপ ইনস্টল করুন এবং আবার চেষ্টা করুন।",
|
||||
"status_failure_timeout_description": "ইন্সটলেশন শেষ হতে অনেক সময় লেগেছে.\n\nআপনি আবার চেষ্টা করতে চান?",
|
||||
"status_failure_storage_description": "অপর্যাপ্ত সঞ্চয়স্থানের কারণে ইনস্টলেশন ব্যর্থ হয়েছে.\n\nকিছু জায়গা খালি করুন এবং আবার চেষ্টা করুন.",
|
||||
"status_failure_invalid_description": "প্যাচ করা অ্যাপটি অবৈধ হওয়ার কারণে ইনস্টলেশন ব্যর্থ হয়েছে.\n\nঅ্যাপটি আনইনস্টল করে আবার চেষ্টা করবেন?",
|
||||
"status_failure_conflict_description": "ইনস্টলেশনটি অ্যাপটির বিদ্যমান ইনস্টলেশন দ্বারা প্রতিরোধ করা হয়েছে.\n\nইনস্টল করা অ্যাপটি আনইনস্টল করে আবার চেষ্টা করবেন?",
|
||||
"status_failure_blocked_description": "ইনস্টলেশনটি ${packageName} দ্বারা ব্লক করা হয়েছে.\n\nআপনার নিরাপত্তা সেটিংস সামঞ্জস্য করুন এবং আবার চেষ্টা করুন.",
|
||||
"install_failed_verification_failure_description": "একটি যাচাইকরণ সমস্যার কারণে ইনস্টলেশন ব্যর্থ হয়েছে.\n\nআপনার নিরাপত্তা সেটিংস সামঞ্জস্য করুন এবং আবার চেষ্টা করুন.",
|
||||
"install_failed_version_downgrade_description": "প্যাচ করা অ্যাপ ইনস্টল করা অ্যাপের চেয়ে কম সংস্করণ হওয়ায় ইনস্টলেশন ব্যর্থ হয়েছে.\n\nঅ্যাপটি আনইনস্টল করে আবার চেষ্টা করবেন?",
|
||||
"status_unknown_description": "একটি অজানা কারণে ইনস্টলেশন ব্যর্থ হয়েছে. অনুগ্রহপূর্বক আবার চেষ্টা করুন."
|
||||
}
|
||||
}
|
19
assets/i18n/strings_bs_BA.i18n.json
Executable file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"navigationView": {},
|
||||
"homeView": {},
|
||||
"applicationItem": {},
|
||||
"latestCommitCard": {},
|
||||
"patcherView": {},
|
||||
"appSelectorCard": {},
|
||||
"patchSelectorCard": {},
|
||||
"socialMediaCard": {},
|
||||
"appSelectorView": {},
|
||||
"patchesSelectorView": {},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {},
|
||||
"installerView": {},
|
||||
"settingsView": {},
|
||||
"appInfoView": {},
|
||||
"contributorsView": {},
|
||||
"installErrorDialog": {}
|
||||
}
|
171
assets/i18n/strings_ca_ES.i18n.json
Executable file
@ -0,0 +1,171 @@
|
||||
{
|
||||
"okButton": "D'acord",
|
||||
"cancelButton": "Cancel·lar",
|
||||
"dismissButton": "Descarta",
|
||||
"quitButton": "Sortir",
|
||||
"updateButton": "Actualitzar",
|
||||
"suggested": "Suggerit: ${version}",
|
||||
"yesButton": "Sí",
|
||||
"noButton": "No",
|
||||
"warning": "Advertència",
|
||||
"notice": "Avís",
|
||||
"noShowAgain": "No ho tornis a mostrar",
|
||||
"add": "Afegir",
|
||||
"remove": "Suprimeix",
|
||||
"showChangelogButton": "Mostra el registre de canvis",
|
||||
"showUpdateButton": "Mostrà actualització",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Tauler de control",
|
||||
"patcherTab": "Pedaçor",
|
||||
"settingsTab": "Configuració"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "S'ha actualitzat correctament",
|
||||
"widgetTitle": "Tauler de control",
|
||||
"updatesSubtitle": "Actualitzacions",
|
||||
"lastPatchedAppSubtitle": "Última aplicació pedaçada",
|
||||
"patchedSubtitle": "Aplicacions instal·lades",
|
||||
"changeLaterSubtitle": "Pots caviar això després en la configuració.",
|
||||
"noSavedAppFound": "No s'ha trobat cap aplicació",
|
||||
"noInstallations": "Cap aplicació pedaçada instal·lada",
|
||||
"installUpdate": "Continuar instal·lant l'actualització?",
|
||||
"updateSheetTitle": "Actualitzar ReVanced Mànager",
|
||||
"updateDialogTitle": "Nova actualització disponible",
|
||||
"updatePatchesSheetTitle": "Actualitzar pedaços de ReVanced",
|
||||
"updateChangelogTitle": "Historial de canvis",
|
||||
"updateDialogText": "Una nova actualització està disponible per ${file}.\n\nLa versió actualment instal·lada és ${version}.",
|
||||
"downloadConsentDialogTitle": "Descarregar arxius necessaris?",
|
||||
"downloadConsentDialogText": "ReVanced Mànager necessita descarregar arxius necessaris per treballar correctament.",
|
||||
"downloadConsentDialogText2": "Això et connectarà a ${url}",
|
||||
"downloadingMessage": "Descarregant l'actualització...",
|
||||
"downloadedMessage": "S'ha baixat l'actualització",
|
||||
"installingMessage": "Instal·lant l'actualització...",
|
||||
"errorDownloadMessage": "No s'ha pogut baixar l'actualització",
|
||||
"errorInstallMessage": "No s'ha pogut instal·lar l'actualització",
|
||||
"noConnection": "No hi ha connexió a Internet"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Informació"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "S'està carregant...",
|
||||
"timeagoLabel": "Fa ${time} "
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Pedaçor",
|
||||
"patchButton": "Pedaçar",
|
||||
"incompatibleArchWarningDialogText": "Aquesta arquitectura encara no està suportat i pot fallar. Voleu continuar de totes maneres?",
|
||||
"removedPatchesWarningDialogText": "Pedaços eliminats des d'última vegada que has modificat aquesta aplicació:\n\n${patches}\n\n${newPatches}Continuar igualment?",
|
||||
"addedPatchesDialogText": "Pedaços des de l'última vegada que has modificat aquesta aplicació:\n\n${addedPatches}",
|
||||
"requiredOptionDialogText": "Algunes modificacions s'han de configurar."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Selecciona l'aplicació",
|
||||
"widgetTitleSelected": "Aplicació seleccionada",
|
||||
"widgetSubtitle": "Cap aplicació seleccionada",
|
||||
"noAppsLabel": "No s'ha trobat cap aplicació",
|
||||
"anyVersion": "Qualsevol versió"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Seleccioneu pedaços",
|
||||
"widgetTitleSelected": "Pedaços seleccionats",
|
||||
"widgetSubtitle": "Primer seleccioneu una aplicació",
|
||||
"widgetEmptySubtitle": "No s'ha seleccionat cap pedaç"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Xarxes socials",
|
||||
"widgetSubtitle": "Estem en línia!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Selecciona una aplicació",
|
||||
"searchBarHint": "Cerca aplicació",
|
||||
"storageButton": "Emmagatzematge",
|
||||
"selectFromStorageButton": "Selecciona des d'emmagatzematge",
|
||||
"errorMessage": "No s'ha pogut utilitzar l'aplicació seleccionada",
|
||||
"downloadToast": "La funció de descàrrega encara no està disponible",
|
||||
"requireSuggestedAppVersionDialogText": "La versió de l'aplicació que heu seleccionat no coincideix amb la versió suggerida que pot provocar problemes inesperats. Utilitzeu la versió suggerida.\n\nVersió Seleccionada: ${selected}\nVersió suggerida: ${suggested}\n\nPer continuar de totes maneres, desactiva \"Requereix la versió de l'aplicació suggerida\" a la configuració.",
|
||||
"featureNotAvailable": "Característíca no implementada",
|
||||
"featureNotAvailableText": "Aquesta aplicació és una APK dividida i només es pot apedaçar i instal·lar de manera fiable muntant amb permisos root. No obstant això, podeu modificar i instal·lar un APK complet seleccionant-lo des de l'emmagatzematge."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Seleccioneu pedaços",
|
||||
"searchBarHint": "Cerca pedaços",
|
||||
"universalPatches": "Modificacions universals",
|
||||
"newPatches": "Noves modificacions",
|
||||
"patches": "modificacions",
|
||||
"doneButton": "Fet",
|
||||
"defaultChip": "Per defecte",
|
||||
"defaultTooltip": "Seleciona totes les modificacions predeterminades",
|
||||
"noneChip": "Cap",
|
||||
"noneTooltip": "Desseleccionar tots els pegats",
|
||||
"loadPatchesSelection": "Carrega la modificació seleccionada",
|
||||
"noSavedPatches": "No s'ha desat la selecció de pedaç per a l'aplicació seleccionada.\nPremeu Fet per a desar la selecció actual.",
|
||||
"noPatchesFound": "No s'han trobat pedaços per a l'aplicació seleccionada",
|
||||
"setRequiredOption": "Algunes modificacions han de ser configurades:\n\n${patches}\n\nConfigura les abans de continuar."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Valor personalitzat",
|
||||
"setToNull": "Estableix com null",
|
||||
"nullValue": "El valor d'aquest valor és null",
|
||||
"viewTitle": "Opcions de modificació",
|
||||
"saveOptions": "Guardar",
|
||||
"unselectPatch": "Desselecciona modificacions",
|
||||
"tooltip": "Més opcions d'entrada",
|
||||
"selectFilePath": "Selecciona direcció de l'arxiu",
|
||||
"selectFolder": "Selecciona carpeta",
|
||||
"requiredOption": "Configurar aquesta opció es necessari"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "La selecció d'aquest pedaç pot provocar errors d'aplicació.\n\nVersió de l'aplicació: ${packageVersion}\nVersions compatibles:\n${supportedVersions}"
|
||||
},
|
||||
"installerView": {
|
||||
"installButton": "Instal·la",
|
||||
"openButton": "Obre",
|
||||
"notificationTitle": "ReVanced Manager està aplicant pedaços",
|
||||
"notificationText": "Toqui per tornar a l'instal·lador",
|
||||
"noExit": "L'instal·lador està en funcionament, no es pot sortir..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Configuració",
|
||||
"appearanceSectionTitle": "Aparença",
|
||||
"teamSectionTitle": "Equip",
|
||||
"advancedSectionTitle": "Avançat",
|
||||
"exportSectionTitle": "Importar i exportar",
|
||||
"dynamicThemeHint": "Gaudeixi d'una experiència més acord al seu dispositiu",
|
||||
"languageLabel": "Llengua",
|
||||
"sourcesResetDialogTitle": "Restablir",
|
||||
"apiURLLabel": "Direcció URL de la API",
|
||||
"selectApiURL": "URL de l'API",
|
||||
"orgPatchesLabel": "Organització dels pedaços",
|
||||
"sourcesPatchesLabel": "Font dels pedaços",
|
||||
"contributorsLabel": "Col·laboradors",
|
||||
"contributorsHint": "Una llista de col·laboradors de ReVanced",
|
||||
"aboutLabel": "Quant a",
|
||||
"snackbarMessage": "S'ha copiat al porta-retalls",
|
||||
"restartAppForChanges": "Reinicieu l'aplicació per a aplicar els canvis",
|
||||
"deleteTempDirLabel": "Esborrar arxius temporals",
|
||||
"deleteTempDirHint": "Suprimeix els fitxers temporals no utilitzats",
|
||||
"deletedTempDir": "Arxius temporals eliminats",
|
||||
"deletedLogs": "Registres suprimits",
|
||||
"jsonSelectorErrorMessage": "No es pot utilitzar el fitxer JSON seleccionat"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Informació de l'aplicació",
|
||||
"openButton": "Obre",
|
||||
"installButton": "Instal·la",
|
||||
"uninstallButton": "Desinstal·la",
|
||||
"rootDialogTitle": "Error",
|
||||
"rootDialogText": "L'aplicació s'ha instal·lat amb permisos de superusuari, però actualment ReVanced Manager no té cap permís.\nSi us plau, concediu primer permisos de superusuari.",
|
||||
"packageNameLabel": "Nom del paquet",
|
||||
"installTypeLabel": "Tipus d'instal·lació",
|
||||
"patchedDateLabel": "Data pedaçada",
|
||||
"appliedPatchesLabel": "Pedaços aplicats",
|
||||
"patchedDateHint": "${date} a les ${time}",
|
||||
"appliedPatchesHint": "${quantity} pedaços aplicats",
|
||||
"updateNotImplemented": "Aquesta funció encara no s'ha implementat"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Col·laboradors"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
}
|
298
assets/i18n/strings_cs_CZ.i18n.json
Executable file
@ -0,0 +1,298 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Zrušit",
|
||||
"dismissButton": "Zrušit",
|
||||
"quitButton": "Odejít",
|
||||
"updateButton": "Aktualizovat",
|
||||
"suggested": "Doporučeno: ${version}",
|
||||
"yesButton": "Ano",
|
||||
"noButton": "Ne",
|
||||
"warning": "Varování",
|
||||
"notice": "Upozornění",
|
||||
"noShowAgain": "Již nezobrazovat",
|
||||
"add": "Přidat",
|
||||
"remove": "Odebrat",
|
||||
"showChangelogButton": "Zobrazit seznam změn",
|
||||
"showUpdateButton": "Zobrazit aktualizaci",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Řídící panel",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Nastavení"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Úspěšně obnoveno",
|
||||
"widgetTitle": "Řídící panel",
|
||||
"updatesSubtitle": "Aktualizace",
|
||||
"lastPatchedAppSubtitle": "Poslední upravená aplikace",
|
||||
"patchedSubtitle": "Nainstalované aplikace",
|
||||
"changeLaterSubtitle": "Tuto možnost můžete změnit později v nastavení.",
|
||||
"noSavedAppFound": "Nebyla nalezena žádná aplikace",
|
||||
"noInstallations": "Nejsou nainstalovány žádné záplatované aplikace",
|
||||
"installUpdate": "Pokračovat v instalaci aktualizace?",
|
||||
"updateSheetTitle": "Aktualizovat ReVanced Manager",
|
||||
"updateDialogTitle": "Nová aktualizace k dispozici",
|
||||
"updatePatchesSheetTitle": "Aktualizovat záplaty ReVanced",
|
||||
"updateChangelogTitle": "Seznam změn",
|
||||
"updateDialogText": "Nová aktualizace je k dispozici pro ${file}.\n\nAktuálně nainstalovaná verze je ${version}.",
|
||||
"downloadConsentDialogTitle": "Stáhnout potřebné soubory?",
|
||||
"downloadConsentDialogText": "ReVanced Manager potřebuje stáhnout potřebné soubory, aby fungoval správně.",
|
||||
"downloadConsentDialogText2": "Tímto se připojíte k ${url}.",
|
||||
"downloadingMessage": "Stahování aktualizace...",
|
||||
"downloadedMessage": "Aktualizace byla stažena",
|
||||
"installingMessage": "Instalace aktualizace...",
|
||||
"errorDownloadMessage": "Nelze stáhnout aktualizaci",
|
||||
"errorInstallMessage": "Aktualizace se nepodařilo nainstalovat",
|
||||
"noConnection": "Žádné připojení k internetu"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Info"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Načítání...",
|
||||
"timeagoLabel": "před ${time}"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Záplatovač",
|
||||
"patchButton": "Záplatovat",
|
||||
"incompatibleArchWarningDialogText": "Úprava této architektury není zatím podporována a může selhat. Přesto pokračovat?",
|
||||
"removedPatchesWarningDialogText": "Odstranili jste záplaty od poslední úpravy této aplikace:\n\n${patches}\n\n${newPatches}Pokračovat?",
|
||||
"addedPatchesDialogText": "Přidány záplaty od poslední úpravy této aplikace:\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "Je třeba nastavit některé možnosti záplat."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Vybrat aplikaci",
|
||||
"widgetTitleSelected": "Vybraná aplikace",
|
||||
"widgetSubtitle": "Není vybrána žádná aplikace",
|
||||
"noAppsLabel": "Nebyly nalezeny žádné aplikace",
|
||||
"anyVersion": "Jakákoli verze"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Vybrat patche",
|
||||
"widgetTitleSelected": "Vybrané patche",
|
||||
"widgetSubtitle": "Nejprve vyberte aplikaci",
|
||||
"widgetEmptySubtitle": "Nejsou vybrány žádné patche"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Sociální sítě",
|
||||
"widgetSubtitle": "Jsme online!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Vyberte aplikaci",
|
||||
"searchBarHint": "Vyhledat aplikaci",
|
||||
"storageButton": "Uložiště",
|
||||
"selectFromStorageButton": "Vybrat z úložiště",
|
||||
"errorMessage": "Vybranou aplikaci nelze použít",
|
||||
"downloadToast": "Funkce stahování zatím není dostupná",
|
||||
"requireSuggestedAppVersionDialogText": "Vybraná verze aplikace se neshoduje s navrhovanou verzí, což může vést k neočekávaným problémům. Prosím použijte navrhovanou verzi.\n\nVybraná verze: ${selected}\nNavrhovaná verze: ${suggested}\n\nChcete-li přesto pokračovat, zakažte v nastavení \"Vyžadovat navrhovanou verzi aplikace\".",
|
||||
"featureNotAvailable": "Funkce není implementována",
|
||||
"featureNotAvailableText": "Tato aplikace je rozdělená APK a může být spolehlivě nainstalována pouze připojením oprávnění root. Nicméně, můžete opravit a nainstalovat plnou APK výběrem z úložiště."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Vybrat patche",
|
||||
"searchBarHint": "Vyhledat patche",
|
||||
"universalPatches": "Univerzální záplaty",
|
||||
"newPatches": "Nové záplaty",
|
||||
"patches": "Záplaty",
|
||||
"doneButton": "Hotovo",
|
||||
"defaultChip": "Výchozí",
|
||||
"defaultTooltip": "Vybrat všechny výchozí patche",
|
||||
"noneChip": "Žádné",
|
||||
"noneTooltip": "Zrušit výběr všech patchů",
|
||||
"loadPatchesSelection": "Načíst výběr záplat",
|
||||
"noSavedPatches": "Žádný uložený výběr patch pro vybranou aplikaci.\nStisknutím Dokončeno uložíte aktuální výběr.",
|
||||
"noPatchesFound": "Pro vybranou aplikaci nebyly nalezeny žádné záplaty",
|
||||
"setRequiredOption": "Některé záplaty vyžadují nastavení:\n\n${patches}\n\nPřed pokračováním je prosím nastavte."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Vlastní hodnota",
|
||||
"setToNull": "Nastavit na null",
|
||||
"nullValue": "Tato hodnota volby je v současné době null",
|
||||
"viewTitle": "Nastavení záplat",
|
||||
"saveOptions": "Uložit",
|
||||
"unselectPatch": "Zrušit výběr patch",
|
||||
"tooltip": "Další možnosti vstupu",
|
||||
"selectFilePath": "Zvolte cestu k souboru",
|
||||
"selectFolder": "Vybrat složku",
|
||||
"requiredOption": "Nastavení této možnosti je vyžadováno",
|
||||
"unsupportedOption": "Tato možnost není podporována",
|
||||
"requiredOptionNull": "Tyto možnosti musí být nastaveny:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Výběrem této záplaty může dojít k chybám.\n\nVerze aplikace: ${packageVersion}\nAktuálně podporované verze:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Záplata není podporována touto verzí aplikace.",
|
||||
"unsupportedRequiredOption": "Tato oprava obsahuje požadovanou volbu, která není touto aplikací podporována",
|
||||
"patchesChangeWarningDialogText": "Doporučuje se použít výchozí záplatový výběr a možnosti. Změna může vést k neočekávaným problémům.\n\nPřed změnou jakéhokoli výběru patch budete muset zapnout \"Povolit změnu výběru patch\" v nastavení.",
|
||||
"patchesChangeWarningDialogButton": "Použít výchozí výběr"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Zvolte instalační typ",
|
||||
"installTypeDescription": "Vyberte typ instalace pro pokračování.",
|
||||
"installButton": "Instalovat",
|
||||
"installRootType": "Připojit",
|
||||
"installNonRootType": "Běžný",
|
||||
"warning": "Zakažte automatické aktualizace upravené aplikace, abyste se vyhnuli neočekávaným problémům.",
|
||||
"pressBackAgain": "Stiskněte znovu pro zrušení",
|
||||
"openButton": "Otevřít",
|
||||
"notificationTitle": "ReVanced Manager patchuje",
|
||||
"notificationText": "Klepnutím se vrátíte do instalátoru",
|
||||
"exportApkButtonTooltip": "Exportovat upravený APK",
|
||||
"exportLogButtonTooltip": "Exportovat protokol",
|
||||
"screenshotDetected": "Byl zjištěn snímek obrazovky. Pokud se pokoušíte sdílet záznam, sdílejte prosím textovou kopii.\n\nKopírovat záznam do schránky?",
|
||||
"copiedToClipboard": "Záznamy byly zkopírovány do schránky",
|
||||
"noExit": "Instalační program je stále spuštěn, nelze ukončit..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Nastavení",
|
||||
"appearanceSectionTitle": "Vzhled",
|
||||
"teamSectionTitle": "Tým",
|
||||
"debugSectionTitle": "Ladění",
|
||||
"advancedSectionTitle": "Pokročilé",
|
||||
"exportSectionTitle": "Import a export",
|
||||
"dataSectionTitle": "Zdroje údajů",
|
||||
"themeModeLabel": "Vzhled aplikace",
|
||||
"systemThemeLabel": "Systém",
|
||||
"lightThemeLabel": "Světlý",
|
||||
"darkThemeLabel": "Tmavý motiv",
|
||||
"dynamicThemeLabel": "Váš materiál",
|
||||
"dynamicThemeHint": "Vychutnejte si zážitek blíže k vašemu zařízení",
|
||||
"languageLabel": "Jazyk",
|
||||
"languageUpdated": "Jazyk aktualizován",
|
||||
"sourcesLabel": "Alternativní zdroje",
|
||||
"sourcesLabelHint": "Konfigurace alternativních zdrojů pro vylepšené úpravy",
|
||||
"useAlternativeSources": "Použít alternativní zdroje",
|
||||
"useAlternativeSourcesHint": "Použít alternativní zdroje pro vylepšené úpravy namísto API",
|
||||
"sourcesResetDialogTitle": "Obnovit",
|
||||
"sourcesResetDialogText": "Jste si jisti, že chcete obnovit zdroje na jejich výchozí hodnoty?",
|
||||
"apiURLResetDialogText": "Jste si jisti, že chcete resetovat URL API na výchozí hodnotu?",
|
||||
"sourcesUpdateNote": "Poznámka: Toto automaticky stáhne reVanced Patches z alternativních zdrojů.\n\nToto vás připojí k alternativnímu zdroji.",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Konfigurace URL API ReVanced Manager",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "Organizace patchů",
|
||||
"sourcesPatchesLabel": "Zdroj patchů",
|
||||
"contributorsLabel": "Přispěvatelé",
|
||||
"contributorsHint": "Seznam přispěvatelů ReVanced",
|
||||
"logsLabel": "Sdílet záznamy",
|
||||
"logsHint": "Sdílet záznamy Revanced Manageru",
|
||||
"enablePatchesSelectionLabel": "Povolit změnu výběru patch",
|
||||
"enablePatchesSelectionHint": "Nezabraňte výběru nebo odebírání záplatek",
|
||||
"enablePatchesSelectionWarningText": "Změna výběru záplatů může způsobit neočekávané problémy.\n\nPřesto povolit?",
|
||||
"disablePatchesSelectionWarningText": "Chystáte se zakázat změnu výběru záplat.\nVýchozí výběr záplatů bude obnoven.\n\npřesto zakázat?",
|
||||
"autoUpdatePatchesLabel": "Automaticky aktualizovat záplaty",
|
||||
"autoUpdatePatchesHint": "Automaticky aktualizovat záplaty na nejnovější verzi",
|
||||
"showUpdateDialogLabel": "Zobrazit dialogové okno aktualizace",
|
||||
"showUpdateDialogHint": "Zobrazit dialogové okno, když je dostupná nová aktualizace",
|
||||
"universalPatchesLabel": "Zobrazit univerzální záplaty",
|
||||
"universalPatchesHint": "Zobrazit všechny aplikace a univerzální záplaty (může zpomalit seznam aplikací)",
|
||||
"lastPatchedAppLabel": "Uložit upravenou aplikaci",
|
||||
"lastPatchedAppHint": "Uložit poslední opravu pro instalaci nebo export později",
|
||||
"versionCompatibilityCheckLabel": "Kontrola kompatibility verzí",
|
||||
"versionCompatibilityCheckHint": "Zabránit výběru záplat, které nejsou kompatibilní s vybranou verzí aplikace",
|
||||
"requireSuggestedAppVersionLabel": "Vyžadovat navrhovanou verzi aplikace",
|
||||
"requireSuggestedAppVersionHint": "Zabránit výběru aplikace s verzí, která není navržena",
|
||||
"requireSuggestedAppVersionDialogText": "Vybrání aplikace s verzí, která není doporčena může způsobit nečekané problémy.\n\nChcete přesto pokračovat?",
|
||||
"aboutLabel": "O aplikaci",
|
||||
"snackbarMessage": "Zkopírováno do schránky",
|
||||
"restartAppForChanges": "Pro aplikování změn restartuj aplikaci",
|
||||
"deleteTempDirLabel": "Odstranit dočasné soubory",
|
||||
"deleteTempDirHint": "Odstranit nepoužívané dočasné soubory",
|
||||
"deletedTempDir": "Dočasné soubory byly smazány",
|
||||
"exportSettingsLabel": "Exportovat nastavení",
|
||||
"exportSettingsHint": "Exportovat nastavení do souboru JSON",
|
||||
"exportedSettings": "Nastavení exportováno",
|
||||
"importSettingsLabel": "Importovat nastavení",
|
||||
"importSettingsHint": "Importovat nastavení ze souboru JSON",
|
||||
"importedSettings": "Nastavení importováno",
|
||||
"exportPatchesLabel": "Exportovat záplatu",
|
||||
"exportPatchesHint": "Exportovat výběr patch do souboru JSON",
|
||||
"exportedPatches": "Výběr patch exportován",
|
||||
"noExportFileFound": "Není vybrána žádná oprava k exportu",
|
||||
"importPatchesLabel": "Importovat výběr patch",
|
||||
"importPatchesHint": "Importovat výběr patch ze souboru JSON",
|
||||
"importedPatches": "Výběr patch importován",
|
||||
"resetStoredPatchesLabel": "Resetovat výběr opravy",
|
||||
"resetStoredPatchesHint": "Resetovat uloženou opravu",
|
||||
"resetStoredPatchesDialogTitle": "Obnovit výběr patche?",
|
||||
"resetStoredPatchesDialogText": "Výchozí výběr záplatů bude obnoven.",
|
||||
"resetStoredPatches": "Výběr patch byl obnoven",
|
||||
"resetStoredOptionsLabel": "Resetovat možnosti opravy",
|
||||
"resetStoredOptionsHint": "Obnovit všechny možnosti opravy",
|
||||
"resetStoredOptionsDialogTitle": "Obnovit možnosti oprav?",
|
||||
"resetStoredOptionsDialogText": "Obnovení možností opravy odstraní všechny uložené možnosti.",
|
||||
"resetStoredOptions": "Možnosti byly resetovány",
|
||||
"deleteLogsLabel": "Vymazat záznamy",
|
||||
"deleteLogsHint": "Odstranit shromážděné záznamy ReVanced Manageru",
|
||||
"deletedLogs": "Záznamy byly smazány",
|
||||
"regenerateKeystoreLabel": "Obnovit úložiště klíčů",
|
||||
"regenerateKeystoreHint": "Znovu vygenerovat úložiště klíčů používané k podpisu aplikací",
|
||||
"regenerateKeystoreDialogTitle": "Obnovit úložiště klíčů?",
|
||||
"regenerateKeystoreDialogText": "Upravené aplikace podepsané staré úložiště klíčů již nebudou moci být aktualizovány.",
|
||||
"regeneratedKeystore": "Obnovena úložiště klíčů",
|
||||
"exportKeystoreLabel": "Exportovat úložiště klíčů",
|
||||
"exportKeystoreHint": "Exportovat úložiště klíčů používané k podpisu aplikací",
|
||||
"exportedKeystore": "Úložiště klíčů exportováno",
|
||||
"noKeystoreExportFileFound": "Žádný úložiště klíčů k exportu",
|
||||
"importKeystoreLabel": "Importovat úložiště klíčů",
|
||||
"importKeystoreHint": "Importovat úložiště klíčů používané k podpisu aplikací",
|
||||
"importedKeystore": "Úložiště klíčů importováno",
|
||||
"selectKeystorePassword": "Heslo úložiště klíčů",
|
||||
"selectKeystorePasswordHint": "Vyberte heslo úložiště klíčů použité k podpisu aplikací",
|
||||
"jsonSelectorErrorMessage": "Vybraný JSON soubor nelze použít",
|
||||
"keystoreSelectorErrorMessage": "Nelze použít vybraný soubor úložiště klíčů"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Informace o aplikaci",
|
||||
"openButton": "Otevřít",
|
||||
"installButton": "Instalovat",
|
||||
"uninstallButton": "Odinstalovat",
|
||||
"unmountButton": "Odpojit",
|
||||
"exportButton": "Exportovat",
|
||||
"deleteButton": "Vymazat",
|
||||
"rootDialogTitle": "Chyba",
|
||||
"lastPatchedAppDescription": "Toto je záloha aplikace, která byla naposledy upravena.",
|
||||
"unmountDialogText": "Opravdu chcete odpojit tuto aplikaci?",
|
||||
"uninstallDialogText": "Opravdu chcete odinstalovat tuto aplikaci?",
|
||||
"rootDialogText": "Aplikace byla nainstalována s oprávněním superuser, ale aktuálně ReVanced Manager nemá žádná oprávnění.\nProsím nejprve udělte oprávnění superuser.",
|
||||
"removeAppDialogTitle": "Smazat aplikaci?",
|
||||
"removeAppDialogText": "Jste si jisti, že chcete odstranit tuto zálohu?",
|
||||
"packageNameLabel": "Název balíčku",
|
||||
"installTypeLabel": "Typ instalace",
|
||||
"mountTypeLabel": "Připojit",
|
||||
"regularTypeLabel": "Běžný",
|
||||
"patchedDateLabel": "Datum patchování",
|
||||
"appliedPatchesLabel": "Použité patche",
|
||||
"sizeLabel": "Velikost souboru",
|
||||
"patchedDateHint": "${date} v ${time}",
|
||||
"appliedPatchesHint": "${quantity} použité patche",
|
||||
"updateNotImplemented": "Tato funkce ještě není implementována"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Přispěvatelé"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Verse neshodná",
|
||||
"mount_no_root": "Žádný root přístup",
|
||||
"mount_missing_installation": "Instalace nebyla nalezena",
|
||||
"status_failure_blocked": "Instalace blokovaná",
|
||||
"install_failed_verification_failure": "Ověření selhalo",
|
||||
"status_failure_invalid": "Instalace neplatná",
|
||||
"install_failed_version_downgrade": "Nelze ponížit",
|
||||
"status_failure_conflict": "Konflikt instalace",
|
||||
"status_failure_storage": "Instalace má problém s uložistěm",
|
||||
"status_failure_incompatible": "Instalace není kompatibilní",
|
||||
"status_failure_timeout": "Instalaci vypršel čas",
|
||||
"status_unknown": "Instalace selhala",
|
||||
"mount_version_mismatch_description": "Instalace se nezdařila kvůli tomu, že nainstalovaná aplikace je jinou verzí než upravená aplikace.\n\nNainstalujte verzi aplikace, kterou připojujete a zkuste to znovu.",
|
||||
"mount_no_root_description": "Instalace selhala, protože oprávněni root nebyly udělené.\n\nDejte Revanced Manageru oprávnění root a zkuste znovu.",
|
||||
"mount_missing_installation_description": "Instalace se nezdařila z důvodu neopravené aplikace pro připojení na toto zařízení.\n\nNainstalujte si neupravenou aplikaci před připojením a zkuste to znovu.",
|
||||
"status_failure_timeout_description": "Dokončení instalace trvalo příliš dlouho.\n\nChcete to zkusit znovu?",
|
||||
"status_failure_storage_description": "Instalace selhala kvůli nedostatku místa v uložisti.\n\nUvolňete místo a zkuste znovu.",
|
||||
"status_failure_invalid_description": "Instalace se nezdařila, protože patchnutá aplikace je neplatná.\n\nOdinstalovat tuto aplikaci a zkusit znovu?",
|
||||
"status_failure_incompatible_description": "Aplikace není kompatibilní s tímto zařízením.\n\nPoužijte APK, který je podporován tímto zařízením a zkuste to znovu.",
|
||||
"status_failure_conflict_description": "Instalace byla zabráněna existující instalací aplikace.\n\nOdinstalovat nainstalovanou aplikaci a zkuste to znovu?",
|
||||
"status_failure_blocked_description": "Instalace byla zablokována ${packageName}.\n\nUpravte nastavení zabezpečení a zkute to znovu.",
|
||||
"install_failed_verification_failure_description": "Instalace se nezdařila kvůli problému s ověřováním.\n\nUpravte nastavení zabezpečení a zkuste to znovu.",
|
||||
"install_failed_version_downgrade_description": "Instalace se nezdařila kvůli tomu, že již nainstalovaná verze je novější.\n\nOdinstalovat tuto aplikaci a zkusit znovu?",
|
||||
"status_unknown_description": "Instalace se nezdařila z neznámých důvodů. Prosím zkuste to znovu."
|
||||
}
|
||||
}
|
298
assets/i18n/strings_da_DK.i18n.json
Executable file
@ -0,0 +1,298 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Afbryd",
|
||||
"dismissButton": "Luk",
|
||||
"quitButton": "Luk",
|
||||
"updateButton": "Opdatér",
|
||||
"suggested": "Foreslået: ${version}",
|
||||
"yesButton": "Ja",
|
||||
"noButton": "Nej",
|
||||
"warning": "Advarsel",
|
||||
"notice": "Bemærkning",
|
||||
"noShowAgain": "Vis ikke igen",
|
||||
"add": "Tilføj",
|
||||
"remove": "Fjern",
|
||||
"showChangelogButton": "Vis ændringslog",
|
||||
"showUpdateButton": "Vis opdatering",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Oversigt",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Indstillinger"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Opdatering succesfuldt",
|
||||
"widgetTitle": "Oversigt",
|
||||
"updatesSubtitle": "Opdateringer",
|
||||
"lastPatchedAppSubtitle": "Sidste lappet app",
|
||||
"patchedSubtitle": "Installerede apps",
|
||||
"changeLaterSubtitle": "Du kan ændre dette i indstillingerne senere.",
|
||||
"noSavedAppFound": "Ingen app fundet",
|
||||
"noInstallations": "Ingen patchede apps installeret",
|
||||
"installUpdate": "Fortsæt med at installere opdateringen?",
|
||||
"updateSheetTitle": "Opdater ReVanced Manager",
|
||||
"updateDialogTitle": "Ny opdatering tilgængelig",
|
||||
"updatePatchesSheetTitle": "Opdater ReVanced Patches",
|
||||
"updateChangelogTitle": "Ændringslog",
|
||||
"updateDialogText": "En ny opdatering er tilgængelig for ${file}.\n\nDen installerede version er ${version}.",
|
||||
"downloadConsentDialogTitle": "Download nødvendige filer?",
|
||||
"downloadConsentDialogText": "ReVanced Manager har brug for at downloade nødvendige filer for at fungere korrekt.",
|
||||
"downloadConsentDialogText2": "Dette vil forbinde dig til ${url}.",
|
||||
"downloadingMessage": "Henter opdatering...",
|
||||
"downloadedMessage": "Opdatering downloadet",
|
||||
"installingMessage": "Installerer opdatering...",
|
||||
"errorDownloadMessage": "Opdatering kan ikke hentes",
|
||||
"errorInstallMessage": "Opdatering kunne ikke installeres",
|
||||
"noConnection": "Ingen internetforbindelse"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Information"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Indlæser...",
|
||||
"timeagoLabel": "${time} siden"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Patch",
|
||||
"incompatibleArchWarningDialogText": "Patching på denne arkitektur understøttes endnu ikke og kan mislykkes. Fortsæt alligevel?",
|
||||
"removedPatchesWarningDialogText": "Fjernede rettelser siden sidste gang du lappede denne app:\n\n${patches}\n\n${newPatches}Fortsæt alligevel?",
|
||||
"addedPatchesDialogText": "Tilføjet rettelser siden sidste gang du lappede denne app:\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "Nogle patch muligheder skal indstilles."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Vælg en app",
|
||||
"widgetTitleSelected": "Valgte app",
|
||||
"widgetSubtitle": "Ingen app valgt",
|
||||
"noAppsLabel": "Ingen applikationer fundet",
|
||||
"anyVersion": "Enhver version"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Vælg patches",
|
||||
"widgetTitleSelected": "Valgte patches",
|
||||
"widgetSubtitle": "Vælg først en applikation",
|
||||
"widgetEmptySubtitle": "Ingen patches valgt"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Sociale medier",
|
||||
"widgetSubtitle": "Vi er online!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Vælg en app",
|
||||
"searchBarHint": "Søg efter app",
|
||||
"storageButton": "Lager",
|
||||
"selectFromStorageButton": "Vælg fra lager",
|
||||
"errorMessage": "Kunne ikke bruge valgte applikation",
|
||||
"downloadToast": "Download-funktionen er ikke tilgængelig endnu",
|
||||
"requireSuggestedAppVersionDialogText": "Versionen af den valgte app matcher ikke den foreslåede version, som kan føre til uventede problemer. Brug venligst den foreslåede version.\n\nValgt version: ${selected}\nForeslået version: ${suggested}\n\nFor at fortsætte alligevel, deaktiver \"Kræv foreslået app-version\" i indstillingerne.",
|
||||
"featureNotAvailable": "Funktion ikke implementeret",
|
||||
"featureNotAvailableText": "Denne app er en split APK og kan kun patches og installeres pålideligt ved montering med root-tilladelser. Du kan dog patche og installere en fuld APK ved at vælge det fra lager."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Vælg patches",
|
||||
"searchBarHint": "Søg efter patches",
|
||||
"universalPatches": "Universelle patches",
|
||||
"newPatches": "Nye patches",
|
||||
"patches": "Patches",
|
||||
"doneButton": "Udført",
|
||||
"defaultChip": "Standard",
|
||||
"defaultTooltip": "Vælg alle standard patches",
|
||||
"noneChip": "Ingen",
|
||||
"noneTooltip": "Fravælg alle patches",
|
||||
"loadPatchesSelection": "Indlæs patch valg",
|
||||
"noSavedPatches": "Ingen gemte patches til den valgte app.\nTryk på Udført for at gemme det aktuelle valg.",
|
||||
"noPatchesFound": "Ingen patches fundet til den valgte app",
|
||||
"setRequiredOption": "Nogle patches kræver at indstillingerne er indstillet:\n\n${patches}\n\nAngiv dem før du fortsætter."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Tilpasset værdi",
|
||||
"setToNull": "Sæt til nul",
|
||||
"nullValue": "Denne valgmulighed værdi er i øjeblikket nul",
|
||||
"viewTitle": "Patch indstillinger",
|
||||
"saveOptions": "Gem",
|
||||
"unselectPatch": "Fravælg patch",
|
||||
"tooltip": "Flere input-indstillinger",
|
||||
"selectFilePath": "Vælg fil sti",
|
||||
"selectFolder": "Vælg mappe",
|
||||
"requiredOption": "Indstilling af denne indstilling er påkrævet",
|
||||
"unsupportedOption": "Denne indstilling understøttes ikke",
|
||||
"requiredOptionNull": "Følgende indstillinger skal indstilles:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Valg af denne patch kan medføre patching-fejl.\n\nApp version: ${packageVersion}\nUnderstøttede versioner:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Patch er ikke understøttet i denne app-version.",
|
||||
"unsupportedRequiredOption": "Denne patch indeholder en nødvendig mulighed, der ikke understøttes af denne app",
|
||||
"patchesChangeWarningDialogText": "Det anbefales at bruge standard patchvalg og indstillinger. Ændring af dem kan resultere i uventede problemer.\n\nDu skal aktivere \"Tillad ændring af patchvalg\" i indstillinger, før du ændrer et patchvalg.",
|
||||
"patchesChangeWarningDialogButton": "Brug standardvalg"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Vælg installationstype",
|
||||
"installTypeDescription": "Vælg den installationstype der skal fortsættes med.",
|
||||
"installButton": "Installér",
|
||||
"installRootType": "Montér",
|
||||
"installNonRootType": "Almindelig",
|
||||
"warning": "Deaktiver automatiske opdateringer til den patchede app for at undgå uventede problemer.",
|
||||
"pressBackAgain": "Tryk tilbage igen for at annullere",
|
||||
"openButton": "Åbn",
|
||||
"notificationTitle": "ReVanced Manager patcher",
|
||||
"notificationText": "Tryk for at gå tilbage til installationsprogrammet",
|
||||
"exportApkButtonTooltip": "Eksporter patched APK",
|
||||
"exportLogButtonTooltip": "Eksportér log",
|
||||
"screenshotDetected": "Et skærmbillede er blevet opdaget. Hvis du forsøger at dele loggen, så del venligst en tekstkopi i stedet.\n\nKopier log til udklipsholderen?",
|
||||
"copiedToClipboard": "Kopierede log til udklipsholder",
|
||||
"noExit": "Installationen kører stadig, kan ikke afslutte..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Indstillinger",
|
||||
"appearanceSectionTitle": "Udseende",
|
||||
"teamSectionTitle": "Holdet",
|
||||
"debugSectionTitle": "Fejlfinding",
|
||||
"advancedSectionTitle": "Avanceret",
|
||||
"exportSectionTitle": "Import & eksport",
|
||||
"dataSectionTitle": "Datakilder",
|
||||
"themeModeLabel": "App tema",
|
||||
"systemThemeLabel": "System",
|
||||
"lightThemeLabel": "Lyst",
|
||||
"darkThemeLabel": "Mørk tilstand",
|
||||
"dynamicThemeLabel": "Materiale Dig",
|
||||
"dynamicThemeHint": "Nyd en oplevelse tættere på din enhed",
|
||||
"languageLabel": "Sprog",
|
||||
"languageUpdated": "Sprog opdateret",
|
||||
"sourcesLabel": "Alternative kilder",
|
||||
"sourcesLabelHint": "Indstil alternative kilder for ReVanced Patches",
|
||||
"useAlternativeSources": "Brug alternative kilder",
|
||||
"useAlternativeSourcesHint": "Brug alternative kilder til ReVanced Patches i stedet for API",
|
||||
"sourcesResetDialogTitle": "Nulstil",
|
||||
"sourcesResetDialogText": "Er du sikker på, at du vil nulstille dine kilder til deres standardværdier?",
|
||||
"apiURLResetDialogText": "Er du sikker på, at du vil nulstille API URL til dens standardværdi?",
|
||||
"sourcesUpdateNote": "Bemærk: Dette vil automatisk hente ReVanced Patches fra de alternative kilder.\n\nDette vil forbinde dig til den alternative kilde.",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Konfigurer API-URL'en til ReVanced Manager",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "Organisation for Patches",
|
||||
"sourcesPatchesLabel": "Kilde til Patches",
|
||||
"contributorsLabel": "Medvirkende",
|
||||
"contributorsHint": "En liste over medvirkende til ReVanced",
|
||||
"logsLabel": "Del logs",
|
||||
"logsHint": "Del ReVanced Manager logs",
|
||||
"enablePatchesSelectionLabel": "Tillad skift af patch valg",
|
||||
"enablePatchesSelectionHint": "Forhindrer ikke valg eller fravalg af patches",
|
||||
"enablePatchesSelectionWarningText": "Ændring af valg af patches kan forårsage uventede problemer.\n\nAktiver alligevel?",
|
||||
"disablePatchesSelectionWarningText": "Du er ved at deaktivere ændring af valg af patches.\nStandard valg af patches vil blive gendannet.\n\nDeaktiver alligevel?",
|
||||
"autoUpdatePatchesLabel": "Opdatér patches automatisk",
|
||||
"autoUpdatePatchesHint": "Opdater automatisk patches til den seneste version",
|
||||
"showUpdateDialogLabel": "Vis opdateringsdialog",
|
||||
"showUpdateDialogHint": "Vis en dialog når en ny opdatering er tilgængelig",
|
||||
"universalPatchesLabel": "Vis universelle patches",
|
||||
"universalPatchesHint": "Vis alle apps og universelle patches (kan forsinke listen over apps)",
|
||||
"lastPatchedAppLabel": "Gem lappet app",
|
||||
"lastPatchedAppHint": "Gem den sidste patch til installation eller eksport senere",
|
||||
"versionCompatibilityCheckLabel": "Versions kompatibilitetskontrol",
|
||||
"versionCompatibilityCheckHint": "Forhindre valg af patches der ikke er kompatible med den valgte app-version",
|
||||
"requireSuggestedAppVersionLabel": "Kræv foreslået app-version",
|
||||
"requireSuggestedAppVersionHint": "Undgå at vælge en app med en version der ikke er den foreslåede",
|
||||
"requireSuggestedAppVersionDialogText": "Hvis du vælger en app der ikke er den foreslåede version kan det forårsage uventede problemer. \n\nVil du fortsætte alligevel?",
|
||||
"aboutLabel": "Om",
|
||||
"snackbarMessage": "Kopieret til udklipsholder",
|
||||
"restartAppForChanges": "Genstart appen for at anvende ændringer",
|
||||
"deleteTempDirLabel": "Slet midlertidige filer",
|
||||
"deleteTempDirHint": "Slet ubrugte midlertidige filer",
|
||||
"deletedTempDir": "Midlertidige filer slettet",
|
||||
"exportSettingsLabel": "Eksporter indstillinger",
|
||||
"exportSettingsHint": "Eksporter indstillinger til en JSON-fil",
|
||||
"exportedSettings": "Indstillinger eksporteret",
|
||||
"importSettingsLabel": "Importer indstillinger",
|
||||
"importSettingsHint": "Importer indstillinger fra en JSON-fil",
|
||||
"importedSettings": "Indstillinger importeret",
|
||||
"exportPatchesLabel": "Eksportér patch valg",
|
||||
"exportPatchesHint": "Eksportér patch valg til en JSON- fil",
|
||||
"exportedPatches": "Patch valg eksporteret",
|
||||
"noExportFileFound": "Ingen patch valg at eksportere",
|
||||
"importPatchesLabel": "Importér patch valg",
|
||||
"importPatchesHint": "Importer patch valg fra en JSON fil",
|
||||
"importedPatches": "Patch valg importeret",
|
||||
"resetStoredPatchesLabel": "Nulstil patch valg",
|
||||
"resetStoredPatchesHint": "Nulstil det gemte patch valg",
|
||||
"resetStoredPatchesDialogTitle": "Nulstil patch valg?",
|
||||
"resetStoredPatchesDialogText": "Standard valg af patches vil blive gendannet.",
|
||||
"resetStoredPatches": "Patch valg er blevet nulstillet",
|
||||
"resetStoredOptionsLabel": "Nulstil patch indstillinger",
|
||||
"resetStoredOptionsHint": "Nulstil alle patch indstillinger",
|
||||
"resetStoredOptionsDialogTitle": "Nulstil patch indstillinger?",
|
||||
"resetStoredOptionsDialogText": "Nulstilling af patch indstillinger vil fjerne alle gemte indstillinger.",
|
||||
"resetStoredOptions": "Indstillinger er blevet nulstillet",
|
||||
"deleteLogsLabel": "Ryd loggen",
|
||||
"deleteLogsHint": "Slet indsamlede logs for ReVanced Manager",
|
||||
"deletedLogs": "Logfiler slettet",
|
||||
"regenerateKeystoreLabel": "Regenerér keystore",
|
||||
"regenerateKeystoreHint": "Regenerér keystore der bruges til at signere apps",
|
||||
"regenerateKeystoreDialogTitle": "Regenerér keystore?",
|
||||
"regenerateKeystoreDialogText": "Patchede apps signeret med den gamle keystore vil ikke længere kunne opdateres.",
|
||||
"regeneratedKeystore": "Keystore regenereret",
|
||||
"exportKeystoreLabel": "Eksportér keystore",
|
||||
"exportKeystoreHint": "Eksportér keystore som bruges til at signere apps",
|
||||
"exportedKeystore": "Keystore eksporteret",
|
||||
"noKeystoreExportFileFound": "Ingen keystore at eksportere",
|
||||
"importKeystoreLabel": "Importér keystore",
|
||||
"importKeystoreHint": "Importér keystore der bruges til at signere apps",
|
||||
"importedKeystore": "Keystore importeret",
|
||||
"selectKeystorePassword": "Keystore Adgangskode",
|
||||
"selectKeystorePasswordHint": "Vælg adgangskode til keystore som bruges til at signere apps",
|
||||
"jsonSelectorErrorMessage": "Kan ikke bruge den valgte JSON-fil",
|
||||
"keystoreSelectorErrorMessage": "Kan ikke bruge den valgte keystore fil"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Appinfo",
|
||||
"openButton": "Åbn",
|
||||
"installButton": "Installér",
|
||||
"uninstallButton": "Afinstallér",
|
||||
"unmountButton": "Afmonter",
|
||||
"exportButton": "Eksporter",
|
||||
"deleteButton": "Slet",
|
||||
"rootDialogTitle": "Fejl",
|
||||
"lastPatchedAppDescription": "Dette er en sikkerhedskopi af appen, der blev sidst lappet.",
|
||||
"unmountDialogText": "Er du sikker på, at du vil afmontere denne app?",
|
||||
"uninstallDialogText": "Er du sikker på, at du vil afinstallere denne app?",
|
||||
"rootDialogText": "App blev installeret med superbruger tilladelser, men i øjeblikket har ReVanced Manager ingen tilladelser.\nGiv superbruger tilladelser først.",
|
||||
"removeAppDialogTitle": "Slet app?",
|
||||
"removeAppDialogText": "Er du sikker på du vil slette denne backup?",
|
||||
"packageNameLabel": "Pakkenavn",
|
||||
"installTypeLabel": "Installationstype",
|
||||
"mountTypeLabel": "Montér",
|
||||
"regularTypeLabel": "Almindelig",
|
||||
"patchedDateLabel": "Dato for patching",
|
||||
"appliedPatchesLabel": "Anvendte patches",
|
||||
"sizeLabel": "Fil størrelse",
|
||||
"patchedDateHint": "${date} kl. ${time}",
|
||||
"appliedPatchesHint": "${quantity} anvendte patches",
|
||||
"updateNotImplemented": "Denne funktion er ikke implementeret endnu"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Medvirkende"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Versionsmatch inkonsistens",
|
||||
"mount_no_root": "Ingen rod-adgang",
|
||||
"mount_missing_installation": "Installation ikke fundet",
|
||||
"status_failure_blocked": "Installation blokeret",
|
||||
"install_failed_verification_failure": "Bekræftelse mislykkedes",
|
||||
"status_failure_invalid": "Installation ugyldig",
|
||||
"install_failed_version_downgrade": "Kan ikke nedgradere",
|
||||
"status_failure_conflict": "Installation konflikt",
|
||||
"status_failure_storage": "Problemer med installationslagring",
|
||||
"status_failure_incompatible": "Installation inkompatibel",
|
||||
"status_failure_timeout": "Tidsudløb for installation",
|
||||
"status_unknown": "Installation mislykkedes",
|
||||
"mount_version_mismatch_description": "Installationen mislykkedes, fordi den installerede app er en anden version end den lappede app.\n\nInstaller versionen af den app, du monterer og prøv igen.",
|
||||
"mount_no_root_description": "Installationen mislykkedes, fordi root-adgang ikke blev givet.\n\nTildel root-adgang til ReVanced Manager og prøv igen.",
|
||||
"mount_missing_installation_description": "Installationen mislykkedes, fordi den unpatched app ikke blev installeret på denne enhed for at montere over den.\n\nInstaller den unpatched app før du monterer og prøv igen.",
|
||||
"status_failure_timeout_description": "Installationen tog for lang tid at afslutte.\n\nVil du prøve igen?",
|
||||
"status_failure_storage_description": "Installationen mislykkedes på grund af utilstrækkelig opbevaring.\n\nFrigør lidt plads og prøv igen.",
|
||||
"status_failure_invalid_description": "Installationen mislykkedes på grund af den programrettede app er ugyldig.\n\nAfinstaller app'en og prøv igen?",
|
||||
"status_failure_incompatible_description": "Appen er inkompatibel med denne enhed.\n\nBrug en APK, der understøttes af denne enhed, og prøv igen.",
|
||||
"status_failure_conflict_description": "Installationen blev forhindret af en eksisterende installation af appen.\n\nAfinstaller den installerede app og prøv igen?",
|
||||
"status_failure_blocked_description": "Installationen blev blokeret af ${packageName}.\n\nJuster dine sikkerhedsindstillinger og prøv igen.",
|
||||
"install_failed_verification_failure_description": "Installationen mislykkedes på grund af et bekræftelsesproblem.\n\nJuster dine sikkerhedsindstillinger og prøv igen.",
|
||||
"install_failed_version_downgrade_description": "Installationen mislykkedes, fordi den lappede app er en lavere version end den installerede app.\n\nAfinstaller app'en og prøv igen?",
|
||||
"status_unknown_description": "Installationen mislykkedes på grund af en ukendt årsag. Prøv venligst igen."
|
||||
}
|
||||
}
|
298
assets/i18n/strings_de_DE.i18n.json
Executable file
@ -0,0 +1,298 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Abbrechen",
|
||||
"dismissButton": "Verwerfen",
|
||||
"quitButton": "Verlassen",
|
||||
"updateButton": "Aktualisieren",
|
||||
"suggested": "Empfohlen: ${version}",
|
||||
"yesButton": "Ja",
|
||||
"noButton": "Nein",
|
||||
"warning": "Warnung",
|
||||
"notice": "Hinweis",
|
||||
"noShowAgain": "Nicht erneut anzeigen",
|
||||
"add": "Hinzufügen",
|
||||
"remove": "Entfernen",
|
||||
"showChangelogButton": "Änderungsprotokoll anzeigen",
|
||||
"showUpdateButton": "Update anzeigen",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Übersicht",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Einstellungen"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Erfolgreich aktualisiert",
|
||||
"widgetTitle": "Übersicht",
|
||||
"updatesSubtitle": "Aktualisierungen",
|
||||
"lastPatchedAppSubtitle": "Letzte gepatchte App",
|
||||
"patchedSubtitle": "Installierte Apps",
|
||||
"changeLaterSubtitle": "In den Einstellungen kannst du das später noch ändern.",
|
||||
"noSavedAppFound": "Keine App gefunden",
|
||||
"noInstallations": "Keine gepatchten Apps installiert",
|
||||
"installUpdate": "Mit der Installation des Updates fortfahren?",
|
||||
"updateSheetTitle": "ReVanced-Manager aktualisieren",
|
||||
"updateDialogTitle": "Neues Update verfügbar",
|
||||
"updatePatchesSheetTitle": "ReVanced-Patches aktualisieren",
|
||||
"updateChangelogTitle": "Änderungsverlauf",
|
||||
"updateDialogText": "Es ist ein neues Update für ${file} verfügbar.\n\nDie derzeit installierte Version ist ${version}.",
|
||||
"downloadConsentDialogTitle": "Benötigte Dateien herunterladen?",
|
||||
"downloadConsentDialogText": "Damit ReVanced-Manager ordnungsgemäß funktioniert, müssen notwendige Dateien heruntergeladen werden.",
|
||||
"downloadConsentDialogText2": "Dadurch wirst du mit ${url} verbunden.",
|
||||
"downloadingMessage": "Aktualisierung wird heruntergeladen...",
|
||||
"downloadedMessage": "Update heruntergeladen",
|
||||
"installingMessage": "Update wird installiert...",
|
||||
"errorDownloadMessage": "Aktualisierung konnte nicht heruntergeladen werden",
|
||||
"errorInstallMessage": "Aktualisierung konnte nicht installiert werden",
|
||||
"noConnection": "Keine Internetverbindung"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Informationen"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Lädt...",
|
||||
"timeagoLabel": "vor ${time}"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Patchen",
|
||||
"incompatibleArchWarningDialogText": "Patches auf dieser Architektur werden noch nicht unterstützt und könnten fehlschlagen. Trotzdem fortfahren?",
|
||||
"removedPatchesWarningDialogText": "Patches seit dem letzten Mal, dass Sie diese App gepatcht haben, entfernt:\n\n${patches}\n\n${newPatches}Trotzdem fortfahren?",
|
||||
"addedPatchesDialogText": "Patches seit dem letzten Mal, dass Sie diese App gepatcht haben:\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "Einige Patch-Optionen müssen gesetzt werden."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "App auswählen",
|
||||
"widgetTitleSelected": "Ausgewählte App",
|
||||
"widgetSubtitle": "Keine App ausgewählt",
|
||||
"noAppsLabel": "Keine Apps gefunden",
|
||||
"anyVersion": "Beliebige Version"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Patches auswählen",
|
||||
"widgetTitleSelected": "Ausgewählte Patches",
|
||||
"widgetSubtitle": "Wähle zuerst eine App",
|
||||
"widgetEmptySubtitle": "Keine Patches ausgewählt"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Soziale Netzwerke",
|
||||
"widgetSubtitle": "Wir sind online!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "App auswählen",
|
||||
"searchBarHint": "App suchen",
|
||||
"storageButton": "Speicher",
|
||||
"selectFromStorageButton": "Aus Speicher auswählen",
|
||||
"errorMessage": "Ausgewählte App kann nicht verwendet werden",
|
||||
"downloadToast": "Die Download-Funktion ist noch nicht verfügbar",
|
||||
"requireSuggestedAppVersionDialogText": "Die gewählte Version der App stimmt nicht mit der empfohlenen Version überein. Bitte wähle die App aus, die der empfohlenen Version entspricht.\n\nAusgewählte Version: v${selected}\nEmpfohlene Version: v${suggested}\n\nUm trotzdem fortzufahren, deaktiviere „Empfohlene App-Version erforderlich“ in den Einstellungen.",
|
||||
"featureNotAvailable": "Funktion ist nicht implementiert",
|
||||
"featureNotAvailableText": "Diese App ist eine Split-APK und kann nur mittels Root-Berechtigungen verlässlich gepatcht und installiert werden. Du kannst jedoch eine Komplett-APK patchen und installieren, indem du sie aus dem Speicher auswählst."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Patches auswählen",
|
||||
"searchBarHint": "Patches suchen",
|
||||
"universalPatches": "Universelle Patches",
|
||||
"newPatches": "Neue Patches",
|
||||
"patches": "Patches",
|
||||
"doneButton": "Fertig",
|
||||
"defaultChip": "Standard",
|
||||
"defaultTooltip": "Alle Standard Patches auswählen",
|
||||
"noneChip": "Keine",
|
||||
"noneTooltip": "Alle Patches abwählen",
|
||||
"loadPatchesSelection": "Patchauswahl laden",
|
||||
"noSavedPatches": "Keine gespeicherten Patches für die ausgewählte App. Drücke „Fertig” zum Speichern der aktuellen Auswahl.",
|
||||
"noPatchesFound": "Keine Patches für die ausgewählte App gefunden",
|
||||
"setRequiredOption": "Einige Patches benötigen Optionen um gesetzt zu werden:\n\n${patches}\n\nBitte setzen Sie diese bevor Sie fortfahren."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Benutzerdefinierter Wert",
|
||||
"setToNull": "Auf Null setzen",
|
||||
"nullValue": "Dieser Optionswert ist derzeit null",
|
||||
"viewTitle": "Patch-Optionen",
|
||||
"saveOptions": "Speichern",
|
||||
"unselectPatch": "Patch entfernen",
|
||||
"tooltip": "Weitere Eingabeoptionen",
|
||||
"selectFilePath": "Dateipfad auswählen",
|
||||
"selectFolder": "Ordner auswählen",
|
||||
"requiredOption": "Einstellung dieser Option ist erforderlich",
|
||||
"unsupportedOption": "Dieser Vorgang ist nicht unterstützt.",
|
||||
"requiredOptionNull": "Die folgenden Optionen müssen gesetzt sein:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Die Auswahl dieses Patches kann zu Fehlern beim Patchen führen.\n\nApp-Version: ${packageVersion}\nUnterstützte Versionen:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Patch wird für diese App Version nicht unterstützt.",
|
||||
"unsupportedRequiredOption": "Dieser Patch enthält eine erforderliche Option, die von dieser App nicht unterstützt wird",
|
||||
"patchesChangeWarningDialogText": "Es wird empfohlen, die Standard-Patch-Auswahl und -Optionen zu verwenden. Änderungen können zu unerwarteten Problemen führen.\n\nDu musst „Ändern der Patch-Auswahl erlauben“ in den Einstellungen aktivieren, bevor du Patches auswählen kannst.",
|
||||
"patchesChangeWarningDialogButton": "Als Standard-Auswahl nutzen"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Installationstyp wählen",
|
||||
"installTypeDescription": "Wähle zum Fortfahren die gewünschte Installationsart aus.",
|
||||
"installButton": "Installieren",
|
||||
"installRootType": "Einhängen",
|
||||
"installNonRootType": "Normal",
|
||||
"warning": "Deaktiviere automatische Updates für die gepatchte App, um unerwartete Probleme zu vermeiden.",
|
||||
"pressBackAgain": "Drücken Sie \"Zurück\" noch einmal, um die App zu verlassen",
|
||||
"openButton": "Öffnen",
|
||||
"notificationTitle": "ReVanced Manager patcht",
|
||||
"notificationText": "Tippen, um zum Installer zurückzukehren",
|
||||
"exportApkButtonTooltip": "Gepatchte APK exportieren",
|
||||
"exportLogButtonTooltip": "Protokoll exportieren",
|
||||
"screenshotDetected": "Es wurde ein Screenshot erkannt. Wenn Sie versuchen, das Log zu teilen, teilen Sie stattdessen eine Textkopie.\n\nLog in die Zwischenablage kopieren?",
|
||||
"copiedToClipboard": "Das Protokoll wurde in die Zwischenablage kopiert",
|
||||
"noExit": "Der Installer wird noch ausgeführt, kann nicht beendet werden..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Einstellungen",
|
||||
"appearanceSectionTitle": "Darstellung",
|
||||
"teamSectionTitle": "Team",
|
||||
"debugSectionTitle": "Debuggen",
|
||||
"advancedSectionTitle": "Erweitert",
|
||||
"exportSectionTitle": "Import & Export",
|
||||
"dataSectionTitle": "Datenquellen",
|
||||
"themeModeLabel": "Erscheinungsbild",
|
||||
"systemThemeLabel": "System",
|
||||
"lightThemeLabel": "Hell",
|
||||
"darkThemeLabel": "Dunkel",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Genieße ein Erlebnis näher an deinem Gerät",
|
||||
"languageLabel": "Sprache",
|
||||
"languageUpdated": "Sprache aktualisiert",
|
||||
"sourcesLabel": "Alternative Quellen",
|
||||
"sourcesLabelHint": "Konfigurieren Sie die alternativen Quellen für überarbeitete Patches",
|
||||
"useAlternativeSources": "Benutze alternative Quellen",
|
||||
"useAlternativeSourcesHint": "Verwende alternative Quellen für überarbeitete Patches anstelle der API",
|
||||
"sourcesResetDialogTitle": "Zurücksetzen",
|
||||
"sourcesResetDialogText": "Bist du dir sicher, dass du die benutzerdefinierten Quellen auf ihre Standardwerte zurücksetzen möchtest?",
|
||||
"apiURLResetDialogText": "Bist du dir sicher, dass du die API-URL auf ihren Standardwert zurücksetzen möchtest?",
|
||||
"sourcesUpdateNote": "Hinweis: Dies wird automatisch ReVanced Patches von den alternativen Quellen herunterladen.\n\nDies verbindet Sie mit der alternativen Quelle.",
|
||||
"apiURLLabel": "API-URL",
|
||||
"apiURLHint": "Konfigurieren die API URL von ReVanced Manager",
|
||||
"selectApiURL": "API-URL",
|
||||
"orgPatchesLabel": "Patches Organisation",
|
||||
"sourcesPatchesLabel": "Patches Quelle",
|
||||
"contributorsLabel": "Mitwirkende",
|
||||
"contributorsHint": "Eine Liste der Mitwirkenden von ReVanced",
|
||||
"logsLabel": "Logs teilen",
|
||||
"logsHint": "ReVanced Manager Logs teilen",
|
||||
"enablePatchesSelectionLabel": "Ändern der Patch-Auswahl erlauben",
|
||||
"enablePatchesSelectionHint": "Patches aktivieren oder deaktivieren nicht verhindern",
|
||||
"enablePatchesSelectionWarningText": "Ändern der Auswahl der Patches kann zu unerwarteten Problemen führen.\n\nTrotzdem aktivieren?",
|
||||
"disablePatchesSelectionWarningText": "Sie sind im Begriff, die Auswahl der Patches zu deaktivieren.\nDie Standardauswahl der Patches wird wiederhergestellt.\n\nTrotzdem deaktivieren?",
|
||||
"autoUpdatePatchesLabel": "Patches automatisch aktualisieren",
|
||||
"autoUpdatePatchesHint": "Patches automatisch auf die neueste Version aktualisieren",
|
||||
"showUpdateDialogLabel": "Update-Dialog anzeigen",
|
||||
"showUpdateDialogHint": "Dialog anzeigen, wenn ein neues Update verfügbar ist",
|
||||
"universalPatchesLabel": "Universelle Patches zeigen",
|
||||
"universalPatchesHint": "Alle Apps und Universal Patches anzeigen (kann die App Liste verlangsamen)",
|
||||
"lastPatchedAppLabel": "Gepatchte App speichern",
|
||||
"lastPatchedAppHint": "Speichere den letzten Patch zum Installieren oder Exportieren später",
|
||||
"versionCompatibilityCheckLabel": "Versionskompatibilitätskontrolle",
|
||||
"versionCompatibilityCheckHint": "Verhindert die Auswahl von Patches, die nicht mit der gewählten App-Version kompatibel sind",
|
||||
"requireSuggestedAppVersionLabel": "Empfohlene App-Version erforderlich",
|
||||
"requireSuggestedAppVersionHint": "Verhindere die Auswahl einer App mit einer nicht empfohlenen Version",
|
||||
"requireSuggestedAppVersionDialogText": "Das Auswählen einer App, die nicht der empfohlenen Version entspricht, kann zu unerwarteten Problemen führen.\n\nMöchten Sie trotzdem fortfahren?",
|
||||
"aboutLabel": "Über",
|
||||
"snackbarMessage": "In die Zwischenablage kopiert",
|
||||
"restartAppForChanges": "Starte die App neu, um die Änderungen zu übernehmen",
|
||||
"deleteTempDirLabel": "Lösche temporäre Dateien",
|
||||
"deleteTempDirHint": "Unbenutzte temporäre Dateien löschen",
|
||||
"deletedTempDir": "Temporäre Dateien wurden gelöscht",
|
||||
"exportSettingsLabel": "Export-Einstellungen",
|
||||
"exportSettingsHint": "Einstellungen in eine JSON-Datei exportieren",
|
||||
"exportedSettings": "Einstellungen exportiert",
|
||||
"importSettingsLabel": "Import-Einstellungen",
|
||||
"importSettingsHint": "Einstellungen aus einer JSON-Datei importieren",
|
||||
"importedSettings": "Einstellungen importiert",
|
||||
"exportPatchesLabel": "Patchauswahl exportieren",
|
||||
"exportPatchesHint": "Patch-Auswahl in eine JSON-Datei exportieren",
|
||||
"exportedPatches": "Patch-Auswahl exportiert",
|
||||
"noExportFileFound": "Keine Patch-Auswahl zum Exportieren",
|
||||
"importPatchesLabel": "Patch-Auswahl importieren",
|
||||
"importPatchesHint": "Patch-Auswahl aus einer JSON-Datei importieren",
|
||||
"importedPatches": "Patch Auswahl importiert",
|
||||
"resetStoredPatchesLabel": "Patch-Auswahl zurücksetzen",
|
||||
"resetStoredPatchesHint": "Gespeicherte Patch-Auswahl zurücksetzen",
|
||||
"resetStoredPatchesDialogTitle": "Patch-Auswahl zurücksetzen?",
|
||||
"resetStoredPatchesDialogText": "Die Standardauswahl der Patches wird wiederhergestellt.",
|
||||
"resetStoredPatches": "Patch-Auswahl wurde zurückgesetzt",
|
||||
"resetStoredOptionsLabel": "Patch-Optionen zurücksetzen",
|
||||
"resetStoredOptionsHint": "Alle Patch-Optionen zurücksetzen",
|
||||
"resetStoredOptionsDialogTitle": "Patch-Optionen zurücksetzen?",
|
||||
"resetStoredOptionsDialogText": "Beim Zurücksetzen der Patch-Optionen werden alle gespeicherten Optionen entfernt.",
|
||||
"resetStoredOptions": "Einstellungen wurden zurückgesetzt",
|
||||
"deleteLogsLabel": "Protokolle löschen",
|
||||
"deleteLogsHint": "Gesammelte ReVanced Manager Logs löschen",
|
||||
"deletedLogs": "Protokolle gelöscht",
|
||||
"regenerateKeystoreLabel": "Keystore neu generieren",
|
||||
"regenerateKeystoreHint": "Den zur Signierung von Apps verwendeten Keystore neu generieren",
|
||||
"regenerateKeystoreDialogTitle": "Keystore neu generieren?",
|
||||
"regenerateKeystoreDialogText": "Gepatchte Apps, die mit dem alten Keystore signiert sind, können nicht mehr aktualisiert werden.",
|
||||
"regeneratedKeystore": "Keystore regeneriert",
|
||||
"exportKeystoreLabel": "Keystore exportieren",
|
||||
"exportKeystoreHint": "Den Keystore exportieren, mit dem Apps signiert werden",
|
||||
"exportedKeystore": "Keystore exportiert",
|
||||
"noKeystoreExportFileFound": "Kein Keystore zum Exportieren",
|
||||
"importKeystoreLabel": "Keystore importieren",
|
||||
"importKeystoreHint": "Importiere einen Keystore zur Signierung von Apps",
|
||||
"importedKeystore": "Keystore importiert",
|
||||
"selectKeystorePassword": "Keystore-Passwort",
|
||||
"selectKeystorePasswordHint": "Keystore-Passwort zur Signierung von Apps auswählen",
|
||||
"jsonSelectorErrorMessage": "Ausgewählte JSON-Datei kann nicht verwendet werden",
|
||||
"keystoreSelectorErrorMessage": "Ausgewählte Keystore-Datei kann nicht verwendet werden"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "App Info",
|
||||
"openButton": "Öffnen",
|
||||
"installButton": "Installieren",
|
||||
"uninstallButton": "Deinstallieren",
|
||||
"unmountButton": "Unmounten",
|
||||
"exportButton": "Exportieren",
|
||||
"deleteButton": "Löschen",
|
||||
"rootDialogTitle": "Fehler",
|
||||
"lastPatchedAppDescription": "Dies ist ein Backup der App, die zuletzt gepatcht wurde.",
|
||||
"unmountDialogText": "Bist du sicher, dass du die Patches dieser App entfernen möchtest?",
|
||||
"uninstallDialogText": "Bist du sicher, dass du diese App deinstallieren möchtest?",
|
||||
"rootDialogText": "Die App wurde mit Superuser-Berechtigungen installiert, aber derzeit hat ReVanced Manager keine Berechtigungen.\nBitte erteile zuerst Superuser-Berechtigungen.",
|
||||
"removeAppDialogTitle": "App löschen?",
|
||||
"removeAppDialogText": "Sind Sie sicher, dass Sie diese Sicherung löschen möchten?",
|
||||
"packageNameLabel": "Paketname",
|
||||
"installTypeLabel": "Installationsart",
|
||||
"mountTypeLabel": "Einhängen",
|
||||
"regularTypeLabel": "Normal",
|
||||
"patchedDateLabel": "Patch-Datum",
|
||||
"appliedPatchesLabel": "Angewandte Patches",
|
||||
"sizeLabel": "Größe der Datei",
|
||||
"patchedDateHint": "${date} um ${time}",
|
||||
"appliedPatchesHint": "${quantity} angewandte Patches",
|
||||
"updateNotImplemented": "Diese Funktion ist noch nicht implementiert"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Mitwirkende"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Versionskonflikt",
|
||||
"mount_no_root": "Kein Root-Zugriff",
|
||||
"mount_missing_installation": "Installation nicht gefunden",
|
||||
"status_failure_blocked": "Installation blockiert",
|
||||
"install_failed_verification_failure": "Überprüfung fehlgeschlagen",
|
||||
"status_failure_invalid": "Installation fehlgeschlagen",
|
||||
"install_failed_version_downgrade": "Downgrade nicht möglich",
|
||||
"status_failure_conflict": "Installationskonflikt",
|
||||
"status_failure_storage": "Installations-Speicher Problem",
|
||||
"status_failure_incompatible": "Installation ist nicht kompatibel",
|
||||
"status_failure_timeout": "Installations-Timeout",
|
||||
"status_unknown": "Installation fehlgeschlagen",
|
||||
"mount_version_mismatch_description": "Die Installation ist fehlgeschlagen, da die installierte App eine andere Version hat als die gepatchte App.\n\nInstallieren Sie die Version der App, die Sie mounten, und versuchen Sie es erneut.",
|
||||
"mount_no_root_description": "Die Installation ist fehlgeschlagen, da der Root-Zugriff nicht gewährt wurde.\n\nGewähre Root-Zugriff für ReVanced Manager und versuche es erneut.",
|
||||
"mount_missing_installation_description": "Die Installation ist fehlgeschlagen, da die nicht gepatchte App auf diesem Gerät fehlt, um sie zu mounten.\n\nInstallieren Sie die nicht gepatchte App bevor Sie mounten und versuchen Sie es erneut.",
|
||||
"status_failure_timeout_description": "Die Installation hat zu lange gedauert.\n\nMöchten Sie es erneut versuchen?",
|
||||
"status_failure_storage_description": "Die Installation ist aufgrund unzureichenden Speichers fehlgeschlagen.\n\nSchaffe etwas Platz und versuche es erneut.",
|
||||
"status_failure_invalid_description": "Die Installation ist fehlgeschlagen, da die gepatchte App ungültig ist.\n\nDie App deinstallieren und erneut versuchen?",
|
||||
"status_failure_incompatible_description": "Die App ist mit diesem Gerät nicht kompatibel.\n\nVerwenden Sie eine APK, die von diesem Gerät unterstützt wird, und versuchen Sie es erneut.",
|
||||
"status_failure_conflict_description": "Die Installation wurde durch eine bestehende Installation der App verhindert.\n\nDie installierte App deinstallieren und erneut versuchen?",
|
||||
"status_failure_blocked_description": "Die Installation wurde von ${packageName} blockiert.\n\nPassen Sie Ihre Sicherheitseinstellungen an und versuchen Sie es erneut.",
|
||||
"install_failed_verification_failure_description": "Die Installation ist aufgrund eines Verifizierungsproblems fehlgeschlagen.\n\nPassen Sie Ihre Sicherheitseinstellungen an und versuchen Sie es erneut.",
|
||||
"install_failed_version_downgrade_description": "Die Installation ist fehlgeschlagen, da die gepatchte App eine niedrigere Version als die installierte App ist.\n\nDie App deinstallieren und erneut versuchen?",
|
||||
"status_unknown_description": "Die Installation ist aus einem unbekannten Grund fehlgeschlagen. Bitte versuchen Sie es erneut."
|
||||
}
|
||||
}
|
298
assets/i18n/strings_el_GR.i18n.json
Executable file
@ -0,0 +1,298 @@
|
||||
{
|
||||
"okButton": "Εντάξει",
|
||||
"cancelButton": "Ακύρωση",
|
||||
"dismissButton": "Απόρριψη",
|
||||
"quitButton": "Έξοδος",
|
||||
"updateButton": "Ενημέρωση",
|
||||
"suggested": "Προτεινόμενη έκδοση: ${version}",
|
||||
"yesButton": "Ναι",
|
||||
"noButton": "Όχι",
|
||||
"warning": "Προειδοποίηση",
|
||||
"notice": "Σημείωση",
|
||||
"noShowAgain": "Να μην ξαναεμφανιστεί",
|
||||
"add": "Προσθήκη",
|
||||
"remove": "Αφαίρεση",
|
||||
"showChangelogButton": "Εμφάνιση αλλαγών",
|
||||
"showUpdateButton": "Εμφάνιση ενημέρωσης",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Πίνακας Ελέγχου",
|
||||
"patcherTab": "Τροποποιητής",
|
||||
"settingsTab": "Ρυθμίσεις"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Ανανεώθηκε επιτυχώς",
|
||||
"widgetTitle": "Πίνακας Ελέγχου",
|
||||
"updatesSubtitle": "Ενημερώσεις",
|
||||
"lastPatchedAppSubtitle": "Τελευταία τροποποιημένη εφαρμογή",
|
||||
"patchedSubtitle": "Εγκατεστημένες εφαρμογές",
|
||||
"changeLaterSubtitle": "Μπορείτε να το αλλάξετε αργότερα στις ρυθμίσεις.",
|
||||
"noSavedAppFound": "Δε βρέθηκε εφαρμογή",
|
||||
"noInstallations": "Δεν έχουν εγκατασταθεί τροποποιημένες εφαρμογές",
|
||||
"installUpdate": "Συνέχεια για εγκατάσταση της ενημέρωσης;",
|
||||
"updateSheetTitle": "Ενημέρωση του ReVanced Manager",
|
||||
"updateDialogTitle": "Υπάρχει διαθέσιμη ενημέρωση",
|
||||
"updatePatchesSheetTitle": "Ενημέρωση τροποποιήσεων ReVanced",
|
||||
"updateChangelogTitle": "Τι νέο υπάρχει",
|
||||
"updateDialogText": "Υπάρχει διαθέσιμη μια νέα ενημέρωση για το ${file}.\n\nΗ τρέχουσα εγκατεστημένη έκδοση είναι η ${version}.",
|
||||
"downloadConsentDialogTitle": "Λήψη των απαραίτητων αρχείων;",
|
||||
"downloadConsentDialogText": "Το ReVanced Manager πρέπει να κατεβάσει τα απαραίτητα αρχεία για να λειτουργήσει σωστά.",
|
||||
"downloadConsentDialogText2": "Αυτό θα σας συνδέσει με το ${url}.",
|
||||
"downloadingMessage": "Λήψη ενημέρωσης...",
|
||||
"downloadedMessage": "Η λήψη της ενημέρωσης ολοκληρώθηκε",
|
||||
"installingMessage": "Εγκατάσταση ενημέρωσης...",
|
||||
"errorDownloadMessage": "Αδυναμία λήψης ενημέρωσης",
|
||||
"errorInstallMessage": "Αδυναμία εγκατάστασης ενημέρωσης",
|
||||
"noConnection": "Δεν υπάρχει σύνδεση στο διαδίκτυο"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Πληροφορίες"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Φόρτωση...",
|
||||
"timeagoLabel": "${time} πριν"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Τροποποιητής",
|
||||
"patchButton": "Τροποποίηση",
|
||||
"incompatibleArchWarningDialogText": "Η διαδικασία της τροποποίησης δεν υποστηρίζεται προς το παρόν σε συσκευές της συγκεκριμένης αρχιτεκτονικής και μπορεί να αποτύχει. Συνέχεια παρόλα αυτά;",
|
||||
"removedPatchesWarningDialogText": "Από την τελευταία φορά που τροποποιήσατε αυτή την εφαρμογή, έχουν αφαιρεθεί οι εξής τροποποιήσεις:\n\n${patches}\n\n${newPatches}Συνέχεια παρ' όλα αυτά;",
|
||||
"addedPatchesDialogText": "Από την τελευταία φορά που τροποποιήσατε αυτή την εφαρμογή, έχουν προστεθεί οι εξής τροποποιήσεις:\n\n${addedPatches}",
|
||||
"requiredOptionDialogText": "Κάποιες επιλογές τροποποιήσεων πρέπει να οριστούν."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Επιλέξτε μία εφαρμογή",
|
||||
"widgetTitleSelected": "Επιλεγμένες εφαρμογές",
|
||||
"widgetSubtitle": "Δεν έχει επιλεγεί κάποια εφαρμογή",
|
||||
"noAppsLabel": "Δε βρέθηκαν εφαρμογές",
|
||||
"anyVersion": "Οποιαδήποτε έκδοση"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Επιλέξτε τροποποιήσεις",
|
||||
"widgetTitleSelected": "Επιλεγμένες τροποποιήσεις",
|
||||
"widgetSubtitle": "Επιλέξτε πρώτα μια εφαρμογή",
|
||||
"widgetEmptySubtitle": "Δεν επιλέχθηκαν τροποποιήσεις"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Κοινωνικά Δίκτυα",
|
||||
"widgetSubtitle": "Είμαστε ενεργοί!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Επιλέξτε μία εφαρμογή",
|
||||
"searchBarHint": "Αναζήτηση εφαρμογής",
|
||||
"storageButton": "Αποθηκευτικός χώρος",
|
||||
"selectFromStorageButton": "Επιλογή από αποθηκευτικό χώρο",
|
||||
"errorMessage": "Αδυναμία χρήσης της επιλεγμένης εφαρμογής",
|
||||
"downloadToast": "Η λειτουργία λήψης δεν είναι ακόμη διαθέσιμη",
|
||||
"requireSuggestedAppVersionDialogText": "Η έκδοση της εφαρμογής που επιλέξατε δεν ταιριάζει με την προτεινόμενη έκδοση αυτό μπορεί να προκαλέσει ανεπιθύμητα θέματα. Παρακαλώ επιλέξτε την εφαρμογή που ταιριάζει με την προτεινόμενη έκδοση.\n\nΕπιλεγμένη έκδοση: ${selected}\nΠροτεινόμενη έκδοση: ${suggested}\n\nΓια να προχωρήσετε ούτως ή άλλως, απενεργοποιήστε την «Επιβολή επιλογής της προτεινόμενης έκδοσης εφαρμογής» στις ρυθμίσεις.",
|
||||
"featureNotAvailable": "Η δυνατότητα δεν έχει υλοποιηθεί",
|
||||
"featureNotAvailableText": "Αυτή η εφαρμογή είναι εγκατεστημένη ως split APK οπότε για να μπορέσουμε να την τροποιήσουμε και να την εγκαταστήσουμε αξιόπιστα χρειαζόμαστε πρόσβαση root ώστε να την προσαρτήσουμε. Ωστόσο, μπορείτε να τροποποιήσετε και να εγκαταστήσετε ένα κανονικό αρχείο APK επιλέγοντάς το από το χώρο αποθήκευσης χωρίς να χρειάζεται πρόσβαση root."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Επιλέξτε τροποποιήσεις",
|
||||
"searchBarHint": "Αναζήτηση τροποποιήσεων",
|
||||
"universalPatches": "Γενικευμένες τροποποιήσεις",
|
||||
"newPatches": "Νέες τροποποιήσεις",
|
||||
"patches": "Τροποποιήσεις",
|
||||
"doneButton": "Τέλος",
|
||||
"defaultChip": "Προεπιλογές",
|
||||
"defaultTooltip": "Επιλέξτε όλες τις προεπιλεγμένες τροποποιήσεις",
|
||||
"noneChip": "Καμία",
|
||||
"noneTooltip": "Αποεπιλέξτε όλες τις τροποποιήσεις",
|
||||
"loadPatchesSelection": "Φόρτωση επιλεγμένων τροποποιήσεων",
|
||||
"noSavedPatches": "Δεν υπάρχουν αποθηκευμένες τροποποιήσεις για την εφαρμογή που επιλέξατε.\nΠατήστε «Τέλος» για να αποθηκεύσετε τις τωρινές επιλογές σας.",
|
||||
"noPatchesFound": "Δε βρέθηκαν τροποποιήσεις για την επιλεγμένη εφαρμογή",
|
||||
"setRequiredOption": "Κάποιες τροποποιήσεις απαιτούν να ορίζονται κάποιες επιλογές:\n\n${patches}\n\nΠαρακαλώ ορίστε τις επιλογές πρώτου συνεχίσετε."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Προσαρμοσμένη τιμή",
|
||||
"setToNull": "Ορισμός κενής τιμής",
|
||||
"nullValue": "Η τιμή της επιλογής είναι κενή",
|
||||
"viewTitle": "Επιλογές τροποποιήσεων",
|
||||
"saveOptions": "Αποθήκευση",
|
||||
"unselectPatch": "Αποεπιλέξτε τροποποιήσεις",
|
||||
"tooltip": "Περισσότερες επιλογές εισόδου",
|
||||
"selectFilePath": "Επιλογή τοποθεσίας αρχείου",
|
||||
"selectFolder": "Επιλογή φακέλου",
|
||||
"requiredOption": "Απαιτείται ρύθμιση γι' αυτήν την επιλογή",
|
||||
"unsupportedOption": "Αυτή η επιλογή δεν υποστηρίζεται",
|
||||
"requiredOptionNull": "Πρέπει να οριστούν οι παρακάτω επιλογές:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Η επιλογή αυτής της τροποποίησης μπορεί να επιφέρει σφάλματα τροποποίησης.\n\nΈκδοση εφαρμογής: ${packageVersion}\nΥποστηριζόμενες εκδόσεις: ${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Η τροποποίηση δεν υποστηρίζεται σε αυτήν την έκδοση της εφαρμογής.",
|
||||
"unsupportedRequiredOption": "Αυτή η τροποποίηση αναγκαστικά περιέχει μια επιλογή η οποία δεν υποστηρίζεται από αυτήν την εφαρμογή",
|
||||
"patchesChangeWarningDialogText": "Συνιστάται να χρησιμοποιείτε τις προεπιλεγμένες τροποποιήσεις και επιλογές τους. Η αλλαγή τους μπορεί να οδηγήσει σε μη αναμενόμενα θέματα.\n\nΘα πρέπει να ενεργοποιήσετε το «Να επιτρέπονται αλλαγές επιλογών τροποποιήσεων» στις ρυθμίσεις προτού αλλάξετε οτιδήποτε.",
|
||||
"patchesChangeWarningDialogButton": "Χρήση προεπιλεγμένων επιλογών"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Επιλέξτε τύπο εγκατάστασης",
|
||||
"installTypeDescription": "Συνεχίστε επιλέγοντας τον τύπο εγκατάστασης.",
|
||||
"installButton": "Εγκατάσταση",
|
||||
"installRootType": "Προσάρτηση",
|
||||
"installNonRootType": "Κανονική",
|
||||
"warning": "Απενεργοποίηση αυτόματων ενημερώσεων για την τροποποιημένη εφαρμογή για την αποφυγή απροσδόκητων προβλημάτων.",
|
||||
"pressBackAgain": "Πατήστε πίσω ξανά για ακύρωση",
|
||||
"openButton": "Άνοιγμα",
|
||||
"notificationTitle": "Πραγματοποιείται τροποποίηση μέσω ReVanced Manager",
|
||||
"notificationText": "Πατήστε για να επιστρέψετε στο πρόγραμμα εγκατάστασης",
|
||||
"exportApkButtonTooltip": "Εξαγωγή τροποποιημένου αρχείου APK",
|
||||
"exportLogButtonTooltip": "Εξαγωγή αρχείου καταγραφής",
|
||||
"screenshotDetected": "Ανιχνεύθηκε στιγμιότυπο οθόνης. Αν προσπαθείτε να κοινοποιήσετε το αρχείο καταγραφής, παρακαλούμε να κοινοποιήσετε αντίγραφο κειμένου αντ'αυτού.\n\nΑντιγραφή αρχείου καταγραφής στο πρόχειρο;",
|
||||
"copiedToClipboard": "Το αρχείο καταγραφής αντιγράφηκε στο πρόχειρο",
|
||||
"noExit": "Το πρόγραμμα εγκατάστασης εκτελείται ακόμη, αδυναμία εξόδου..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Ρυθμίσεις",
|
||||
"appearanceSectionTitle": "Εμφάνιση",
|
||||
"teamSectionTitle": "Ομάδα",
|
||||
"debugSectionTitle": "Εντοπισμός σφαλμάτων",
|
||||
"advancedSectionTitle": "Για προχωρημένους",
|
||||
"exportSectionTitle": "Εισαγωγή & εξαγωγή",
|
||||
"dataSectionTitle": "Πηγές δεδομένων",
|
||||
"themeModeLabel": "Θέμα εφαρμογής",
|
||||
"systemThemeLabel": "Σύστημα",
|
||||
"lightThemeLabel": "Ανοιχτόχρωμο",
|
||||
"darkThemeLabel": "Σκουρόχρωμο",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Εμφάνιση που ταιριάζει με τη δική σας συσκευή",
|
||||
"languageLabel": "Γλώσσα",
|
||||
"languageUpdated": "Η γλώσσα ενημερώθηκε",
|
||||
"sourcesLabel": "Εναλλακτικές πηγές",
|
||||
"sourcesLabelHint": "Ρυθμίστε τις εναλλακτικές πηγές για τις τροποποιήσεις ReVanced",
|
||||
"useAlternativeSources": "Χρήση εναλλακτικών πηγών",
|
||||
"useAlternativeSourcesHint": "Χρήση εναλλακτικών πηγών για τις τροποποιήσεις ReVanced αντί του API",
|
||||
"sourcesResetDialogTitle": "Επαναφορά",
|
||||
"sourcesResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τις πηγές σας στις προεπιλεγμένες τιμές τους;",
|
||||
"apiURLResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε την API URL σας στην προεπιλεγμένη τιμή της;",
|
||||
"sourcesUpdateNote": "Σημείωση: Θα γίνεται αυτόματη λήψη των τροποποιήσεων ReVanced από τις εναλλακτικές πηγές.\n\nΟπότε θα συνδέεστε με τις εναλλακτικές πηγές.",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Ρύθμιση διεύθυνσης URL του API του ReVanced Manager",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "Οργάνωση τροποποιήσεων",
|
||||
"sourcesPatchesLabel": "Πηγή τροποποιήσεων",
|
||||
"contributorsLabel": "Συνεισφέροντες",
|
||||
"contributorsHint": "Λίστα με όσους έχουν συμβάλει στο ReVanced",
|
||||
"logsLabel": "Κοινοποίηση αρχείων καταγραφής",
|
||||
"logsHint": "Κοινοποίηση αρχείων καταγραφής του ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Να επιτρέπονται αλλαγές επιλογών τροποποιήσεων",
|
||||
"enablePatchesSelectionHint": "Να μην εμποδίζονται οι επιλογές τροποποιήσεων",
|
||||
"enablePatchesSelectionWarningText": "Αλλαγές στις προεπιλεγμένες επιλογές τροποποιήσεων ίσως επιφέρει μη αναμενόμενα προβλήματα.\n\nΕνεργοποίηση παρόλα αυτά;",
|
||||
"disablePatchesSelectionWarningText": "Πρόκειται να απενεργοποιήσετε τη δυνατότητα αλλαγής των επιλογών τροποποιήσεων.\nΟι προεπιλεγμένες επιλογές τροποποιήσεων θα επαναφερθούν.\n\nΑπενεργοποίηση παρόλα αυτά;",
|
||||
"autoUpdatePatchesLabel": "Αυτόματες ενημερώσεις τροποποιήσεων",
|
||||
"autoUpdatePatchesHint": "Αυτόματη ενημέρωση τροποποιήσεων στην τελευταία έκδοση",
|
||||
"showUpdateDialogLabel": "Εμφάνιση προτροπής για ενημερώσεις",
|
||||
"showUpdateDialogHint": "Εμφάνιση ειδοποίησης όταν είναι διαθέσιμη κάποια νέα ενημέρωση",
|
||||
"universalPatchesLabel": "Εμφάνιση γενικευμένων τροποποιήσεων",
|
||||
"universalPatchesHint": "Εμφάνιση όλων των εφαρμογών και γενικευμένων τροποποιήσεων (ενδέχεται να επιβραδύνει τη φόρτωση λίστας εφαρμογών)",
|
||||
"lastPatchedAppLabel": "Αποθήκευση τροποποιημένης εφαρμογής",
|
||||
"lastPatchedAppHint": "Αποθηκεύστε την τελευταία τροποποίηση για εγκατάσταση ή εξαγωγή αργότερα",
|
||||
"versionCompatibilityCheckLabel": "Έλεγχος συμβατότητας έκδοσης",
|
||||
"versionCompatibilityCheckHint": "Αποκλεισμός επιλογών τροποποιήσεων που δεν είναι συμβατές με την επιλεγμένη έκδοση εφαρμογής",
|
||||
"requireSuggestedAppVersionLabel": "Απαιτείται η προτεινόμενη έκδοση εφαρμογής",
|
||||
"requireSuggestedAppVersionHint": "Αποκλεισμός επιλογής εκδόσεων εφαρμογών που δεν προτείνονται",
|
||||
"requireSuggestedAppVersionDialogText": "Επιλέγοντας μια εφαρμογή που δεν έχει την προτεινόμενη έκδοση μπορεί να προκαλέσει μη αναμενόμενα προβλήματα.\n\nΘέλετε να προχωρήσετε ούτως ή άλλως;",
|
||||
"aboutLabel": "Σχετικά με",
|
||||
"snackbarMessage": "Αντιγράφηκε στο πρόχειρο",
|
||||
"restartAppForChanges": "Επανεκκινήστε την εφαρμογή για να εφαρμόσετε αλλαγές",
|
||||
"deleteTempDirLabel": "Διαγραφή προσωρινών αρχείων",
|
||||
"deleteTempDirHint": "Διαγραφή των αχρησιμοποίητων προσωρινών αρχείων",
|
||||
"deletedTempDir": "Τα προσωρινά αρχεία διαγράφηκαν",
|
||||
"exportSettingsLabel": "Εξαγωγή ρυθμίσεων",
|
||||
"exportSettingsHint": "Εξαγωγή ρυθμίσεων σε αρχείο JSON",
|
||||
"exportedSettings": "Οι ρυθμίσεις εξήχθησαν",
|
||||
"importSettingsLabel": "Εισαγωγή ρυθμίσεων",
|
||||
"importSettingsHint": "Εισαγωγή ρυθμίσεων από ένα αρχείο JSON",
|
||||
"importedSettings": "Οι ρυθμίσεις εισήχθησαν",
|
||||
"exportPatchesLabel": "Εξαγωγή των επιλεγμένων τροποποιήσεων",
|
||||
"exportPatchesHint": "Εξαγωγή των επιλεγμένων τροποποιήσεων σε ένα αρχείο JSON",
|
||||
"exportedPatches": "Η εξαγωγή των επιλεγμένων τροποποιήσεων ολοκληρώθηκε",
|
||||
"noExportFileFound": "Δεν υπάρχει επιλογή τροποποιήσεων για εξαγωγή",
|
||||
"importPatchesLabel": "Εισαγωγή των επιλεγμένων τροποποιήσεων",
|
||||
"importPatchesHint": "Εισαγωγή των επιλεγμένων τροποποιήσεων από ένα αρχείο JSON",
|
||||
"importedPatches": "Η εισαγωγή των επιλεγμένων τροποποιήσεων ολοκληρώθηκε",
|
||||
"resetStoredPatchesLabel": "Επαναφορά επιλογών τροποποιήσεων",
|
||||
"resetStoredPatchesHint": "Επαναφορά των αποθηκευμένων επιλογών τροποποιήσεων",
|
||||
"resetStoredPatchesDialogTitle": "Επαναφορά επιλογών τροποποιήσεων;",
|
||||
"resetStoredPatchesDialogText": "Θα επαναφερθούν οι προεπιλεγμένες επιλογές τροποποιήσεων.",
|
||||
"resetStoredPatches": "Η επαναφορά των επιλεγμένων τροποποιήσεων ολοκληρώθηκε",
|
||||
"resetStoredOptionsLabel": "Επαναφορά επιλογών τροποποιήσεων",
|
||||
"resetStoredOptionsHint": "Επαναφορά όλων των επιλογών τροποποιήσεων",
|
||||
"resetStoredOptionsDialogTitle": "Επαναφορά επιλογών τροποποιήσεων;",
|
||||
"resetStoredOptionsDialogText": "Η επαναφορά των επιλογών τροποποιήσεων θα αφαιρέσει όλες τις αποθηκευμένες επιλογές.",
|
||||
"resetStoredOptions": "Οι επιλογές επαναφέρθηκαν",
|
||||
"deleteLogsLabel": "Εκκαθάριση αρχείων καταγραφής",
|
||||
"deleteLogsHint": "Διαγραφή των αρχείων καταγραφής που έχει συλλέξει το ReVanced Manager",
|
||||
"deletedLogs": "Τα αρχεία καταγραφής έχουν διαγραφεί",
|
||||
"regenerateKeystoreLabel": "Επανέκδοση keystore",
|
||||
"regenerateKeystoreHint": "Επαναφορά του keystore που χρησιμοποιείται για την υπογραφή των εφαρμογών",
|
||||
"regenerateKeystoreDialogTitle": "Επαναφορά keystore;",
|
||||
"regenerateKeystoreDialogText": "Τροποποιημένες εφαρμογές που είχαν υπογράφει με το παλιό keystore δε γίνεται να ενημερώνονται.",
|
||||
"regeneratedKeystore": "Το keystore ανανεώθηκε",
|
||||
"exportKeystoreLabel": "Εξαγωγή keystore",
|
||||
"exportKeystoreHint": "Εξάγετε το κλειδί που χρησιμοποιείται για την υπογραφή των εφαρμογών",
|
||||
"exportedKeystore": "Το κλειδί εξήχθη",
|
||||
"noKeystoreExportFileFound": "Δεν υπάρχει κλειδί για να εξαχθεί",
|
||||
"importKeystoreLabel": "Εισαγωγή keystore",
|
||||
"importKeystoreHint": "Εισάγετε ένα κλειδί που θα χρησιμοποιείται για την υπογραφή εφαρμογών",
|
||||
"importedKeystore": "Το κλειδί εισήχθη",
|
||||
"selectKeystorePassword": "Κωδικός Keystore",
|
||||
"selectKeystorePasswordHint": "Επιλέξτε κωδικό πρόσβασης για το κλειδί που χρησιμοποιείται για την υπογραφή εφαρμογών",
|
||||
"jsonSelectorErrorMessage": "Αδυναμία χρήσης του επιλεγμένου αρχείου JSON",
|
||||
"keystoreSelectorErrorMessage": "Αδυναμία χρήσης του επιλεγμένου αρχείου keystore"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Πληροφορίες εφαρμογής",
|
||||
"openButton": "Άνοιγμα",
|
||||
"installButton": "Εγκατάσταση",
|
||||
"uninstallButton": "Απεγκατάσταση",
|
||||
"unmountButton": "Αποπροσάρτηση",
|
||||
"exportButton": "Εξαγωγή",
|
||||
"deleteButton": "Διαγραφή",
|
||||
"rootDialogTitle": "Σφάλμα",
|
||||
"lastPatchedAppDescription": "Αυτό είναι ένα αντίγραφο ασφαλείας της εφαρμογής που τροποποιήθηκε τελευταία.",
|
||||
"unmountDialogText": "Είστε βέβαιοι ότι θέλετε να αποπροσαρτήσετε αυτήν την εφαρμογή;",
|
||||
"uninstallDialogText": "Είστε βέβαιοι ότι θέλετε να απεγκαταστήσετε αυτή την εφαρμογή;",
|
||||
"rootDialogText": "Η εφαρμογή εγκαταστάθηκε με πρόσβαση root, αλλά αυτή τη στιγμή το ReVanced Manager δεν έχει πρόσβαση root.\nΠαρακαλώ παραχωρήστε πρόσβαση root.",
|
||||
"removeAppDialogTitle": "Διαγραφή εφαρμογής;",
|
||||
"removeAppDialogText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το αντίγραφο ασφαλείας;",
|
||||
"packageNameLabel": "Όνομα πακέτου",
|
||||
"installTypeLabel": "Τύπος εγκατάστασης",
|
||||
"mountTypeLabel": "Προσάρτηση",
|
||||
"regularTypeLabel": "Κανονική",
|
||||
"patchedDateLabel": "Ημερομηνία τροποποίησης",
|
||||
"appliedPatchesLabel": "Τροποποιήσεις που έχουν εφαρμοστεί",
|
||||
"sizeLabel": "Μέγεθος αρχείου",
|
||||
"patchedDateHint": "${date} στις ${time}",
|
||||
"appliedPatchesHint": "${quantity} εφαρμοσμένες τροποποιήσεις",
|
||||
"updateNotImplemented": "Αυτή η δυνατότητα δεν είναι ακόμα διαθέσιμη"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Συνεισφέροντες"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Ασυμφωνία έκδοσης",
|
||||
"mount_no_root": "Δεν υπάρχει πρόσβαση root",
|
||||
"mount_missing_installation": "Η εγκατάσταση δε βρέθηκε",
|
||||
"status_failure_blocked": "Η εγκατάσταση αποκλείστηκε",
|
||||
"install_failed_verification_failure": "Η επαλήθευση απέτυχε",
|
||||
"status_failure_invalid": "Μη έγκυρη εγκατάσταση",
|
||||
"install_failed_version_downgrade": "Αδυναμία υποβάθμισης",
|
||||
"status_failure_conflict": "Η εγκατάσταση αντικρούστηκε",
|
||||
"status_failure_storage": "Πρόβλημα αποθηκευτικού χώρου εγκατάστασης",
|
||||
"status_failure_incompatible": "Μη συμβατή εγκατάσταση",
|
||||
"status_failure_timeout": "Τέλος χρόνου για την εγκατάσταση",
|
||||
"status_unknown": "Η εγκατάσταση απέτυχε",
|
||||
"mount_version_mismatch_description": "Η εγκατάσταση απέτυχε διότι η εγκατεστημένη εφαρμογή έχει διαφορετική έκδοση από την τροποποιημένη εφαρμογή.\n\nΕγκαταστήστε την έκδοση της εφαρμογής που προσαρτήσατε και δοκιμάστε ξανά.",
|
||||
"mount_no_root_description": "Η εγκατάσταση απέτυχε διότι δεν παραχωρήθηκε πρόσβαση root.\n\nΠαραχωρήστε πρόσβαση root στο ReVanced Manager και δοκιμάστε ξανά.",
|
||||
"mount_missing_installation_description": "Η εγκατάσταση απέτυχε διότι η μη τροποποιημένη εφαρμογή δεν έχει εγκατασταθεί σε αυτή τη συσκευή ώστε να την προσαρτήσετε.\n\nΕγκαταστήστε την μη τροποποιημένη εφαρμογή προτού την προσαρτήσετε και δοκιμάστε ξανά.",
|
||||
"status_failure_timeout_description": "Η εγκατάσταση περισσότερη ώρα από το φυσιολογικό για να ολοκληρωθεί.\n\nΘέλετε να δοκιμάσετε ξανά;",
|
||||
"status_failure_storage_description": "Η εγκατάσταση απέτυχε λόγο μη επαρκούς χώρου.\n\nΑπελευθερώστε χώρο και δοκιμάστε ξανά.",
|
||||
"status_failure_invalid_description": "Η εγκατάσταση απέτυχε επειδή η τροποποιημένη εφαρμογή είναι μη έγκυρη.\n\nΑπεγκατάσταση εφαρμογής και προσπάθεια ξανά;",
|
||||
"status_failure_incompatible_description": "Η εφαρμογή δεν είναι συμβατή με αυτήν τη συσκευή.\n\nΧρησιμοποιήστε ένα APK που υποστηρίζεται από αυτήν τη συσκευή και δοκιμάστε ξανά.",
|
||||
"status_failure_conflict_description": "Η εγκατάσταση εμποδίστηκε από μια ήδη υπάρχων εγκατάσταση της εφαρμογής.\n\nΑπεγκατάσταση εφαρμογής και προσπάθεια ξανά;",
|
||||
"status_failure_blocked_description": "Η εγκατάσταση αποκλείστηκε από το ${packageName}.\n\nΡυθμίστε τις ρυθμίσεις ασφαλείας σας και δοκιμάστε ξανά.",
|
||||
"install_failed_verification_failure_description": "Η εγκατάσταση απέτυχε λόγο θέματος επαλήθευσης.\n\nΡυθμίστε τις ρυθμίσεις ασφαλείας σας και δοκιμάστε ξανά.",
|
||||
"install_failed_version_downgrade_description": "Η εγκατάσταση απέτυχε διότι η τροποποιημένη εφαρμογή έχει χαμηλότερη έκδοση από την εγκατεστημένη εφαρμογή.\n\nΑπεγκατάσταση εφαρμογής και προσπάθεια ξανά;",
|
||||
"status_unknown_description": "Η εγκατάσταση απέτυχε για κάποιον άγνωστο λόγο.\nΠαρακαλώ δοκιμάστε ξανά."
|
||||
}
|
||||
}
|
279
assets/i18n/strings_es_AR.i18n.json
Executable file
@ -0,0 +1,279 @@
|
||||
{
|
||||
"okButton": "Aceptar",
|
||||
"cancelButton": "Cancelar",
|
||||
"dismissButton": "Descartar",
|
||||
"quitButton": "Salir",
|
||||
"updateButton": "Actualizar",
|
||||
"suggested": "Sugerida: ${version}",
|
||||
"yesButton": "Sí",
|
||||
"noButton": "No",
|
||||
"warning": "Advertencia",
|
||||
"notice": "Aviso",
|
||||
"noShowAgain": "No volver a mostrar",
|
||||
"add": "Agregar",
|
||||
"remove": "Eliminar",
|
||||
"showChangelogButton": "Notas de la versión",
|
||||
"showUpdateButton": "Actualizar",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Panel de control",
|
||||
"patcherTab": "Parcheador",
|
||||
"settingsTab": "Configuración"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Refrescado satisfactoriamente",
|
||||
"widgetTitle": "Panel de control",
|
||||
"updatesSubtitle": "Actualizaciones",
|
||||
"patchedSubtitle": "Aplicaciones parcheadas",
|
||||
"changeLaterSubtitle": "Podés cambiar esto en los ajustes más tarde.",
|
||||
"noInstallations": "Aún no parcheaste ninguna aplicación",
|
||||
"installUpdate": "¿Instalar actualización?",
|
||||
"updateSheetTitle": "Actualizar ReVanced Manager",
|
||||
"updateDialogTitle": "Nueva actualización disponible",
|
||||
"updatePatchesSheetTitle": "Actualizar ReVanced Patches",
|
||||
"updateChangelogTitle": "Notas de la versión",
|
||||
"updateDialogText": "Hay una nueva actualización disponible para ${file}.\n\nLa versión instalada actualmente es la ${version}.",
|
||||
"downloadConsentDialogTitle": "¿Descargar archivos necesarios?",
|
||||
"downloadConsentDialogText": "ReVanced Manager necesita descargar los archivos necesarios para funcionar correctamente.",
|
||||
"downloadConsentDialogText2": "Esto te va a conectar a ${url}.",
|
||||
"downloadingMessage": "Descargando actualización...",
|
||||
"downloadedMessage": "Actualización descargada",
|
||||
"installingMessage": "Instalando actualización...",
|
||||
"errorDownloadMessage": "No se pudo descargar la actualización",
|
||||
"errorInstallMessage": "No se pudo instalar la actualización",
|
||||
"noConnection": "No tenés conexión a Internet"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Gestionar"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Cargando...",
|
||||
"timeagoLabel": "Hace ${time}"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Parcheador",
|
||||
"patchButton": "Parchear",
|
||||
"removedPatchesWarningDialogText": "Los siguientes parches fueron eliminados desde la última vez que los usaste.\n\n${patches}\n\n${newPatches}¿Continuar de todas formas?",
|
||||
"requiredOptionDialogText": "Algunas opciones de parche tienen que ser establecidas."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Seleccionar una aplicación",
|
||||
"widgetTitleSelected": "Aplicación seleccionada",
|
||||
"widgetSubtitle": "Ninguna aplicación seleccionada",
|
||||
"noAppsLabel": "No se encontró ninguna aplicación",
|
||||
"anyVersion": "Cualquier versión"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Seleccionar parches",
|
||||
"widgetTitleSelected": "Parches seleccionados",
|
||||
"widgetSubtitle": "Ninguna aplicación seleccionada",
|
||||
"widgetEmptySubtitle": "Ningún parche seleccionado"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Nuestras redes sociales",
|
||||
"widgetSubtitle": "¡Estamos en línea!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Seleccionar una aplicación",
|
||||
"searchBarHint": "Buscar...",
|
||||
"storageButton": "Seleccionar desde\\nel almacenamiento",
|
||||
"selectFromStorageButton": "Seleccionar desde\\nel almacenamiento",
|
||||
"errorMessage": "El archivo que seleccionaste no es una aplicación o está dañado",
|
||||
"downloadToast": "La descarga de aplicaciones aún no está disponible",
|
||||
"requireSuggestedAppVersionDialogText": "La versión de la app que seleccionaste no coincide con la versión sugerida, lo que puede causar errores inesperados. Por favor, usá la versión sugerida.\n\nVersión seleccionada: ${selected}\nVersión sugerida: ${suggested}\n\nPara continuar de todas formas, desactivá \"Requerir versión sugerida de la app\" en los ajustes.",
|
||||
"featureNotAvailable": "Función no implementada",
|
||||
"featureNotAvailableText": "Esta aplicación está instalada en formato AAB (Android App Bundle) y solo se puede parchear e instalar de forma fiable mediante el montaje con acceso root. Sin embargo, podés parchear e instalar una aplicación en formato APK seleccionándola desde el almacenamiento."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Seleccionar parches",
|
||||
"searchBarHint": "Buscar...",
|
||||
"universalPatches": "Parches universales",
|
||||
"newPatches": "Parches nuevos",
|
||||
"patches": "Parches",
|
||||
"doneButton": "Guardar selección",
|
||||
"defaultChip": "Por defecto",
|
||||
"defaultTooltip": "Selecciona los parches por defecto",
|
||||
"noneChip": "Ninguno",
|
||||
"noneTooltip": "Deselecciona todos los parches",
|
||||
"loadPatchesSelection": "Cargar selección de parches",
|
||||
"noSavedPatches": "No se guardó ninguna selección de parches para la aplicación seleccionada.\nApretá 'Guardar selección' para guardar la selección actual.",
|
||||
"noPatchesFound": "No se encontraron parches para la aplicación seleccionada",
|
||||
"setRequiredOption": "Los siguientes parches requieren su propia configuración:\\n\\n${patches}\\n\\nPor favor, configuralos antes de continuar."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Valor personalizado",
|
||||
"setToNull": "Establecer a nulo",
|
||||
"nullValue": "Este valor de opción es nulo actualmente",
|
||||
"viewTitle": "Configuración\\ndel parche",
|
||||
"saveOptions": "Guardar configuración",
|
||||
"unselectPatch": "Deseleccionar parche",
|
||||
"tooltip": "Más opciones de entrada",
|
||||
"selectFilePath": "Seleccionar ruta del archivo",
|
||||
"selectFolder": "Seleccionar carpeta",
|
||||
"requiredOption": "La configuración de esta opción es necesaria",
|
||||
"unsupportedOption": "Esta opción no es compatible",
|
||||
"requiredOptionNull": "Tenés que configurar las siguientes opciones:\\n\\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Seleccionar este parche puede provocar errores en el parcheo.\n\nVersión de la app: ${packageVersion}\nVersiones soportadas:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "El parche no es compatible con esta versión de la aplicación.",
|
||||
"unsupportedRequiredOption": "El parche contiene una opción necesaria que no es compatible con esta aplicación",
|
||||
"patchesChangeWarningDialogText": "Te recomendamos que utilices la selección y opciones de parches por defecto; cambiarlas puede causar problemas inesperados.\\n\\nTendrás que activar \\\"Permitir cambiar la selección de parches\\\" en la configuración antes de poder hacerlo.",
|
||||
"patchesChangeWarningDialogButton": "Utilizar la opción por defecto"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Tipo de instalación",
|
||||
"installTypeDescription": "Seleccioná el tipo de instalación para continuar.",
|
||||
"installButton": "Instalar",
|
||||
"installRootType": "Instalación por montaje (requiere root)",
|
||||
"installNonRootType": "Instalación normal",
|
||||
"warning": "Recordá desactivar las actualizaciones automáticas de la app parcheada para evitar problemas inesperados.",
|
||||
"pressBackAgain": "Vuelve a presionar atrás para cancelar",
|
||||
"openButton": "Abrir",
|
||||
"notificationTitle": "ReVanced Manager está parcheando",
|
||||
"notificationText": "Apretá para volver al instalador",
|
||||
"exportApkButtonTooltip": "Exportar APK parcheado",
|
||||
"exportLogButtonTooltip": "Exportar registro",
|
||||
"screenshotDetected": "Detectamos que hiciste una captura de pantalla. Si estás intentando compartir el registro, por favor compartilo en formato de texto.\\n\\n¿Copiar registro al portapapeles?",
|
||||
"copiedToClipboard": "Registro copiado al portapapeles",
|
||||
"noExit": "El instalador aún se está ejecutando, no te podés salir..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Configuración",
|
||||
"appearanceSectionTitle": "Apariencia",
|
||||
"teamSectionTitle": "Equipo",
|
||||
"debugSectionTitle": "Depuración",
|
||||
"advancedSectionTitle": "Avanzado",
|
||||
"exportSectionTitle": "Importación y exportación",
|
||||
"dataSectionTitle": "Fuentes de datos",
|
||||
"themeModeLabel": "Tema de la aplicación",
|
||||
"systemThemeLabel": "Igual que el sistema",
|
||||
"lightThemeLabel": "Claro",
|
||||
"darkThemeLabel": "Oscuro",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Disfrutá de una experiencia más acorde a tu dispositivo",
|
||||
"languageLabel": "Idioma",
|
||||
"languageUpdated": "Idioma actualizado",
|
||||
"sourcesLabel": "Fuentes alternativas",
|
||||
"sourcesLabelHint": "Configurá las fuentes alternativas para ReVanced Patches y ReVanced Integrations",
|
||||
"useAlternativeSources": "Usar fuentes alternativas",
|
||||
"useAlternativeSourcesHint": "Usá fuentes alternativas para ReVanced Patches y ReVanced Integrations en lugar de la API",
|
||||
"sourcesResetDialogTitle": "Resetear",
|
||||
"sourcesResetDialogText": "¿Estás seguro de que quieres restablecer las fuentes a sus valores por defecto?",
|
||||
"apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de tu API a su valor por defecto?",
|
||||
"sourcesUpdateNote": "Nota: Esto descargará de forma automática ReVanced Patches y ReVanced Integrations desde las fuentes alternativas.\n\nEsto te va a conectar a la fuente alternativa.",
|
||||
"apiURLLabel": "URL de la API",
|
||||
"apiURLHint": "Configurá la URL de la API de ReVanced Manager",
|
||||
"selectApiURL": "URL de la API",
|
||||
"orgPatchesLabel": "Organización de los parches",
|
||||
"sourcesPatchesLabel": "Fuente de los parches",
|
||||
"contributorsLabel": "Contribuidores",
|
||||
"contributorsHint": "Una lista de los contribuidores de ReVanced",
|
||||
"logsLabel": "Compartir registros",
|
||||
"logsHint": "Comparte los registros de ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Permitir cambiar la selección de parches",
|
||||
"enablePatchesSelectionHint": "Permite la selección o deselección de parches",
|
||||
"enablePatchesSelectionWarningText": "Cambiar la selección de parches puede causar problemas inesperados.\n\n¿Habilitar de todos modos?",
|
||||
"disablePatchesSelectionWarningText": "Está a punto de desactivar el cambio de la selección de parches.\nSe restablecerá la selección de parches por defecto.\n\n¿Desactivar de todos modos?",
|
||||
"autoUpdatePatchesLabel": "Actualizar parches automáticamente",
|
||||
"autoUpdatePatchesHint": "Actualiza automáticamente los parches a la última versión",
|
||||
"showUpdateDialogLabel": "Mostrar diálogo de actualización",
|
||||
"showUpdateDialogHint": "Muestra un diálogo cuando haya una nueva actualización disponible",
|
||||
"universalPatchesLabel": "Mostrar parches universales",
|
||||
"universalPatchesHint": "Mostrar todas las aplicaciones y parches universales (puede ralentizar la lista de aplicaciones)",
|
||||
"versionCompatibilityCheckLabel": "Comprobar compatibilidad de versiones",
|
||||
"versionCompatibilityCheckHint": "Impide la selección de parches que no sean compatibles con la versión de la aplicación seleccionada",
|
||||
"requireSuggestedAppVersionLabel": "Requerir versión sugerida de la aplicación",
|
||||
"requireSuggestedAppVersionHint": "Impide seleccionar una aplicación cuya versión no sea la sugerida",
|
||||
"requireSuggestedAppVersionDialogText": "Seleccionar una aplicación que no es la versión sugerida puede causar problemas inesperados.\n\n¿Desea continuar de todos modos?",
|
||||
"aboutLabel": "Acerca de",
|
||||
"snackbarMessage": "Copiado al portapapeles",
|
||||
"restartAppForChanges": "Reiniciá la app para aplicar los cambios",
|
||||
"deleteTempDirLabel": "Eliminar archivos temporales",
|
||||
"deleteTempDirHint": "Elimina los archivos temporales que no se usan",
|
||||
"deletedTempDir": "Archivos temporales eliminados",
|
||||
"exportPatchesLabel": "Exportar selección de parches",
|
||||
"exportPatchesHint": "Exporta la selección de parches a un archivo JSON",
|
||||
"exportedPatches": "Selección de parches exportada",
|
||||
"noExportFileFound": "No hay selección de parches para exportar",
|
||||
"importPatchesLabel": "Importar selección de parches",
|
||||
"importPatchesHint": "Importa la selección de parches desde un archivo JSON",
|
||||
"importedPatches": "Selección de parches importada",
|
||||
"resetStoredPatchesLabel": "Restablecer selección de parches",
|
||||
"resetStoredPatchesHint": "Restablecer selección de parches guardada",
|
||||
"resetStoredPatchesDialogTitle": "¿Restablecer selección de parches?",
|
||||
"resetStoredPatchesDialogText": "Se restablecerá la selección predeterminada de parches.",
|
||||
"resetStoredPatches": "La selección de parches se ha restablecido",
|
||||
"resetStoredOptionsLabel": "Restablecer opciones de parche",
|
||||
"resetStoredOptionsHint": "Reiniciar todas las opciones de parche",
|
||||
"resetStoredOptionsDialogTitle": "¿Restablecer opciones de parche?",
|
||||
"resetStoredOptionsDialogText": "Restablecer las opciones de parche eliminará todas las opciones guardadas.",
|
||||
"resetStoredOptions": "Las opciones se han restablecido",
|
||||
"deleteLogsLabel": "Borrar registros",
|
||||
"deleteLogsHint": "Elimina los registros recopilados por ReVanced Manager",
|
||||
"deletedLogs": "Registros eliminados",
|
||||
"regenerateKeystoreLabel": "Regenerar repositorio de claves",
|
||||
"regenerateKeystoreHint": "Regenera el repositorio de claves utilizado para firmar aplicaciones",
|
||||
"regenerateKeystoreDialogTitle": "¿Regenerar repositorio de claves?",
|
||||
"regenerateKeystoreDialogText": "Las aplicaciones parcheadas firmadas con el antiguo repositorio de claves ya no podrán actualizarse.",
|
||||
"regeneratedKeystore": "Repositorio de claves regenerado",
|
||||
"exportKeystoreLabel": "Exportar repositorio de claves",
|
||||
"exportKeystoreHint": "Exporta el repositorio de claves utilizado para firmar aplicaciones",
|
||||
"exportedKeystore": "Repositorio de claves exportado",
|
||||
"noKeystoreExportFileFound": "No hay repositorio de claves para exportar",
|
||||
"importKeystoreLabel": "Importar repositorio de claves",
|
||||
"importKeystoreHint": "Importar un repositorio de claves utilizado para firmar aplicaciones",
|
||||
"importedKeystore": "Repositorio de claves importado",
|
||||
"selectKeystorePassword": "Contraseña del repositorio de claves",
|
||||
"selectKeystorePasswordHint": "Selecciona la contraseña del repositorio de claves utilizada para firmar aplicaciones",
|
||||
"jsonSelectorErrorMessage": "No se puede usar el archivo JSON seleccionado",
|
||||
"keystoreSelectorErrorMessage": "No se puede utilizar el archivo de repositorio de claves seleccionado"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Información de la aplicación",
|
||||
"openButton": "Abrir",
|
||||
"uninstallButton": "Desinstalar",
|
||||
"unmountButton": "Desmontar",
|
||||
"rootDialogTitle": "Error",
|
||||
"unmountDialogText": "¿Seguro que querés desmontar esta aplicación?",
|
||||
"uninstallDialogText": "¿Seguro que querés desinstalar esta aplicación?",
|
||||
"rootDialogText": "La app se instaló con permisos de superusuario, pero ReVanced Manager no los tiene.\nPor favor, concedele permisos de superusuario.",
|
||||
"packageNameLabel": "Nombre del paquete",
|
||||
"installTypeLabel": "Tipo de instalación",
|
||||
"mountTypeLabel": "Instalación por montaje (requiere root)",
|
||||
"regularTypeLabel": "Instalación normal",
|
||||
"patchedDateLabel": "Fecha de parcheo",
|
||||
"appliedPatchesLabel": "Parches aplicados",
|
||||
"patchedDateHint": "${date} a las ${time}",
|
||||
"appliedPatchesHint": "${quantity} parches aplicados",
|
||||
"updateNotImplemented": "Esta función no se implementó aún"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contribuidores"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "La versión no coincide",
|
||||
"mount_no_root": "Sin acceso root",
|
||||
"mount_missing_installation": "Instalación no encontrada",
|
||||
"status_failure_blocked": "Instalación bloqueada",
|
||||
"install_failed_verification_failure": "Verificación fallida",
|
||||
"status_failure_invalid": "Instalación inválida",
|
||||
"install_failed_version_downgrade": "No se puede degradar",
|
||||
"status_failure_conflict": "Conflicto de instalación",
|
||||
"status_failure_storage": "Problema de almacenamiento en la instalación",
|
||||
"status_failure_incompatible": "Instalación incompatible",
|
||||
"status_failure_timeout": "Tiempo de instalación agotado",
|
||||
"status_unknown": "Instalación fallida",
|
||||
"mount_version_mismatch_description": "La instalación fallo debido a que la aplicación instalada es una versión diferente a la parcheada.\n\nInstalá la versión de la aplicación que intentás montar y volvé a intentarlo.",
|
||||
"mount_no_root_description": "La instalación falló debido a que no concediste acceso root.\n\nConcedele acceso root a ReVanced Manager y volvé a intentarlo.",
|
||||
"mount_missing_installation_description": "La instalación falló debido a que no instalaste la aplicación original en el dispositivo para poder montar la aplicación modificada sobre ella.\n\nInstalá la aplicación original antes de montar y volvé a intentarlo.",
|
||||
"status_failure_timeout_description": "La instalación tardó demasiado tiempo en terminar.\n\n¿Querés volver a intentarlo?",
|
||||
"status_failure_storage_description": "La instalación falló debido a falta de almacenamiento.\n\nLiberá algo de espacio y volvé a intentarlo.",
|
||||
"status_failure_invalid_description": "La instalación falló debido a que la aplicación parcheada es inválida.\n\n¿Querés desinstalar la aplicación y volver a intentarlo?",
|
||||
"status_failure_incompatible_description": "La aplicación es incompatible con este dispositivo.\n\nContactá con el desarrollador de la aplicación y solicitá asistencia.",
|
||||
"status_failure_conflict_description": "Una instalación existente de la aplicación impidió la instalación.\n\n¿Querés desinstalar la aplicación instalada y volver a intentarlo?",
|
||||
"status_failure_blocked_description": "${packageName} bloqueó la instalación.\n\nAjustá la configuración de seguridad y volvé a intentarlo.",
|
||||
"install_failed_verification_failure_description": "La instalación falló debido a un problema de verificación.\n\nAjustá la configuración de seguridad y volvé a intentarlo.",
|
||||
"install_failed_version_downgrade_description": "La instalación falló debido a que la aplicación parcheada es una versión inferior a la instalada.\n\n¿Querés desinstalar la aplicación y volver a intentarlo?",
|
||||
"status_unknown_description": "La instalación falló debido a una razón desconocida. Por favor, volvé a intentarlo."
|
||||
}
|
||||
}
|
298
assets/i18n/strings_es_ES.i18n.json
Executable file
@ -0,0 +1,298 @@
|
||||
{
|
||||
"okButton": "Aceptar",
|
||||
"cancelButton": "Cancelar",
|
||||
"dismissButton": "Descartar",
|
||||
"quitButton": "Cerrar",
|
||||
"updateButton": "Actualizar",
|
||||
"suggested": "Sugerido: ${version}",
|
||||
"yesButton": "Sí",
|
||||
"noButton": "No",
|
||||
"warning": "Advertencia",
|
||||
"notice": "Aviso",
|
||||
"noShowAgain": "No mostrar de nuevo",
|
||||
"add": "Añadir",
|
||||
"remove": "Eliminar",
|
||||
"showChangelogButton": "Mostrar historial de cambios",
|
||||
"showUpdateButton": "Mostrar actualización",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Panel de control",
|
||||
"patcherTab": "Parcheador",
|
||||
"settingsTab": "Configuración"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Actualizado con éxito",
|
||||
"widgetTitle": "Panel",
|
||||
"updatesSubtitle": "Actualizaciones",
|
||||
"lastPatchedAppSubtitle": "Última app parcheada",
|
||||
"patchedSubtitle": "Apps instaladas",
|
||||
"changeLaterSubtitle": "Puedes cambiar esto en la configuración más tarde.",
|
||||
"noSavedAppFound": "App no encontrada",
|
||||
"noInstallations": "No tienes apps parcheadas instaladas",
|
||||
"installUpdate": "¿Continuar instalando la actualización?",
|
||||
"updateSheetTitle": "Actualizar ReVanced Manager",
|
||||
"updateDialogTitle": "Nueva actualización disponible",
|
||||
"updatePatchesSheetTitle": "Actualizar Parches de ReVanced",
|
||||
"updateChangelogTitle": "Registro de cambios",
|
||||
"updateDialogText": "Una nueva actualización está disponible para ${file}.\n\nLa versión actualmente instalada es ${version}.",
|
||||
"downloadConsentDialogTitle": "¿Descargar archivos necesarios?",
|
||||
"downloadConsentDialogText": "ReVanced Manager necesita descargar los archivos necesarios para funcionar correctamente.",
|
||||
"downloadConsentDialogText2": "Esto te conectará a ${url}.",
|
||||
"downloadingMessage": "Descargando actualización...",
|
||||
"downloadedMessage": "Actualización descargada",
|
||||
"installingMessage": "Instalando actualización...",
|
||||
"errorDownloadMessage": "No se pudo descargar la actualización",
|
||||
"errorInstallMessage": "No se pudo instalar la actualización",
|
||||
"noConnection": "No hay conexión a Internet"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Información"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Cargando...",
|
||||
"timeagoLabel": "Hace ${time}"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Parcheador",
|
||||
"patchButton": "Parchear",
|
||||
"incompatibleArchWarningDialogText": "El parche en esta arquitectura aún no está soportado y podría fallar. ¿Continuar de todos modos?",
|
||||
"removedPatchesWarningDialogText": "Eliminados parches desde la última vez que parcheaste esta aplicación:\n\n${patches}\n\n${newPatches}¿Continuar de todos modos?",
|
||||
"addedPatchesDialogText": "Añadidos parches desde la última vez que parcheaste esta aplicación:\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "Deben establecerse algunas opciones de parche."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Selecciona una app",
|
||||
"widgetTitleSelected": "App seleccionada",
|
||||
"widgetSubtitle": "Ninguna aplicación seleccionada",
|
||||
"noAppsLabel": "No se encontraron aplicaciones",
|
||||
"anyVersion": "Cualquier versión"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Seleccionar parches",
|
||||
"widgetTitleSelected": "Parches seleccionados",
|
||||
"widgetSubtitle": "Selecciona una aplicación primero",
|
||||
"widgetEmptySubtitle": "Ningún parche seleccionado"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Redes sociales",
|
||||
"widgetSubtitle": "¡Estamos en línea!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Selecciona una app",
|
||||
"searchBarHint": "Buscar app",
|
||||
"storageButton": "Almacenamiento",
|
||||
"selectFromStorageButton": "Seleccionar desde el almacenamiento",
|
||||
"errorMessage": "No se puede usar la aplicación seleccionada",
|
||||
"downloadToast": "La función de descarga aún no está disponible",
|
||||
"requireSuggestedAppVersionDialogText": "La versión de la app que has seleccionado no coincide con la versión sugerida por lo que puede dar errores inesperados. Por favor usa la versión sugerida.\n\nVersión seleccionada: ${selected}\nVersión sugerida: ${suggested}\n\nPara proceder de todos modos, desactiva \"Versión sugerida de la app requerida\" en la configuración.",
|
||||
"featureNotAvailable": "Función no implementada",
|
||||
"featureNotAvailableText": "Esta aplicación es un APK dividido y solo puede ser parcheada e instalada de forma fiable mediante el montaje con permisos de root. Sin embargo, puedes parchear e instalar un APK completo seleccionándolo del almacenamiento."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Seleccionar parches",
|
||||
"searchBarHint": "Buscar parches",
|
||||
"universalPatches": "Parches universales",
|
||||
"newPatches": "Nuevos parches",
|
||||
"patches": "Parches",
|
||||
"doneButton": "Listo",
|
||||
"defaultChip": "Por defecto",
|
||||
"defaultTooltip": "Seleccionar todos los parches predeterminados",
|
||||
"noneChip": "Ninguno",
|
||||
"noneTooltip": "Deseleccionar todos los parches",
|
||||
"loadPatchesSelection": "Cargar selección de parches",
|
||||
"noSavedPatches": "No se ha guardado ninguna selección de parches para la aplicación seleccionada.\nPresione Hecho para guardar la selección actual.",
|
||||
"noPatchesFound": "No se encontraron parches para la aplicación seleccionada",
|
||||
"setRequiredOption": "Algunos parches requieren que se establezcan opciones:\n\n${patches}\n\nPor favor, establécelos antes de continuar."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Valor personalizado",
|
||||
"setToNull": "Establecer a nulo",
|
||||
"nullValue": "Este valor de opción es nulo actualmente",
|
||||
"viewTitle": "Opciones de parche",
|
||||
"saveOptions": "Guardar",
|
||||
"unselectPatch": "Deseleccionar parche",
|
||||
"tooltip": "Más opciones de entrada",
|
||||
"selectFilePath": "Seleccionar ruta del archivo",
|
||||
"selectFolder": "Seleccionar carpeta",
|
||||
"requiredOption": "La configuración de esta opción es necesaria",
|
||||
"unsupportedOption": "Esta opción no está disponible",
|
||||
"requiredOptionNull": "Hay que establecer las siguientes opciones:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Seleccionar este parche puede causar errores.\n\nVersión de la app: ${packageVersion}\nVersiones compatibles:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "El parche no es compatible con esta versión de la aplicación.",
|
||||
"unsupportedRequiredOption": "Este parche contiene una opción necesaria que no está disponible en esta app",
|
||||
"patchesChangeWarningDialogText": "Se recomienda utilizar la selección y las opciones predeterminadas del parche. Cambiarlas puede provocar problemas inesperados.\n\nDeberás activar \"Permitir cambiar la selección de parches\" en la configuración antes de cambiar cualquier selección de parche.",
|
||||
"patchesChangeWarningDialogButton": "Usar selección por defecto"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Seleccionar tipo de instalación",
|
||||
"installTypeDescription": "Seleccione el tipo de instalación para continuar.",
|
||||
"installButton": "Instalar",
|
||||
"installRootType": "Montar",
|
||||
"installNonRootType": "Normal",
|
||||
"warning": "Desactivar actualizaciones automáticas para la aplicación parcheada para evitar problemas inesperados.",
|
||||
"pressBackAgain": "Pulsa de nuevo para cancelar",
|
||||
"openButton": "Abrir",
|
||||
"notificationTitle": "ReVanced Manager está parcheando",
|
||||
"notificationText": "Toque para volver al instalador",
|
||||
"exportApkButtonTooltip": "Exportar APK parcheado",
|
||||
"exportLogButtonTooltip": "Exportar registro",
|
||||
"screenshotDetected": "Se ha detectado una captura de pantalla. Si estás intentando compartir el registro, por favor, comparte una copia de texto en su lugar.\n\n¿Copiar registro al portapapeles?",
|
||||
"copiedToClipboard": "Registro copiado al portapapeles",
|
||||
"noExit": "El instalador todavía se está ejecutando, no se puede salir..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Configuración",
|
||||
"appearanceSectionTitle": "Apariencia",
|
||||
"teamSectionTitle": "Equipo",
|
||||
"debugSectionTitle": "Depuración",
|
||||
"advancedSectionTitle": "Avanzado",
|
||||
"exportSectionTitle": "Importar y exportar",
|
||||
"dataSectionTitle": "Fuentes de datos",
|
||||
"themeModeLabel": "Tema de la app",
|
||||
"systemThemeLabel": "Sistema",
|
||||
"lightThemeLabel": "Claro",
|
||||
"darkThemeLabel": "Oscuro",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Disfrute de una experiencia más acorde a su dispositivo",
|
||||
"languageLabel": "Idioma",
|
||||
"languageUpdated": "Idioma actualizado",
|
||||
"sourcesLabel": "Fuentes alternativas",
|
||||
"sourcesLabelHint": "Configurar las fuentes alternativas para los parches reVanced",
|
||||
"useAlternativeSources": "Usar fuentes alternativas",
|
||||
"useAlternativeSourcesHint": "Usar fuentes alternativas para Parches ReVanced en lugar de la API",
|
||||
"sourcesResetDialogTitle": "Restablecer",
|
||||
"sourcesResetDialogText": "¿Estás seguro de que quieres restablecer tus fuentes a sus valores predeterminados?",
|
||||
"apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de tu API a su valor predeterminado?",
|
||||
"sourcesUpdateNote": "Nota: Esto descargará automáticamente los Parches ReVanced desde las fuentes alternativas.\n\nEsto te conectará a la fuente alternativa.",
|
||||
"apiURLLabel": "URL de la API",
|
||||
"apiURLHint": "Configurar la URL de API del ReVanced Manager",
|
||||
"selectApiURL": "URL de la API",
|
||||
"orgPatchesLabel": "Organización de los parches",
|
||||
"sourcesPatchesLabel": "Fuente de los parches",
|
||||
"contributorsLabel": "Contribuidores",
|
||||
"contributorsHint": "Una lista de contribuidores de ReVanced",
|
||||
"logsLabel": "Compartir registros",
|
||||
"logsHint": "Compartir registros de ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Permitir cambiar la selección de parches",
|
||||
"enablePatchesSelectionHint": "No prevenir la selección o deseleccion de parches",
|
||||
"enablePatchesSelectionWarningText": "Cambiar la selección de parches puede causar problemas inesperados.\n\n¿Habilitar de todos modos?",
|
||||
"disablePatchesSelectionWarningText": "Estás a punto de desactivar cambiar la selección de parches.\nLa selección predeterminada de parches se restaurará.\n\n¿Deshabilitar de todos modos?",
|
||||
"autoUpdatePatchesLabel": "Actualizar automáticamente los parches",
|
||||
"autoUpdatePatchesHint": "Actualizar automáticamente los parches a la última versión",
|
||||
"showUpdateDialogLabel": "Mostrar diálogo de actualización",
|
||||
"showUpdateDialogHint": "Mostrar un diálogo cuando una nueva actualización esté disponible",
|
||||
"universalPatchesLabel": "Mostrar parches universales",
|
||||
"universalPatchesHint": "Mostrar todas las apps y parches universales (puede ralentizar la lista de aplicaciones)",
|
||||
"lastPatchedAppLabel": "Guardar app parcheada",
|
||||
"lastPatchedAppHint": "Guardar el último parche para instalar o exportar más tarde",
|
||||
"versionCompatibilityCheckLabel": "Comprobación de compatibilidad de versiones",
|
||||
"versionCompatibilityCheckHint": "Evitar la selección de parches que no sean compatibles con la versión de la app seleccionada",
|
||||
"requireSuggestedAppVersionLabel": "Versión sugerida de la app requerida",
|
||||
"requireSuggestedAppVersionHint": "Evitar seleccionar una app con una versión que no sea la sugerida",
|
||||
"requireSuggestedAppVersionDialogText": "Seleccionar una app que no es la versión sugerida puede causar problemas inesperados.\n\n¿Desea continuar de todos modos?",
|
||||
"aboutLabel": "Acerca de",
|
||||
"snackbarMessage": "Copiado al portapapeles",
|
||||
"restartAppForChanges": "Reinicie la app para aplicar los cambios",
|
||||
"deleteTempDirLabel": "Borrar archivos temporales",
|
||||
"deleteTempDirHint": "Eliminar archivos temporales no utilizados",
|
||||
"deletedTempDir": "Archivos temporales eliminados",
|
||||
"exportSettingsLabel": "Exportar ajustes",
|
||||
"exportSettingsHint": "Exportar ajustes a un archivo JSON",
|
||||
"exportedSettings": "Ajustes exportados",
|
||||
"importSettingsLabel": "Importar ajustes",
|
||||
"importSettingsHint": "Importar ajustes desde un archivo JSON",
|
||||
"importedSettings": "Ajustes importados",
|
||||
"exportPatchesLabel": "Exportar la selección de parches",
|
||||
"exportPatchesHint": "Exportar la selección de parches a un archivo JSON",
|
||||
"exportedPatches": "Selección de parches exportada",
|
||||
"noExportFileFound": "No hay selección de parches para exportar",
|
||||
"importPatchesLabel": "Importar la selección de parches",
|
||||
"importPatchesHint": "Importar la selección de parches desde un archivo JSON",
|
||||
"importedPatches": "Selección de parches importada",
|
||||
"resetStoredPatchesLabel": "Restablecer la selección de parches",
|
||||
"resetStoredPatchesHint": "Restablecer la selección de parches almacenada",
|
||||
"resetStoredPatchesDialogTitle": "¿Restablecer la selección de parches?",
|
||||
"resetStoredPatchesDialogText": "Se restaurará la selección predeterminada de parches.",
|
||||
"resetStoredPatches": "La selección de parches ha sido restablecida",
|
||||
"resetStoredOptionsLabel": "Restablecer opciones de parche",
|
||||
"resetStoredOptionsHint": "Reiniciar todas las opciones de parche",
|
||||
"resetStoredOptionsDialogTitle": "¿Restablecer opciones de parche?",
|
||||
"resetStoredOptionsDialogText": "Restablecer las opciones de parche eliminará todas las opciones guardadas.",
|
||||
"resetStoredOptions": "Se han reiniciado las opciones",
|
||||
"deleteLogsLabel": "Borrar registros",
|
||||
"deleteLogsHint": "Eliminar los registros recopilados de ReVanced Manager",
|
||||
"deletedLogs": "Registros eliminados",
|
||||
"regenerateKeystoreLabel": "Regenerar keystore",
|
||||
"regenerateKeystoreHint": "Regenerar el almacén de llaves utilizado para firmar apps",
|
||||
"regenerateKeystoreDialogTitle": "¿Regenerar keystore?",
|
||||
"regenerateKeystoreDialogText": "Las apps parcheadas firmadas con el antiguo keystore ya no podrán actualizarse.",
|
||||
"regeneratedKeystore": "Keystore regenerado",
|
||||
"exportKeystoreLabel": "Exportar keystore",
|
||||
"exportKeystoreHint": "Exportar el keystore utilizado para firmar apps",
|
||||
"exportedKeystore": "Repositorio de claves exportado",
|
||||
"noKeystoreExportFileFound": "No hay repositorio de claves para exportar",
|
||||
"importKeystoreLabel": "Importar keystore",
|
||||
"importKeystoreHint": "Importar un repositorio de llaves utilizado para firmar apps",
|
||||
"importedKeystore": "Repositorio de claves importado",
|
||||
"selectKeystorePassword": "Contraseña del repositorio de llaves",
|
||||
"selectKeystorePasswordHint": "Seleccionar la contraseña del repositorio de llaves utilizada para firmar apps",
|
||||
"jsonSelectorErrorMessage": "No se puede utilizar el archivo JSON seleccionado",
|
||||
"keystoreSelectorErrorMessage": "No se puede utilizar el archivo de keystore seleccionado"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Información de la app",
|
||||
"openButton": "Abrir",
|
||||
"installButton": "Instalar",
|
||||
"uninstallButton": "Desinstalar",
|
||||
"unmountButton": "Desmontar",
|
||||
"exportButton": "Exportar",
|
||||
"deleteButton": "Eliminar",
|
||||
"rootDialogTitle": "Error",
|
||||
"lastPatchedAppDescription": "Esta es una copia de seguridad de la aplicación que fue parcheada por última vez.",
|
||||
"unmountDialogText": "¿Estás seguro de que quieres desmontar esta app?",
|
||||
"uninstallDialogText": "¿Estás seguro de que quieres desinstalar esta app?",
|
||||
"rootDialogText": "La app se instaló con permisos de superusuario, pero actualmente ReVanced Manager no tiene permisos.\nPor favor, concede permisos de superusuario primero.",
|
||||
"removeAppDialogTitle": "¿Eliminar aplicación?",
|
||||
"removeAppDialogText": "¿Está seguro que desea eliminar esta copia de seguridad?",
|
||||
"packageNameLabel": "Nombre del paquete",
|
||||
"installTypeLabel": "Tipo de instalación",
|
||||
"mountTypeLabel": "Montar",
|
||||
"regularTypeLabel": "Normal",
|
||||
"patchedDateLabel": "Fecha del parche",
|
||||
"appliedPatchesLabel": "Parches aplicados",
|
||||
"sizeLabel": "Tamaño del archivo",
|
||||
"patchedDateHint": "${date} a las ${time}",
|
||||
"appliedPatchesHint": "${quantity} parches aplicados",
|
||||
"updateNotImplemented": "Esta función no se ha implementado aún"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contribuidores"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "La versión no coincide",
|
||||
"mount_no_root": "Sin acceso root",
|
||||
"mount_missing_installation": "Instalación no encontrada",
|
||||
"status_failure_blocked": "Instalación bloqueada",
|
||||
"install_failed_verification_failure": "La verificación falló",
|
||||
"status_failure_invalid": "Instalación inválida",
|
||||
"install_failed_version_downgrade": "No se puede bajar de versión",
|
||||
"status_failure_conflict": "Problema de instalación",
|
||||
"status_failure_storage": "Problema de almacenamiento de la instalación",
|
||||
"status_failure_incompatible": "Instalación incompatible",
|
||||
"status_failure_timeout": "Tiempo de instalación agotado",
|
||||
"status_unknown": "La instalación falló",
|
||||
"mount_version_mismatch_description": "La instalación ha fallado debido a que la app instalada es una versión diferente de la app parcheada.\n\nInstala la versión de la app que estás montando y vuelve a intentarlo.",
|
||||
"mount_no_root_description": "La instalación ha fallado debido a que no se ha concedido acceso root.\n\nConcede acceso root a ReVanced Manager y vuelve a intentarlo.",
|
||||
"mount_missing_installation_description": "La instalación ha fallado debido a que la aplicación no ha sido instalada en este dispositivo para montarla.\n\nInstala la aplicación sin parchear antes de montar y vuelve a intentarlo.",
|
||||
"status_failure_timeout_description": "La instalación tardó demasiado tiempo en terminar.\n\n¿Te gustaría intentarlo de nuevo?",
|
||||
"status_failure_storage_description": "La instalación ha fallado debido a falta de almacenamiento.\n\nLibera algo de espacio y vuelva a intentarlo.",
|
||||
"status_failure_invalid_description": "La instalación falló debido a que la app parcheada es inválida.\n\n¿Desinstalar la app e intentarlo de nuevo?",
|
||||
"status_failure_incompatible_description": "La aplicación es incompatible con este dispositivo.\n\nUtilice un APK soportado por este dispositivo e inténtelo de nuevo.",
|
||||
"status_failure_conflict_description": "La instalación fue evitada por una instalación existente de la app.\n\n¿Desinstalar la app instalada y volver a intentarlo?",
|
||||
"status_failure_blocked_description": "La instalación fue bloqueada por ${packageName}.\n\nAjusta la configuración de seguridad e inténtalo de nuevo.",
|
||||
"install_failed_verification_failure_description": "La instalación ha fallado debido a un problema de verificación.\n\nAjusta la configuración de seguridad e inténtalo de nuevo.",
|
||||
"install_failed_version_downgrade_description": "La instalación ha fallado debido a que la app parcheada es una versión inferior a la instalada.\n\n¿Desinstalar la app y volver a intentarlo?",
|
||||
"status_unknown_description": "La instalación ha fallado debido a una razón desconocida. Por favor, inténtalo de nuevo."
|
||||
}
|
||||
}
|
279
assets/i18n/strings_es_MX.i18n.json
Executable file
@ -0,0 +1,279 @@
|
||||
{
|
||||
"okButton": "Aceptar",
|
||||
"cancelButton": "Cancelar",
|
||||
"dismissButton": "Descartar",
|
||||
"quitButton": "Salir",
|
||||
"updateButton": "Actualizar",
|
||||
"suggested": "Sugerida: ${version}",
|
||||
"yesButton": "Sí",
|
||||
"noButton": "No",
|
||||
"warning": "Advertencia",
|
||||
"notice": "Aviso",
|
||||
"noShowAgain": "No volver a mostrar",
|
||||
"add": "Añadir",
|
||||
"remove": "Quitar",
|
||||
"showChangelogButton": "Registro de cambios",
|
||||
"showUpdateButton": "Actualizar",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Panel de control",
|
||||
"patcherTab": "Parcheador",
|
||||
"settingsTab": "Configuración"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Refrescado satisfactoriamente",
|
||||
"widgetTitle": "Panel de control",
|
||||
"updatesSubtitle": "Actualizaciones",
|
||||
"patchedSubtitle": "Aplicaciones parcheadas",
|
||||
"changeLaterSubtitle": "Puedes cambiar esto en la configuración más tarde.",
|
||||
"noInstallations": "No hay aplicaciones parcheadas instaladas",
|
||||
"installUpdate": "¿Continuar actualizando la aplicación?",
|
||||
"updateSheetTitle": "Actualizar ReVanced Manager",
|
||||
"updateDialogTitle": "Nueva actualización disponible",
|
||||
"updatePatchesSheetTitle": "Actualizar ReVanced Patches",
|
||||
"updateChangelogTitle": "Registro de cambios",
|
||||
"updateDialogText": "Hay una nueva versión disponible para ${file}.\n\nLa versión actualmente instalada es la ${version}.",
|
||||
"downloadConsentDialogTitle": "¿Descargar archivos necesarios?",
|
||||
"downloadConsentDialogText": "ReVanced Manager necesita descargar los archivos necesarios para funcionar correctamente.",
|
||||
"downloadConsentDialogText2": "Esto te conectará a ${url}.",
|
||||
"downloadingMessage": "Descargando actualización...",
|
||||
"downloadedMessage": "Actualización descargada",
|
||||
"installingMessage": "Instalando actualización...",
|
||||
"errorDownloadMessage": "No se pudo descargar la actualización",
|
||||
"errorInstallMessage": "Error al instalar la actualización",
|
||||
"noConnection": "Sin conexión a internet"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Información"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Cargando...",
|
||||
"timeagoLabel": "Hace ${time}"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Parcheador",
|
||||
"patchButton": "Parchear",
|
||||
"removedPatchesWarningDialogText": "Los siguientes parches fueron removidos desde la última vez que los usaste.\n\n${patches}\n\n${newPatches}¿Quieres continuar de todas formas?",
|
||||
"requiredOptionDialogText": "Algunas opciones de parche tienen que ser establecidas."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Seleccionar una aplicación",
|
||||
"widgetTitleSelected": "Aplicación seleccionada",
|
||||
"widgetSubtitle": "No se seleccionó ninguna aplicación",
|
||||
"noAppsLabel": "No se encontraron aplicaciones",
|
||||
"anyVersion": "Cualquier versión"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Seleccionar parches",
|
||||
"widgetTitleSelected": "Parches seleccionados",
|
||||
"widgetSubtitle": "Selecciona primero una aplicación",
|
||||
"widgetEmptySubtitle": "Ningún parche fue seleccionado"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Redes sociales",
|
||||
"widgetSubtitle": "¡Estamos en línea!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Seleccionar una aplicación",
|
||||
"searchBarHint": "Buscar aplicación",
|
||||
"storageButton": "Almacenamiento",
|
||||
"selectFromStorageButton": "Seleccionar desde almacenamiento",
|
||||
"errorMessage": "No se puede usar la aplicación seleccionada",
|
||||
"downloadToast": "La función de descarga aún no está disponible",
|
||||
"requireSuggestedAppVersionDialogText": "La versión de la aplicación que has seleccionado no coincide con la versión sugerida, lo que podría causar errores inesperados. Por favor, utiliza la versión sugerida.\n\nVersión seleccionada: ${selected}\nVersión sugerida: ${suggested}\n\nPara continuar de todas formas, desactiva \"Requerir versión sugerida de la aplicación\" en la configuración.",
|
||||
"featureNotAvailable": "Característica no implementada",
|
||||
"featureNotAvailableText": "Esta aplicación es una APK dividida y solo puede ser parcheada e instalada confiablemente al montar con permisos de root. Sin embargo, puedes parchear e instalar una APK completa seleccionándola en el almacenamiento."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Selecciona parches",
|
||||
"searchBarHint": "Buscar parches",
|
||||
"universalPatches": "Parches universales",
|
||||
"newPatches": "Nuevos parches",
|
||||
"patches": "Parches",
|
||||
"doneButton": "Completado",
|
||||
"defaultChip": "Por defecto",
|
||||
"defaultTooltip": "Seleccionar todos los parches predeterminados",
|
||||
"noneChip": "Ninguno",
|
||||
"noneTooltip": "Deseleccionar todos los elementos",
|
||||
"loadPatchesSelection": "Cargar selección de parches",
|
||||
"noSavedPatches": "No se ha guardado ninguna selección de parches para la aplicación seleccionada.\nPresione Hecho para guardar la selección actual.",
|
||||
"noPatchesFound": "No se encontraron parches para la aplicación seleccionada",
|
||||
"setRequiredOption": "Algunos parches requieren que se establezcan opciones:\n\n${patches}\n\nPor favor, establécelos antes de continuar."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Valor personalizado",
|
||||
"setToNull": "Establecer a nulo",
|
||||
"nullValue": "Este valor de opción es nulo actualmente",
|
||||
"viewTitle": "Opciones de parche",
|
||||
"saveOptions": "Guardar",
|
||||
"unselectPatch": "Deseleccionar parche",
|
||||
"tooltip": "Más opciones de entrada",
|
||||
"selectFilePath": "Selecciona la ruta del archivo",
|
||||
"selectFolder": "Selecciona la carpeta",
|
||||
"requiredOption": "La configuración de esta opción es necesaria",
|
||||
"unsupportedOption": "Esta opción no está disponible",
|
||||
"requiredOptionNull": "Hay que configurar las siguientes opciones:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Seleccionar este parche puede causar errores.\n\nVersión de la app: ${packageVersion}\nVersiones compatibles:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "El parche no es compatible con esta versión de la aplicación.",
|
||||
"unsupportedRequiredOption": "Este parche contiene una opción necesaria que no es compatible con esta aplicación",
|
||||
"patchesChangeWarningDialogText": "Se recomienda utilizar la selección y opciones de parches por defecto. Cambiarlas puede resultar en problemas inesperados.\n\nTendrás que activar \"Permitir cambiar la selección de parches\" en la configuración antes de cambiar cualquier selección de parches.",
|
||||
"patchesChangeWarningDialogButton": "Usar selección por defecto"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Seleccione el tipo de instalación",
|
||||
"installTypeDescription": "Selecciona el tipo de instalación con el que quieres continuar.",
|
||||
"installButton": "Instalar",
|
||||
"installRootType": "Montar",
|
||||
"installNonRootType": "Normal",
|
||||
"warning": "Desactiva las actualizaciones para la aplicación parcheada para evitar problemas inesperados.",
|
||||
"pressBackAgain": "Vuelve a presionar atrás para cancelar",
|
||||
"openButton": "Abrir",
|
||||
"notificationTitle": "ReVanced Manager está parcheando",
|
||||
"notificationText": "Pulsa para volver al instalador",
|
||||
"exportApkButtonTooltip": "Exportar APK parcheado",
|
||||
"exportLogButtonTooltip": "Exportar registro",
|
||||
"screenshotDetected": "Se ha detectado una captura de pantalla. Si está intentando compartir el registro, por favor comparta una copia de texto en su lugar.\n\n¿Copiar registro al portapapeles?",
|
||||
"copiedToClipboard": "Registro copiado en el portapapeles",
|
||||
"noExit": "El instalador se está ejecutando, no puedes salir..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Ajustes",
|
||||
"appearanceSectionTitle": "Apariencia",
|
||||
"teamSectionTitle": "Equipo",
|
||||
"debugSectionTitle": "Depurando",
|
||||
"advancedSectionTitle": "Avanzado",
|
||||
"exportSectionTitle": "Importar y Exportar",
|
||||
"dataSectionTitle": "Fuentes de datos",
|
||||
"themeModeLabel": "Tema de la app",
|
||||
"systemThemeLabel": "Sistema",
|
||||
"lightThemeLabel": "Claro",
|
||||
"darkThemeLabel": "Modo oscuro",
|
||||
"dynamicThemeLabel": "Material para ti",
|
||||
"dynamicThemeHint": "Disfruta de una experiencia más cercana a tu dispositivo",
|
||||
"languageLabel": "Idioma",
|
||||
"languageUpdated": "Idioma actualizado",
|
||||
"sourcesLabel": "Fuentes alternativas",
|
||||
"sourcesLabelHint": "Configura las fuentes alternativas para ReVanced Patches y ReVanced Integrations",
|
||||
"useAlternativeSources": "Usar fuentes alternativas",
|
||||
"useAlternativeSourcesHint": "Usa fuentes alternativas para ReVanced Patches y ReVanced Integrations en lugar de la API",
|
||||
"sourcesResetDialogTitle": "Reiniciar",
|
||||
"sourcesResetDialogText": "¿Estás seguro de que quieres restablecer las fuentes a sus valores por defecto?",
|
||||
"apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de tu API a su valor por defecto?",
|
||||
"sourcesUpdateNote": "Nota: Se descargarán de forma automática ReVanced Patches y ReVanced Integrations desde las fuentes alternativas.\n\nEsto te conectará a la misma.",
|
||||
"apiURLLabel": "URL API",
|
||||
"apiURLHint": "Configura la URL de la API de ReVanced Manager",
|
||||
"selectApiURL": "URL de la API",
|
||||
"orgPatchesLabel": "Organización de parches",
|
||||
"sourcesPatchesLabel": "Fuente de los parches",
|
||||
"contributorsLabel": "Contribuidores",
|
||||
"contributorsHint": "Lista de contribuidores de ReVanced",
|
||||
"logsLabel": "Compartir registros",
|
||||
"logsHint": "Compartir los registros de ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Permitir cambiar la selección de parches",
|
||||
"enablePatchesSelectionHint": "No prevenir la selección o deselección de parches",
|
||||
"enablePatchesSelectionWarningText": "Cambiar la selección de parches puede cauar problemas inespereados.\n\n¿Quieres activarlo de todas formas?",
|
||||
"disablePatchesSelectionWarningText": "Estás a punto de desactivar cambiar la selección de los parches.\nLa selección predeterminada de los parches será restaurada.\n\n¿Desactivar de todos modos?",
|
||||
"autoUpdatePatchesLabel": "Actualizar parches automáticamente",
|
||||
"autoUpdatePatchesHint": "Actualiza los parches a la última versión automáticamente",
|
||||
"showUpdateDialogLabel": "Mostrar diálogo de actualización",
|
||||
"showUpdateDialogHint": "Muestra un diálogo cuando una nueva actualización esté disponible",
|
||||
"universalPatchesLabel": "Mostrar parches universales",
|
||||
"universalPatchesHint": "Muestra todas las aplicaciones y los parches universales (puede ralentizar la carga de la lista de aplicaciones)",
|
||||
"versionCompatibilityCheckLabel": "Comprobar compatibilidad de versiones",
|
||||
"versionCompatibilityCheckHint": "Previene seleccionar parches que no sean compatibles con la versión de la aplicación seleccionada",
|
||||
"requireSuggestedAppVersionLabel": "Requerir versión sugerida de la aplicación",
|
||||
"requireSuggestedAppVersionHint": "Previene seleccionar una aplicación cuya versión no sea la sugerida",
|
||||
"requireSuggestedAppVersionDialogText": "Seleccionar una aplicación cuya versión no sea la sugerida puede causar problemas inesperados.\n\n¿Quieres continuar de todas formas?",
|
||||
"aboutLabel": "Acerca de",
|
||||
"snackbarMessage": "Copiado al portapapeles",
|
||||
"restartAppForChanges": "Reinicie la aplicación para aplicar los cambios",
|
||||
"deleteTempDirLabel": "Borrar archivos temporales",
|
||||
"deleteTempDirHint": "Eliminar archivos temporales no utilizados",
|
||||
"deletedTempDir": "Archivos temporales eliminados",
|
||||
"exportPatchesLabel": "Exportar selección de parches",
|
||||
"exportPatchesHint": "Exporta la selección de parches a un archivo JSON",
|
||||
"exportedPatches": "Selección de parches exportada",
|
||||
"noExportFileFound": "No hay selección de parches para exportar",
|
||||
"importPatchesLabel": "Importar selección de parches",
|
||||
"importPatchesHint": "Importa la selección de parches desde un archivo JSON",
|
||||
"importedPatches": "Selección de parches importada",
|
||||
"resetStoredPatchesLabel": "Restablecer selección de parches",
|
||||
"resetStoredPatchesHint": "Restablece la selección de parches almacenada",
|
||||
"resetStoredPatchesDialogTitle": "¿Restablecer selección de parches?",
|
||||
"resetStoredPatchesDialogText": "Se restaurará la selección de parches por defecto.",
|
||||
"resetStoredPatches": "Selección de parches restablecida",
|
||||
"resetStoredOptionsLabel": "Restablecer configuración de parches",
|
||||
"resetStoredOptionsHint": "Restablece la configuración de todos los parches",
|
||||
"resetStoredOptionsDialogTitle": "¿Restablecer configuración de parches?",
|
||||
"resetStoredOptionsDialogText": "Restablecer la configuración de parches eliminará todas las opciones guardadas.",
|
||||
"resetStoredOptions": "Configuración de parches restablecida",
|
||||
"deleteLogsLabel": "Borrar registros",
|
||||
"deleteLogsHint": "Elimina los registros recopilados por ReVanced Manager",
|
||||
"deletedLogs": "Registros eliminados",
|
||||
"regenerateKeystoreLabel": "Regenerar repositorio de claves",
|
||||
"regenerateKeystoreHint": "Regenera el repositorio de claves utilizado para firmar aplicaciones",
|
||||
"regenerateKeystoreDialogTitle": "¿Regenerar repositorio de claves?",
|
||||
"regenerateKeystoreDialogText": "Las aplicaciones parcheadas con el repositorio de claves anterior ya no podrán actualizarse.",
|
||||
"regeneratedKeystore": "Repositorio de claves regenerado",
|
||||
"exportKeystoreLabel": "Exportar repositorio de claves",
|
||||
"exportKeystoreHint": "Exporta el repositorio de claves utilizado para firmar aplicaciones",
|
||||
"exportedKeystore": "Repositorio de claves exportado",
|
||||
"noKeystoreExportFileFound": "No hay repositorio de claves para exportar",
|
||||
"importKeystoreLabel": "Importar repositorio de claves",
|
||||
"importKeystoreHint": "Importa el repositorio de claves utilizado para firmar aplicaciones",
|
||||
"importedKeystore": "Repositorio de claves importado",
|
||||
"selectKeystorePassword": "Contraseña del repositorio de claves",
|
||||
"selectKeystorePasswordHint": "Introduce la contraseña del repositorio de claves utilizado para firmar aplicaciones",
|
||||
"jsonSelectorErrorMessage": "No se puede utilizar el archivo JSON seleccionado",
|
||||
"keystoreSelectorErrorMessage": "No se puede utilizar el archivo de repositorio de claves seleccionado"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Informacion de la aplicación",
|
||||
"openButton": "Abrir",
|
||||
"uninstallButton": "Desinstalar",
|
||||
"unmountButton": "Desmontar",
|
||||
"rootDialogTitle": "Ocurrió un error",
|
||||
"unmountDialogText": "¿Seguro que quieres desmontar esta aplicación?",
|
||||
"uninstallDialogText": "¿Seguro que quieres desinstalar esta aplicación?",
|
||||
"rootDialogText": "La aplicación se instaló con permisos de root, pero actualmente ReVanced Manager no tiene permisos root.\nPor favor, conceda primero los permisos de root.",
|
||||
"packageNameLabel": "Nombre del paquete",
|
||||
"installTypeLabel": "Tipo de instalación",
|
||||
"mountTypeLabel": "Montar",
|
||||
"regularTypeLabel": "Normal",
|
||||
"patchedDateLabel": "Fecha de parcheo",
|
||||
"appliedPatchesLabel": "Parches aplicados",
|
||||
"patchedDateHint": "${date} a las ${time}",
|
||||
"appliedPatchesHint": "${quantity} parches aplicados",
|
||||
"updateNotImplemented": "Esta función aún no se ha implementado"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contribuidores"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "La versión no coincide",
|
||||
"mount_no_root": "Sin acceso root",
|
||||
"mount_missing_installation": "No se encontró la instalación",
|
||||
"status_failure_blocked": "Instalación bloqueada",
|
||||
"install_failed_verification_failure": "Verificación fallida",
|
||||
"status_failure_invalid": "Instalación inválida",
|
||||
"install_failed_version_downgrade": "No se puede bajar de versión",
|
||||
"status_failure_conflict": "Conflicto de instalación",
|
||||
"status_failure_storage": "Problema de almacenamiento de la instalación",
|
||||
"status_failure_incompatible": "Instalación incompatible",
|
||||
"status_failure_timeout": "Tiempo de instalación agotado",
|
||||
"status_unknown": "Instalación fallida",
|
||||
"mount_version_mismatch_description": "La instalación falló debido a que la versión de la aplicación instalada es diferente a la de la aplicación parcheada.\n\nInstala la versión de la aplicación que intentas montar e inténtalo de nuevo.",
|
||||
"mount_no_root_description": "La instalación falló debido a que no se ha concedido acceso root.\n\nConcédele acceso root a ReVanced Manager y vuelve a intentarlo.",
|
||||
"mount_missing_installation_description": "La instalación falló debido a que la aplicación original no ha sido instalada en este dispositivo para montar la versión parcheada sobre ella.\n\nInstala la aplicación original antes de montar y vuelve a intentarlo.",
|
||||
"status_failure_timeout_description": "La instalación tardó demasiado en finalizar.\n\n¿Quieres intentarlo de nuevo?",
|
||||
"status_failure_storage_description": "La instalación falló debido a falta de almacenamiento.\n\nLibera algo de espacio y vuelve a intentarlo.",
|
||||
"status_failure_invalid_description": "La instalación falló debido a que la aplicación parcheada es inválida.\n\n¿Quieres desinstalar la aplicación e intentarlo de nuevo?",
|
||||
"status_failure_incompatible_description": "La aplicación es incompatible con este dispositivo.\n\nContacta con el desarrollador de la aplicación y solicita asistencia.",
|
||||
"status_failure_conflict_description": "Se impidió la instalación debido a una instalación existente de la aplicación.\n\n¿Quieres desinstalar la aplicación instalada e intentarlo de nuevo?",
|
||||
"status_failure_blocked_description": "${packageName} bloqueó la instalación.\n\nAjusta la configuración de seguridad e inténtalo de nuevo.",
|
||||
"install_failed_verification_failure_description": "La instalación falló debido a un problema de verificación.\n\nAjusta la configuración de seguridad e inténtalo de nuevo.",
|
||||
"install_failed_version_downgrade_description": "La instalación falló debido a que la aplicación parcheada es una versión inferior a la instalada.\n\n¿Quieres desinstalar la aplicación e intentarlo de nuevo?",
|
||||
"status_unknown_description": "La instalación falló debido a una razón desconocida. Por favor, inténtalo de nuevo."
|
||||
}
|
||||
}
|
156
assets/i18n/strings_et_EE.i18n.json
Executable file
@ -0,0 +1,156 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Tühista",
|
||||
"dismissButton": "Loobu",
|
||||
"quitButton": "Välju",
|
||||
"updateButton": "Värskenda",
|
||||
"suggested": "Soovitatud: ${version}",
|
||||
"yesButton": "Jah",
|
||||
"noButton": "Ei",
|
||||
"warning": "Hoiatus",
|
||||
"notice": "Teade",
|
||||
"noShowAgain": "Ära seda enam näita",
|
||||
"add": "Lisa",
|
||||
"remove": "Eemalda",
|
||||
"showChangelogButton": "Näita muutuste nimekirja",
|
||||
"showUpdateButton": "Näita värskendust",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Töölaud",
|
||||
"patcherTab": "Värskendaja",
|
||||
"settingsTab": "Sätted"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Edukalt värskendatud",
|
||||
"widgetTitle": "Töölaud",
|
||||
"updatesSubtitle": "Värskendused",
|
||||
"changeLaterSubtitle": "Saate seda hiljem sätetest muuta. ",
|
||||
"noInstallations": "Ühtegi parandatud rakendust pole installitud",
|
||||
"installUpdate": "Jätka värskenduse installimist?",
|
||||
"updateSheetTitle": "Värskenda ReVanced Manager",
|
||||
"updateDialogTitle": "Värskendus on saadaval",
|
||||
"updatePatchesSheetTitle": "Värskenda ReVanced kräkke",
|
||||
"updateChangelogTitle": "Muudatuste logi",
|
||||
"updateDialogText": "Uus värskendus on saadaval ${file}. \n\nHetkel paigaldatud versioon on ${version}. ",
|
||||
"downloadConsentDialogTitle": "Lae alla vajalikud failid? ",
|
||||
"downloadConsentDialogText": "ReVanced Manager peab alla laadima vajalikud failid et töötada. ",
|
||||
"downloadConsentDialogText2": "Siia vajutades liigud ${url}. ",
|
||||
"downloadingMessage": "Värskenduse alla laadimine...",
|
||||
"downloadedMessage": "Värskendus alla laetud",
|
||||
"installingMessage": "Värskenduse installimine...",
|
||||
"errorDownloadMessage": "Värskenduse alla laadimine nurjus",
|
||||
"errorInstallMessage": "Värskenduse installimine nurjus",
|
||||
"noConnection": "Internetiühendus puudub"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Info"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Laadimine...",
|
||||
"timeagoLabel": "${time} tagasi"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Parandaja",
|
||||
"patchButton": "Parandus",
|
||||
"requiredOptionDialogText": "Mõned paranduste sätted on vaja valida. "
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Vali rakendus",
|
||||
"widgetTitleSelected": "Valitud rakendus",
|
||||
"widgetSubtitle": "Rakendus valimata",
|
||||
"noAppsLabel": "Ühtegi rakendust ei tuvastatud",
|
||||
"anyVersion": "Ükskõik mis versioon"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Valige parandused",
|
||||
"widgetTitleSelected": "Valitud parandused",
|
||||
"widgetSubtitle": "Valige esmalt rakendus",
|
||||
"widgetEmptySubtitle": "Ühtegi parandust pole valitud"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Sotsiaalmeediad",
|
||||
"widgetSubtitle": "Oleme võrgus!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Vali rakendus",
|
||||
"searchBarHint": "Otsi rakendust",
|
||||
"storageButton": "Salvestusruum",
|
||||
"selectFromStorageButton": "Valige salvestusruumist",
|
||||
"errorMessage": "Ei ole võimalik kasutada valitud rakendust",
|
||||
"downloadToast": "Alla laadimise funktsioon ei ole hetkel saadaval",
|
||||
"requireSuggestedAppVersionDialogText": "Rakenduse versioon mille olete valinud ei ühti soovitatud versiooniga, mis võib põhjustada ootamatuid vigu. Palun kasutage soovitatud versiooni.\n\nValitud versioon: ${selected}\nSoovitatud versioon: ${suggested}\n\nSelleks, et ikkagi jätkata lülitage sätetest välja \"Nõua soovitatud versiooni\".",
|
||||
"featureNotAvailable": "Funktsioon ei ole implementeeritud"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Valige parandused",
|
||||
"searchBarHint": "Otsi parandustest",
|
||||
"universalPatches": "Universaalsed parandused",
|
||||
"newPatches": "Uued parandused",
|
||||
"patches": "Parandused",
|
||||
"doneButton": "Valmis",
|
||||
"defaultChip": "Vaikimisi",
|
||||
"defaultTooltip": "Vali kõik vaikimisi parandused",
|
||||
"noneChip": "Mitte ükski",
|
||||
"noneTooltip": "Eemalda valikust kõik parandused",
|
||||
"loadPatchesSelection": "Impordi paranduste valik",
|
||||
"noPatchesFound": "Valitud rakenduse jaoks ei leitud mode"
|
||||
},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Selle paiga valimine võib tekitada paigatõrke.\n\nRakenduse versioon: ${packageVersion}\nToetatud versioonid: ${supportedVersions}"
|
||||
},
|
||||
"installerView": {
|
||||
"installButton": "Paigalda",
|
||||
"openButton": "Ava",
|
||||
"notificationTitle": "ReVanced Manager on lappimine",
|
||||
"notificationText": "Puudutage Installeri juurde naasmiseks",
|
||||
"noExit": "Installer töötab endiselt, ei saa väljuda..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Sätted",
|
||||
"appearanceSectionTitle": "Välimus",
|
||||
"teamSectionTitle": "Meeskond",
|
||||
"advancedSectionTitle": "Täpsemad seaded",
|
||||
"exportSectionTitle": "Import & eksport",
|
||||
"dynamicThemeHint": "Nautige kogemust oma seadmele lähemal",
|
||||
"languageLabel": "Keel",
|
||||
"sourcesResetDialogTitle": "Lähtesta",
|
||||
"apiURLLabel": "API URL",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "Plaastrite organisatsioon",
|
||||
"sourcesPatchesLabel": "Plaastrite allikas",
|
||||
"contributorsLabel": "Panustajad",
|
||||
"contributorsHint": "Revancedi kaasautorite nimekiri",
|
||||
"aboutLabel": "Teave",
|
||||
"snackbarMessage": "Lõikelauale kopeeritud",
|
||||
"restartAppForChanges": "Muudatuste rakendamiseks taaskäivitage rakendus",
|
||||
"deleteTempDirLabel": "Kustuta ajutised failid",
|
||||
"deleteTempDirHint": "Kustutage kasutamata ajutised failid",
|
||||
"deletedTempDir": "Ajutised failid kustutatud",
|
||||
"deletedLogs": "Logid kustutatud",
|
||||
"exportKeystoreLabel": "Ekspordi võtmehoius",
|
||||
"exportedKeystore": "Võtmehoius eksporditud",
|
||||
"noKeystoreExportFileFound": "Puudub võtmesalv mida eksportida",
|
||||
"importKeystoreLabel": "Impordi võtmehoius",
|
||||
"importedKeystore": "Võtmehoius imporditud",
|
||||
"jsonSelectorErrorMessage": "Valitud JSON-faili kasutamine nurjus"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Rakenduse teave",
|
||||
"openButton": "Ava",
|
||||
"installButton": "Paigalda",
|
||||
"uninstallButton": "Desinstalli",
|
||||
"rootDialogTitle": "Viga",
|
||||
"rootDialogText": "Rakendus installiti superkasutaja õigustega, kuid hetkel pole ReVanced halduril õigusi.\nPalun lubage esmalt superkasutaja õigused.",
|
||||
"packageNameLabel": "Pakendi nimi",
|
||||
"installTypeLabel": "Paigaldamise tüüp",
|
||||
"patchedDateLabel": "Parandamise kuupäev",
|
||||
"appliedPatchesLabel": "Rakendatud parandused",
|
||||
"patchedDateHint": "${date} kell ${time}",
|
||||
"appliedPatchesHint": "${quantity} rakendatud parandus/st (1= parandus, 2+= parandust)",
|
||||
"updateNotImplemented": "Seda funktsiooni pole veel ellu viidud"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Panustajad"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
}
|
19
assets/i18n/strings_eu_ES.i18n.json
Executable file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"navigationView": {},
|
||||
"homeView": {},
|
||||
"applicationItem": {},
|
||||
"latestCommitCard": {},
|
||||
"patcherView": {},
|
||||
"appSelectorCard": {},
|
||||
"patchSelectorCard": {},
|
||||
"socialMediaCard": {},
|
||||
"appSelectorView": {},
|
||||
"patchesSelectorView": {},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {},
|
||||
"installerView": {},
|
||||
"settingsView": {},
|
||||
"appInfoView": {},
|
||||
"contributorsView": {},
|
||||
"installErrorDialog": {}
|
||||
}
|
136
assets/i18n/strings_fa_IR.i18n.json
Executable file
@ -0,0 +1,136 @@
|
||||
{
|
||||
"okButton": "تأیید",
|
||||
"cancelButton": "انصراف",
|
||||
"dismissButton": "نادیده گرفتن",
|
||||
"quitButton": "خروج",
|
||||
"updateButton": "بهروزرسانی",
|
||||
"suggested": "پیشنهاد شده:${version}",
|
||||
"yesButton": "بله",
|
||||
"noButton": "خیر",
|
||||
"warning": "هشدار",
|
||||
"notice": "توجه",
|
||||
"noShowAgain": "دوباره نشان داده نشود",
|
||||
"add": "افزودن",
|
||||
"remove": "حذف",
|
||||
"showChangelogButton": "نمایش تغییرات",
|
||||
"navigationView": {
|
||||
"dashboardTab": "پیشخوان",
|
||||
"patcherTab": "نصب کننده پچ",
|
||||
"settingsTab": "تنظیمات"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "با موفقیت به روزرسانی شد",
|
||||
"widgetTitle": "پیشخوان",
|
||||
"updatesSubtitle": "بهروزرسانیها",
|
||||
"noInstallations": "هیچ برنامه پچ شده ای نصب نشده",
|
||||
"installUpdate": "ادامه نصب بروزرسانی?",
|
||||
"updateChangelogTitle": "لیست تغییرات",
|
||||
"downloadConsentDialogText2": "اتصال به ${url}.",
|
||||
"downloadingMessage": "در حال بارگیری بهروزرسانی...",
|
||||
"downloadedMessage": "بهروزرسانی دانلود شد",
|
||||
"installingMessage": "درحال نصب بروزرسانی...",
|
||||
"errorDownloadMessage": "دانلود بروزرسانی ممکن نیست",
|
||||
"errorInstallMessage": "نصب بروزرسانی ممکن نیست",
|
||||
"noConnection": "اتصال به اینترنت موجود نیست"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "اطلاعات"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "درحال بارگذاری...",
|
||||
"timeagoLabel": "${time} پیش"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "نصب کننده پچ",
|
||||
"patchButton": "پچ",
|
||||
"requiredOptionDialogText": "بعضی از تنظیمات پچ باید انتخاب شود."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"noAppsLabel": "هیچ برنامه ای یافت نشد"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "پچ ها را انتخاب کنید",
|
||||
"widgetTitleSelected": "پچ های انتخاب شده",
|
||||
"widgetSubtitle": "ابتدا یک برنامه را انتخاب کنید",
|
||||
"widgetEmptySubtitle": "هیچ پچی انتخاب نشده است"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "شبکه های اجتماعی",
|
||||
"widgetSubtitle": "ما آنلاین هستیم!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"storageButton": "محل ذخیره",
|
||||
"selectFromStorageButton": "انتخاب از محل ذخیره",
|
||||
"errorMessage": "امکان استفاده از برنامه انتخابی وجود ندارد",
|
||||
"downloadToast": "بارگیری عملکرد فعلا در دسترس نیست",
|
||||
"featureNotAvailable": "قابلیت اضافه نشده است"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "پچ ها را انتخاب کنید",
|
||||
"searchBarHint": "جست و جوی پچ ها",
|
||||
"universalPatches": "پچ های عمومی",
|
||||
"newPatches": "پچ های جدید",
|
||||
"patches": "پچ ها",
|
||||
"doneButton": "انجام شد",
|
||||
"defaultChip": "پیشفرض",
|
||||
"defaultTooltip": "تمام پچ های پیشفرض انتخاب شود",
|
||||
"noneChip": "هیچکدام",
|
||||
"noneTooltip": "حذف انتخاب همه پچ ها",
|
||||
"noPatchesFound": "هیچ وصله ای برای این برنامه پیدا نشد"
|
||||
},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "انتخاب این پچ(وصله) ممکنه خطاهای در هنگام پچ کردن ایجاد کند.\n\nنسخه برنامه: ${packageVersion}\nنسخه های پشتیبان شده:\n${supportedVersions}"
|
||||
},
|
||||
"installerView": {
|
||||
"installButton": "نصب",
|
||||
"openButton": "باز کن",
|
||||
"notificationTitle": "ریونسد منیجر در حال پچ کردن است",
|
||||
"notificationText": "کلیک کنید تا به نصب کننده برگردید",
|
||||
"noExit": "نصب کننده در حال اجراست، نمیتوان خارج شد..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "تنظیمات",
|
||||
"appearanceSectionTitle": "ظاهر",
|
||||
"teamSectionTitle": "گروه",
|
||||
"advancedSectionTitle": "پیشرفته",
|
||||
"exportSectionTitle": "وارد کردن /خروجی گرفتن",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "یک تجربه نزدیکتر به دستگاهتان را داشته باشید",
|
||||
"languageLabel": "زبان",
|
||||
"sourcesResetDialogTitle": "تنظیم مجدد",
|
||||
"apiURLLabel": "آدرس API",
|
||||
"selectApiURL": "آدرس API",
|
||||
"orgPatchesLabel": "سازمان پچها(وصله ها)",
|
||||
"sourcesPatchesLabel": "منبع پچ ها",
|
||||
"contributorsLabel": "مشارکت کنندگان",
|
||||
"contributorsHint": "لیست مشارکتکنندگان ریونسد",
|
||||
"aboutLabel": "درباره ما",
|
||||
"snackbarMessage": "در کلیپبورد کپی شد",
|
||||
"restartAppForChanges": "راهاندازی مجدد برنامه برای اعمال تغییرات",
|
||||
"deleteTempDirLabel": "حذف فایل های موقت",
|
||||
"deleteTempDirHint": "حذف فایلهای بی استفاده",
|
||||
"deletedTempDir": "فایل های موقت حذف شدند",
|
||||
"deletedLogs": "لاگ ها حذف شدند",
|
||||
"jsonSelectorErrorMessage": "فایل JSON انتخاب شده قابل استفاده نیست"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "اطلاعات برنامه",
|
||||
"openButton": "بازکردن",
|
||||
"installButton": "نصب",
|
||||
"uninstallButton": "حذف نصب",
|
||||
"rootDialogTitle": "خطا",
|
||||
"rootDialogText": "برنامه با مجوز کاربر ویژه نصب شده، ولی اکنون برنامه هیچ مجوزی ندارد. لطفا ابتدا مجوز کاربر ویژه را اعطا کنید.",
|
||||
"packageNameLabel": "نام بسته",
|
||||
"installTypeLabel": "نوع نصب",
|
||||
"patchedDateLabel": "تاریخ وصله شدن",
|
||||
"appliedPatchesLabel": "وصله های اعمال شده",
|
||||
"patchedDateHint": "${date} در ${time}",
|
||||
"appliedPatchesHint": "${quantity} وصله اعمال شده",
|
||||
"updateNotImplemented": "این ویژگی هنوز تکمیل نشده است"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "مشارکت کنندگان"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
}
|
297
assets/i18n/strings_fi_FI.i18n.json
Executable file
@ -0,0 +1,297 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Peruuta",
|
||||
"dismissButton": "Hylkää",
|
||||
"quitButton": "Sulje",
|
||||
"updateButton": "Päivitä",
|
||||
"suggested": "Ehdotettu: ${version}",
|
||||
"yesButton": "Kyllä",
|
||||
"noButton": "Ei",
|
||||
"warning": "Varoitus",
|
||||
"notice": "Huomautus",
|
||||
"noShowAgain": "Älä näytä tätä uudelleen",
|
||||
"add": "Lisää",
|
||||
"remove": "Poista",
|
||||
"showChangelogButton": "Näytä muutoshistoria",
|
||||
"showUpdateButton": "Näytä päivitys",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Hallintapaneeli",
|
||||
"patcherTab": "Paikkaaja",
|
||||
"settingsTab": "Asetukset"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Päivitys onnistui",
|
||||
"widgetTitle": "Hallintapaneeli",
|
||||
"updatesSubtitle": "Päivitykset",
|
||||
"lastPatchedAppSubtitle": "Viimeksi paikattu sovellus",
|
||||
"patchedSubtitle": "Asennetut sovellukset",
|
||||
"changeLaterSubtitle": "Voit muuttaa tätä asetuksissa koska tahansa.",
|
||||
"noSavedAppFound": "Sovellusta ei löytynyt",
|
||||
"noInstallations": "Paikattuja sovelluksia ei ole asennettu",
|
||||
"installUpdate": "Jatketaanko päivityksen asennusta?",
|
||||
"updateSheetTitle": "Päivitä ReVanced Manager",
|
||||
"updateDialogTitle": "Uusi päivitys on saatavilla",
|
||||
"updatePatchesSheetTitle": "Päivitä ReVanced-paikkaukset",
|
||||
"updateChangelogTitle": "Muutoshistoria",
|
||||
"updateDialogText": "Uusi ${file} päivitys on saatavilla.\n\nNyt asennettu versio on ${version}.",
|
||||
"downloadConsentDialogTitle": "Ladataanko tarvittavat tiedostot?",
|
||||
"downloadConsentDialogText": "Revanced Managerin on ladattava kunnollista toimintaa varten tarvittavat tiedostot.",
|
||||
"downloadConsentDialogText2": "Tämä yhdistää osoitteeseen ${url}.",
|
||||
"downloadingMessage": "Päivitystä ladataan...",
|
||||
"downloadedMessage": "Päivitys on ladattu",
|
||||
"installingMessage": "Päivitystä asennetaan...",
|
||||
"errorDownloadMessage": "Päivityksen lataus epäonnistui",
|
||||
"errorInstallMessage": "Päivityksen asennus epäonnistui",
|
||||
"noConnection": "Internet-yhteyttä ei ole"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Tietoja"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Ladataan...",
|
||||
"timeagoLabel": "${time} sitten"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Paikkaaja",
|
||||
"patchButton": "Paikkaa",
|
||||
"incompatibleArchWarningDialogText": "Paikkaamista ei vielä tueta tällä kokoonpanolla, ja se saattaa epäonnistua. Jatketaanko silti?",
|
||||
"removedPatchesWarningDialogText": "Poistetut paikat viimeisen laastariesi jälkeen tämän sovelluksen:\n\n${patches}\n\n${newPatches}Jatka joka tapauksessa?",
|
||||
"requiredOptionDialogText": "Joitakin paikkausasetuksia on määritettävä."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Valitse sovellus",
|
||||
"widgetTitleSelected": "Valittu sovellus",
|
||||
"widgetSubtitle": "Sovellusta ei valittu",
|
||||
"noAppsLabel": "Sovelluksia ei löytynyt",
|
||||
"anyVersion": "Kaikki versiot"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Valitse paikkaukset",
|
||||
"widgetTitleSelected": "Valitut paikkaukset",
|
||||
"widgetSubtitle": "Valitse ensin sovellus",
|
||||
"widgetEmptySubtitle": "Paikkauksia ei ole valittu"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Somet",
|
||||
"widgetSubtitle": "Olemme verkossa!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Valitse sovellus",
|
||||
"searchBarHint": "Etsi sovellusta",
|
||||
"storageButton": "Tallennustila",
|
||||
"selectFromStorageButton": "Valitse tallennustilasta",
|
||||
"errorMessage": "Valittua sovellusta ei voida käyttää",
|
||||
"downloadToast": "Lataustoiminto ei ole vielä käytettävissä",
|
||||
"requireSuggestedAppVersionDialogText": "Valitsemasi sovellusversio ei vastaa ehdotettua versiota ja tämä voi aiheuttaa odottamattomia ongelmia. Käytä ehdotettua sovellusversiota.\n\nValittu versio: v${selected}\nEhdotettu versio: v${suggested}\n\nOhittaaksesi tämän, ota \"Vaadi ehdotettu sovellusversio\" -asetus käyttöön.",
|
||||
"featureNotAvailable": "Ominaisuutta ei ole toteutettu",
|
||||
"featureNotAvailableText": "Tämä sovellus on jaettu APK ja se voidaan paikata ja asentaa luotettavasti vain root-oikeuksilla liitettynä. Voit kuitenkin paikata ja asentaa täyden APK:n valitsemalla sen tallennustilasta."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Valitse paikkaukset",
|
||||
"searchBarHint": "Etsi paikkauksia",
|
||||
"universalPatches": "Yleispaikkaukset",
|
||||
"newPatches": "Uudet paikkaukset",
|
||||
"patches": "Paikkaukset",
|
||||
"doneButton": "Valmis",
|
||||
"defaultChip": "Oletus",
|
||||
"defaultTooltip": "Valitse kaikki oletuspaikkaukset",
|
||||
"noneChip": "Ei mitään",
|
||||
"noneTooltip": "Tyhjennä kaikki paikkausvalinnat",
|
||||
"loadPatchesSelection": "Lataa paikkausvalikoima",
|
||||
"noSavedPatches": "Valitulle sovellukselle ei ole tallennettu paikkausvalikoimaa.\nTallenna nykyinen valikoima painamalla \"Valmis\".",
|
||||
"noPatchesFound": "Valitulle sovellukselle ei löytynyt paikkauksia",
|
||||
"setRequiredOption": "Joillekin paikkauksille on määritettävä asetuksia:\n\n${patches}\n\nMääritä ne ennen kuin jatkat."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Oma arvo",
|
||||
"setToNull": "Aseta nollaksi",
|
||||
"nullValue": "Tämän asetuksen arvo on tällä hetkellä tyhjä",
|
||||
"viewTitle": "Paikkausasetukset",
|
||||
"saveOptions": "Tallenna",
|
||||
"unselectPatch": "Poista paikkauksen valinta",
|
||||
"tooltip": "Enemmän syöttöasetuksia",
|
||||
"selectFilePath": "Valitse tiedostosijainti",
|
||||
"selectFolder": "Valitse kansio",
|
||||
"requiredOption": "Tämän valinnan asettaminen on pakollista",
|
||||
"unsupportedOption": "Tätä asetusta ei tueta",
|
||||
"requiredOptionNull": "Seuraavat asetukset on määritettävä:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Tämän paikkauksen valinta voi aiheuttaa virheitä.\n\nSovelluksen versio: ${packageVersion}\nTuetut versiot: \n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Tämän sovellusversio ei tue paikkaa.",
|
||||
"unsupportedRequiredOption": "Paikkaus sisältää pakollisen asetuksen, jota tämä sovellus ei tue",
|
||||
"patchesChangeWarningDialogText": "On suositeltavaa käyttää oletusarvoisia paikkausvalintoja ja -asetuksia. Niiden muutokset voivat aiheuttaa odottamattomia ongelmia.\n\n\"Salli paikkausvalintojen muutos\" -asetus on otettava käyttöön ennen kuin valintoja voidaan muuttaa.",
|
||||
"patchesChangeWarningDialogButton": "Käytä oletusvalintaa"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Valitse asennustyyppi",
|
||||
"installTypeDescription": "Valitse asennustyyppi, jolla jatketaan.",
|
||||
"installButton": "Asenna",
|
||||
"installRootType": "Liitä",
|
||||
"installNonRootType": "Tavallinen",
|
||||
"warning": "Poista paikatun sovelluksen automaattiset päivitykset käytöstä odottamattomien ongelmien välttämiseksi.",
|
||||
"pressBackAgain": "Peru painamalla takaisin-painiketta uudelleen",
|
||||
"openButton": "Avaa",
|
||||
"notificationTitle": "ReVanced Manager suorittaa paikkauksia",
|
||||
"notificationText": "Napauta palataksesi hallintasovellukseen",
|
||||
"exportApkButtonTooltip": "Via paikattu APK",
|
||||
"exportLogButtonTooltip": "Vie loki",
|
||||
"screenshotDetected": "Havaittiin kuvankaappaus. Jos yrität jakaa lokin, jaa se kuvan sijaan tekstinä.\n\nKopioidaanko loki leikepöydälle?",
|
||||
"copiedToClipboard": "Loki kopioitiin leikepöydälle",
|
||||
"noExit": "Asennus on vielä kesken, eikä poistuminen ole mahdollista..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Asetukset",
|
||||
"appearanceSectionTitle": "Ulkoasu",
|
||||
"teamSectionTitle": "Tiimi",
|
||||
"debugSectionTitle": "Vianselvitys",
|
||||
"advancedSectionTitle": "Lisäasetukset",
|
||||
"exportSectionTitle": "Tuonti ja vienti",
|
||||
"dataSectionTitle": "Tietolähteet",
|
||||
"themeModeLabel": "Sovelluksen teema",
|
||||
"systemThemeLabel": "Järjestelmä",
|
||||
"lightThemeLabel": "Vaalea",
|
||||
"darkThemeLabel": "Tumma",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Nauti paremmin laitettasi vastaavasta käyttökokemuksesta",
|
||||
"languageLabel": "Kieli",
|
||||
"languageUpdated": "Kieli on vaihdettu",
|
||||
"sourcesLabel": "Vaihtoehtoiset lähteet",
|
||||
"sourcesLabelHint": "Määritä käytöstä poistettujen paikkojen vaihtoehtoiset lähteet",
|
||||
"useAlternativeSources": "Käytä vaihtoehtoisia lähteitä",
|
||||
"useAlternativeSourcesHint": "Käytä vaihtoehtoisia lähteitä ReVanced Patches sijasta API",
|
||||
"sourcesResetDialogTitle": "Palauta",
|
||||
"sourcesResetDialogText": "Haluatko varmasti palauttaa oletuslähteet?",
|
||||
"apiURLResetDialogText": "Haluatko varmasti palauttaa oletusarvoisen API:n URL-osoitteen?",
|
||||
"sourcesUpdateNote": "Huomautus: Tämä lataa automaattisesti ReVanced Patches vaihtoehtoisista lähteistä.\n\nTämä yhdistää sinut vaihtoehtoiseen lähteeseen.",
|
||||
"apiURLLabel": "API:n URL-osoite",
|
||||
"apiURLHint": "Määritä ReVanced Managerin API:N URL-osoite",
|
||||
"selectApiURL": "API:n URL-osoite",
|
||||
"orgPatchesLabel": "Paikkauksien organisaatio",
|
||||
"sourcesPatchesLabel": "Paikkauksien lähde",
|
||||
"contributorsLabel": "Osallistujat",
|
||||
"contributorsHint": "Listaus ReVancedin kehitykseen osallistuneista",
|
||||
"logsLabel": "Jaa lokit",
|
||||
"logsHint": "Jaa ReVanced Managerin lokit",
|
||||
"enablePatchesSelectionLabel": "Salli paikkausvalintojen muutos",
|
||||
"enablePatchesSelectionHint": "Älä estä paikkausten valintaa tai valintojen poistoa",
|
||||
"enablePatchesSelectionWarningText": "Paikkausvalikoiman muuttaminen voi aiheuttaa odottamattomia ongelmia.\n\nSallitaanko se silti?",
|
||||
"disablePatchesSelectionWarningText": "Olet poistamassa paikkausvalikoiman muokkauksen käytöstä.\nOletusarvoiset paikkasvalikoimat palautetaan.\n\nEstetäänkö se silti?",
|
||||
"autoUpdatePatchesLabel": "Päivitä paikkaukset automaattisesti",
|
||||
"autoUpdatePatchesHint": "Päivitä paikkaukset automaattisesti uusimpiin versioihin",
|
||||
"showUpdateDialogLabel": "Näytä päivitysruutu",
|
||||
"showUpdateDialogHint": "Näytä ilmoitus, kun uusi päivitys on saatavilla",
|
||||
"universalPatchesLabel": "Näytä yleispaikkaukset",
|
||||
"universalPatchesHint": "Näytä kaikki sovellukset ja yleispaikkaukset (voi hidastaa sovelluslistausta)",
|
||||
"lastPatchedAppLabel": "Tallenna paikattu sovellus",
|
||||
"lastPatchedAppHint": "Tallenna viimeinen laastari asentaaksesi tai vieäksesi myöhemmin",
|
||||
"versionCompatibilityCheckLabel": "Version yhteensopivuustarkastus",
|
||||
"versionCompatibilityCheckHint": "Estä valitsemasta valitun sovellusversion kanssa yhteensopimattomia paikkauksia",
|
||||
"requireSuggestedAppVersionLabel": "Vaadi ehdotettu sovellusversio",
|
||||
"requireSuggestedAppVersionHint": "Estä ehdotetusta sovellusversiosta poikkeavan version valinta",
|
||||
"requireSuggestedAppVersionDialogText": "Ehdotetusta poikkeavan sovellusversion valinta voi aiheuttaa odottamattomia ongelmia.\n\nJatketaanko tästä huolimatta?",
|
||||
"aboutLabel": "Tietoja",
|
||||
"snackbarMessage": "Kopioitu leikepöydälle",
|
||||
"restartAppForChanges": "Käynnistä sovellus uudestaan muutosten käyttöönottamiseksi",
|
||||
"deleteTempDirLabel": "Poista väliaikaistiedostot",
|
||||
"deleteTempDirHint": "Poista käyttämättömät väliaikaistiedostot",
|
||||
"deletedTempDir": "Väliaikaistiedostot poistettiin",
|
||||
"exportSettingsLabel": "Vie asetukset",
|
||||
"exportSettingsHint": "Vie asetukset JSON tiedostoon",
|
||||
"exportedSettings": "Asetukset viety",
|
||||
"importSettingsLabel": "Tuo asetukset",
|
||||
"importSettingsHint": "Tuo asetukset JSON tiedostosta",
|
||||
"importedSettings": "Asetukset tuotu",
|
||||
"exportPatchesLabel": "Vie paikkausvalikoima",
|
||||
"exportPatchesHint": "Vie paikkausvalikoima JSON-tiedostoon",
|
||||
"exportedPatches": "Paikkausvalikoima vietiin",
|
||||
"noExportFileFound": "Vietäviä paikkausvalikoimia ei ole",
|
||||
"importPatchesLabel": "Tuo paikkausvalikoima",
|
||||
"importPatchesHint": "Tuo paikkausvalikoima JSON-tiedostosta",
|
||||
"importedPatches": "Paikkausvalikoima tuotiin",
|
||||
"resetStoredPatchesLabel": "Palauta paikkausvalikoima",
|
||||
"resetStoredPatchesHint": "Palauta tallennettu paikkausvalikoima",
|
||||
"resetStoredPatchesDialogTitle": "Palautetaanko paikkausvalikoima?",
|
||||
"resetStoredPatchesDialogText": "Oletusarvoinen paikkausvalikoima palautetaan.",
|
||||
"resetStoredPatches": "Paikkausvalikoima palautettiin",
|
||||
"resetStoredOptionsLabel": "Palauta paikkausasetukset",
|
||||
"resetStoredOptionsHint": "Palauta kaikki paikkausasetukset",
|
||||
"resetStoredOptionsDialogTitle": "Palautetaanko paikkausasetukset?",
|
||||
"resetStoredOptionsDialogText": "Paikkausasetusten palautus poistaa kaikki tallennetut asetukset.",
|
||||
"resetStoredOptions": "Asetukset palautettiin",
|
||||
"deleteLogsLabel": "Tyhjennä lokit",
|
||||
"deleteLogsHint": "Poista kerätyt ReVanced Managerin lokitiedot",
|
||||
"deletedLogs": "Lokitiedot on poistettu",
|
||||
"regenerateKeystoreLabel": "Luo avainsäilö uudelleen",
|
||||
"regenerateKeystoreHint": "Luo sovellusten allekirjoitukseen käytettävä avainsäilö uudelleen",
|
||||
"regenerateKeystoreDialogTitle": "Luodaanko avainsäilö uudelleen?",
|
||||
"regenerateKeystoreDialogText": "Vanhalla avainsäilöllä allekirjoitettuja sovelluksia ei voida enää päivittää.",
|
||||
"regeneratedKeystore": "Avainsäilö luotiin uudelleen",
|
||||
"exportKeystoreLabel": "Vie avainsäilö",
|
||||
"exportKeystoreHint": "Vie sovellusten allekirjoitukseen käytettävä avainsäilö",
|
||||
"exportedKeystore": "Avainsäilö vietiin",
|
||||
"noKeystoreExportFileFound": "Vietävää avainsäilöä ei ole",
|
||||
"importKeystoreLabel": "Tuo avainsäilö",
|
||||
"importKeystoreHint": "Tuo sovellusten allekirjoitukseen käytettävä avainsäilö",
|
||||
"importedKeystore": "Avainsäilö tuotiin",
|
||||
"selectKeystorePassword": "Avainsäilön salasana",
|
||||
"selectKeystorePasswordHint": "Valitse sovellusten allekirjoitukseen käytettävä avainsäilö",
|
||||
"jsonSelectorErrorMessage": "Valittua JSON-tiedostoa ei voida käyttää",
|
||||
"keystoreSelectorErrorMessage": "Valittua avainsäilötiedostoa ei voida käyttää"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Sovelluksen tiedot",
|
||||
"openButton": "Avaa",
|
||||
"installButton": "Asenna",
|
||||
"uninstallButton": "Poista asennus",
|
||||
"unmountButton": "Irroita liitos",
|
||||
"exportButton": "Vie",
|
||||
"deleteButton": "Poista",
|
||||
"rootDialogTitle": "Virhe",
|
||||
"lastPatchedAppDescription": "Tämä on varmuuskopio sovelluksesta, joka on viimeksi korjattu.",
|
||||
"unmountDialogText": "Haluatko varmasti irrottaa sovelluksen liitoksen?",
|
||||
"uninstallDialogText": "Oletko varma, että haluat poistaa sovelluksen?",
|
||||
"rootDialogText": "Sovellus asennettiin superuser-oikeuksilla, mutta ReVanced Managerilla ei tällä hetkellä ole näitä käyttöoikeuksia.\nMyönnä superuser-käyttöoikeus ensin.",
|
||||
"removeAppDialogTitle": "Poista sovellus?",
|
||||
"removeAppDialogText": "Oletko varma, että haluat poistaa tämän varmuuskopion?",
|
||||
"packageNameLabel": "Paketin nimi",
|
||||
"installTypeLabel": "Asennustyyppi",
|
||||
"mountTypeLabel": "Liitä",
|
||||
"regularTypeLabel": "Tavallinen",
|
||||
"patchedDateLabel": "Paikkausaika",
|
||||
"appliedPatchesLabel": "Suoritetut paikkaukset",
|
||||
"sizeLabel": "Tiedoston koko",
|
||||
"patchedDateHint": "${date} klo ${time}",
|
||||
"appliedPatchesHint": "${quantity} suoritettua paikkausta",
|
||||
"updateNotImplemented": "Ominaisuutta ei ole vielä toteutettu"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Osallistujat"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Versioristiriita",
|
||||
"mount_no_root": "Root-oikeuksia ei ole",
|
||||
"mount_missing_installation": "Asennusta ei löytynyt",
|
||||
"status_failure_blocked": "Asennus estettiin",
|
||||
"install_failed_verification_failure": "Vahvistus epäonnistui",
|
||||
"status_failure_invalid": "Asennus ei kelpaa",
|
||||
"install_failed_version_downgrade": "Ei voida alentaa",
|
||||
"status_failure_conflict": "Asennusristiriita",
|
||||
"status_failure_storage": "Asennuksen tallennustilaongelma",
|
||||
"status_failure_incompatible": "Asennus ei ole yhteensopiva",
|
||||
"status_failure_timeout": "Asennus aikakatkaistiin",
|
||||
"status_unknown": "Asennus epäonnistui",
|
||||
"mount_version_mismatch_description": "Asennus epäonnistui, koska asennettu sovellusversio eroaa paikatusta versiosta.\n\nAsenna sovelluksesta se versio, jonka liität ja yritä uudelleen.",
|
||||
"mount_no_root_description": "Asennus epäonnistui, koska root-oikeuksia ei myönnetty.\n\nMyönnä ReVanced Managerille root-oikeudet ja yritä uudelleen.",
|
||||
"mount_missing_installation_description": "Asennus epäonnistui, koska paikkaamatonta sovellusta ei ole asennettu tälle laitteelle sen liikosen korvaamiseksi.\n\nAsenna paikkaamaton sovellus ennen liitosta ja yritä uudelleen.",
|
||||
"status_failure_timeout_description": "Asennus kesti liian kauan.\n\nHaluatko yrittää uudelleen?",
|
||||
"status_failure_storage_description": "Asennus epäonnistui riittämättömän tallennustilan vuoksi.\n\nVapauta tilaa ja yritä uudelleen.",
|
||||
"status_failure_invalid_description": "Asennus epäonnistui, koska paikattu sovellus ei kelpaa.\n\nPoistetaanko sovelluksen asennus ja yritetään uudelleen?",
|
||||
"status_failure_incompatible_description": "Sovellus ei ole yhteensopiva tämän laitteen kanssa.\n\nKäytä APK:a, jota tämä laite tukee ja yritä uudelleen.",
|
||||
"status_failure_conflict_description": "Sovelluksen jo olemassaoleva asennus esti asennuksen.\n\nPoistetaanko asennettu sovellus ja yritetään uudelleen?",
|
||||
"status_failure_blocked_description": "${packageName} esti asennuksen.\n\nMuuta suojausasetuksiasi ja yritä uudelleen.",
|
||||
"install_failed_verification_failure_description": "Asennus epäonnistui todennusongelman vuoksi.\n\nSäädä suojausasetuksiasi ja yritä uudelleen.",
|
||||
"install_failed_version_downgrade_description": "Asennus epäonnistui, koska paikatun sovelluksen versio on asennettua vanhempi.\n\nPoistetaanko sovelluksen asennus ja yritetään uudelleen?",
|
||||
"status_unknown_description": "Asennus epäonnistui tuntemattomasta syystä. Yritä uudelleen."
|
||||
}
|
||||
}
|
198
assets/i18n/strings_fil_PH.i18n.json
Executable file
@ -0,0 +1,198 @@
|
||||
{
|
||||
"okButton": "Sige",
|
||||
"cancelButton": "I-cancel",
|
||||
"dismissButton": "Kalimutan",
|
||||
"quitButton": "Itigil",
|
||||
"updateButton": "Magbago",
|
||||
"suggested": "Version payo ng ReVanced: ${version}",
|
||||
"yesButton": "Sige",
|
||||
"noButton": "Hindi",
|
||||
"warning": "Babala",
|
||||
"notice": "Pabatid",
|
||||
"noShowAgain": "Wag na ipakita ito muli",
|
||||
"add": "Idagdag",
|
||||
"remove": "Itanggal",
|
||||
"showChangelogButton": "Ipakita ang naibago",
|
||||
"showUpdateButton": "Ipakita ang pagbabago",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Dashboard",
|
||||
"patcherTab": "Tagapagtapal",
|
||||
"settingsTab": "Mga Setting"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Tapos nang Refresh",
|
||||
"widgetTitle": "Mga Dashboard",
|
||||
"updatesSubtitle": "Mga Pagbabago",
|
||||
"lastPatchedAppSubtitle": "Huling na-patch na app",
|
||||
"changeLaterSubtitle": "Pwede mo palitan ito sa settings mamaya.",
|
||||
"noInstallations": "No patched apps installed",
|
||||
"installUpdate": "Ituloy ang pag-install ng update?",
|
||||
"updateSheetTitle": "I-update ang ReVanced Manager",
|
||||
"updateDialogTitle": "May bagong update na available",
|
||||
"updatePatchesSheetTitle": "I-update ang mga Patch ng ReVanced",
|
||||
"updateChangelogTitle": "Talaan ng mga pagbabago",
|
||||
"updateDialogText": "May bagong update na available para sa ${file}.\n\nAng kasalukuyang naka-install na bersyon ay ${version}.",
|
||||
"downloadConsentDialogTitle": "I-download ang mga kinakailangang files?",
|
||||
"downloadConsentDialogText": "Kailangan ng ReVanced Manager na i-download ang mga kinakailangang file para gumana nang maayos.",
|
||||
"downloadConsentDialogText2": "Ito ay magkokonekta sa iyo sa ${url}.",
|
||||
"downloadingMessage": "Nagda-download ng update...",
|
||||
"downloadedMessage": "Na-download ang update",
|
||||
"installingMessage": "Ini-install ang update...",
|
||||
"errorDownloadMessage": "Unable to download update",
|
||||
"errorInstallMessage": "Hindi ma-install ang update",
|
||||
"noConnection": "No internet connection"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Impormasyon"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Naglo-load...",
|
||||
"timeagoLabel": "${time} ang nakalipas"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Tagapagtapal",
|
||||
"patchButton": "Tapalan",
|
||||
"requiredOptionDialogText": "Kailangan mo i-set ang ilang mga opsyon para sa patch."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Pumili ka ng app",
|
||||
"widgetTitleSelected": "Piniling app",
|
||||
"widgetSubtitle": "Walang app na pinili",
|
||||
"noAppsLabel": "Walang nakitang aplikasyon",
|
||||
"anyVersion": "Anumang bersyon"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Pumili ng mga pantapal",
|
||||
"widgetTitleSelected": "Napiling mga pantapal",
|
||||
"widgetSubtitle": "Pumili muna ng aplikasyon",
|
||||
"widgetEmptySubtitle": "Walang patches ang napili"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Mga Social",
|
||||
"widgetSubtitle": "Online na kami!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Pumili ka ng app",
|
||||
"searchBarHint": "Hanapin ang app",
|
||||
"storageButton": "Storage",
|
||||
"selectFromStorageButton": "Pumili ka galing sa storage",
|
||||
"errorMessage": "Hindi magamit ang napiling aplikasyon",
|
||||
"requireSuggestedAppVersionDialogText": "Ang bersyon ng app na iyong pinili ay hindi tumutugma sa inirerekomendang bersyon na maaaring magdulot ng di-inaasahang mga isyu. Mangyaring gamitin ang inirerekomendang bersyon.\n\nPiniling bersyon: ${selected} \nInirerekomendang bersyon: ${suggested}\n\nPara magpatuloy pa rin, i-disable ang \"Kinakailangang inirerekomendang bersyon ng app\" sa mga setting.",
|
||||
"featureNotAvailable": "Hindi pa nagagawa ang feature",
|
||||
"featureNotAvailableText": "Ang app na ito ay isang split APK at maaari lamang ma-patch at ma-install nang maayos sa pamamagitan ng pag-mount na may root permissions. Gayunpaman, maaari mong ma-patch at ma-install ang buong APK sa pamamagitan ng pagpili nito mula sa storage."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Pumili ka ng patches",
|
||||
"searchBarHint": "Maghanap ng mga pantapal",
|
||||
"universalPatches": "Unibersal na mga patch",
|
||||
"newPatches": "Mga bagong patch",
|
||||
"patches": "Mga patch",
|
||||
"doneButton": "Tapos na",
|
||||
"defaultChip": "Regular",
|
||||
"defaultTooltip": "Pumili ng lahat ng mga regular na mga patch",
|
||||
"noneChip": "Wala",
|
||||
"noneTooltip": "Huwag piliin lahat ng tapal",
|
||||
"loadPatchesSelection": "Mag-load ng pagpipilian ng patch",
|
||||
"noSavedPatches": "Walang na-save na pagpipilian ng patch para sa piniling app. Pindutin ang 'Tapos na' para i-save ang kasalukuyang pagpipilian.",
|
||||
"noPatchesFound": "Walang nahanap na pantapal para sa napiling aplikasyon",
|
||||
"setRequiredOption": "Ilang mga patch ay nangangailangan ng mga opsyon na dapat itakda:\n\n${patches}\n\nMangyaring i-set ang mga ito bago magpatuloy."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"viewTitle": "Mga opsyon ng patch",
|
||||
"saveOptions": "I-save",
|
||||
"tooltip": "Mga karagdagang opsyon sa input",
|
||||
"selectFilePath": "Pumili ng landas ng file",
|
||||
"selectFolder": "Pumili ng folder",
|
||||
"unsupportedOption": "Hindi suportado ang opsyong ito",
|
||||
"requiredOptionNull": "Ang mga sumusunod na opsyon ay kailangang i-set:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Maaaring magkaproblema sa pagtatapal kung pipiliin mo ang pantapal na ito.\n\nBersyon ng app: ${packageVersion}\nSuportadong mga bersyon:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Hindi suportado ang patch para sa bersyon ng app na ito.",
|
||||
"unsupportedRequiredOption": "Ang patch na ito ay naglalaman ng isang kinakailangang opsyon na hindi suportado ng app na ito",
|
||||
"patchesChangeWarningDialogText": "Inirerekomenda na gamitin ang default na pagpili ng patch at opsyon. Ang pagbabago sa mga ito ay maaaring magdulot ng di-inaasahang mga isyu.\n\nKailangan mong buksan ang \"Pahintulot sa pagbabago ng pagpili ng patch\" sa mga setting bago baguhin ang anumang pagpili ng patch.",
|
||||
"patchesChangeWarningDialogButton": "Gamitin ang regular na pagpili"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Pumili ng uri ng pag-install",
|
||||
"installTypeDescription": "Upang magpatuloy, pumili ng uri ng pag-install.",
|
||||
"installButton": "I-install",
|
||||
"installRootType": "I-mount",
|
||||
"installNonRootType": "Regular ",
|
||||
"warning": "Upang maiwasan ang di-inaasahang mga isyu, i-disable ang mga auto-update para sa patched na app.",
|
||||
"pressBackAgain": "Pindutin muli ang back para kanselahin",
|
||||
"openButton": "Buksan",
|
||||
"notificationTitle": "May tinatapalan ang ReVanced Manager",
|
||||
"notificationText": "Pindutin para bumalik sa installer",
|
||||
"exportApkButtonTooltip": "I-export ang na-patch na APK",
|
||||
"exportLogButtonTooltip": "I-export ang log",
|
||||
"screenshotDetected": "May nakitang screenshot. Kung sinusubukan mong ibahagi ang log, Ibahagi na lang ang text copy sa halip.\n\nKopyahin ang log sa clipboard?",
|
||||
"copiedToClipboard": "Nakopya ang log sa clipboard",
|
||||
"noExit": "Hindi pwedeng umalis, umaandar pa ang installer..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Mga Setting",
|
||||
"appearanceSectionTitle": "Hitsura",
|
||||
"teamSectionTitle": "Pangkat",
|
||||
"debugSectionTitle": "Pagde-debug",
|
||||
"advancedSectionTitle": "Advanced",
|
||||
"exportSectionTitle": "Mag-import & mag-export",
|
||||
"dataSectionTitle": "Pinagkukunan na datos",
|
||||
"themeModeLabel": "Theme ng app",
|
||||
"systemThemeLabel": "Sistema",
|
||||
"lightThemeLabel": "Liwanag",
|
||||
"darkThemeLabel": "Dilim",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Lasapin ang karanasang naaangkop sa iyong device",
|
||||
"languageLabel": "Wika",
|
||||
"languageUpdated": "Wika na-update na",
|
||||
"sourcesLabel": "Iba pang mga sources ",
|
||||
"useAlternativeSources": "Gumamit ng alternatibong mga sources ",
|
||||
"sourcesResetDialogTitle": "I-reset",
|
||||
"apiURLLabel": "URL ng API",
|
||||
"selectApiURL": "URL ng API",
|
||||
"orgPatchesLabel": "Pagsasaayos ng mga pantapal",
|
||||
"sourcesPatchesLabel": "Pinanggalingan ng mga pantapal",
|
||||
"contributorsLabel": "Mga nag-ambag",
|
||||
"contributorsHint": "Listahan ng mga tumulong sa ReVanced",
|
||||
"aboutLabel": "Tungkol",
|
||||
"snackbarMessage": "Nakopya sa clipboard",
|
||||
"restartAppForChanges": "I-restart ang app para umepekto ang mga pagbabago",
|
||||
"deleteTempDirLabel": "Burahin ang mga pansamantalang file",
|
||||
"deleteTempDirHint": "Burahin ang mga hindi na ginagamit na pansamantalang file",
|
||||
"deletedTempDir": "Binura ang mga pansamantalang file",
|
||||
"deleteLogsLabel": "Burahin lahat ng logs",
|
||||
"deletedLogs": "Nabura na yung logs",
|
||||
"importKeystoreLabel": "Mag-import ng keystore",
|
||||
"importKeystoreHint": "Mag-import ng isang keystore na ginamit sa pagpirma ng mga apps",
|
||||
"importedKeystore": "Nai-import ang keystore",
|
||||
"selectKeystorePassword": "Keystore password",
|
||||
"selectKeystorePasswordHint": "Pumili ng password ng keystore na ginamit sa pagpirma ng mga app",
|
||||
"jsonSelectorErrorMessage": "Hindi magamit ang napiling JSON file",
|
||||
"keystoreSelectorErrorMessage": "Hindi magamit ang piniling file ng keystore"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Impormasyon",
|
||||
"openButton": "Buksan",
|
||||
"installButton": "I-install",
|
||||
"uninstallButton": "Alisin",
|
||||
"unmountButton": "I-unmount",
|
||||
"rootDialogTitle": "Error",
|
||||
"unmountDialogText": "Gusto mo bang i-tanggal ang aplikasyong ito?",
|
||||
"uninstallDialogText": "Gusto mo bang i-alis ang aplikasyong ito?",
|
||||
"rootDialogText": "Na-install ang app gamit ang pahintulot ng superuser, pero walang kasalukuyang pahintulot ang ReVanced Manager.\nBigyan muna kami ng pahintulot pang-superuser.",
|
||||
"packageNameLabel": "Pangalan ng package",
|
||||
"installTypeLabel": "Uri ng installation",
|
||||
"mountTypeLabel": "I-mount ",
|
||||
"regularTypeLabel": "Regular ",
|
||||
"patchedDateLabel": "Petsa ng pagtatapal",
|
||||
"appliedPatchesLabel": "Nalapat na mga pantapal",
|
||||
"patchedDateHint": "${date} sa ${time}",
|
||||
"appliedPatchesHint": "${quantity} ang naka-apply nga patches",
|
||||
"updateNotImplemented": "Binubuo pa lamang ang feature na ito"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Mga nag-ambag"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
}
|
298
assets/i18n/strings_fr_FR.i18n.json
Executable file
@ -0,0 +1,298 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Annuler",
|
||||
"dismissButton": "Ignorer",
|
||||
"quitButton": "Quitter",
|
||||
"updateButton": "Mettre à jour",
|
||||
"suggested": "Version suggérée : ${version}",
|
||||
"yesButton": "Oui",
|
||||
"noButton": "Non",
|
||||
"warning": "Avertissement",
|
||||
"notice": "Remarque",
|
||||
"noShowAgain": "Ne plus afficher",
|
||||
"add": "Ajouter",
|
||||
"remove": "Retirer",
|
||||
"showChangelogButton": "Journal des modifications",
|
||||
"showUpdateButton": "Afficher les mises à jour",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Tableau de bord",
|
||||
"patcherTab": "Patcheur",
|
||||
"settingsTab": "Paramètres"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Actualisé avec succès",
|
||||
"widgetTitle": "Tableau de bord",
|
||||
"updatesSubtitle": "Mises à jour",
|
||||
"lastPatchedAppSubtitle": "Dernière application patchée",
|
||||
"patchedSubtitle": "Applications installées",
|
||||
"changeLaterSubtitle": "Vous pouvez changer cela dans les paramètres ultérieurement.",
|
||||
"noSavedAppFound": "Aucune application trouvée",
|
||||
"noInstallations": "Aucune application patchée installée",
|
||||
"installUpdate": "Continuer à installer la mise à jour ?",
|
||||
"updateSheetTitle": "Mettre à jour ReVanced Manager",
|
||||
"updateDialogTitle": "Nouvelle mise à jour disponible",
|
||||
"updatePatchesSheetTitle": "Mettre à jour les patchs ReVanced",
|
||||
"updateChangelogTitle": "Journal des modifications",
|
||||
"updateDialogText": "Une nouvelle mise à jour est disponible pour ${file}.\n\nLa version actuellement installée est la version ${version}.",
|
||||
"downloadConsentDialogTitle": "Télécharger les fichiers nécessaires ?",
|
||||
"downloadConsentDialogText": "ReVanced Manager doit télécharger les fichiers nécessaires pour fonctionner correctement.",
|
||||
"downloadConsentDialogText2": "Vous allez être connecté à ${url}.",
|
||||
"downloadingMessage": "Téléchargement de la mise à jour...",
|
||||
"downloadedMessage": "Mise à jour téléchargée",
|
||||
"installingMessage": "Installation de la mise à jour...",
|
||||
"errorDownloadMessage": "Impossible de télécharger la mise à jour",
|
||||
"errorInstallMessage": "Impossible d'installer la mise à jour",
|
||||
"noConnection": "Aucune connexion internet"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Info"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Chargement...",
|
||||
"timeagoLabel": "Il y a ${time}"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcheur",
|
||||
"patchButton": "Patcher",
|
||||
"incompatibleArchWarningDialogText": "La correction sur cette architecture n'est pas encore prise en charge et pourrait échouer. Continuer quand même ?",
|
||||
"removedPatchesWarningDialogText": "Les patchs supprimés depuis la dernière fois que vous avez patché cette application :\n\n${patches}\n\n${newPatches}Continuer quand même ?",
|
||||
"addedPatchesDialogText": "Ajout de correctifs depuis la dernière fois que vous avez patché cette application :\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "Certaines options de patch doivent être définies."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Sélectionner une application",
|
||||
"widgetTitleSelected": "Application sélectionnée",
|
||||
"widgetSubtitle": "Aucune application sélectionnée",
|
||||
"noAppsLabel": "Aucune application trouvée",
|
||||
"anyVersion": "Toutes les versions"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Sélectionner les patchs",
|
||||
"widgetTitleSelected": "Patchs sélectionnés",
|
||||
"widgetSubtitle": "Sélectionnez d'abord une application",
|
||||
"widgetEmptySubtitle": "Aucun patch sélectionné"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Réseaux sociaux",
|
||||
"widgetSubtitle": "Nous sommes en ligne !"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Sélectionner une application",
|
||||
"searchBarHint": "Rechercher une application",
|
||||
"storageButton": "Stockage",
|
||||
"selectFromStorageButton": "Sélectionner depuis le stockage",
|
||||
"errorMessage": "Impossible d'utiliser l'application sélectionnée",
|
||||
"downloadToast": "La fonction de téléchargement est actuellement indisponible",
|
||||
"requireSuggestedAppVersionDialogText": "La version de l'application que vous avez sélectionné ne correspond pas à la version recommandée ce qui pourrait créer des problèmes inattendus. Veuillez utiliser la version recommendée.\n\nVersion sélectionnée : ${selected}\nVersion recommendée : ${suggested}\n\nPour continuer quand même, désactivez \"Exiger la version recommendée de l'application\" dans les paramètres.",
|
||||
"featureNotAvailable": "Fonctionnalité non implémentée",
|
||||
"featureNotAvailableText": "Cette application est un APK fractionné et ne peut être corrigée et installée de manière fiable qu'en la montant avec les autorisations administrateur. Toutefois, vous pouvez patcher et installer un APK complet en le sélectionnant depuis le stockage."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Sélectionner les patchs",
|
||||
"searchBarHint": "Rechercher des patchs",
|
||||
"universalPatches": "Patchs universels",
|
||||
"newPatches": "Nouveaux patchs",
|
||||
"patches": "Patchs",
|
||||
"doneButton": "Terminé",
|
||||
"defaultChip": "Par défaut",
|
||||
"defaultTooltip": "Sélectionner tous les patchs par défaut",
|
||||
"noneChip": "Aucun",
|
||||
"noneTooltip": "Désélectionner tous les patchs",
|
||||
"loadPatchesSelection": "Charger les patchs sélectionnés",
|
||||
"noSavedPatches": "Aucune sélection de patchs enregistrée pour l'application sélectionnée.\nAppuyez sur Terminé pour sauvegarder la sélection actuelle.",
|
||||
"noPatchesFound": "Aucun patch n'a été trouvé pour l'application sélectionnée",
|
||||
"setRequiredOption": "Certains correctifs nécessitent des options à définir :\n\n${patches}\n\nVeuillez les définir avant de continuer."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Valeur personnalisée",
|
||||
"setToNull": "Définir à nul",
|
||||
"nullValue": "Cette valeur d'option est actuellement nulle",
|
||||
"viewTitle": "Options de patch",
|
||||
"saveOptions": "Enregistrer",
|
||||
"unselectPatch": "Désélectionner le correctif",
|
||||
"tooltip": "Plus d'options d'entrée",
|
||||
"selectFilePath": "Sélectionner l'emplacement du fichier",
|
||||
"selectFolder": "Sélectionner le dossier",
|
||||
"requiredOption": "Définir cette option est nécessaire",
|
||||
"unsupportedOption": "Cette option n'est pas prise en charge",
|
||||
"requiredOptionNull": "Les options suivantes doivent être définies :\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Sélectionner ce patch peut entrainer des erreurs dans la modification.\n\nVersion de l'application : ${packageVersion}\nVersions prises en charge :\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Le patch n'est pas pris en charge pour cette version de l'application.",
|
||||
"unsupportedRequiredOption": "Ce patch contient une option requise qui n'est pas prise en charge par cette application",
|
||||
"patchesChangeWarningDialogText": "Il est recommandé d'utiliser les patchs et options par défaut. Leur modification peut entraîner des problèmes inattendus.\n\nVous aurez besoin d'activer « Autoriser la modification de la sélection de patchs » dans les paramètres avant de modifier toute sélection de patchs.",
|
||||
"patchesChangeWarningDialogButton": "Utiliser la sélection par défaut"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Choisissez le mode d'installation",
|
||||
"installTypeDescription": "Sélectionner le mode d'installation avec lequel continuer.",
|
||||
"installButton": "Installer",
|
||||
"installRootType": "Monter",
|
||||
"installNonRootType": "Standard",
|
||||
"warning": "Désactivez les mises à jour automatiques pour l'application patchée afin d'éviter des problèmes inattendus.",
|
||||
"pressBackAgain": "Appuyez sur retour une nouvelle fois pour quitter",
|
||||
"openButton": "Ouvrir",
|
||||
"notificationTitle": "ReVanced Manager est en train de patcher",
|
||||
"notificationText": "Appuyer pour revenir à l’installateur",
|
||||
"exportApkButtonTooltip": "Exporter l'APK corrigé",
|
||||
"exportLogButtonTooltip": "Exporter les journaux",
|
||||
"screenshotDetected": "Une capture d’écran a été détectée. Si vous essayez de partager le journal, veuillez plutôt partager une copie du texte.\n\nCopier les logs dans le presse-papiers ?",
|
||||
"copiedToClipboard": "Journal copié dans le presse-papiers",
|
||||
"noExit": "L'installateur est toujours en fonctionnement, impossible de quitter..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Paramètres",
|
||||
"appearanceSectionTitle": "Apparence",
|
||||
"teamSectionTitle": "Équipe",
|
||||
"debugSectionTitle": "Débogage",
|
||||
"advancedSectionTitle": "Avancé",
|
||||
"exportSectionTitle": "Import et export",
|
||||
"dataSectionTitle": "Sources de données",
|
||||
"themeModeLabel": "Thème de l'application",
|
||||
"systemThemeLabel": "Système",
|
||||
"lightThemeLabel": "Clair",
|
||||
"darkThemeLabel": "Sombre",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Profitez d'une expérience plus proche de votre appareil",
|
||||
"languageLabel": "Langue",
|
||||
"languageUpdated": "Langue mise à jour",
|
||||
"sourcesLabel": "Sources alternatives",
|
||||
"sourcesLabelHint": "Configurer les sources alternatives pour les correctifs ReVanced",
|
||||
"useAlternativeSources": "Utiliser les sources alternatives",
|
||||
"useAlternativeSourcesHint": "Utiliser des sources alternatives pour les correctifs ReVanced au lieu de l'API",
|
||||
"sourcesResetDialogTitle": "Réinitialiser",
|
||||
"sourcesResetDialogText": "Êtes-vous sûr de vouloir réinitialiser vos sources à leurs valeurs par défaut ?",
|
||||
"apiURLResetDialogText": "Êtes-vous sûr de vouloir réinitialiser l'URL d'API à sa valeur par défaut ?",
|
||||
"sourcesUpdateNote": "Remarque : Cela téléchargera automatiquement les correctifs ReVanced à partir des sources alternatives.\n\nCela vous connectera à la source alternative.",
|
||||
"apiURLLabel": "URL de l'API",
|
||||
"apiURLHint": "Configurer l'URL de l'API de ReVanced Manager",
|
||||
"selectApiURL": "URL de l'API",
|
||||
"orgPatchesLabel": "Organisation des correctifs",
|
||||
"sourcesPatchesLabel": "Source des patchs",
|
||||
"contributorsLabel": "Contributeurs",
|
||||
"contributorsHint": "Liste des contributeurs de ReVanced",
|
||||
"logsLabel": "Partager les journaux",
|
||||
"logsHint": "Partager les journaux de ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Autoriser la modification de la sélection de patchs",
|
||||
"enablePatchesSelectionHint": "Ne pas empêcher la sélection ou la désélection des correctifs",
|
||||
"enablePatchesSelectionWarningText": "Le changement de sélection par défaut des correctifs peut causer des problèmes inattendus \n\nActiver quand même ?",
|
||||
"disablePatchesSelectionWarningText": "Vous êtes sur le point de désactiver le changement de sélection par défaut des correctifs.\nLa sélection par défaut des correctifs sera restaurée.\n\nDésactiver quand même ?",
|
||||
"autoUpdatePatchesLabel": "Mise à jour automatique des correctifs",
|
||||
"autoUpdatePatchesHint": "Mise à jour automatique des correctifs ReVanced vers la dernière version",
|
||||
"showUpdateDialogLabel": "Afficher la boîte de dialogue de mise à jour",
|
||||
"showUpdateDialogHint": "Affiche une boîte de dialogue quand une nouvelle mise à jour est disponible",
|
||||
"universalPatchesLabel": "Afficher les correctifs universels",
|
||||
"universalPatchesHint": "Afficher toutes les applications et les correctifs universels (peut ralentir la liste des applications)",
|
||||
"lastPatchedAppLabel": "Enregistrer l'application corrigée",
|
||||
"lastPatchedAppHint": "Enregistrer le dernier correctif pour installer ou exporter plus tard",
|
||||
"versionCompatibilityCheckLabel": "Vérification de la compatibilité des versions",
|
||||
"versionCompatibilityCheckHint": "Empêcher la sélection de correctifs qui ne sont pas compatibles avec la version sélectionnée de l'application",
|
||||
"requireSuggestedAppVersionLabel": "Requiert la version suggérée de l'application",
|
||||
"requireSuggestedAppVersionHint": "Empêcher la sélection d'une application avec une version qui n'est pas celle suggérée",
|
||||
"requireSuggestedAppVersionDialogText": "La sélection d'une application qui n'est pas la version suggérée peut causer des problèmes inattendus.\n\nVoulez-vous quand même continuer ?",
|
||||
"aboutLabel": "À propos",
|
||||
"snackbarMessage": "Copié dans le presse-papier",
|
||||
"restartAppForChanges": "Redémarrez l'application pour appliquer les changements",
|
||||
"deleteTempDirLabel": "Supprimer les fichiers temporaires",
|
||||
"deleteTempDirHint": "Supprimer les fichiers temporaires inutilisés",
|
||||
"deletedTempDir": "Fichiers temporaires supprimés",
|
||||
"exportSettingsLabel": "Exporter les paramètres",
|
||||
"exportSettingsHint": "Exporter les paramètres vers un fichier JSON",
|
||||
"exportedSettings": "Paramètres exportés",
|
||||
"importSettingsLabel": "Importer les paramètres",
|
||||
"importSettingsHint": "Importer les paramètres depuis un fichier JSON",
|
||||
"importedSettings": "Paramètres importés",
|
||||
"exportPatchesLabel": "Exporter la sélection de correctifs",
|
||||
"exportPatchesHint": "Exporter la sélection de correctifs vers un fichier JSON",
|
||||
"exportedPatches": "Sélection de correctifs exportée",
|
||||
"noExportFileFound": "Aucune sélection de correctif à exporter",
|
||||
"importPatchesLabel": "Importer une sélection de correctifs",
|
||||
"importPatchesHint": "Importer une sélection de correctifs depuis un fichier JSON",
|
||||
"importedPatches": "Sélection de correctifs importée",
|
||||
"resetStoredPatchesLabel": "Réinitialiser la sélection des correctifs",
|
||||
"resetStoredPatchesHint": "Réinitialiser la sélection des correctifs sauvegardés",
|
||||
"resetStoredPatchesDialogTitle": "Réinitialiser la sélection des correctifs ?",
|
||||
"resetStoredPatchesDialogText": "La sélection par défaut des correctifs sera restaurée.",
|
||||
"resetStoredPatches": "La sélection des correctifs a été réinitialisée",
|
||||
"resetStoredOptionsLabel": "Réinitialiser les options de correctif",
|
||||
"resetStoredOptionsHint": "Réinitialiser toutes les options de correctif",
|
||||
"resetStoredOptionsDialogTitle": "Réinitialiser les options de correctif ?",
|
||||
"resetStoredOptionsDialogText": "La réinitialisation des options de correctif supprimera toutes les options enregistrées.",
|
||||
"resetStoredOptions": "Les options ont été réinitialisées",
|
||||
"deleteLogsLabel": "Effacer les journaux",
|
||||
"deleteLogsHint": "Supprimer les journaux collectés de ReVanced Manager",
|
||||
"deletedLogs": "Journaux supprimés",
|
||||
"regenerateKeystoreLabel": "Régénérer le magasin de clés",
|
||||
"regenerateKeystoreHint": "Régénérer le magasin de clés utilisé pour signer l'application",
|
||||
"regenerateKeystoreDialogTitle": "Régénérer le magasin de clés ?",
|
||||
"regenerateKeystoreDialogText": "Les applications corrigées signées avec l’ancien magasin de clés ne pourront plus être mises à jour.",
|
||||
"regeneratedKeystore": "Magasin de clés régénéré",
|
||||
"exportKeystoreLabel": "Exporter le magasin de clés",
|
||||
"exportKeystoreHint": "Exporter le magasin de clés utilisé pour signer les applications",
|
||||
"exportedKeystore": "Magasin de clés exporté",
|
||||
"noKeystoreExportFileFound": "Pas de magasin de clés à exporter",
|
||||
"importKeystoreLabel": "Importer le magasin de clés",
|
||||
"importKeystoreHint": "Importer le magasin de clés utilisé pour signer les applications",
|
||||
"importedKeystore": "Magasin de clés importé",
|
||||
"selectKeystorePassword": "Mot de passe du magasin de clés",
|
||||
"selectKeystorePasswordHint": "Sélectionner le mot de passe du magasin de clés utilisé pour signer les applications",
|
||||
"jsonSelectorErrorMessage": "Impossible d'utiliser le fichier JSON sélectionné",
|
||||
"keystoreSelectorErrorMessage": "Impossible d'utiliser le fichier de magasin de clés sélectionné"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Infos de l'application",
|
||||
"openButton": "Ouvrir",
|
||||
"installButton": "Installer",
|
||||
"uninstallButton": "Désinstaller",
|
||||
"unmountButton": "Démonter",
|
||||
"exportButton": "Exporter",
|
||||
"deleteButton": "Supprimer",
|
||||
"rootDialogTitle": "Erreur",
|
||||
"lastPatchedAppDescription": "Il s'agit d'une sauvegarde de la dernière application qui a été corrigée. ",
|
||||
"unmountDialogText": "Êtes-vous sûr de vouloir démonter cette application ?",
|
||||
"uninstallDialogText": "Êtes-vous sûr de vouloir désinstaller cette application ?",
|
||||
"rootDialogText": "L'application a été installée avec les permissions administrateur, mais ReVanced Manager n'a actuellement aucune permission.\nVeuillez d'abord accorder l'accès administrateur.",
|
||||
"removeAppDialogTitle": "Supprimer l'application ?",
|
||||
"removeAppDialogText": "Êtes-vous sûr de vouloir supprimer cette sauvegarde ?",
|
||||
"packageNameLabel": "Nom du paquet",
|
||||
"installTypeLabel": "Type d'installation",
|
||||
"mountTypeLabel": "Monter",
|
||||
"regularTypeLabel": "Standard",
|
||||
"patchedDateLabel": "Date de correction",
|
||||
"appliedPatchesLabel": "Correctifs appliqués",
|
||||
"sizeLabel": "Taille du fichier",
|
||||
"patchedDateHint": "le ${date} à ${time}",
|
||||
"appliedPatchesHint": "${quantity} correctifs appliqués",
|
||||
"updateNotImplemented": "Cette fonctionnalité n'est pas encore disponible"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contributeurs"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Incompatibilité de version",
|
||||
"mount_no_root": "Aucun accès administrateur",
|
||||
"mount_missing_installation": "Installation introuvable",
|
||||
"status_failure_blocked": "Installation bloquée",
|
||||
"install_failed_verification_failure": "Échec de la vérification",
|
||||
"status_failure_invalid": "Installation invalide",
|
||||
"install_failed_version_downgrade": "Impossible de rétrograder",
|
||||
"status_failure_conflict": "Conflit d'installation",
|
||||
"status_failure_storage": "Problème de stockage de l'installation",
|
||||
"status_failure_incompatible": "Installation incompatible",
|
||||
"status_failure_timeout": "Délai d'installation dépassé",
|
||||
"status_unknown": "Échec de l'installation",
|
||||
"mount_version_mismatch_description": "L'installation a échoué car l'application installée est une version différente de l'application corrigée.\n\nInstallez la version de l'application que vous montez et réessayez.",
|
||||
"mount_no_root_description": "L'installation a échoué parce que l'accès administrateur n'est pas accordé.\n\nAccordez l'accès administrateur à ReVanced Manager et réessayer.",
|
||||
"mount_missing_installation_description": "L'installation a échoué parce que l'application non corrigée n'est pas installée sur cet appareil afin de la monter. \n\nInstallez l'application non corrigée avant de monter et réessayez.",
|
||||
"status_failure_timeout_description": "L'installation a pris trop de temps.\n\nVoulez-vous réessayer ?",
|
||||
"status_failure_storage_description": "L'installation a échoué en raison d'un espace de stockage insuffisant.\n\nLibérez de l'espace et réessayez.",
|
||||
"status_failure_invalid_description": "L'installation a échoué car l'application corrigée est invalide.\n\nDésinstaller l'application et réessayer ?",
|
||||
"status_failure_incompatible_description": "L'application est incompatible avec cet appareil.\n\nUtilisez un APK pris en charge par cet appareil et réessayez.",
|
||||
"status_failure_conflict_description": "L'installation a été empêchée par une installation existante de l'application.\n\nDésinstaller l'application et réessayer ?",
|
||||
"status_failure_blocked_description": "L'installation a été bloquée par ${packageName}.\n\nAjustez vos paramètres de sécurité et réessayez.",
|
||||
"install_failed_verification_failure_description": "L'installation a échoué en raison d'un problème de vérification.\n\nAjustez vos paramètres de sécurité et réessayez.",
|
||||
"install_failed_version_downgrade_description": "L'installation a échoué car l'application corrigée a une version inférieure à l'application installée.\n\nDésinstaller l'application et réessayer ?",
|
||||
"status_unknown_description": "L'installation a échoué pour une raison inconnue. Veuillez réessayer."
|
||||
}
|
||||
}
|
298
assets/i18n/strings_ga_IE.i18n.json
Executable file
@ -0,0 +1,298 @@
|
||||
{
|
||||
"okButton": "CEART GO LEOR",
|
||||
"cancelButton": "Cealaigh",
|
||||
"dismissButton": "Díbhunaigh",
|
||||
"quitButton": "Scoir",
|
||||
"updateButton": "Nuashonraigh",
|
||||
"suggested": "Molta: ${version}",
|
||||
"yesButton": "Tá",
|
||||
"noButton": "Níl",
|
||||
"warning": "Rabhadh",
|
||||
"notice": "Fógra",
|
||||
"noShowAgain": "Ná taispeáin é seo arís",
|
||||
"add": "Cuir",
|
||||
"remove": "Bain",
|
||||
"showChangelogButton": "Taispeáin athraitheoir",
|
||||
"showUpdateButton": "Taispeáin nuashonrú",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Deais",
|
||||
"patcherTab": "Paisteálaí",
|
||||
"settingsTab": "Socruithe"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Athnuachan go rathúil",
|
||||
"widgetTitle": "Deais",
|
||||
"updatesSubtitle": "Nuashonruithe",
|
||||
"lastPatchedAppSubtitle": "An aip deireanach a paisteáladh",
|
||||
"patchedSubtitle": "Aipeanna Suiteáilte",
|
||||
"changeLaterSubtitle": "Is féidir leat é seo a athrú sna socruithe níos déanaí.",
|
||||
"noSavedAppFound": "Níl aon aip le fáil",
|
||||
"noInstallations": "Níl aon aipeanna paiste suiteáilte",
|
||||
"installUpdate": "Lean ar aghaidh ag suiteáil an nuashonrú?",
|
||||
"updateSheetTitle": "Nuashonraigh an ReVanced Manager",
|
||||
"updateDialogTitle": "Nuashonrú nua ar fáil",
|
||||
"updatePatchesSheetTitle": "Nuashonraigh Paistí ReVanced",
|
||||
"updateChangelogTitle": "Liosta athraithe",
|
||||
"updateDialogText": "Tá nuashonrú nua ar fáil do ${file}.\n\nIs é ${version} an leagan atá suiteáilte faoi láthair.",
|
||||
"downloadConsentDialogTitle": "Íoslódáil comhaid riachtanacha?",
|
||||
"downloadConsentDialogText": "Ní mór do ReVanced Manager na comhaid riachtanacha a íoslódáil chun oibriú i gceart.",
|
||||
"downloadConsentDialogText2": "Ceanglóidh sé seo tú le ${url}.",
|
||||
"downloadingMessage": "Íoslódáil nuashonrú...",
|
||||
"downloadedMessage": "Tá nuashonrú íosluchtaithe",
|
||||
"installingMessage": "Nuashonrú a shuiteáil...",
|
||||
"errorDownloadMessage": "Ní féidir nuashonrú a íoslódáil",
|
||||
"errorInstallMessage": "Ní féidir nuashonrú a shuiteáil",
|
||||
"noConnection": "Gan aon nasc idirlín"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Eolas"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Á lódáil...",
|
||||
"timeagoLabel": "${time} ó shin"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Paisteálaí",
|
||||
"patchButton": "Paiste",
|
||||
"incompatibleArchWarningDialogText": "Níl paisteáil ar an ailtireacht seo tacaítear leis go fóill agus d’fhéadfadh sé teip. Lean ar aghaidh fós?",
|
||||
"removedPatchesWarningDialogText": "Paistí bainte ón uair dheireanach a ndearna tú paistí ar an aip seo:\n\n${patches}\n\n${newPatches}An bhfuil fonn ort leanúint ar aghaidh mar sin féin?",
|
||||
"addedPatchesDialogText": "Cuireadh paistí leis ón uair dheireanach a ndearna tú paistí ar an aip seo:\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "Caithfear roinnt roghanna paiste a shocrú."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Roghnaigh aip",
|
||||
"widgetTitleSelected": "Aip roghnaithe",
|
||||
"widgetSubtitle": "Níl aon aip roghnaithe",
|
||||
"noAppsLabel": "Níor aimsíodh aon fheidhmchláir",
|
||||
"anyVersion": "Aon leagan"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Roghnaigh paistí",
|
||||
"widgetTitleSelected": "Paistí roghnaithe",
|
||||
"widgetSubtitle": "Roghnaigh iarratas ar dtús",
|
||||
"widgetEmptySubtitle": "Níl aon paistí roghnaithe"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Sóisialta",
|
||||
"widgetSubtitle": "Táimid ar líne!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Roghnaigh aip",
|
||||
"searchBarHint": "Cuardaigh aip",
|
||||
"storageButton": "Stóráil",
|
||||
"selectFromStorageButton": "Roghnaigh ó stóráil",
|
||||
"errorMessage": "Ní féidir feidhmchlár roghnaithe a úsáid",
|
||||
"downloadToast": "Níl feidhm íoslódála ar fáil fós",
|
||||
"requireSuggestedAppVersionDialogText": "Ní mheaitseálann leagan an aip a roghnaigh tú leis an leagan a mholtar a d'fhéadfadh saincheisteanna gan choinne a bheith mar thoradh air. Úsáid an leagan a mholtar le do thoil.\n\nLeagan roghnaithe: ${selected}\nLeagan mholta: ${suggested}\n\nChun leanúint ar aghaidh ar aon nós, díchumasaigh “Teastaíonn leagan aipe molta” sna socruithe.",
|
||||
"featureNotAvailable": "Gné nach bhfuil cur i bhfeidhm",
|
||||
"featureNotAvailableText": "Is APK scoilte é an aip seo agus ní féidir é a phaiteáil agus a shuiteáil go hiontaofa ach trí fheistiú le ceadanna fréimhe. Mar sin féin, is féidir leat APK iomlán a phaisteáil agus a shuiteáil trína roghnú ó stóráil."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Roghnaigh paistí",
|
||||
"searchBarHint": "Cuardaigh paistí",
|
||||
"universalPatches": "Paistí uilíocha",
|
||||
"newPatches": "Paistí nua",
|
||||
"patches": "Paistí",
|
||||
"doneButton": "Déanta",
|
||||
"defaultChip": "Réamhshocraithe",
|
||||
"defaultTooltip": "Roghnaigh gach paistí réamhshocraithe",
|
||||
"noneChip": "Níl aon",
|
||||
"noneTooltip": "Díroghnaigh gach paiste",
|
||||
"loadPatchesSelection": "Roghnú paiste luchtaigh",
|
||||
"noSavedPatches": "Níl aon roghnú paiste sábháilte don aip roghnaithe.\nBrúigh Done chun an rogha reatha a shábháil.",
|
||||
"noPatchesFound": "Níl aon paistí le fáil don aip roghnaithe",
|
||||
"setRequiredOption": "Éilíonn roinnt paistí roghanna a shocrú:\n\n${patches}\n\nSocraigh iad le do thoil sula leanann ar aghaidh."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Luach saincheaptha",
|
||||
"setToNull": "Socraigh go null",
|
||||
"nullValue": "Tá an luach rogha seo niall faoi láthair",
|
||||
"viewTitle": "Roghanna paiste",
|
||||
"saveOptions": "Sábháil",
|
||||
"unselectPatch": "Díroghnaigh paiste",
|
||||
"tooltip": "Tuilleadh roghanna ionchur",
|
||||
"selectFilePath": "Roghnaigh cosán comhad",
|
||||
"selectFolder": "Roghnaigh fillte",
|
||||
"requiredOption": "Teastaíonn an rogha seo a shocrú",
|
||||
"unsupportedOption": "Ní thacaítear leis an rogha seo",
|
||||
"requiredOptionNull": "Caithfear na roghanna seo a leanas a shocrú:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "D'fhéadfadh earráidí paiste a bheith mar thoradh ar an paiste seo a roghnú.\n\nLeagan aip: ${packageVersion}\nLeaganacha tacaithe:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Ní thacaítear le paiste don leagan aip seo.",
|
||||
"unsupportedRequiredOption": "Tá rogha riachtanach sa phaiste seo nach dtacaíonn an aip seo",
|
||||
"patchesChangeWarningDialogText": "Moltar an roghnú agus na roghanna paiste réamhshocraithe a úsáid. D'fhéadfadh saincheisteanna gan choinne a bheith mar thoradh orthu a athrú\n\nBeidh ort “Ceadaigh roghnú paiste athraithe” a chasadh air sna socruithe sula n-athraíonn tú aon rogha paiste.",
|
||||
"patchesChangeWarningDialogButton": "Úsáid rogha réamhshocraithe"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Roghnaigh cineál suiteála",
|
||||
"installTypeDescription": "Roghnaigh an cineál suiteála le leanúint leis.",
|
||||
"installButton": "Suiteáil",
|
||||
"installRootType": "Ceangail",
|
||||
"installNonRootType": "Rialta",
|
||||
"warning": "Díchumasaigh nuashonruithe uathoibríoch don aip bhreactha chun fadhbanna gan choinne a sheachaint.",
|
||||
"pressBackAgain": "Brúigh ar ais arís chun cealú",
|
||||
"openButton": "Oscailte",
|
||||
"notificationTitle": "Tá ReVanced Manager ag sileadh",
|
||||
"notificationText": "Tapáil chun filleadh ar an suiteálaí",
|
||||
"exportApkButtonTooltip": "APK paiteáilte onnmhairi",
|
||||
"exportLogButtonTooltip": "Logáil easpórtála",
|
||||
"screenshotDetected": "Braithíodh scáileán. Má tá tú ag iarraidh an log a roinnt, roinn cóip téacs ina ionad.\n\nCóipeáil log go gearrthaisce?",
|
||||
"copiedToClipboard": "Cóipeáladh an loga chuig an ngearrthaisce",
|
||||
"noExit": "Tá an suiteálaí fós ag rith, ní féidir leo imeacht..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Socruithe",
|
||||
"appearanceSectionTitle": "Dealramh",
|
||||
"teamSectionTitle": "Foireann",
|
||||
"debugSectionTitle": "Dífhabhtú",
|
||||
"advancedSectionTitle": "Ardleibhéal",
|
||||
"exportSectionTitle": "Iompórtáil & easpórtáil",
|
||||
"dataSectionTitle": "Foinsí sonraí",
|
||||
"themeModeLabel": "Téama aip",
|
||||
"systemThemeLabel": "Córas",
|
||||
"lightThemeLabel": "Solas",
|
||||
"darkThemeLabel": "Dorcha",
|
||||
"dynamicThemeLabel": "Ábhar Tú",
|
||||
"dynamicThemeHint": "Bain sult as eispéireas níos gaire do do ghléas",
|
||||
"languageLabel": "Teanga",
|
||||
"languageUpdated": "Teanga nuashonraithe",
|
||||
"sourcesLabel": "Foinsí malartacha",
|
||||
"sourcesLabelHint": "Cumraigh na foinsí malartacha le haghaidh Paistí ReVanced",
|
||||
"useAlternativeSources": "Úsáid foinsí malartacha",
|
||||
"useAlternativeSourcesHint": "Úsáid foinsí eile le haghaidh ReVanced Patches in ionad an API",
|
||||
"sourcesResetDialogTitle": "Athshocraigh",
|
||||
"sourcesResetDialogText": "An bhfuil tú cinnte gur mhaith leat do fhoinsí a athshocrú go dtí a luachanna réamhshocraithe?",
|
||||
"apiURLResetDialogText": "An bhfuil tú cinnte gur mhaith leat do URL API a athshocrú go dtí a luach réamhshocraithe?",
|
||||
"sourcesUpdateNote": "Nóta: Íoslódálfaidh sé seo Paistí ReVanced go huathoibríoch ó na foinsí eile.\n\nNascfaidh sé seo tú leis an bhfoinse eile.",
|
||||
"apiURLLabel": "UIRL API",
|
||||
"apiURLHint": "Cumraigh URL API de ReVanced Manager",
|
||||
"selectApiURL": "UIRL API",
|
||||
"orgPatchesLabel": "Eagraíocht paistí",
|
||||
"sourcesPatchesLabel": "Foinse paistí",
|
||||
"contributorsLabel": "Rannpháirtithe",
|
||||
"contributorsHint": "Liosta de rannpháirtithe ReVanced",
|
||||
"logsLabel": "Comhroinn logaí",
|
||||
"logsHint": "Comhroinn logaí ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Ceadaigh roghnú paiste a athrú",
|
||||
"enablePatchesSelectionHint": "Ná cuir cosc ar phaistí a roghnú nó a dhíroghnú",
|
||||
"enablePatchesSelectionWarningText": "D'fhéadfadh fadhbanna gan choinne a bheith mar thoradh ar rogha paistí a athrú\n\nCumasaigh ar aon chaoi?",
|
||||
"disablePatchesSelectionWarningText": "Tá tú ar tí roghnú paistí a athrú a dhíchumasú.\nCuirfear an rogha réamhshocraithe paistí ar ais.\n\nDíchumasú ar aon chaoi?",
|
||||
"autoUpdatePatchesLabel": "Paistí nuashonruithe uathoibríoch",
|
||||
"autoUpdatePatchesHint": "Nuashonraigh go huathoibríoch paistí go dtí an leagan is déanaí",
|
||||
"showUpdateDialogLabel": "Taispeáin dialóg nuashonrú",
|
||||
"showUpdateDialogHint": "Taispeáin dialóg nuair a bhíonn nuashonrú nua ar fáil",
|
||||
"universalPatchesLabel": "Taispeáin paistí uilíocha",
|
||||
"universalPatchesHint": "Taispeáin gach aip agus paistí uilíoch (féadfaidh sé an liosta aipeanna a mhoilliú)",
|
||||
"lastPatchedAppLabel": "Sábháil aip paisteáilte",
|
||||
"lastPatchedAppHint": "Sábháil an paiste deireanach le suiteáil nó a onnmhairiú",
|
||||
"versionCompatibilityCheckLabel": "Seiceáil comhoiriúnachta",
|
||||
"versionCompatibilityCheckHint": "Cosc a chur ar roghnú paistí nach bhfuil comhoiriúnach leis an leagan aip roghnaithe",
|
||||
"requireSuggestedAppVersionLabel": "Teastaíonn leagan aipe molta",
|
||||
"requireSuggestedAppVersionHint": "Cosc a chur ar aip a roghnú le leagan nach é an leagan molta",
|
||||
"requireSuggestedAppVersionDialogText": "D'fhéadfadh fadhbanna gan choinne a bheith mar thoradh ar aip nach é an leagan a mholtar a roghnú.\n\nAr mhaith leat dul ar aghaidh ar aon nós?",
|
||||
"aboutLabel": "Maidir",
|
||||
"snackbarMessage": "Cóipeáilte go gear",
|
||||
"restartAppForChanges": "Athosaigh an aip chun athruithe a chur i bhfeidhm",
|
||||
"deleteTempDirLabel": "Scrios comhaid shealadacha",
|
||||
"deleteTempDirHint": "Scrios comhaid shealadacha gan úsáid",
|
||||
"deletedTempDir": "Scriosta comhaid shealadacha",
|
||||
"exportSettingsLabel": "Socruithe easpórtála",
|
||||
"exportSettingsHint": "Easpórtáil socruithe go comhad JSON",
|
||||
"exportedSettings": "Socruithe easpórtáilte",
|
||||
"importSettingsLabel": "Socruithe a allmhairiú",
|
||||
"importSettingsHint": "Iompórtáil socruithe ó chomhad JSON",
|
||||
"importedSettings": "Socruithe allmhairithe",
|
||||
"exportPatchesLabel": "Rogha paiste easpórtála",
|
||||
"exportPatchesHint": "Roghnú paiste a easpórtáil chuig comhad JSON",
|
||||
"exportedPatches": "Easpórtáil an roghnú paistí",
|
||||
"noExportFileFound": "Gan roghnú paiste le heaspórtáil",
|
||||
"importPatchesLabel": "Iompórtáil roghnú paiste",
|
||||
"importPatchesHint": "Roghnú paiste a iompórtáil ó chomhad JSON",
|
||||
"importedPatches": "Rogha paiste allmhairithe",
|
||||
"resetStoredPatchesLabel": "Athshocraigh roghnú paiste",
|
||||
"resetStoredPatchesHint": "Athshocraigh an rogha paiste stóráilte",
|
||||
"resetStoredPatchesDialogTitle": "Athshocraigh roghnú paiste?",
|
||||
"resetStoredPatchesDialogText": "Cuirfear an rogha réamhshocraithe paistí ar ais.",
|
||||
"resetStoredPatches": "Athshocraíodh roghnú paiste",
|
||||
"resetStoredOptionsLabel": "Athshocraigh roghanna paiste",
|
||||
"resetStoredOptionsHint": "Athshocraigh gach rogha paiste",
|
||||
"resetStoredOptionsDialogTitle": "Athshocraigh roghanna paiste?",
|
||||
"resetStoredOptionsDialogText": "Bainfidh na roghanna paiste a athshocrú gach rogha sábháilte.",
|
||||
"resetStoredOptions": "Athshocraíodh roghanna",
|
||||
"deleteLogsLabel": "Glan Logaí",
|
||||
"deleteLogsHint": "Scrios na logaí bailithe de ReVanced Manager",
|
||||
"deletedLogs": "Logaí scriosta",
|
||||
"regenerateKeystoreLabel": "Athghin stór eochracha",
|
||||
"regenerateKeystoreHint": "Athghinigh an eochrstór a úsáidtear chun aipeanna a shíni",
|
||||
"regenerateKeystoreDialogTitle": "Athghin stór eochracha?",
|
||||
"regenerateKeystoreDialogText": "Ní bheidh aipeanna paiste sínithe leis an seanstór eochair in ann a nuashonrú a thuilleadh.",
|
||||
"regeneratedKeystore": "Keystore athghinithe",
|
||||
"exportKeystoreLabel": "Easpórtáil stór eochracha",
|
||||
"exportKeystoreHint": "Easpórtáil an eochrstór a úsáidtear chun feidhmchláir",
|
||||
"exportedKeystore": "Easpórtáil an stór eochair",
|
||||
"noKeystoreExportFileFound": "Níl aon stór eochair le easpórtáil",
|
||||
"importKeystoreLabel": "Iompórtáil stór eochracha",
|
||||
"importKeystoreHint": "Iompórtáil stór eochracha a úsáidtear chun aipeanna",
|
||||
"importedKeystore": "Keystore iompórtáilte",
|
||||
"selectKeystorePassword": "Pasfhocal stór eochracha",
|
||||
"selectKeystorePasswordHint": "Roghnaigh pasfhocal stór eochracha a úsáidtear chun aipeanna",
|
||||
"jsonSelectorErrorMessage": "Ní féidir comhad JSON roghnaithe a úsáid",
|
||||
"keystoreSelectorErrorMessage": "Ní féidir comhad stór eochracha roghnaithe a úsáid"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Eolas ar an aip",
|
||||
"openButton": "Oscailte",
|
||||
"installButton": "Suiteáil",
|
||||
"uninstallButton": "Díshuiteáil",
|
||||
"unmountButton": "Dícheangail",
|
||||
"exportButton": "Easpórtáil",
|
||||
"deleteButton": "Scrios",
|
||||
"rootDialogTitle": "Earráid",
|
||||
"lastPatchedAppDescription": "Is cúltaca é seo den aip a paisteadh go deireanach.",
|
||||
"unmountDialogText": "An bhfuil tú cinnte gur mhaith leat an aip seo a dícheangail?",
|
||||
"uninstallDialogText": "An bhfuil tú cinnte gur mhaith leat an aip seo a dhíshuiteáil?",
|
||||
"rootDialogText": "Suiteáladh an aip le cead sár-úsáideoirí, ach faoi láthair níl aon chead ag ReVanced Manager.\nTabhair ceadanna sárúsáideoirí ar dtús.",
|
||||
"removeAppDialogTitle": "Aip a scriosadh?",
|
||||
"removeAppDialogText": "An bhfuil tú cinnte gur mhaith leat an cúltaca seo a scriosadh?",
|
||||
"packageNameLabel": "Ainm an phacáiste",
|
||||
"installTypeLabel": "Cineál suiteála",
|
||||
"mountTypeLabel": "Ceangail",
|
||||
"regularTypeLabel": "Rialta",
|
||||
"patchedDateLabel": "Dáta paisteáilte",
|
||||
"appliedPatchesLabel": "Paistí feidhmithe",
|
||||
"sizeLabel": "Méid an chomhaid",
|
||||
"patchedDateHint": "${date} ag ${time}",
|
||||
"appliedPatchesHint": "${quantity} paistí curtha i bhfeidhm",
|
||||
"updateNotImplemented": "Níor cuireadh an ghné seo i bhfeidhm go fóill"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Rannpháirtithe"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Neamhoiriúnú leagan",
|
||||
"mount_no_root": "Gan rochtain fréimhe",
|
||||
"mount_missing_installation": "Níor aimsíodh an suiteáil",
|
||||
"status_failure_blocked": "Suiteáil blocáilte",
|
||||
"install_failed_verification_failure": "Theip ar fhíorú",
|
||||
"status_failure_invalid": "Suiteáil bailí",
|
||||
"install_failed_version_downgrade": "Ní féidir íosghrádú",
|
||||
"status_failure_conflict": "Coimhlint suiteála",
|
||||
"status_failure_storage": "Saincheist stórála suiteála",
|
||||
"status_failure_incompatible": "Suiteáil neamh-chomhoiriúnach",
|
||||
"status_failure_timeout": "Teorainn ama suiteála",
|
||||
"status_unknown": "Theip ar an suiteáil",
|
||||
"mount_version_mismatch_description": "Theip ar an suiteáil toisc go raibh an aip suiteáilte ina leagan difriúil ná an aip paiste.\n\nSuiteáil an leagan den aip atá á shuiteáil agat agus bain triail as arís.",
|
||||
"mount_no_root_description": "Theip ar an tsuiteáil toisc nár deonaíodh rochtain fhréamh.\n\nDeonaigh rochtain fhréamh ar ReVanced Manager agus bain triail eile as.",
|
||||
"mount_missing_installation_description": "Theip ar an suiteáil toisc nach raibh an aip neamhpháite á shuiteáil ar an bhfeiste seo d'fhonn suiteáil air.\n\nSuiteáil an aip gan patched sula gcuirtear é agus bain triail as arís.",
|
||||
"status_failure_timeout_description": "Thóg an tsuiteáil rófhada chun críochnú.\n\nAr mhaith leat triail a bhaint as arís?",
|
||||
"status_failure_storage_description": "Theip ar an suiteáil mar gheall ar stóráil neamhleor.\n\nSaor roinnt spáis agus bain triail as arís.",
|
||||
"status_failure_invalid_description": "Theip ar an suiteáil toisc go raibh an aip paiste neamhbhailí.\n\nDíshuiteáil an aip agus bain triail as arís?",
|
||||
"status_failure_incompatible_description": "Níl an aip comhoiriúnach leis an bhfeiste seo.\n\nÚsáid APK a dtacaíonn an gléas seo agus bain triail as arís.",
|
||||
"status_failure_conflict_description": "Cuireadh cosc ar an suiteáil trí shuiteáil an aip atá ann cheana féin.\n\nDíshuiteáil an aip suiteáilte agus iarracht arís?",
|
||||
"status_failure_blocked_description": "Chuir ${packageName} bac ar an suiteáil.\n\nCoigeartaigh do shocruithe slándála agus bain triail eile as.",
|
||||
"install_failed_verification_failure_description": "Theip ar an suiteáil mar gheall ar shaincheist fíoraithe.\n\nCoigeartaigh do shocruithe slándála agus bain triail eile as.",
|
||||
"install_failed_version_downgrade_description": "Theip ar an suiteáil toisc gur leagan níos ísle é an aip paiteáilte ná an aip suiteáilte.\n\nDíshuiteáil an aip agus bain triail as arís?",
|
||||
"status_unknown_description": "Theip ar an suiteáil mar gheall ar chúis anaithnid. Bain triail as arís."
|
||||
}
|
||||
}
|
19
assets/i18n/strings_gl_ES.i18n.json
Executable file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"navigationView": {},
|
||||
"homeView": {},
|
||||
"applicationItem": {},
|
||||
"latestCommitCard": {},
|
||||
"patcherView": {},
|
||||
"appSelectorCard": {},
|
||||
"patchSelectorCard": {},
|
||||
"socialMediaCard": {},
|
||||
"appSelectorView": {},
|
||||
"patchesSelectorView": {},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {},
|
||||
"installerView": {},
|
||||
"settingsView": {},
|
||||
"appInfoView": {},
|
||||
"contributorsView": {},
|
||||
"installErrorDialog": {}
|
||||
}
|
19
assets/i18n/strings_gu_IN.i18n.json
Executable file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"navigationView": {},
|
||||
"homeView": {},
|
||||
"applicationItem": {},
|
||||
"latestCommitCard": {},
|
||||
"patcherView": {},
|
||||
"appSelectorCard": {},
|
||||
"patchSelectorCard": {},
|
||||
"socialMediaCard": {},
|
||||
"appSelectorView": {},
|
||||
"patchesSelectorView": {},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {},
|
||||
"installerView": {},
|
||||
"settingsView": {},
|
||||
"appInfoView": {},
|
||||
"contributorsView": {},
|
||||
"installErrorDialog": {}
|
||||
}
|
260
assets/i18n/strings_he_IL.i18n.json
Executable file
@ -0,0 +1,260 @@
|
||||
{
|
||||
"okButton": "אישור",
|
||||
"cancelButton": "ביטול",
|
||||
"dismissButton": "התעלם",
|
||||
"quitButton": "יציאה",
|
||||
"updateButton": "עדכן",
|
||||
"suggested": "מוצעת: ${version}",
|
||||
"yesButton": "כן",
|
||||
"noButton": "לא",
|
||||
"warning": "אזהרה",
|
||||
"notice": "התראה",
|
||||
"noShowAgain": "אל תציג זאת שוב",
|
||||
"add": "הוסף",
|
||||
"remove": "הסר",
|
||||
"showChangelogButton": "הצגת יומן שינויים",
|
||||
"showUpdateButton": "הצג עדכון",
|
||||
"navigationView": {
|
||||
"dashboardTab": "לוח בקרה",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "הגדרות"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "רוענן בהצלחה",
|
||||
"widgetTitle": "לוח בקרה",
|
||||
"updatesSubtitle": "עדכונים",
|
||||
"lastPatchedAppSubtitle": "תיקון אפליקציה אחרון",
|
||||
"patchedSubtitle": "אפליקציות מותקנות",
|
||||
"changeLaterSubtitle": "ניתן לשנות זאת בהגדרות מאוחר יותר.",
|
||||
"noSavedAppFound": "לא נמצאו אפליקציות",
|
||||
"noInstallations": "אין אפליקציות מתוקנת מותקנות",
|
||||
"installUpdate": "המשך להתקין את העדכון?",
|
||||
"updateSheetTitle": "עדכן את ReVanced Manager",
|
||||
"updateDialogTitle": "עידכון חדש זמין",
|
||||
"updatePatchesSheetTitle": "עדכן את ReVanced Patches",
|
||||
"updateChangelogTitle": "היסטורית שינויים",
|
||||
"updateDialogText": "עדכון חדש זמין עבור ${file}.\n\nהגרסה המותקנת כרגע היא ${version}.",
|
||||
"downloadConsentDialogTitle": "להוריד קבצי עזר?",
|
||||
"downloadConsentDialogText": "ReVanced Manager צריך להוריד קבצי עזר על מנת לעבוד כמו שצריך.",
|
||||
"downloadConsentDialogText2": "זה יחבר אותך ל${url}.",
|
||||
"downloadingMessage": "מוריד עדכון...",
|
||||
"downloadedMessage": "עדכון הורד",
|
||||
"installingMessage": "מתקין עדכון...",
|
||||
"errorDownloadMessage": "הורדת קובץ העדכון נכשלה",
|
||||
"errorInstallMessage": "לא ניתן להתקין את העדכון",
|
||||
"noConnection": "אין חיבור לאינטרנט"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "מידע"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "טוען...",
|
||||
"timeagoLabel": "לפני ${time}"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "תיקון",
|
||||
"incompatibleArchWarningDialogText": "תיקון בארכיטקטורה זו לא נתמך עדיין ועלול להיכשל. להמשיך בכל זאת?",
|
||||
"requiredOptionDialogText": "כמה אפשרויות תיקון חייבות להיקבע."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "בחר אפליקציה",
|
||||
"widgetTitleSelected": "אפליקציה שנבחרה",
|
||||
"widgetSubtitle": "לא נבחרה אפליקציה",
|
||||
"noAppsLabel": "לא נמצאו יישומים",
|
||||
"anyVersion": "כל גרסה"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "בחר תיקונים",
|
||||
"widgetTitleSelected": "תיקונים שנבחרו",
|
||||
"widgetSubtitle": "קודם בחר אפליקציה",
|
||||
"widgetEmptySubtitle": "לא נבחרו תיקונים"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "רשתות חברתיות",
|
||||
"widgetSubtitle": "אנחנו מחוברים!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "בחר אפליקציה",
|
||||
"searchBarHint": "חיפוש אפליקציה",
|
||||
"storageButton": "אחסון",
|
||||
"selectFromStorageButton": "בחירה מהאחסון",
|
||||
"errorMessage": "לא ניתן להשתמש ביישום שנבחר",
|
||||
"downloadToast": "פונקציית ההורדה אינה זמינה כעת",
|
||||
"requireSuggestedAppVersionDialogText": "גרסת האפליקציה שבחרת אינה תואמת את הגרסה המומלצת, מה שעלול להוביל לבעיות בלתי צפויות. אנא השתמש בגרסה המומלצת.\n\nהגרסה שנבחרה: ${selected}\nהגרסה המומלצת: ${suggested}\n\nכדי להמשיך בכל זאת, כבה את \"דרוש גרסת אפליקציה מומלצת\" בהגדרות.",
|
||||
"featureNotAvailable": "תכונה לא מיושמת"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "בחר תיקונים",
|
||||
"searchBarHint": "חפש תיקונים",
|
||||
"universalPatches": "תיקונים אוניברסליים",
|
||||
"newPatches": "תיקונים חדשים",
|
||||
"patches": "תיקונים",
|
||||
"doneButton": "בוצע",
|
||||
"defaultChip": "ברירת מחדל",
|
||||
"defaultTooltip": "בחר את כל תיקוני ברירת המחדל",
|
||||
"noneChip": "כלום",
|
||||
"noneTooltip": "בטל את בחירת כל התיקונים",
|
||||
"loadPatchesSelection": "טען בחירת תיקונים",
|
||||
"noSavedPatches": "אין תיקונים שמורים עבור האפליקציה שנבחרה.\nלחץ על בוצע כדי לשמור את הבחירה הנוכחית.",
|
||||
"noPatchesFound": "לא נמצאו תיקונים ליישום שנבחר",
|
||||
"setRequiredOption": "תיקונים מסויימים דורשים שאופציות ייקבעו:\n\n${patches}\n\nאנא קבע אותן לפני המשכה."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "ערך מותאם אישית",
|
||||
"setToNull": "השמה לnull",
|
||||
"viewTitle": "אפשרויות תיקון",
|
||||
"saveOptions": "שמור",
|
||||
"unselectPatch": "בטל את בחירת התיקון",
|
||||
"tooltip": "אפשרויות קלט נוספות",
|
||||
"selectFilePath": "בחר נתיב קובץ",
|
||||
"selectFolder": "בחר תיקייה",
|
||||
"unsupportedOption": "האפשרות הזו אינה נתמכת",
|
||||
"requiredOptionNull": "האפשרויות הבאות חייבות להיקבע:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "בחירת תיקון זה עלול לגרום לשגיאות תיקון.\nגרסת יישום: ${packageVersion}\nגרסאות נתמכות:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "תיקון זה אינו נתמך עבור גרסה זו של האפליקציה.",
|
||||
"unsupportedRequiredOption": "התיקון כולל אפשרות דרושה שאינה נתמכת על ידי אפליקציה זו",
|
||||
"patchesChangeWarningDialogText": "מומלץ להשתמש בברירת המחדל של הטלאי והאפשרויות. שינוי עלול לגרום לבעיות בלתי צפויות.\n\nתצטרך להפעיל את \"אפשר שינוי בחירת טלאי\" בהגדרות לפני שתשנה כל בחירת טלאי.",
|
||||
"patchesChangeWarningDialogButton": "השתמש בבחירה ברירת המחדל"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "בחר סוג התקנה",
|
||||
"installButton": "התקן",
|
||||
"installRootType": "טען",
|
||||
"installNonRootType": "רגיל",
|
||||
"warning": "השבת עדכונים אוטומטיים עבור באפליקציה המתוקנת כדי למנוע בעיות בלתי צפויות.",
|
||||
"pressBackAgain": "לחץ שוב כדי לבטל",
|
||||
"openButton": "פתח",
|
||||
"notificationTitle": "ReVanced Manager מבצע תיקון",
|
||||
"notificationText": "לחץ כדי לחזור להתקנה",
|
||||
"exportApkButtonTooltip": "יצא APK מתוקן",
|
||||
"exportLogButtonTooltip": "יצא תיעוד אירועים",
|
||||
"screenshotDetected": "צילום מסך זוהה. אם אתה מנסה לשתף את תיעוד האירועים, אנא שתף העתק טקסט במקום.\n\nהעתקת תיעוד האירועים ללוח הגזירים?",
|
||||
"copiedToClipboard": "תיעוד האירועים הועתק ללוח הגזירים",
|
||||
"noExit": "תוכנית ההתקנה עדיין פועלת, לא ניתן לצאת..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "הגדרות",
|
||||
"appearanceSectionTitle": "מראה",
|
||||
"teamSectionTitle": "צוות",
|
||||
"debugSectionTitle": "איתור באגים",
|
||||
"advancedSectionTitle": "הגדרות מתקדמות",
|
||||
"exportSectionTitle": "יבוא ויצוא",
|
||||
"dataSectionTitle": "מקורות מידע",
|
||||
"themeModeLabel": "ערכת הנושא של האפליקציה",
|
||||
"systemThemeLabel": "מערכת",
|
||||
"lightThemeLabel": "בהיר",
|
||||
"darkThemeLabel": "מצב כהה",
|
||||
"dynamicThemeLabel": "Material you",
|
||||
"dynamicThemeHint": "תהנה/י מחוויה קרובה יותר למכשיר שלך",
|
||||
"languageLabel": "שפה",
|
||||
"languageUpdated": "עדכוני שפה",
|
||||
"sourcesResetDialogTitle": "איפוס",
|
||||
"sourcesResetDialogText": "האם אתה בטוח שברצונך לאפס את המקורות לערכי ברירת המחדל שלהם?",
|
||||
"apiURLResetDialogText": "האם אתה בטוח שברצונך לאפס את כתובת הAPI לערך ברירת המחדל?",
|
||||
"apiURLLabel": "כתובת API",
|
||||
"apiURLHint": "הגדר את כתובת ה-API של ReVanced Manager",
|
||||
"selectApiURL": "כתובת API",
|
||||
"orgPatchesLabel": "ארגון תיקונים",
|
||||
"sourcesPatchesLabel": "מקור התיקונים",
|
||||
"contributorsLabel": "תורמים",
|
||||
"contributorsHint": "רשימת התורמים לReVanced",
|
||||
"logsLabel": "שתף לוג",
|
||||
"logsHint": "שתף ReVanced Manager לוג",
|
||||
"disablePatchesSelectionWarningText": "אתה עומד לכבות את שינוי בחירת התיקונים.\nהבחירה ברירת המחדל של התיקונים תשוחזר.\n\nלכבות בכל מקרה?",
|
||||
"autoUpdatePatchesLabel": "עדכון תיקונים באופן אוטומטי",
|
||||
"autoUpdatePatchesHint": "עדכן אוטומטית את התיקונים לגרסה העדכנית ביותר",
|
||||
"showUpdateDialogLabel": "הצג תיבת עדכון",
|
||||
"universalPatchesLabel": "הצג תיקונים אוניברסליים",
|
||||
"universalPatchesHint": "הצג את כל האפליקציות והתיקונים האוניברסליים (עשוי להאט את רשימת האפליקציות)",
|
||||
"versionCompatibilityCheckLabel": "בדיקת תאימות לגרסה",
|
||||
"aboutLabel": "אודות",
|
||||
"snackbarMessage": "הועתק ללוח",
|
||||
"restartAppForChanges": "הפעל מחדש את היישום כדי להחיל את השינויים",
|
||||
"deleteTempDirLabel": "מחק קבצים זמניים",
|
||||
"deleteTempDirHint": "מחק קבצים זמניים שאינם בשימוש",
|
||||
"deletedTempDir": "קבצים זמניים נמחקו",
|
||||
"exportPatchesLabel": "ייצא תיקונים נבחרים",
|
||||
"exportPatchesHint": "ייצא תיקונים נבחרים לקובץ JSON",
|
||||
"exportedPatches": "תיקונים נבחרים יוצאו",
|
||||
"noExportFileFound": "אין תיקונים נבחרים לייצוא",
|
||||
"importPatchesLabel": "ייבא תיקונים נבחרים",
|
||||
"importPatchesHint": "ייבא תיקונים נבחרים מקובץ JSON",
|
||||
"importedPatches": "תיקונים נבחרים יובאו",
|
||||
"resetStoredPatchesLabel": "אפס בחירת תיקונים",
|
||||
"resetStoredPatchesHint": "אפס את בחירת התיקונים המאוחסנים",
|
||||
"resetStoredPatchesDialogTitle": "אפס בחירת תיקונים?",
|
||||
"resetStoredPatchesDialogText": "ברירת המחדל של בחירת תיקונים תשוחזר.",
|
||||
"resetStoredPatches": "בחירת התיקונים אופסה",
|
||||
"resetStoredOptionsLabel": "אפס אפשרויות תיקונים",
|
||||
"resetStoredOptionsHint": "אפס את כל אפשרויות התיקונים",
|
||||
"resetStoredOptionsDialogTitle": "אפס אפשרויות תיקונים?",
|
||||
"resetStoredOptionsDialogText": "איפוס אפשרויות התיקון יסיר את כל האפשרויות השמורות.",
|
||||
"resetStoredOptions": "האפשרויות אופסו",
|
||||
"deleteLogsLabel": "נקה יומנים",
|
||||
"deleteLogsHint": "מחק יומני ReVanced Manager שנאספו",
|
||||
"deletedLogs": "תיעוד אירועים נחמק",
|
||||
"regenerateKeystoreLabel": "יצירה חוזרת של מפתח-האחסון",
|
||||
"regenerateKeystoreDialogTitle": "יצירה חוזרת של מפתח-האחסון?",
|
||||
"regeneratedKeystore": "מפתח-אחסון נוצר מחדש",
|
||||
"exportKeystoreLabel": "יצוא מפתח-אחסון",
|
||||
"exportedKeystore": "מפתח-אחסון מיוצא",
|
||||
"noKeystoreExportFileFound": "אין מפתח-אחסון כדי ליציא",
|
||||
"importKeystoreLabel": "יבוא מפתח-אחסון",
|
||||
"importedKeystore": "מפתח-אחסון מיובא",
|
||||
"selectKeystorePassword": "סיסמת מפתח-אחסון",
|
||||
"jsonSelectorErrorMessage": "לא ניתן להשתמש בקובץ JSON שנבחר"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "מידע אפליקציה",
|
||||
"openButton": "פתח",
|
||||
"installButton": "התקן",
|
||||
"uninstallButton": "הסר התקנה",
|
||||
"exportButton": "ייצוא",
|
||||
"deleteButton": "למחוק",
|
||||
"rootDialogTitle": "שגיאה",
|
||||
"uninstallDialogText": "האם אתה בטוח שברצונך להסיר את האפליקציה הזו?",
|
||||
"rootDialogText": "האפליקציה הותקנה עם הרשאות משתמש-על, אך כרגע ל-ReVanced Manager אין הרשאות. אנא הענק תחילה הרשאות משתמש-על.",
|
||||
"removeAppDialogText": "האם אתה בטוח שאתה רוצה למחוק קובץ גיבוי זה?",
|
||||
"packageNameLabel": "שם חבילה",
|
||||
"installTypeLabel": "סוג התקנה",
|
||||
"mountTypeLabel": "טען",
|
||||
"regularTypeLabel": "רגיל",
|
||||
"patchedDateLabel": "תאריך תיקון",
|
||||
"appliedPatchesLabel": "תיקונים הוחלו",
|
||||
"sizeLabel": "גודל הקובץ",
|
||||
"patchedDateHint": "${date} ב־${time}",
|
||||
"appliedPatchesHint": "${quantity} שינויים הוחלו",
|
||||
"updateNotImplemented": "תכונה זו טרם יושמה"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "תורמים"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "אי התאמה של הגירסה",
|
||||
"mount_no_root": "אין גישת שורש (רוט)",
|
||||
"mount_missing_installation": "ההתקנה לא נמצאה",
|
||||
"status_failure_blocked": "ההתקנה נחסמה",
|
||||
"install_failed_verification_failure": "האימות נכשל",
|
||||
"status_failure_invalid": "התקנה לא חוקית",
|
||||
"install_failed_version_downgrade": "לא ניתן לשדרג לאחור",
|
||||
"status_failure_conflict": "התנגשות בהתקנה",
|
||||
"status_failure_storage": "בעיית אחסון בהתקנה",
|
||||
"status_failure_incompatible": "התקנה לא תואמת",
|
||||
"status_unknown": "ההתקנה נכשלה",
|
||||
"mount_version_mismatch_description": "ההתקנה נכשלה בגלל שהאפליקציה המותקנת היא גרסה שונה מהאפליקציה המתוקנת.\n\nהתקן את גרסת האפליקציה שאתה מעלה ונסה שוב.",
|
||||
"mount_no_root_description": "ההתקנה נכשלה בגלל שלא ניתנה גישת שורש.\n\nהענק גישת שורש ל-ReVanced Manager ונסה שוב.",
|
||||
"mount_missing_installation_description": "ההתקנה נכשלה בגלל שהאפליקציה שלא תוקנה לא הותקנה במכשיר זה כדי לעלות עליה.\n\nהתקן את האפליקציה שלא תוקנה לפני ההרכבה ונסה שוב.",
|
||||
"status_failure_timeout_description": "ההתקנה לקחה יותר מדי זמן לסיום.\n\nהאם ברצונך לנסות שוב?",
|
||||
"status_failure_storage_description": "ההתקנה נכשלה עקב אחסון לא מספיק.\n\nפנה קצת מקום ונסה שוב.",
|
||||
"status_failure_invalid_description": "ההתקנה נכשלה בגלל שהאפליקציה המתוקנת לא חוקית.\n\nלהסיר את האפליקציה ולנסות שוב?",
|
||||
"status_failure_incompatible_description": "האפליקציה אינה תואמת למכשיר זה.\n\nהשתמש ב-APK שנתמך על ידי מכשיר זה ונסה שוב.",
|
||||
"status_failure_conflict_description": "ההתקנה נמנעה על ידי התקנה קיימת של האפליקציה.\n\nלהסיר את ההתקנה של האפליקציה המותקנת ולנסות שוב?",
|
||||
"status_failure_blocked_description": "ההתקנה נחסמה על ידי ${packageName}.\n\nשנה את הגדרות האבטחה שלך ונסה שוב.",
|
||||
"install_failed_verification_failure_description": "ההתקנה נכשלה עקב בעיית אימות.\n\nשנה את הגדרות האבטחה שלך ונסה שוב.",
|
||||
"install_failed_version_downgrade_description": "ההתקנה נכשלה בגלל שהאפליקציה המתוקנת היא גרסה נמוכה יותר מהאפליקציה המותקנת.\n\nלהסיר את האפליקציה ולנסות שוב?",
|
||||
"status_unknown_description": "ההתקנה נכשלה מסיבה לא ידועה. בבקשה נסה שוב."
|
||||
}
|
||||
}
|
147
assets/i18n/strings_hi_IN.i18n.json
Executable file
@ -0,0 +1,147 @@
|
||||
{
|
||||
"okButton": "ठीक है",
|
||||
"cancelButton": "रद्द करें",
|
||||
"dismissButton": "बंद करें",
|
||||
"quitButton": "छोड़ें",
|
||||
"updateButton": "अपडेट करें",
|
||||
"suggested": "सुझाया गया: ${version}",
|
||||
"yesButton": "हाँ",
|
||||
"noButton": "नहीं",
|
||||
"warning": "चेतावनी",
|
||||
"notice": "सूचना",
|
||||
"noShowAgain": "इसे पुनः न दिखाएँ",
|
||||
"add": "ऐड करें",
|
||||
"remove": "हटाएं",
|
||||
"showChangelogButton": "बदलाव दिखाएं",
|
||||
"showUpdateButton": "अपडेट देखें ",
|
||||
"navigationView": {
|
||||
"dashboardTab": "नियंत्रण-पट्ट",
|
||||
"patcherTab": "पैचर",
|
||||
"settingsTab": "सेटिंग्स"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "रीफ्रेश हो गया है",
|
||||
"widgetTitle": "नियंत्रण-पट्ट",
|
||||
"updatesSubtitle": "अपडेट",
|
||||
"changeLaterSubtitle": "आप बाद में सेटिंग में जाकर इसे बदल सकते हैं।",
|
||||
"noInstallations": "कोई पैच किया गया एप्लिकेशन इंस्टॉल नहीं किया गया",
|
||||
"installUpdate": "अपडेट इंस्टॉल करना जारी रखें?",
|
||||
"updateSheetTitle": "ReVanced Manager अपडेट करें ",
|
||||
"updateDialogTitle": "नई अपडेट उपलब्ध है",
|
||||
"updatePatchesSheetTitle": "ReVanced Patches अपडेट करें",
|
||||
"updateChangelogTitle": "परिवर्तन पत्र",
|
||||
"downloadingMessage": "अपडेट डाउनलोड हो रहा है",
|
||||
"downloadedMessage": "अपडेट डाउनलोड हो चुकी है",
|
||||
"installingMessage": "अपडेट इंस्टॉल हो रहा है",
|
||||
"errorDownloadMessage": "अपडेट डाउनलोड करने मे असफल",
|
||||
"errorInstallMessage": "अपडेट इंस्टॉल करने में असफल",
|
||||
"noConnection": "कोई इंटरनेट कनेक्शन नहीं"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "जानकारी"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "लोड हो रहा है...",
|
||||
"timeagoLabel": "${time} पहले"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "पैचर",
|
||||
"patchButton": "पैच"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"noAppsLabel": "कोई एप्लिकेशन नहीं मिला।"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "पैच चुने",
|
||||
"widgetTitleSelected": "चुने हुए पैच",
|
||||
"widgetSubtitle": "पहले किसी एप्लिकेशन को चुने",
|
||||
"widgetEmptySubtitle": "कोई पैच चुना हुआ नहीं"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "सामाजिक",
|
||||
"widgetSubtitle": "हम ऑनलाइन है"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"storageButton": "संग्रहण",
|
||||
"selectFromStorageButton": "स्टोरेज से चुनें",
|
||||
"errorMessage": "चुने हुए ऐप्लकैशन को उपयोग करने मे असमर्थ",
|
||||
"downloadToast": "डाउनलोड फ़ंक्शन वर्तमान में अनुपलब्ध है",
|
||||
"featureNotAvailable": "कार्रवाई लागू नहीं किया गया है"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "पैच चुने",
|
||||
"searchBarHint": "पैच खोजे",
|
||||
"doneButton": "पूरा हुआ",
|
||||
"defaultChip": "डिफॉल्ट",
|
||||
"defaultTooltip": "सभी डिफ़ॉल्ट पैच का चयन करें",
|
||||
"noneChip": "कुछ नहीं",
|
||||
"noneTooltip": "सभी पैच अचयनित करें",
|
||||
"noPatchesFound": "चुने हुए ऐप्लकैशन के लिए कोई पैच नहीं मिले"
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"saveOptions": "सेव करें",
|
||||
"selectFolder": "फ़ोल्डर चुनें"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "इस पैच को चुनने से पैचिंग मे त्रुटि हो सकती है। \n\nएप वर्ज़न: ${packageVersion}\nसमर्थित वर्ज़न:\n${supportedVersions}"
|
||||
},
|
||||
"installerView": {
|
||||
"installButton": "इंस्टॉल करे",
|
||||
"openButton": "खोलें",
|
||||
"notificationTitle": "ReVanced Manager पैच कर रहा है",
|
||||
"notificationText": "इंस्टॉल कर्ता पर जाने के लिए टैप करे",
|
||||
"noExit": "इंस्टॉल कर्ता अब भी चल रहा है, बाहर नहीं निकल सकते"
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "सेटिंग्स",
|
||||
"appearanceSectionTitle": "स्वरूप",
|
||||
"teamSectionTitle": "टीम",
|
||||
"advancedSectionTitle": "एडवांसड",
|
||||
"exportSectionTitle": "आयात और निर्यात",
|
||||
"lightThemeLabel": "रोशनी",
|
||||
"darkThemeLabel": "डार्क मोड",
|
||||
"dynamicThemeLabel": "मेटीरियल यू",
|
||||
"dynamicThemeHint": "अपने डिवाइस के करीब एक अनुभव का आनंद लें",
|
||||
"languageLabel": "भाषा",
|
||||
"sourcesResetDialogTitle": "रीसेट करें",
|
||||
"apiURLLabel": "API URL",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "पैच संगठन",
|
||||
"sourcesPatchesLabel": "पैच स्रोत",
|
||||
"contributorsLabel": "योगदान कर्ता",
|
||||
"contributorsHint": "ReVanced के योगदानकर्ताओ की सूची",
|
||||
"aboutLabel": "विवरण",
|
||||
"snackbarMessage": "क्लिपबोर्ड में कॉपी हो गया है",
|
||||
"restartAppForChanges": "बदलाव लागू करने के लिए ऐप रीस्टार्ट करें",
|
||||
"deleteTempDirLabel": "अस्थाई फ़ाइलें मिटायें",
|
||||
"deleteTempDirHint": "अप्रयुक्त अस्थायी फ़ाइलों को हटाएं",
|
||||
"deletedTempDir": "क्षणिक फ़ाईल मिटाए गए।",
|
||||
"deleteLogsLabel": "लोग साफ़ करे",
|
||||
"deletedLogs": "लॉग हटा दिए गए",
|
||||
"exportKeystoreLabel": "निर्यात कीस्टोर",
|
||||
"exportedKeystore": "कीस्टोर निर्यात किया गया",
|
||||
"noKeystoreExportFileFound": "निर्यात करने के लिए कोई कीस्टोर नहीं",
|
||||
"importKeystoreLabel": "कीस्टोर आयात करें",
|
||||
"importedKeystore": "कीस्टोर आयात किया गया",
|
||||
"jsonSelectorErrorMessage": "चुने हुए JSON फाइल को उपयोग करने मे असमर्थ"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "ऐप की जानकारी",
|
||||
"openButton": "खोलें",
|
||||
"installButton": "इंस्टॉल करे",
|
||||
"uninstallButton": "अनइंस्टॉल करें",
|
||||
"rootDialogTitle": "त्रुटि",
|
||||
"rootDialogText": "एप्प superuser परमिशन के साथ इनस्टॉल हुआ था, परन्तु ReVanced मैनेजर के पास कोई परमिशन नहीं है। पहले superuser परमिशन इनेबल करे।",
|
||||
"packageNameLabel": "पैकेज का नाम",
|
||||
"installTypeLabel": "इंस्टॉल का प्रकार",
|
||||
"patchedDateLabel": "पैच करने की तिथि",
|
||||
"appliedPatchesLabel": "लागू किए हुआ पैच",
|
||||
"patchedDateHint": "${date} ${time} पर",
|
||||
"appliedPatchesHint": "${quantity} लागू किए गए पैच",
|
||||
"updateNotImplemented": "यह फीचर फिलहाल इम्प्लीमेंट नहीं हुआ है"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "योगदान कर्ता"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
}
|
136
assets/i18n/strings_hr_HR.i18n.json
Executable file
@ -0,0 +1,136 @@
|
||||
{
|
||||
"okButton": "U redu",
|
||||
"cancelButton": "Poništi",
|
||||
"dismissButton": "Odbaci",
|
||||
"quitButton": "Izađi",
|
||||
"updateButton": "Ažuriraj",
|
||||
"suggested": "Preporučena verzija: ${version}",
|
||||
"yesButton": "Da",
|
||||
"noButton": "Ne",
|
||||
"warning": "Upozorenje",
|
||||
"notice": "Napomena",
|
||||
"noShowAgain": "Ne prikazuj ponovno",
|
||||
"add": "Dodaj",
|
||||
"remove": "Ukloni",
|
||||
"showChangelogButton": "Prikaži napomene o izdanju",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Nadzorna ploča",
|
||||
"patcherTab": "Zakrpe",
|
||||
"settingsTab": "Postavke"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Uspješno osvježeno",
|
||||
"widgetTitle": "Nadzorna ploča",
|
||||
"updatesSubtitle": "Ažuriranja",
|
||||
"noInstallations": "Nema instaliranih zakrpanih aplikacija",
|
||||
"installUpdate": "Nastaviti s instalacijom ažuriranja?",
|
||||
"updateChangelogTitle": "Zapisnik promjena",
|
||||
"downloadingMessage": "Preuzimanje ažuriranja...",
|
||||
"downloadedMessage": "Ažuriranje je preuzeto",
|
||||
"installingMessage": "Instaliranje ažuriranja...",
|
||||
"errorDownloadMessage": "Nije moguće preuzeti ažuriranje",
|
||||
"errorInstallMessage": "Nije moguće instalirati ažuriranje",
|
||||
"noConnection": "Nema internetske veze"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Informacije"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Učitavanje...",
|
||||
"timeagoLabel": "Prije ${time}"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Zakrpe",
|
||||
"patchButton": "Zakrpi"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"noAppsLabel": "Nije pronađena nijedna aplikacija"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Odaberite zakrpe",
|
||||
"widgetTitleSelected": "Odabrane zakrpe",
|
||||
"widgetSubtitle": "Najprije odaberite aplikaciju",
|
||||
"widgetEmptySubtitle": "Nema odabranih zakrpa"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Društvene mreže",
|
||||
"widgetSubtitle": "Pronađite nas ovdje!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"storageButton": "Pohrana",
|
||||
"selectFromStorageButton": "Odaberi iz pohrane",
|
||||
"errorMessage": "Nije moguće koristiti odabranu aplikaciju",
|
||||
"downloadToast": "Funkcija preuzimanja još nije dostupna",
|
||||
"featureNotAvailable": "Ova značajka još nije ugrađena"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Odaberite zakrpe",
|
||||
"searchBarHint": "Pretraživanje zakrpa",
|
||||
"doneButton": "Završeno",
|
||||
"defaultChip": "Zadano",
|
||||
"defaultTooltip": "Odaberi sve zadane zakrpe",
|
||||
"noneChip": "Ništa",
|
||||
"noneTooltip": "Poništi odabir svih zakrpa",
|
||||
"noPatchesFound": "Za odabranu aplikaciju nije pronađena nijedna zakrpa"
|
||||
},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Odabirom ove zakrpe mogu se pojaviti greške pri krpanju.\n\nVerzija aplikacije: ${packageVersion}\nPodržane verzije:\n${supportedVersions}"
|
||||
},
|
||||
"installerView": {
|
||||
"installButton": "Instaliraj",
|
||||
"openButton": "Otvori",
|
||||
"notificationTitle": "Krpanje u tijeku",
|
||||
"notificationText": "Dodirnite za povratak na instalacijski program",
|
||||
"noExit": "Instalacija je u tijeku, nije moguće izaći..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Postavke",
|
||||
"appearanceSectionTitle": "Izgled",
|
||||
"teamSectionTitle": "Naš tim",
|
||||
"advancedSectionTitle": "Napredno",
|
||||
"exportSectionTitle": "Uvezi / izvezi",
|
||||
"darkThemeLabel": "Tamni način",
|
||||
"dynamicThemeHint": "Uživajte u iskustvu prilagođenom vašem uređaju",
|
||||
"languageLabel": "Jezik",
|
||||
"sourcesResetDialogTitle": "Ponovno postavljanje",
|
||||
"apiURLLabel": "API URL",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "Autori zakrpa",
|
||||
"sourcesPatchesLabel": "Izvor zakrpa",
|
||||
"contributorsLabel": "Pridonositelji",
|
||||
"contributorsHint": "Popis suradnika ReVanceda",
|
||||
"aboutLabel": "O aplikaciji",
|
||||
"snackbarMessage": "Kopirano u međuspremnik",
|
||||
"restartAppForChanges": "Za primjenu promjena ponovo pokreni program",
|
||||
"deleteTempDirLabel": "Izbriši privremene datoteke",
|
||||
"deleteTempDirHint": "Izbrišite nekorištene privremene datoteke",
|
||||
"deletedTempDir": "Privremene datoteke su izbrisane",
|
||||
"deletedLogs": "Zapisnici su izbrisani",
|
||||
"exportKeystoreLabel": "Izvezi spremište ključeva",
|
||||
"exportedKeystore": "Spremište ključeva je izvezeno",
|
||||
"noKeystoreExportFileFound": "Nema spremišta ključeva za izvoz",
|
||||
"importKeystoreLabel": "Uvezi spremište ključeva",
|
||||
"importedKeystore": "Spremište ključeva je uvezeno",
|
||||
"jsonSelectorErrorMessage": "Nije moguće koristiti odabranu JSON datoteku"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "O aplikaciji",
|
||||
"openButton": "Otvori",
|
||||
"installButton": "Instaliraj",
|
||||
"uninstallButton": "Deinstaliraj",
|
||||
"rootDialogTitle": "Greška",
|
||||
"rootDialogText": "Aplikacija je bila instalirana s superkorisničkom dopuštenosti, ali trenutno ReVanced Upravitelj nema dopuštenja.\nPrvo dodijelite superkorisničko dopuštenje.",
|
||||
"packageNameLabel": "Naziv paketa",
|
||||
"installTypeLabel": "Vrsta instalacije",
|
||||
"patchedDateLabel": "Zakrpano",
|
||||
"appliedPatchesLabel": "Primijenjene zakrpe",
|
||||
"patchedDateHint": "${date} u ${time}",
|
||||
"appliedPatchesHint": "${quantity} primijenjenih zakrpa",
|
||||
"updateNotImplemented": "Ova značajka još nije implementirana"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Pridonositelji"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
}
|