Compare commits
730 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4c51ad3650 | ||
|
|
a0c2a17bab | ||
|
|
851b06b0d2 | ||
|
|
57018a65df | ||
|
|
b44419133a | ||
|
|
8961cf9044 | ||
|
|
5139873f79 | ||
|
|
5caa79eb0d | ||
|
|
9552b2ebc5 | ||
|
|
7e3afe0cb2 | ||
|
|
7b7d91d661 | ||
|
|
44b8d4ceee | ||
|
|
aaa97ebb71 | ||
|
|
d99e5af384 | ||
|
|
c47c7c0a88 | ||
|
|
3e32c0fd90 | ||
|
|
a45d9598cc | ||
|
|
8c8df698d4 | ||
|
|
8d0d782ab5 | ||
|
|
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 | ||
|
|
a290791410 |
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 and not related to patching errors or patches
|
||||
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
@@ -1,2 +1,2 @@
|
||||
firstPRMergeComment: >
|
||||
Thank you for contributing to ReVanced. Join us on [Discord](https://revanced.app/discord) if you want to receive a contributor role.
|
||||
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"
|
||||
32
.github/workflows/analyze.yml
vendored
@@ -1,32 +0,0 @@
|
||||
name: Analyze Code
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "main", "dev" ]
|
||||
paths:
|
||||
- "**.dart"
|
||||
- ".github/workflows/analyze.yml"
|
||||
pull_request:
|
||||
branches: [ "main", "dev" ]
|
||||
paths:
|
||||
- "**.dart"
|
||||
- ".github/workflows/analyze.yml"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Setup Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: 'stable'
|
||||
cache: true
|
||||
- name: Install Flutter dependencies
|
||||
run: flutter pub get
|
||||
- name: Generate files with Builder
|
||||
run: flutter packages pub run build_runner build --delete-conflicting-outputs
|
||||
- name: Analyze code
|
||||
uses: ValentinVignal/action-dart-analyze@v0.15
|
||||
with:
|
||||
fail-on: warning
|
||||
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
|
||||
46
.github/workflows/crowdin.yml
vendored
@@ -1,46 +0,0 @@
|
||||
name: Sync Crowdin translations
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "dev"
|
||||
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@v3
|
||||
|
||||
- name: Crowdin
|
||||
uses: crowdin/github-action@v1
|
||||
with:
|
||||
config: crowdin.yml
|
||||
upload_sources: true
|
||||
upload_translations: false
|
||||
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
|
||||
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 }}
|
||||
41
.github/workflows/pull-request-build.yml
vendored
@@ -1,41 +0,0 @@
|
||||
name: PR Build
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
# Make sure the release step uses its own credentials:
|
||||
# https://github.com/cycjimmy/semantic-release-action#private-packages
|
||||
persist-credentials: false
|
||||
fetch-depth: 0
|
||||
- name: Setup JDK
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: '17'
|
||||
distribution: 'zulu'
|
||||
cache: 'gradle'
|
||||
- name: Setup Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: 'stable'
|
||||
cache: true
|
||||
- name: Install Flutter dependencies
|
||||
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
|
||||
- name: Upload build
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: revanced-manager
|
||||
path: build/app/outputs/flutter-apk/app-release.apk
|
||||
50
.github/workflows/release-build.yml
vendored
@@ -1,50 +0,0 @@
|
||||
name: "Release Build"
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Set env
|
||||
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
|
||||
- name: Set up JDK 12
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: "12"
|
||||
distribution: "zulu"
|
||||
- uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: "stable"
|
||||
- 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: ilharp/sign-android-release@v1
|
||||
with:
|
||||
releaseDir: build/app/outputs/apk/release
|
||||
signingKey: ${{ secrets.SIGNING_KEYSTORE }}
|
||||
keyStorePassword: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
|
||||
keyAlias: ${{ secrets.SIGNING_KEY_ALIAS }}
|
||||
keyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }}
|
||||
- name: Add version to APK
|
||||
run: mv ${{steps.sign_apk.outputs.signedFile}} 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
|
||||
133
.github/workflows/release.yml
vendored
@@ -1,68 +1,65 @@
|
||||
name: Release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- dev
|
||||
jobs:
|
||||
release:
|
||||
name: Release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
# Make sure the release step uses its own credentials:
|
||||
# https://github.com/cycjimmy/semantic-release-action#private-packages
|
||||
persist-credentials: false
|
||||
fetch-depth: 0
|
||||
- name: Setup JDK
|
||||
uses: actions/setup-java@v3
|
||||
with:
|
||||
java-version: '17'
|
||||
distribution: 'zulu'
|
||||
cache: 'gradle'
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '18'
|
||||
cache: 'npm'
|
||||
- name: Setup Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: 'stable'
|
||||
cache: true
|
||||
- name: Install Flutter dependencies
|
||||
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
|
||||
- name: Sign APK
|
||||
id: sign_apk
|
||||
uses: ilharp/sign-android-release@v1
|
||||
with:
|
||||
releaseDir: build/app/outputs/apk/release
|
||||
signingKey: ${{ secrets.SIGNING_KEYSTORE }}
|
||||
keyStorePassword: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
|
||||
keyAlias: ${{ secrets.SIGNING_KEY_ALIAS }}
|
||||
keyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }}
|
||||
- name: Setup semantic-release
|
||||
run: npm ci
|
||||
- name: Get release version
|
||||
run: npm exec -- semantic-release --dry-run
|
||||
id: get-next-version
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Add version to APK
|
||||
run: mv $SIGNED_FILE_PATH $(dirname $SIGNED_FILE_PATH)/revanced-manager-${{ steps.get-next-version.outputs.new-release-version }}.apk
|
||||
env:
|
||||
SIGNED_FILE_PATH: ${{steps.sign_apk.outputs.signedFile}}
|
||||
- name: Release
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
|
||||
run: npm exec semantic-release
|
||||
name: Release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- dev
|
||||
paths:
|
||||
- ".github/workflows/release.yml"
|
||||
- "android/**"
|
||||
- "assets/**"
|
||||
- "lib/**"
|
||||
- "pubspec.yaml"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Release
|
||||
permissions:
|
||||
contents: 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
|
||||
|
||||
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 }}"}'
|
||||
127
.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,16 +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
|
||||
|
||||
# Dependency directories
|
||||
node_modules/
|
||||
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
|
||||
|
||||
|
||||
137
.releaserc
@@ -1,75 +1,62 @@
|
||||
{
|
||||
"branches": [
|
||||
"main",
|
||||
{
|
||||
"name": "dev",
|
||||
"prerelease": true
|
||||
}
|
||||
],
|
||||
"plugins": [
|
||||
"semantic-release-export-data",
|
||||
"@semantic-release/commit-analyzer",
|
||||
[
|
||||
"@semantic-release/release-notes-generator",
|
||||
{
|
||||
"presetConfig": {
|
||||
"types": [
|
||||
{
|
||||
"type": "build",
|
||||
"section": "Dependency Updates"
|
||||
},
|
||||
{
|
||||
"type": "chore",
|
||||
"section": "Other Changes",
|
||||
"hidden": false
|
||||
},
|
||||
{
|
||||
"type": "perf",
|
||||
"section": "Performance Improvements",
|
||||
"hidden": false
|
||||
},
|
||||
{
|
||||
"type": "refactor",
|
||||
"section": "Code Improvements",
|
||||
"hidden": false
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"@semantic-release/changelog",
|
||||
"semantic-release-flutter-plugin",
|
||||
[
|
||||
"@semantic-release/git",
|
||||
{
|
||||
"assets": [
|
||||
"CHANGELOG.md",
|
||||
"pubspec.yaml"
|
||||
]
|
||||
}
|
||||
],
|
||||
[
|
||||
"@semantic-release/github",
|
||||
{
|
||||
"assets": [
|
||||
{
|
||||
"path": "build/app/outputs/apk/release/revanced-manager-*.apk"
|
||||
}
|
||||
],
|
||||
"successComment": false
|
||||
}
|
||||
],
|
||||
[
|
||||
"@saithodev/semantic-release-backmerge",
|
||||
{
|
||||
"backmergeBranches": [
|
||||
{
|
||||
"from": "main",
|
||||
"to": "dev"
|
||||
}
|
||||
],
|
||||
"clearWorkspace": true
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
{
|
||||
"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": []
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
|
||||
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
|
||||
114
README.md
@@ -1,31 +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 latest 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
|
||||
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).
|
||||
|
||||
## 🔴 Issues
|
||||
For suggestions and bug reports, open an issue [here](https://github.com/revanced/revanced-manager/issues/new/choose).
|
||||
## 📚 Everything else
|
||||
|
||||
## 💭 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.
|
||||
### 📙 Contributing
|
||||
|
||||
Thank you for considering contributing to ReVanced Manager.
|
||||
You can find the contribution guidelines [here](CONTRIBUTING.md).
|
||||
|
||||
## 🌐 Translation
|
||||
[](https://crowdin.com/project/revanced)
|
||||
### 🛠️ Building
|
||||
|
||||
If you wish to translate ReVanced Manager, we're accepting translations on [Crowdin](https://translate.revanced.app)
|
||||
To build a ReVanced Manager, you can follow the [documentation](/docs).
|
||||
|
||||
## 🛠️ 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-manager/blob/docs/docs/5_building-from-source.md)
|
||||
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`
|
||||
### 📄 Documentation
|
||||
|
||||
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: |
|
||||
@@ -21,7 +21,6 @@ linter:
|
||||
- always_declare_return_types
|
||||
- require_trailing_commas
|
||||
- always_put_control_body_on_new_line
|
||||
- always_require_non_null_named_parameters
|
||||
- always_use_package_imports # we do this commonly
|
||||
- annotate_overrides
|
||||
- avoid_bool_literals_in_conditional_expressions
|
||||
@@ -40,8 +39,6 @@ linter:
|
||||
- avoid_relative_lib_imports
|
||||
- avoid_renaming_method_parameters
|
||||
- avoid_return_types_on_setters
|
||||
- avoid_returning_null
|
||||
- avoid_returning_null_for_future
|
||||
- avoid_returning_null_for_void
|
||||
- avoid_setters_without_getters
|
||||
- avoid_shadowing_type_parameters
|
||||
@@ -71,12 +68,10 @@ linter:
|
||||
- flutter_style_todos
|
||||
- hash_and_equals
|
||||
- implementation_imports
|
||||
- iterable_contains_unrelated_type
|
||||
- collection_methods_unrelated_type
|
||||
- leading_newlines_in_multiline_strings
|
||||
- library_names
|
||||
- library_prefixes
|
||||
- library_private_types_in_public_api
|
||||
- list_remove_unrelated_type
|
||||
- missing_whitespace_between_adjacent_strings
|
||||
- no_adjacent_strings_in_list
|
||||
- no_duplicate_case_values
|
||||
@@ -88,7 +83,6 @@ linter:
|
||||
- overridden_fields
|
||||
- package_api_docs
|
||||
- package_names
|
||||
- package_prefixed_library_names
|
||||
- prefer_adjacent_string_concatenation
|
||||
- prefer_asserts_in_initializer_lists
|
||||
- prefer_collection_literals
|
||||
@@ -98,7 +92,6 @@ linter:
|
||||
- prefer_const_declarations
|
||||
- prefer_const_literals_to_create_immutables
|
||||
- prefer_contains
|
||||
- prefer_equal_for_default_values
|
||||
- prefer_final_fields
|
||||
- prefer_final_in_for_each
|
||||
- prefer_final_locals
|
||||
@@ -115,19 +108,18 @@ linter:
|
||||
- prefer_is_not_empty
|
||||
- prefer_is_not_operator
|
||||
- prefer_iterable_whereType
|
||||
- prefer_mixin # Has false positives, see https://github.com/dart-lang/linter/issues/3018
|
||||
- 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
|
||||
- prefer_void_to_null
|
||||
- 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
|
||||
|
||||
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,89 +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 {
|
||||
coreLibraryDesugaringEnabled true
|
||||
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
|
||||
multiDexEnabled true
|
||||
}
|
||||
|
||||
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:7.1.1"
|
||||
|
||||
// Signing & aligning
|
||||
implementation("org.bouncycastle:bcpkix-jdk15on:1.70")
|
||||
implementation("com.android.tools.build:apksig:7.2.2")
|
||||
|
||||
// Core libraries
|
||||
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
|
||||
|
||||
// Window
|
||||
implementation 'androidx.window:window:1.0.0'
|
||||
implementation 'androidx.window:window-java:1.0.0'
|
||||
|
||||
}
|
||||
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,32 @@
|
||||
<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"
|
||||
@@ -28,13 +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,316 +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.compatiblePackages
|
||||
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 options = call.argument<Map<String, Map<String, Any>>>("options")
|
||||
val tmpDirPath = call.argument<String>("tmpDirPath")
|
||||
val keyStoreFilePath = call.argument<String>("keyStoreFilePath")
|
||||
val keystorePassword = call.argument<String>("keystorePassword")
|
||||
|
||||
if (patchBundleFilePath != null &&
|
||||
originalFilePath != null &&
|
||||
inputFilePath != null &&
|
||||
patchedFilePath != null &&
|
||||
if (
|
||||
inFilePath != null &&
|
||||
outFilePath != null &&
|
||||
integrationsPath != null &&
|
||||
selectedPatches != null &&
|
||||
cacheDirPath != null &&
|
||||
options != null &&
|
||||
tmpDirPath != null &&
|
||||
keyStoreFilePath != null &&
|
||||
keystorePassword != null
|
||||
) {
|
||||
cancel = false
|
||||
runPatcher(
|
||||
result,
|
||||
patchBundleFilePath,
|
||||
originalFilePath,
|
||||
inputFilePath,
|
||||
patchedFilePath,
|
||||
inFilePath,
|
||||
outFilePath,
|
||||
integrationsPath,
|
||||
selectedPatches,
|
||||
cacheDirPath,
|
||||
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,
|
||||
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 {
|
||||
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 "")
|
||||
)
|
||||
}
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf(
|
||||
"progress" to 0.4,
|
||||
"header" to "Merging integrations...",
|
||||
"log" to "Merging integrations"
|
||||
)
|
||||
)
|
||||
}
|
||||
patcher.addIntegrations(listOf(integrations)) {}
|
||||
|
||||
handler.post {
|
||||
installerChannel.invokeMethod(
|
||||
"update",
|
||||
mapOf(
|
||||
"progress" to 0.5,
|
||||
"header" to "Applying patches...",
|
||||
"log" to ""
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
val patches = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
|
||||
PatchBundle.Dex(
|
||||
patchBundleFilePath,
|
||||
DexClassLoader(
|
||||
patchBundleFilePath,
|
||||
cacheDirPath,
|
||||
null,
|
||||
javaClass.classLoader
|
||||
)
|
||||
).loadPatches().filter { patch ->
|
||||
(patch.compatiblePackages?.any { it.name == patcher.context.packageMetadata.packageName } == true || patch.compatiblePackages.isNullOrEmpty()) &&
|
||||
selectedPatches.any { it == patch.patchName }
|
||||
}
|
||||
} else {
|
||||
TODO("VERSION.SDK_INT < CUPCAKE")
|
||||
}
|
||||
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 = "Failed to apply $patch: " + "${res.exceptionOrNull()!!.message ?: res.exceptionOrNull()!!.cause!!::class.simpleName}"
|
||||
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", keystorePassword).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: 2.1 KiB |
|
Before Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 4.9 KiB |
|
Before Width: | Height: | Size: 5.1 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,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<background android:drawable="@drawable/ic_launcher_background"/>
|
||||
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
|
||||
<monochrome android:drawable="@drawable/ic_launcher_monochrome"/>
|
||||
</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" />
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="ic_launcher_background">#1B1B1B</color>
|
||||
</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,36 +0,0 @@
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.7.10'
|
||||
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,7 +1,8 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-bin.zip
|
||||
distributionSha256Sum=6147605a23b4eff6c334927a86ff3508cb5d6722cd624c97ded4c2e8640f1f87
|
||||
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,200 +0,0 @@
|
||||
{
|
||||
"okButton": "موافق",
|
||||
"cancelButton": "إلغاء",
|
||||
"updateButton": "تحديث",
|
||||
"enabledLabel": "مفعّل",
|
||||
"disabledLabel": "معطّل",
|
||||
"yesButton": "نعم",
|
||||
"noButton": "لا",
|
||||
"warning": "تحذير",
|
||||
"navigationView": {
|
||||
"dashboardTab": "لوحة التحكم",
|
||||
"patcherTab": "لوحة التعديل",
|
||||
"settingsTab": "الإعدادات"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "لوحة التحكم",
|
||||
"updatesSubtitle": "تحديثات",
|
||||
"patchedSubtitle": "التطبيقات المعدلة",
|
||||
"updatesAvailable": "تحديثات متوفرة",
|
||||
"noUpdates": "لا توجد تحديثات متاحة",
|
||||
"WIP": "العمل قيد التنفيذ...",
|
||||
"noInstallations": "لا توجد تطبيقات معدلة مثبتة",
|
||||
"installed": "مثبت",
|
||||
"updateDialogTitle": "تحديث المدير",
|
||||
"updateChangelogTitle": "سجل التغييرات",
|
||||
"notificationTitle": "تم تنزيل التحديث",
|
||||
"notificationText": "أنقر لتثبيت التحديث",
|
||||
"downloadingMessage": "جاري تحميل التحديث...",
|
||||
"installingMessage": "جاري تثبيت التحديث...",
|
||||
"errorDownloadMessage": "تعذر تحميل التحديث",
|
||||
"errorInstallMessage": "تعذّر تثبيت التحديث",
|
||||
"noConnection": "لا يوجد اتصال بالإنترنت",
|
||||
"updatesDisabled": "تحديث تطبيق تم تعديله معطل حاليًا. أعد تعديل التطبيق مرة أخرى."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "تعديل",
|
||||
"infoButton": "معلومات",
|
||||
"changelogLabel": "سجل التغييرات"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "جاري التحميل...",
|
||||
"timeagoLabel": "منذ {time}",
|
||||
"patcherLabel": "المعدّل: ",
|
||||
"managerLabel": "المدير: ",
|
||||
"updateButton": "تحديث المدير"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "المُعَّدِّل",
|
||||
"patchButton": "تعديل",
|
||||
"patchDialogText": "لقد اخترت تعديل مورد وتم اكتشاف APK منقسم مثبت، لذا من الممكن أن تحدث أخطاء في التعديل.\nهل أنت متأكد أنك تريد المتابعة؟"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "إختر تطبيقًا",
|
||||
"widgetTitleSelected": "التطبيق المحدد",
|
||||
"widgetSubtitle": "لم يتم اختيار أي تطبيق",
|
||||
"noAppsLabel": "لم يتم العثور على تطبيقات",
|
||||
"currentVersion": "الحالي",
|
||||
"recommendedVersion": "موصى به",
|
||||
"anyVersion": "أي"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "اختر التعديلات",
|
||||
"widgetTitleSelected": "التعديلات التي تم اختيارها",
|
||||
"widgetSubtitle": "اختر تطبيق أولاً",
|
||||
"widgetEmptySubtitle": "لم يتم تحديد أي تعديلات"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "وسائل التواصل",
|
||||
"widgetSubtitle": "تابعونا!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "إختر تطبيقًا",
|
||||
"searchBarHint": "البحث عن التطبيقات",
|
||||
"storageButton": "التخزين",
|
||||
"errorMessage": "لا يمكن استخدام التطبيق المحدد"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "اختر التعديلات",
|
||||
"searchBarHint": "البحث عن التعديلات",
|
||||
"doneButton": "تم",
|
||||
"recommended": "موصى به",
|
||||
"all": "الكل",
|
||||
"none": "بدون",
|
||||
"loadPatchesSelection": "تحميل التعديلات المحددة",
|
||||
"noSavedPatches": "لا توجد تعديلات محفوظة للتطبيق المختار.\nاضغط على تم لحفظ الاختيار الحالي.",
|
||||
"noPatchesFound": "لم يتم العثور على تعديلات للتطبيق المحدد",
|
||||
"selectAllPatchesWarningContent": "أنت على وشك تحديد جميع التعديلات، بما في ذلك التعديلات غير الموصى بها والتي يمكن أن تسبب سلوكاً غير مرغوب فيه."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "قد يؤدي تحديد هذا التعديل إلى حدوث أخطاء في عملية التعديل.\n\nإصدار التطبيق: {packageVersion}\nالإصدارات المدعومة حالياً:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "التعديل غير مدعوم لهذا الإصدار من التطبيق. فعِّل خِيار التعديل التجريبي في الإعدادات للمتابعة."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "المثبت",
|
||||
"installButton": "تثبيت",
|
||||
"installRootButton": "تثبيت كـ Root",
|
||||
"openButton": "فتح",
|
||||
"shareButton": "شارك ملف",
|
||||
"notificationTitle": "ReVanced Manager يقوم بعملية التعديل",
|
||||
"notificationText": "انقر للعودة إلى المثبت",
|
||||
"shareApkMenuOption": "مشاركة APK",
|
||||
"exportApkMenuOption": "تصدير APK",
|
||||
"shareLogMenuOption": "مشاركة السجل",
|
||||
"installErrorDialogTitle": "خطأ",
|
||||
"installErrorDialogText1": "التثبيت بطريقة Root غير ممكن مع التعديلات التي تم اختيارها.\nأعد تعديل التطبيق الخاص بك أو اختر التثبيت كـ Non-Root.",
|
||||
"installErrorDialogText2": "التثبيت بطريقة Non-Root غير ممكن مع التعديلات التي تم اختيارها.\nأعد تعديل التطبيق الخاص بك، أو اختر التثبيت كـ Root إذا كان قد تم عمل Root لجهازك.",
|
||||
"installErrorDialogText3": "لا يمكن التثبيت بطريقة Root لأن ملف APK تم اختياره من وحدة التخزين.\nحدد تطبيقًا مثبتًا أو اختر التثبيت كـ Non-Root.",
|
||||
"noExit": "المثبت لا يزال قيد التشغيل، لا يمكن الخروج..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "الإعدادات",
|
||||
"appearanceSectionTitle": "المظهر",
|
||||
"teamSectionTitle": "الفريق",
|
||||
"infoSectionTitle": "معلومات",
|
||||
"advancedSectionTitle": "إعدادات متقدمة",
|
||||
"logsSectionTitle": "السجلات",
|
||||
"darkThemeLabel": "الوضع الداكن",
|
||||
"darkThemeHint": "أهلا وسهلا بك إلى الجانب الداكن",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "استمتع بتجربة أقرب إلى جهازك",
|
||||
"languageLabel": "اللغة",
|
||||
"englishOption": "الإنجليزية",
|
||||
"sourcesLabel": "المصادر",
|
||||
"sourcesLabelHint": "تكوين مصادرك المخصصة",
|
||||
"hostRepositoryLabel": "مستودع API",
|
||||
"orgPatchesLabel": "تنظيم التعديلات",
|
||||
"sourcesPatchesLabel": "مصدر التعديلات",
|
||||
"orgIntegrationsLabel": "تنظيم الدمج",
|
||||
"sourcesIntegrationsLabel": "مصدر الـدمج",
|
||||
"sourcesResetDialogTitle": "إعادة التعيين",
|
||||
"sourcesResetDialogText": "هل تريد بالتأكيد إعادة تعيين المصادر المخصصة إلى قيمها الافتراضية؟",
|
||||
"apiURLResetDialogText": "هل أنت متأكد من أنك تريد إعادة رابط API إلى القيم الافتراضية؟",
|
||||
"contributorsLabel": "المساهمون",
|
||||
"contributorsHint": "قائمة المساهمين في ReVanced",
|
||||
"logsLabel": "السجلات",
|
||||
"logsHint": "مشاركة سجلات المدير",
|
||||
"apiURLLabel": "رابط API",
|
||||
"apiURLHint": "تكوين رابط API الخاص بك",
|
||||
"selectApiURL": "رابط API",
|
||||
"experimentalUniversalPatchesLabel": "دعم التعديلات العامة التجريبية",
|
||||
"experimentalUniversalPatchesHint": "عرض جميع التطبيقات المراد استخدامها مع التعديلات العامة، قد يكون تحميل قائمة التطبيقات أبطأ",
|
||||
"experimentalPatchesLabel": "دعم التعديلات التجريبية",
|
||||
"experimentalPatchesHint": "تمكين استخدام التعديلات غير المدعومة في أي إصدار للتطبيق",
|
||||
"enabledExperimentalPatches": "تم تمكين دعم التعديلات التجريبية",
|
||||
"exportSectionTitle": "استيراد و تصدير",
|
||||
"aboutLabel": "عن التطبيق",
|
||||
"snackbarMessage": "نُسِخ إلى الحافظة",
|
||||
"sentryLabel": "تسجيل الحراسة",
|
||||
"sentryHint": "إرسال سجلات مجهولة لمساعدتنا في تحسين ReVanced Manager",
|
||||
"restartAppForChanges": "إعادة تشغيل التطبيق لتطبيق التغييرات",
|
||||
"deleteKeystoreLabel": "حذف ملف تخزين المفاتيح",
|
||||
"deleteKeystoreHint": "حذف ملف تخزين المفاتيح المستخدم للتوقيع على التطبيق",
|
||||
"deletedKeystore": "تم حذف مِلَفّ تخزين المفاتيح",
|
||||
"deleteTempDirLabel": "حذف الملفات المؤقتة",
|
||||
"deleteTempDirHint": "حذف الملفات المؤقتة غير المستخدمة",
|
||||
"deletedTempDir": "تم حذف الملفات المؤقتة",
|
||||
"exportPatchesLabel": "تصدير التعديلات المحددة",
|
||||
"exportPatchesHint": "تصدير التعديلات المحددة إلى مِلَفّ JSON",
|
||||
"exportedPatches": "تم تصدير التعديلات المحددة",
|
||||
"noExportFileFound": "لا يوجد تعديلات محددة للتصدير",
|
||||
"importPatchesLabel": "استيراد التعديلات المحددة",
|
||||
"importPatchesHint": "استيراد التعديلات المحددة من مِلَفّ JSON",
|
||||
"importedPatches": "تم استيراد التعديلات المحددة",
|
||||
"resetStoredPatchesLabel": "إعادة تعيين التعديلات",
|
||||
"resetStoredPatchesHint": "إعادة تعيين التعديلات المحددة المخزنة",
|
||||
"resetStoredPatches": "تم إعادة تعيين التعديلات المحددة",
|
||||
"jsonSelectorErrorMessage": "تعذر استخدام مِلَفّ JSON المحدد",
|
||||
"deleteLogsLabel": "حذف السجلات",
|
||||
"deleteLogsHint": "حذف سجلات المدير التي تم جمعها",
|
||||
"deletedLogs": "تم حذف السجلات"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "معلومات التطبيق",
|
||||
"openButton": "فتح",
|
||||
"uninstallButton": "إلغاء التثبيت",
|
||||
"patchButton": "تعديل",
|
||||
"unpatchButton": "إلغاء التعديل",
|
||||
"unpatchDialogText": "هل أنت متأكد من إلغاء تعديل هذا التطبيق؟",
|
||||
"rootDialogTitle": "خطأ",
|
||||
"rootDialogText": "تم تثبيت التطبيق بأذونات المستخدم المتميز، لكن ReVanced Manager ليس لديه أذونات حاليًا.\nالرجاء منح أذونات المستخدم المتميز أولاً.",
|
||||
"packageNameLabel": "اسم الحُزْمَة",
|
||||
"originalPackageNameLabel": "اسم الحُزْمَة الأصلية",
|
||||
"installTypeLabel": "نوع التثبيت",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "بدون Root",
|
||||
"patchedDateLabel": "تاريخ التعديل",
|
||||
"patchedDateHint": "{date} في {time}",
|
||||
"appliedPatchesLabel": "التعديلات المطبقة",
|
||||
"appliedPatchesHint": "{quantity} تعديلات مطبقة",
|
||||
"updateNotImplemented": "لم يتم تنفيذ هذه الميزة بعد"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "المساهمون",
|
||||
"patcherContributors": "المساهمون المُعَدِّلون",
|
||||
"patchesContributors": "المساهمون في التعديلات",
|
||||
"integrationsContributors": "المساهمون في الدمج",
|
||||
"cliContributors": "المساهمون في CLI",
|
||||
"managerContributors": "المساهمون في Manager"
|
||||
}
|
||||
}
|
||||
@@ -1,196 +0,0 @@
|
||||
{
|
||||
"okButton": "Oldu",
|
||||
"cancelButton": "İmtina",
|
||||
"enabledLabel": "Fəaldır",
|
||||
"disabledLabel": "Sıradan çıxarıldı",
|
||||
"yesButton": "Bəli",
|
||||
"noButton": "Xeyr",
|
||||
"warning": "Xәbәrdarlıq",
|
||||
"navigationView": {
|
||||
"dashboardTab": "İdarəetmə lövhəsi",
|
||||
"patcherTab": "Yamaqlayıcı",
|
||||
"settingsTab": "Tənzimləmələr"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "İdarəetmə lövhəsi",
|
||||
"updatesSubtitle": "Güncəlləmələr",
|
||||
"patchedSubtitle": "Yamaqlanmış tətbiqlər",
|
||||
"updatesAvailable": "Güncəlləmə mövcuddur",
|
||||
"noUpdates": "Güncəlləmə mövcud deyil",
|
||||
"WIP": "Proses davam edir...",
|
||||
"noInstallations": "Yamaqlanmış tətbiq yoxdur",
|
||||
"installed": "Quraşdırıldı",
|
||||
"updateDialogTitle": "Güncəlləmə meneceri",
|
||||
"updateDialogText": "ReVanced Meneceri endirmək və güncəlləmə istədiyinizə əminsiniz?",
|
||||
"notificationTitle": "Güncəlləmə endirildi",
|
||||
"notificationText": "Güncəlləməni quraşdırmaq üçün toxunun",
|
||||
"downloadingMessage": "Güncəlləmə endirilir...",
|
||||
"installingMessage": "Güncəlləmə quraşdırılır...",
|
||||
"errorDownloadMessage": "Güncəlləmə endirilə bilmir",
|
||||
"errorInstallMessage": "Güncəlləmə quraşdırıla bilmir",
|
||||
"noConnection": "İnternet bağlantısı yoxdur",
|
||||
"updatesDisabled": "Yamaqlanmış bir tətbiqin güncəllənməsi hazırda sıradan çıxarılıb. Tətbiqi yenidən yamaqlayın."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Yamaqla",
|
||||
"infoButton": "Məlumat",
|
||||
"changelogLabel": "Dəyişiklik jurnalı"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Yüklənir...",
|
||||
"timeagoLabel": "{time} əvvəl",
|
||||
"patcherLabel": "Yamaqlayıcı: ",
|
||||
"managerLabel": "Menecer: ",
|
||||
"updateButton": "Güncəlləmə meneceri"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Yamaqlayıcı",
|
||||
"patchButton": "Yamaqla",
|
||||
"patchDialogText": "Bir resurs yamağı seçmisiniz və bölünmüş bir APK quraşdırması aşkarlandı, ona görə də yamaq prosesi zamanı xəta baş verə bilər.\nDavam etmək istədiyinizə əminsiniz?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Bir tətbiq seçin",
|
||||
"widgetTitleSelected": "Seçilmiş tətbiq",
|
||||
"widgetSubtitle": "Heç bir tətbiq seçilməyib",
|
||||
"noAppsLabel": "Heç bir tətbiq tapılmadı",
|
||||
"currentVersion": "Hazırkı",
|
||||
"recommendedVersion": "Tövsiyyə edilən",
|
||||
"anyVersion": "istənilən"
|
||||
},
|
||||
"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ın",
|
||||
"storageButton": "Anbar",
|
||||
"errorMessage": "Seçilmiş tətbiq istifadə edilə bilmir"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Yamaqları seçin",
|
||||
"searchBarHint": "Yamaqları axtarın",
|
||||
"doneButton": "Hazırdır",
|
||||
"recommended": "Tövsiyyə edilən",
|
||||
"all": "Hamısı",
|
||||
"none": "Heç biri",
|
||||
"loadPatchesSelection": "Yamaq seçimini yüklə",
|
||||
"noSavedPatches": "Seçilmiş tətbiq üçün saxlanılmış yamaq yoxdur\nHazırkı seçimi saxlamaq üçün \"Hazırdır\"a toxunun",
|
||||
"noPatchesFound": "Seçilmiş tətbiq üçün yamaq tapılmadı",
|
||||
"selectAllPatchesWarningContent": "Tövsiyə edilməyən yamaqları ehtiva edən və istənilməyən davranışlara səbəb ola biləcək bütün yamaqları seçmək üzrəsiniz."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Bu yamağı seçmək, yamaqlama 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. Davam etmək üçün tənzimləmələrdə təcrübi keçidi fəallaşdırın."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Quraşdırıcı",
|
||||
"installButton": "Quraşdır",
|
||||
"installRootButton": "Root olaraq quraşdır",
|
||||
"openButton": "Aç",
|
||||
"shareButton": "Faylı paylaş",
|
||||
"notificationTitle": "ReVanced Menecer yamaqlayır",
|
||||
"notificationText": "Quraşdırıcıya geri qayıtmaq üçün toxunun",
|
||||
"shareApkMenuOption": "APK-nı paylaş",
|
||||
"exportApkMenuOption": "APK-nı xaricə köçür",
|
||||
"shareLogMenuOption": "Jurnalı paylaş",
|
||||
"installErrorDialogTitle": "Xəta",
|
||||
"installErrorDialogText1": "Hazırkı yamaq seçimi ilə Root quraşdırması mümkün deyil.\nTətbiqi yenidən yamaqlayın və ya Root-suz quraşdırmanı seçin.",
|
||||
"installErrorDialogText2": "Hazırkı yamaq seçimi ilə Root-suz quraşdırma mümkün deyil.\nTətbiqi yenidən yamaqlayın və ya cihazınız Root-ludursa, Root quraşdırmasını seçin.",
|
||||
"installErrorDialogText3": "Orijinal APK, anbardan seçildiyi üçün Root quraşdırması mümkün deyil.\nQuraşdırılmış bir tətbiq seçin və ya Root-suz quraşdırmanı seçin.",
|
||||
"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",
|
||||
"infoSectionTitle": "Məlumat",
|
||||
"advancedSectionTitle": "Qabaqcıl",
|
||||
"logsSectionTitle": "Jurnallar",
|
||||
"darkThemeLabel": "Qaranlıq rejim",
|
||||
"darkThemeHint": "Qaranlıq tərəfə xoş gəldiniz",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Cihazınıza yaxın bir təcrübədən həzz alın",
|
||||
"languageLabel": "Dil",
|
||||
"englishOption": "İngiliscə",
|
||||
"sourcesLabel": "Mənbələr",
|
||||
"sourcesLabelHint": "Özəl mənbələrinizi konfiqurasiya edin",
|
||||
"orgPatchesLabel": "Yamaq təşkilatı",
|
||||
"sourcesPatchesLabel": "Yamaq mənbəyi",
|
||||
"orgIntegrationsLabel": "İnteqrasiya təşkilatı",
|
||||
"sourcesIntegrationsLabel": "İnteqrasiya mənbəyi",
|
||||
"sourcesResetDialogTitle": "Sıfırla",
|
||||
"sourcesResetDialogText": "Özəl mənbələri ilkin dəyərlərinə sıfırlamaq istədiyinizə əminsiniz?",
|
||||
"apiURLResetDialogText": "API URL-ni ilkin dəyərinə sıfırlamaq istədiyinizə əminsiz?",
|
||||
"contributorsLabel": "Töhfə verənlər",
|
||||
"contributorsHint": "ReVanced-ə töhfə verənlərin siyahısı",
|
||||
"logsLabel": "Jurnallar",
|
||||
"logsHint": "Menecerin jurnallarını paylaş",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Özəl API URL-lərinizi konfiqurasiya edin",
|
||||
"selectApiURL": "API URL",
|
||||
"experimentalPatchesLabel": "Təcrübi yamaq dəstəyi",
|
||||
"experimentalPatchesHint": "İstənilən bir tətbiq versiyasında dəstəklənməyən yamaqların istifadəsini fəallaşdır",
|
||||
"enabledExperimentalPatches": "Təcrübi yamaq dəstəyi fəaldır",
|
||||
"exportSectionTitle": "Daxilə və xaricə köçür",
|
||||
"aboutLabel": "Haqqında",
|
||||
"snackbarMessage": "Lövhəyə kopyalandı",
|
||||
"sentryLabel": "Keşikçi jurnalı",
|
||||
"sentryHint": "ReVanced Manager-i inkişaf etdirməyimizə kömək etməsi üçün anonim jurnallar göndərin",
|
||||
"restartAppForChanges": "Dəyişiklikləri tətbiq etmək üçün tətbiqi yenidən başlat",
|
||||
"deleteKeystoreLabel": "Keystore-u sil",
|
||||
"deleteKeystoreHint": "Tətbiqi imzalamaq üçün istifadə edilən keystoru-u sil",
|
||||
"deletedKeystore": "Keystore silindi",
|
||||
"deleteTempDirLabel": "Müvəqqəti faylları sil",
|
||||
"deleteTempDirHint": "İstifadə edilməyən müvəqqəti faylları sil",
|
||||
"deletedTempDir": "Müvəqqəti fayllar silindi",
|
||||
"exportPatchesLabel": "Yamaq seçimini xaricə köçür",
|
||||
"exportPatchesHint": "Yamaq seçimini JSON faylına köçür",
|
||||
"exportedPatches": "Yamaq seçimi xaricə köçürüldü",
|
||||
"noExportFileFound": "Xaricə köçürüləcək yamaq seçimi yoxdur",
|
||||
"importPatchesLabel": "Yamaq seçimini daxilə köçür",
|
||||
"importPatchesHint": "Yamaq seçimini JSON faylından köçür",
|
||||
"importedPatches": "Yamaq seçimi daxilə köçürüldü",
|
||||
"resetStoredPatchesLabel": "Yamaqları sıfırla",
|
||||
"resetStoredPatchesHint": "Saxlanılmış yamaq seçimini sıfırla",
|
||||
"resetStoredPatches": "Yamaq seçimi sıfırlandı",
|
||||
"jsonSelectorErrorMessage": "Seçilmiş JSON faylı istifadə edilə bilmir",
|
||||
"deleteLogsLabel": "Jurnalları sil",
|
||||
"deleteLogsHint": "Yığılmış menecer jurnallarını sil",
|
||||
"deletedLogs": "Jurnallar silindi"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Tətbiq məlumatı",
|
||||
"openButton": "Aç",
|
||||
"uninstallButton": "Sil",
|
||||
"patchButton": "Yamaqla",
|
||||
"unpatchButton": "Yamağı götür",
|
||||
"unpatchDialogText": "Yamağı götürmək istədiyinizə əminsiniz?",
|
||||
"rootDialogTitle": "Xəta",
|
||||
"rootDialogText": "Tətbiq, superuser icazələri ilə quraşdırıldı, ancaq hazırda ReVanced Manager-in heç bir icazəsi yoxdur.\nZəhmət olmasa əvvəlcə superuser icazələrini verin.",
|
||||
"packageNameLabel": "Paket adı",
|
||||
"originalPackageNameLabel": "Orijinal paket adı",
|
||||
"installTypeLabel": "Quraşdırma növü",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Root-suz",
|
||||
"patchedDateLabel": "Yamaqlama tarixi",
|
||||
"patchedDateHint": "{time} {date}",
|
||||
"appliedPatchesLabel": "Tətbiq edilmiş yamaqlar",
|
||||
"appliedPatchesHint": "{quantity} tətbiq edilmiş yamaq",
|
||||
"updateNotImplemented": "Bu özəllik hələ tətbiq olunmayıb"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Töhfə verənlər",
|
||||
"patcherContributors": "Yamaqlama üzrə töhfə verənlər",
|
||||
"patchesContributors": "Yamaqlara töhfə verənlər",
|
||||
"integrationsContributors": "İnteqrasiyalara töhfə verənlər",
|
||||
"cliContributors": "CLI-yə töhfə verənlər",
|
||||
"managerContributors": "Manager-ə töhfə verənlər"
|
||||
}
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Отказ",
|
||||
"updateButton": "Актуализация",
|
||||
"enabledLabel": "Включено",
|
||||
"disabledLabel": "Изключено",
|
||||
"yesButton": "Да",
|
||||
"noButton": "Не",
|
||||
"warning": "Внимание",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Табло за управление",
|
||||
"patcherTab": "Пачър",
|
||||
"settingsTab": "Настройки"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Табло за управление",
|
||||
"updatesSubtitle": "Актуализации",
|
||||
"patchedSubtitle": "Модифицирани приложения",
|
||||
"updatesAvailable": "Налични актуализации",
|
||||
"noUpdates": "Няма налични актуализации",
|
||||
"WIP": "В процес на разработка...",
|
||||
"noInstallations": "Няма инсталирани модифицирани приложения",
|
||||
"installed": "Инсталирани",
|
||||
"updateDialogTitle": "Обнови ReVanced Manager",
|
||||
"updateChangelogTitle": "Списък с промени",
|
||||
"notificationTitle": "Актуализацията е изтеглена",
|
||||
"notificationText": "Натиснете за да инсталирате актуализациите",
|
||||
"downloadingMessage": "Изтегляне на актуализация...",
|
||||
"installingMessage": "Инсталиране на актуализация...",
|
||||
"errorDownloadMessage": "Свалянето на актуализацията не беше успешно",
|
||||
"errorInstallMessage": "Инсталирането на актуализацията не беше успешно",
|
||||
"noConnection": "Няма връзка с интернет",
|
||||
"updatesDisabled": "Актуализацията на модифицирани приложения в момента не работи. Модифицирайте приложението наново."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Модифицирай",
|
||||
"infoButton": "Информация",
|
||||
"changelogLabel": "Списък с промените"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Зареждане...",
|
||||
"timeagoLabel": "Преди {time}",
|
||||
"patcherLabel": "Пачър: ",
|
||||
"managerLabel": "Мениджър: ",
|
||||
"updateButton": "Обнови ReVanced Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Модификатор",
|
||||
"patchButton": "Модифицирай",
|
||||
"patchDialogText": "Избрали сте модификация за ресурси и разделен APK пакет, което може да доведе до грешки при пачването.\nСигурни ли сте, че искате да продължите?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Изберете приложение",
|
||||
"widgetTitleSelected": "Избрано приложение",
|
||||
"widgetSubtitle": "Няма избрано приложение",
|
||||
"noAppsLabel": "Няма намерени приложения",
|
||||
"currentVersion": "Текуща",
|
||||
"recommendedVersion": "Препоръчана",
|
||||
"anyVersion": "всяка"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Изберете модификации",
|
||||
"widgetTitleSelected": "Избрани модификации",
|
||||
"widgetSubtitle": "Първо изберете приложение",
|
||||
"widgetEmptySubtitle": "Няма избрани модификации"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Социални мрежи",
|
||||
"widgetSubtitle": "Открийте ни онлайн!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Изберете приложение",
|
||||
"searchBarHint": "Търсене на приложение",
|
||||
"storageButton": "Хранилище",
|
||||
"errorMessage": "Избраното приложение не може да се използва"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Изберете модификации",
|
||||
"searchBarHint": "Търсене на модификации",
|
||||
"doneButton": "Готово",
|
||||
"recommended": "Препоръчано",
|
||||
"all": "Всички",
|
||||
"none": "Нито един",
|
||||
"loadPatchesSelection": "Заредете избраните модификации",
|
||||
"noSavedPatches": "Няма запазени модификации за избраното приложение.\nНатиснете Готово за да запазите текущия избор.",
|
||||
"noPatchesFound": "Няма налични модификации за избраното приложение",
|
||||
"selectAllPatchesWarningContent": "Напът сте да изберете всички патчове, дори и тези, които не са препоръчителни, а това може да доведе до нежелани промени."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Изборът на тази модификация може да доведе до грешки.\n\nВерсия: {packageVersion}\nПоддържани версии: {supportedVersions}",
|
||||
"unsupportedPatchVersion": "Модификацията не се поддържа за тази версия на приложението. Активираите експерименталната опция в настройките за да продължите."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Инсталатор",
|
||||
"installButton": "Инсталиране",
|
||||
"installRootButton": "Инсталиране с root",
|
||||
"openButton": "Отвори",
|
||||
"shareButton": "Споделяне на файла",
|
||||
"notificationTitle": "ReVanced Мениджър модифицира",
|
||||
"notificationText": "Натиснете за да се върнете при инсталатора",
|
||||
"shareApkMenuOption": "Споделяне на APK",
|
||||
"exportApkMenuOption": "Експортиране на APK",
|
||||
"shareLogMenuOption": "Сподели логовете",
|
||||
"installErrorDialogTitle": "Грешка",
|
||||
"installErrorDialogText1": "Инсталиране с root не е възможно с настоящият избор на модификации.\nМодифицирайте приложението наново или изберете опция без root.",
|
||||
"installErrorDialogText2": "Инсталиране без root не е възможно с настоящият избор на модификации.\nМодифицирайте приложението наново или изберете опция с root, ако устройството ви има такъв.",
|
||||
"installErrorDialogText3": "Инсталиране с root не е възможно понеже АРК файла бе избран от хранилището.\nИзберете инсталирано приложение или опция без root.",
|
||||
"noExit": "Инсталаторът все още работи, не може да излезе..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Настройки",
|
||||
"appearanceSectionTitle": "Облик",
|
||||
"teamSectionTitle": "Екип",
|
||||
"infoSectionTitle": "Информация",
|
||||
"advancedSectionTitle": "Разширени",
|
||||
"logsSectionTitle": "Логове",
|
||||
"darkThemeLabel": "Тъмен режим",
|
||||
"darkThemeHint": "Добре дошъл на тъмната страна",
|
||||
"dynamicThemeLabel": "Материална Тема",
|
||||
"dynamicThemeHint": "Насладете се на преживяване по-близо до устройството си",
|
||||
"languageLabel": "Език",
|
||||
"englishOption": "Английски",
|
||||
"sourcesLabel": "Източници",
|
||||
"sourcesLabelHint": "Конфигурирайте собствени източници",
|
||||
"hostRepositoryLabel": "API на хранилището",
|
||||
"orgPatchesLabel": "Организация на модификациите",
|
||||
"sourcesPatchesLabel": "Източник на модификациите",
|
||||
"orgIntegrationsLabel": "Организация на интеграциите",
|
||||
"sourcesIntegrationsLabel": "Източник на интеграциите",
|
||||
"sourcesResetDialogTitle": "Нулиране",
|
||||
"sourcesResetDialogText": "Искате ли да възстановите източниците до стойностите им по подразбиране?",
|
||||
"apiURLResetDialogText": "Искате ли да възстановите АРI URL до стойността му по подразбиране?",
|
||||
"contributorsLabel": "Хора, които допринесоха",
|
||||
"contributorsHint": "Списък с хората, допринесли за ReVanced",
|
||||
"logsLabel": "Логове",
|
||||
"logsHint": "Сподели логовете на мениджъра",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Конфигурирайте собствен API URL",
|
||||
"selectApiURL": "API URL",
|
||||
"experimentalUniversalPatchesLabel": "Поддръжка на експериментални модификации",
|
||||
"experimentalUniversalPatchesHint": "Показване на всички приложения за използване с универсални модификации, зареждането на списъкът с приложения може да е по-бавно",
|
||||
"experimentalPatchesLabel": "Поддръжка на експериментални модификации",
|
||||
"experimentalPatchesHint": "Разрешете използването на неподдържани модификации във всяка версия на приложението",
|
||||
"enabledExperimentalPatches": "Поддръжката на експериментални модификации е активирана",
|
||||
"exportSectionTitle": "Импортиране и експортиране",
|
||||
"aboutLabel": "Относно",
|
||||
"snackbarMessage": "Копирано",
|
||||
"sentryLabel": "Sentry логване",
|
||||
"sentryHint": "Пращайте анонимни логове за да ни помогнете да подобрим ReVanced Manager",
|
||||
"restartAppForChanges": "Рестартирайте приложението, за да се приложат промените",
|
||||
"deleteKeystoreLabel": "Изтриване на keystore",
|
||||
"deleteKeystoreHint": "Изтриване на keystore използван за подписване на приложението",
|
||||
"deletedKeystore": "Keystore изтрит",
|
||||
"deleteTempDirLabel": "Изтриване на временни файлове",
|
||||
"deleteTempDirHint": "Изтриване на неизползвани временни файлове",
|
||||
"deletedTempDir": "Временните файлове са изтрити",
|
||||
"exportPatchesLabel": "Експортиране на избраните модификации",
|
||||
"exportPatchesHint": "Експортиране на избраните модификации като JSON файл",
|
||||
"exportedPatches": "Избраните модификации са експортирани",
|
||||
"noExportFileFound": "Няма избрани модификации за експортиране",
|
||||
"importPatchesLabel": "Импортиране на избраните модификации",
|
||||
"importPatchesHint": "Импортиране на избраните модификации от JSON файл",
|
||||
"importedPatches": "Избраните модификации са импортирани",
|
||||
"resetStoredPatchesLabel": "Нулиране на модификациите",
|
||||
"resetStoredPatchesHint": "Нулиране на избраните запазени модификации",
|
||||
"resetStoredPatches": "Избраните модификации са нулирани",
|
||||
"jsonSelectorErrorMessage": "Избраният JSON файл не може да се изплозва",
|
||||
"deleteLogsLabel": "Изтриване на логовете",
|
||||
"deleteLogsHint": "Изтриване на събраните логове на мениджърът",
|
||||
"deletedLogs": "Логовете са изтрити"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Информация за приложението",
|
||||
"openButton": "Отвори",
|
||||
"uninstallButton": "Деинсталирай",
|
||||
"patchButton": "Модифицирайте",
|
||||
"unpatchButton": "Премахнете модификации",
|
||||
"unpatchDialogText": "Сигурни ли сте че искате да премахнете модификациите?",
|
||||
"rootDialogTitle": "Грешка",
|
||||
"rootDialogText": "Приложението е инсталирано с superuser разрешения, но в момента ReVanced Manager няма разрешения. Моля, първо дайте superuser разрешения.",
|
||||
"packageNameLabel": "Име на пакета",
|
||||
"originalPackageNameLabel": "Оригинално име на пакета",
|
||||
"installTypeLabel": "Тип инсталация",
|
||||
"rootTypeLabel": "Вариант с root достъп",
|
||||
"nonRootTypeLabel": "Без root",
|
||||
"patchedDateLabel": "Дата на модификацията",
|
||||
"patchedDateHint": "на {date} в {time}",
|
||||
"appliedPatchesLabel": "Приложени модификации",
|
||||
"appliedPatchesHint": "{quantity} приложени модификации",
|
||||
"updateNotImplemented": "Тази функция все още не е внедрена"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Хора, които допринесоха",
|
||||
"patcherContributors": "Допринесли към пачърът",
|
||||
"patchesContributors": "Допринесли към модификациите",
|
||||
"integrationsContributors": "Допринесли към интеграциите",
|
||||
"cliContributors": "Допринесли към CLI",
|
||||
"managerContributors": "Допринесли към мениджъра"
|
||||
}
|
||||
}
|
||||
@@ -1,196 +0,0 @@
|
||||
{
|
||||
"okButton": "ঠিক আছে",
|
||||
"cancelButton": "বাতিল",
|
||||
"enabledLabel": "সক্রিয়",
|
||||
"disabledLabel": "নিষ্ক্রিয়",
|
||||
"yesButton": "হ্যাঁ",
|
||||
"noButton": "না",
|
||||
"warning": "সতর্কতা",
|
||||
"navigationView": {
|
||||
"dashboardTab": "ড্যাশবোর্ড",
|
||||
"patcherTab": "প্যাচার",
|
||||
"settingsTab": "সেটিংস"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "ড্যাশবোর্ড",
|
||||
"updatesSubtitle": "আপডেটসমূহ",
|
||||
"patchedSubtitle": "প্যাচড অ্যাপ্লিকেশনগুলো",
|
||||
"updatesAvailable": "আপডেট পাওয়া যাচ্ছে",
|
||||
"noUpdates": "কোন আপডেট পাওয়া যায়নি",
|
||||
"WIP": "কাজ চলছে...",
|
||||
"noInstallations": "কোন প্যাচড অ্যাপ্লিকেশন ইনস্টল করা হয়নি",
|
||||
"installed": "ইনস্টল করা",
|
||||
"updateDialogTitle": "Manager আপডেট করুন",
|
||||
"updateDialogText": "আপনি কি নিশ্চিত আপনি ReVanced Manager ডাউনলোড এবং আপডেট করতে চান?",
|
||||
"notificationTitle": "আপডেট ডাউনলোড হয়েছে",
|
||||
"notificationText": "আপডেট ইনস্টল করতে ট্যাপ করুন",
|
||||
"downloadingMessage": "আপডেট ডাউনলোড হচ্ছে...",
|
||||
"installingMessage": "আপডেট ইনস্টল করা হচ্ছে...",
|
||||
"errorDownloadMessage": "আপডেট ডাউনলোড করতে সফল হয় নি",
|
||||
"errorInstallMessage": "আপডেট ইনস্টল করতে সফল হয় নি",
|
||||
"noConnection": "কোনো ইন্টারনেট সংযোগ নেই",
|
||||
"updatesDisabled": "প্যাচ করা অ্যাপকে আপডেট করা বর্তমানে সম্ভব নয়। অ্যাপটি পুনরায় প্যাচ করুন।"
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "প্যাচ",
|
||||
"infoButton": "তথ্য",
|
||||
"changelogLabel": "পরিবর্তনসমূহ"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "লোড হচ্ছে...",
|
||||
"timeagoLabel": "{time} আগে",
|
||||
"patcherLabel": "Patcher: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Manager আপডেট করুন"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "প্যাচার",
|
||||
"patchButton": "প্যাচ",
|
||||
"patchDialogText": "আপনি রিসোর্স প্যাচ নির্বাচন করেছেন এবং একটি split APK সনাক্ত হয়েছে, তাই প্যাচিং ত্রুটিপূর্ণ হতে পারে।\nআপনি কি নিশ্চিতভাবে সামনে এগিয়ে যেতে চান??"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "একটি অ্যাপ্লিকেশন নির্বাচন করুন",
|
||||
"widgetTitleSelected": "নির্বাচিত অ্যাপ্লিকেশন",
|
||||
"widgetSubtitle": "কোনো অ্যাপ্লিকেশন নির্বাচন করা হয়নি",
|
||||
"noAppsLabel": "কোন অ্যাপ্লিকেশন পাওয়া যায়নি",
|
||||
"currentVersion": "বর্তমান",
|
||||
"recommendedVersion": "প্রস্তাবিত",
|
||||
"anyVersion": "যেকোনো সংস্করণ"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "প্যাচ নির্বাচন করুন",
|
||||
"widgetTitleSelected": "নির্বাচিত প্যাচসমূহ",
|
||||
"widgetSubtitle": "প্রথমে একটি অ্যাপ্লিকেশন নির্বাচন করুন",
|
||||
"widgetEmptySubtitle": "কোন প্যাচ নির্বাচন করা হয়নি"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "সামাজিক যোগাযোগ মাধ্যম",
|
||||
"widgetSubtitle": "আমরা অনলাইনে!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "একটি অ্যাপ্লিকেশন নির্বাচন করুন",
|
||||
"searchBarHint": "অ্যাপ্লিকেশনগুলি খুঁজুন",
|
||||
"storageButton": "স্টোরেজ",
|
||||
"errorMessage": "নির্বাচিত অ্যাপ্লিকেশনটি ব্যবহার করা সম্ভব নয়"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "প্যাচ নির্বাচন করুন",
|
||||
"searchBarHint": "প্যাচ খুঁজুন",
|
||||
"doneButton": "সম্পন্ন হয়েছে",
|
||||
"recommended": "প্রস্তাবিত",
|
||||
"all": "সবগুলো",
|
||||
"none": "একটিও না",
|
||||
"loadPatchesSelection": "নির্বাচিত প্যাচ লোড করুন",
|
||||
"noSavedPatches": "নির্বাচিত অ্যাপের জন্য কোন সংরক্ষিত প্যাচ নেই\nবর্তমানে নির্বাচিত প্যাচ সংরক্ষণ করতে সম্পন্ন হয়েছে চাপুন",
|
||||
"noPatchesFound": "নির্বাচিত অ্যাপের জন্য কোনো প্যাচ পাওয়া যায়নি",
|
||||
"selectAllPatchesWarningContent": "আপনি সকল প্যাচ নির্বাচন করতে যাচ্ছেন, যার মধ্যে কিছু অপ্রস্তাবিত প্যাচও রয়েছে যা অনাকাঙ্ক্ষিত আচরণ করতে পারে।"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "এই প্যাচটি নির্বাচন করলে প্যাচিং ত্রুটিপূর্ণ হতে পারে।\n\nঅ্যাপ সংস্করণ: {packageVersion}\nসমর্থিত সংস্করণ:\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": "ইনস্টলার এখনো চলমান, বের হওয়া সম্ভব নয়..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "সেটিংস",
|
||||
"appearanceSectionTitle": "রূপ",
|
||||
"teamSectionTitle": "দল",
|
||||
"infoSectionTitle": "তথ্য",
|
||||
"advancedSectionTitle": "উন্নত",
|
||||
"logsSectionTitle": "লগ",
|
||||
"darkThemeLabel": "অন্ধকার মোড",
|
||||
"darkThemeHint": "অন্ধকার রাজ্যে স্বাগতম",
|
||||
"dynamicThemeLabel": "ম্যাটেরিয়াল ইউ",
|
||||
"dynamicThemeHint": "আপনার ডিভাইসের লুকের কাছাকাছি অভিজ্ঞতা নিন",
|
||||
"languageLabel": "ভাষা",
|
||||
"englishOption": "English",
|
||||
"sourcesLabel": "উৎস",
|
||||
"sourcesLabelHint": "আপনার নিজস্ব উৎস সেট করুন",
|
||||
"orgPatchesLabel": "প্যাচ এর উদ্ভাবক",
|
||||
"sourcesPatchesLabel": "প্যাচ এর উৎস",
|
||||
"orgIntegrationsLabel": "ইন্ট্রিগেশনের উদ্ভাবক",
|
||||
"sourcesIntegrationsLabel": "ইন্ট্রিগেশনের উৎস",
|
||||
"sourcesResetDialogTitle": "পুনরায় সেট করুন",
|
||||
"sourcesResetDialogText": "আপনি কি আপনার নিজস্ব উৎসগুলোকে তাদের মূল উৎসে পুনরায় সেট করতে চান?",
|
||||
"apiURLResetDialogText": "আপনি কি API URL কে তার মূল ভ্যালুতে পুনরায় সেট করতে চান?",
|
||||
"contributorsLabel": "অবদানকারীগণ",
|
||||
"contributorsHint": "ReVanced-এ অবদানকারীদের তালিকা",
|
||||
"logsLabel": "লগ",
|
||||
"logsHint": "Manager লগ শেয়ার করুন",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "আপনার নিজস্ব API URL সেট করুন",
|
||||
"selectApiURL": "API URL",
|
||||
"experimentalPatchesLabel": "পরীক্ষামূলক প্যাচ সমর্থন",
|
||||
"experimentalPatchesHint": "যেকোন অ্যাপ সংস্করণে অসমর্থিত প্যাচ ব্যবহার করতে সক্ষম করুন",
|
||||
"enabledExperimentalPatches": "পরীক্ষামূলক প্যাচ সমর্থন সক্রিয় হয়েছে",
|
||||
"exportSectionTitle": "আমদানি ও রপ্তানি",
|
||||
"aboutLabel": "সম্পর্কিত",
|
||||
"snackbarMessage": "ক্লিপবোর্ডে কপি করা হয়েছে",
|
||||
"sentryLabel": "সেন্ট্রি লগিং",
|
||||
"sentryHint": "ReVanced Manager উন্নত করতে আমাদের সাহায্য করতে বেনামী লগ পাঠান",
|
||||
"restartAppForChanges": "পরিবর্তনগুলি প্রয়োগ করতে অ্যাপটি পুনরায় চালু করুন",
|
||||
"deleteKeystoreLabel": "কীস্টোর মুছুন",
|
||||
"deleteKeystoreHint": "প্যাচড অ্যাপ সাইন করতে ব্যবহৃত কীস্টোরটি মুছুন",
|
||||
"deletedKeystore": "কীস্টোর মুছে ফেলা হয়েছে",
|
||||
"deleteTempDirLabel": "অস্থায়ী ফাইল মুছুন",
|
||||
"deleteTempDirHint": "অব্যবহৃত অস্থায়ী ফাইল মুছুন",
|
||||
"deletedTempDir": "অস্থায়ী ফাইল মুছে ফেলা হয়েছে",
|
||||
"exportPatchesLabel": "নির্বাচিত প্যাচ রপ্তানি করুন",
|
||||
"exportPatchesHint": "নির্বাচিত প্যাচ একটি JSON ফাইলে রপ্তানি করুন",
|
||||
"exportedPatches": "নির্বাচিত প্যাচ রপ্তানি করা হয়েছে",
|
||||
"noExportFileFound": "রপ্তানি করার জন্য কোন প্যাচ নির্বাচন করা হয়নি",
|
||||
"importPatchesLabel": "নির্বাচিত প্যাচ আমদানি করুন",
|
||||
"importPatchesHint": "একটি JOSN ফাইল থেকে প্যাচ আমদানি করুন",
|
||||
"importedPatches": "নির্বাচিত প্যাচ আমদানি করা হয়েছে",
|
||||
"resetStoredPatchesLabel": "প্যাচ পুনরায় সেট করুন",
|
||||
"resetStoredPatchesHint": "সংরক্ষিত নির্বাচিত প্যাচ পুনঃসেট করুন",
|
||||
"resetStoredPatches": "নির্বাচিত প্যাচ পুনঃসেট করা হয়েছে",
|
||||
"jsonSelectorErrorMessage": "নির্বাচিত JSON ফাইল ব্যবহার করা সম্ভব নয়",
|
||||
"deleteLogsLabel": "লগ মুছুন",
|
||||
"deleteLogsHint": "Manager এর সংগৃহীত লগ মুছুন",
|
||||
"deletedLogs": "লগ মুছে ফেলা হয়েছে"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "অ্যাপের তথ্য",
|
||||
"openButton": "খুলুন",
|
||||
"uninstallButton": "আনইন্সটল করুন",
|
||||
"patchButton": "প্যাচ",
|
||||
"unpatchButton": "আনপ্যাচ",
|
||||
"unpatchDialogText": "আপনি কি অ্যাপটি আনপ্যাচ করার ব্যপারে নিশ্চিত?",
|
||||
"rootDialogTitle": "ত্রুটি দেখা দিয়েছে",
|
||||
"rootDialogText": "অ্যাপটি Superuser অনুমতি নিয়ে ইনস্টল করা হয়েছে, কিন্তু বর্তমানে ReVanced Manager এর Superuser অনুমতি নেই। অনুগ্রহপূর্বক প্রথমে Superuser অনুমতি দিন।",
|
||||
"packageNameLabel": "প্যাকেজের নাম",
|
||||
"originalPackageNameLabel": "প্যাকেজের মূল নাম",
|
||||
"installTypeLabel": "ইনস্টলের ধরন",
|
||||
"rootTypeLabel": "রুট",
|
||||
"nonRootTypeLabel": "নন-রুট",
|
||||
"patchedDateLabel": "প্যাচ করার তারিখ",
|
||||
"patchedDateHint": "{date} তারিখে {time} টায়",
|
||||
"appliedPatchesLabel": "ব্যবহৃত প্যাচ",
|
||||
"appliedPatchesHint": "{quantity} টি প্যাচ ব্যবহৃত",
|
||||
"updateNotImplemented": "এই ফিচারটি এখনো কার্যকর করা হয়নি"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "অবদানকারীগণ",
|
||||
"patcherContributors": "প্যাচার অবদানকারী",
|
||||
"patchesContributors": "প্যাচসমূহে অবদানকারী",
|
||||
"integrationsContributors": "ইন্টিগ্রেশন্স অবদানকারী",
|
||||
"cliContributors": "CLI অবদানকারী",
|
||||
"managerContributors": "Manager অবদানকারী"
|
||||
}
|
||||
}
|
||||
@@ -1,196 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Zrušit",
|
||||
"enabledLabel": "Zapnuto",
|
||||
"disabledLabel": "Vypnuto",
|
||||
"yesButton": "Ano",
|
||||
"noButton": "Ne",
|
||||
"warning": "Varování",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Řídící panel",
|
||||
"patcherTab": "Záplatovač",
|
||||
"settingsTab": "Nastavení"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Řídící panel",
|
||||
"updatesSubtitle": "Aktualizace",
|
||||
"patchedSubtitle": "Záplatované aplikace",
|
||||
"updatesAvailable": "Jsou dostupné aktualizace",
|
||||
"noUpdates": "Nejsou dostupné žádné aktualizace",
|
||||
"WIP": "Zpracovává se...",
|
||||
"noInstallations": "Nejsou nainstalovány žádné záplatované aplikace",
|
||||
"installed": "Nainstalováno",
|
||||
"updateDialogTitle": "Správce aktualizací",
|
||||
"updateDialogText": "Opravdu chcete stáhnout a aktualizovat ReVanced Manager?",
|
||||
"notificationTitle": "Aktualizace byla stažena",
|
||||
"notificationText": "Klepnutím nainstalujte aktualizaci",
|
||||
"downloadingMessage": "Stahování aktualizace...",
|
||||
"installingMessage": "Instalace aktualizace...",
|
||||
"errorDownloadMessage": "Nelze stáhnout aktualizaci",
|
||||
"errorInstallMessage": "Aktualizace se nepodařilo nainstalovat",
|
||||
"noConnection": "Žádné připojení k internetu",
|
||||
"updatesDisabled": "Aktualizace záplatované aplikace je momentálně zakázána. Znovu záplatujte aplikaci."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Záplata",
|
||||
"infoButton": "Info",
|
||||
"changelogLabel": "Seznam změn"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Načítání...",
|
||||
"timeagoLabel": "před {time}",
|
||||
"patcherLabel": "Záplatovač: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Aktualizovat Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Záplatovač",
|
||||
"patchButton": "Záplatovat",
|
||||
"patchDialogText": "Vybrali jste záplatu a byla zjištěna \"split-APK\" instalace, takže se mohou vyskytnout chyby.\nJste si jisti, že chcete pokračovat?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Vyberte aplikaci",
|
||||
"widgetTitleSelected": "Vybraná aplikace",
|
||||
"widgetSubtitle": "Nebyla vybrána žádná aplikace",
|
||||
"noAppsLabel": "Nebyly nalezeny žádné aplikace",
|
||||
"currentVersion": "Aktuální",
|
||||
"recommendedVersion": "Doporučeno",
|
||||
"anyVersion": "jakákoliv"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Vybrat záplaty",
|
||||
"widgetTitleSelected": "Vybrané záplaty",
|
||||
"widgetSubtitle": "Nejprve vyberte aplikaci",
|
||||
"widgetEmptySubtitle": "Nejsou vybrány žádné záplaty"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Sociální sítě",
|
||||
"widgetSubtitle": "Jsme online!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Vyberte aplikaci",
|
||||
"searchBarHint": "Hledat aplikace",
|
||||
"storageButton": "Uložiště",
|
||||
"errorMessage": "Vybranou aplikaci nelze použít"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Vybrat záplaty",
|
||||
"searchBarHint": "Vyhledat záplaty",
|
||||
"doneButton": "Hotovo",
|
||||
"recommended": "Doporučeno",
|
||||
"all": "Vše",
|
||||
"none": "Žádné",
|
||||
"loadPatchesSelection": "Načíst výběr záplat",
|
||||
"noSavedPatches": "Žádné uložené záplaty pro vybranou aplikaci\nStiskněte Hotovo pro uložení aktuálního výběru",
|
||||
"noPatchesFound": "Pro vybranou aplikaci nebyly nalezeny žádné záplaty",
|
||||
"selectAllPatchesWarningContent": "Chystáte se vybrat všechny záplaty, které obsahují nedoporučené záplaty a mohou způsobit nežádoucí chování."
|
||||
},
|
||||
"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": "Pro tuto verzi aplikace není podporována záplata. Chcete-li pokračovat, povolte přepínač experimentálních nastavení."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Instalátor",
|
||||
"installButton": "Instalovat",
|
||||
"installRootButton": "Instalovat jako root",
|
||||
"openButton": "Otevřít",
|
||||
"shareButton": "Sdílet soubor",
|
||||
"notificationTitle": "ReVanced Manager záplatuje",
|
||||
"notificationText": "Klepnutím se vrátíte do instalátoru",
|
||||
"shareApkMenuOption": "Sdílet APK",
|
||||
"exportApkMenuOption": "Exportovat APK",
|
||||
"shareLogMenuOption": "Sdílet záznam",
|
||||
"installErrorDialogTitle": "Chyba",
|
||||
"installErrorDialogText1": "Root instalace není možná při výběru aktuálních záplat.\nZnovu záplatujte aplikaci nebo zvolte non-root instalaci.",
|
||||
"installErrorDialogText2": "Non-root instalace není možná s vybranými záplaty.\nZnova záplatujte vaší aplikaci, nebo zvolte root instalaci, jestli máte zařízení s rootem.",
|
||||
"installErrorDialogText3": "Root instalace není možná, protože původní APK byla vybrána z uložiště.\nVyberte nainstalovanou aplikaci nebo zvolte non-root instalaci.",
|
||||
"noExit": "Instalační program je stále spuštěn, nelze ukončit..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Nastavení",
|
||||
"appearanceSectionTitle": "Vzhled",
|
||||
"teamSectionTitle": "Tým",
|
||||
"infoSectionTitle": "Info",
|
||||
"advancedSectionTitle": "Pokročilé",
|
||||
"logsSectionTitle": "Logy",
|
||||
"darkThemeLabel": "Tmavý motiv",
|
||||
"darkThemeHint": "Vítejte na temné straně",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Vychutnejte si zážitek blíže k vašemu zařízení",
|
||||
"languageLabel": "Jazyk",
|
||||
"englishOption": "Angličtina",
|
||||
"sourcesLabel": "Zdroje",
|
||||
"sourcesLabelHint": "Konfigurace vlastních zdrojů",
|
||||
"orgPatchesLabel": "Organizace záplat",
|
||||
"sourcesPatchesLabel": "Zdroj záplat",
|
||||
"orgIntegrationsLabel": "Autor integrace",
|
||||
"sourcesIntegrationsLabel": "Zdroj integrace",
|
||||
"sourcesResetDialogTitle": "Obnovit",
|
||||
"sourcesResetDialogText": "Jste si jisti, že chcete obnovit vlastní zdroje na jejich výchozí hodnoty?",
|
||||
"apiURLResetDialogText": "Jste si jisti, že chcete resetovat API URL na výchozí hodnotu?",
|
||||
"contributorsLabel": "Přispěvatelé",
|
||||
"contributorsHint": "Seznam přispěvatelů ReVanced",
|
||||
"logsLabel": "Logy",
|
||||
"logsHint": "Sdílet logy správce",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Konfigurace vlastního API URL",
|
||||
"selectApiURL": "API URL",
|
||||
"experimentalPatchesLabel": "Podpora experimentálních záplat",
|
||||
"experimentalPatchesHint": "Povolit použití nepodporovaných záplat v jakékoli verzi aplikace",
|
||||
"enabledExperimentalPatches": "Podpora experimentálních záplat",
|
||||
"exportSectionTitle": "Import a export",
|
||||
"aboutLabel": "O aplikaci",
|
||||
"snackbarMessage": "Zkopírováno do schránky",
|
||||
"sentryLabel": "Log Sentry",
|
||||
"sentryHint": "Odeslat anonymní protokoly, které nám pomohou zlepšit ReVanced Manager",
|
||||
"restartAppForChanges": "Pro aplikování změn restartuj aplikaci",
|
||||
"deleteKeystoreLabel": "Vymazat úložiště klíčů",
|
||||
"deleteKeystoreHint": "Smazat úložiště klíčů používané k podpisu aplikace",
|
||||
"deletedKeystore": "Úložiště klíčů bylo smazáno",
|
||||
"deleteTempDirLabel": "Odstranit dočasné soubory",
|
||||
"deleteTempDirHint": "Odstranit nepoužité dočasné soubory",
|
||||
"deletedTempDir": "Dočasné soubory byly smazány",
|
||||
"exportPatchesLabel": "Exportovat vybrané záplaty",
|
||||
"exportPatchesHint": "Exportovat výběr záplat do souboru JSON",
|
||||
"exportedPatches": "Výběr záplat exportován",
|
||||
"noExportFileFound": "Žádné záplaty k exportu",
|
||||
"importPatchesLabel": "Načíst výběr záplat",
|
||||
"importPatchesHint": "Importovat výběr záplat ze souboru JSON",
|
||||
"importedPatches": "Výběr záplat importován",
|
||||
"resetStoredPatchesLabel": "Resetovat záplaty",
|
||||
"resetStoredPatchesHint": "Resetovat výběr uložených záplat",
|
||||
"resetStoredPatches": "Výběr záplat byl resetován",
|
||||
"jsonSelectorErrorMessage": "Vybraný JSON soubor nelze použít",
|
||||
"deleteLogsLabel": "Smazat logy",
|
||||
"deleteLogsHint": "Odstranit shromážděné logy správce",
|
||||
"deletedLogs": "Logy smazány"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Informace o aplikaci",
|
||||
"openButton": "Otevřít",
|
||||
"uninstallButton": "Odinstalovat",
|
||||
"patchButton": "Záplatovat",
|
||||
"unpatchButton": "Odebrat záplaty",
|
||||
"unpatchDialogText": "Jste si jisti, že chcete odzáplatovat tuto aplikaci?",
|
||||
"rootDialogTitle": "Chyba",
|
||||
"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.",
|
||||
"packageNameLabel": "Název balíčku",
|
||||
"originalPackageNameLabel": "Původní název souboru",
|
||||
"installTypeLabel": "Typ instalace",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Non-root",
|
||||
"patchedDateLabel": "Datum záplaty",
|
||||
"patchedDateHint": "{date} v {time}",
|
||||
"appliedPatchesLabel": "Použité záplaty",
|
||||
"appliedPatchesHint": "{quantity} použitých záplat",
|
||||
"updateNotImplemented": "Tato funkce ještě není implementována"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Přispěvatelé",
|
||||
"patcherContributors": "Zobrazit přispěvatele",
|
||||
"patchesContributors": "Zobrazit přispěvatele",
|
||||
"integrationsContributors": "Přispěvatelé integrace",
|
||||
"cliContributors": "Přispěvatelé CLI",
|
||||
"managerContributors": "Přispěvatelé správce"
|
||||
}
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Afbryd",
|
||||
"updateButton": "Opdatér",
|
||||
"enabledLabel": "Aktiveret",
|
||||
"disabledLabel": "Deaktiveret",
|
||||
"yesButton": "Ja",
|
||||
"noButton": "Nej",
|
||||
"warning": "Advarsel",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Oversigt",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Indstillinger"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Oversigt",
|
||||
"updatesSubtitle": "Opdateringer",
|
||||
"patchedSubtitle": "Patchede applikationer",
|
||||
"updatesAvailable": "Opdateringer tilgængelige",
|
||||
"noUpdates": "Ingen tilgængelige opdateringer",
|
||||
"WIP": "Under udvikling...",
|
||||
"noInstallations": "Ingen patchede apps installeret",
|
||||
"installed": "Installeret",
|
||||
"updateDialogTitle": "Opdater Manager",
|
||||
"updateChangelogTitle": "Ændringslog",
|
||||
"notificationTitle": "Opdatering downloadet",
|
||||
"notificationText": "Tryk for at installere opdateringen",
|
||||
"downloadingMessage": "Downloader opdatering...",
|
||||
"installingMessage": "Installerer opdatering...",
|
||||
"errorDownloadMessage": "Kunne ikke downloade opdateringen",
|
||||
"errorInstallMessage": "Kunne ikke installere opdateringen",
|
||||
"noConnection": "Ingen Internetforbindelse",
|
||||
"updatesDisabled": "Opdatering af en patchet app er i øjeblikket deaktiveret. Repatch appen igen."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Patch",
|
||||
"infoButton": "Info",
|
||||
"changelogLabel": "Ændringslog"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Indlæser...",
|
||||
"timeagoLabel": "{time} siden",
|
||||
"patcherLabel": "Patcher: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Opdater Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Patch",
|
||||
"patchDialogText": "Du har valgt en ressource-patch, og en split APK-installation er blevet opdaget, så patch-fejl kan forekomme.\nEr du sikker på at du vil fortsætte?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Vælg en applikation",
|
||||
"widgetTitleSelected": "Valgt applikation",
|
||||
"widgetSubtitle": "Ingen applikation valgt",
|
||||
"noAppsLabel": "Ingen applikationer fundet",
|
||||
"currentVersion": "Nuværende",
|
||||
"recommendedVersion": "Anbefalet",
|
||||
"anyVersion": "enhver"
|
||||
},
|
||||
"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 applikation",
|
||||
"searchBarHint": "Søg efter applikationer",
|
||||
"storageButton": "Lager",
|
||||
"errorMessage": "Kunne ikke bruge valgte applikation"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Vælg patches",
|
||||
"searchBarHint": "Søg efter patches",
|
||||
"doneButton": "Udført",
|
||||
"recommended": "Anbefalet",
|
||||
"all": "Alle",
|
||||
"none": "Ingen",
|
||||
"loadPatchesSelection": "Indlæs patches udvælgelse",
|
||||
"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",
|
||||
"selectAllPatchesWarningContent": "Du er ved at vælge alle patches, der inkluderer ikke-anbefalede patches, og kan forårsage uønsket adfærd."
|
||||
},
|
||||
"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 for denne app-version. Aktivér den eksperimentelle indstilling i indstillinger for at fortsætte."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Installationsprogram",
|
||||
"installButton": "Installér",
|
||||
"installRootButton": "Installér som Root",
|
||||
"openButton": "Åbn",
|
||||
"shareButton": "Del fil",
|
||||
"notificationTitle": "ReVanced Manager patcher",
|
||||
"notificationText": "Tryk for at gå tilbage til installationsprogrammet",
|
||||
"shareApkMenuOption": "Del APK",
|
||||
"exportApkMenuOption": "Eksportér APK",
|
||||
"shareLogMenuOption": "Del log",
|
||||
"installErrorDialogTitle": "Fejl",
|
||||
"installErrorDialogText1": "Root-installation er ikke muligt med de nuværende valgte patches.\nRepatch din app eller vælg ikke-root installation.",
|
||||
"installErrorDialogText2": "Ikke-root installation er ikke muligt med de nuværende valgte patches.\nRepatch din app eller vælg root-installation hvis du har din enhed rooted.",
|
||||
"installErrorDialogText3": "Root-installation er ikke muligt, da den oprindelige APK blev valgt fra lager.\nVælg en installeret app eller vælg ikke-root installation.",
|
||||
"noExit": "Installationen kører stadig, kan ikke afslutte..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Indstillinger",
|
||||
"appearanceSectionTitle": "Udseende",
|
||||
"teamSectionTitle": "Holdet",
|
||||
"infoSectionTitle": "Info",
|
||||
"advancedSectionTitle": "Avanceret",
|
||||
"logsSectionTitle": "Logfiler",
|
||||
"darkThemeLabel": "Mørk tilstand",
|
||||
"darkThemeHint": "Velkommen til den mørke side",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Nyd en oplevelse tættere på din enhed",
|
||||
"languageLabel": "Sprog",
|
||||
"englishOption": "Engelsk",
|
||||
"sourcesLabel": "Kilder",
|
||||
"sourcesLabelHint": "Konfigurér dine brugerdefinerede kilder",
|
||||
"hostRepositoryLabel": "Repository API",
|
||||
"orgPatchesLabel": "Organisation for Patches",
|
||||
"sourcesPatchesLabel": "Kilde til Patches",
|
||||
"orgIntegrationsLabel": "Organisation for Integrationer",
|
||||
"sourcesIntegrationsLabel": "Kilde til Integrationer",
|
||||
"sourcesResetDialogTitle": "Nulstil",
|
||||
"sourcesResetDialogText": "Er du sikker på, at du vil nulstille brugerdefinerede kilder til deres standardværdier?",
|
||||
"apiURLResetDialogText": "Er du sikker på, at du vil nulstille API URL til dens standardværdi?",
|
||||
"contributorsLabel": "Medvirkende",
|
||||
"contributorsHint": "En liste over medvirkende til ReVanced",
|
||||
"logsLabel": "Logfiler",
|
||||
"logsHint": "Del Manager's logfiler",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Konfigurer din brugerdefineret API URL",
|
||||
"selectApiURL": "API URL",
|
||||
"experimentalUniversalPatchesLabel": "Understøttelse af eksperimentelle universale patches",
|
||||
"experimentalUniversalPatchesHint": "Vis alle applikationer der skal bruges med universelle patches, indlæsningslisten over apps kan være langsommere",
|
||||
"experimentalPatchesLabel": "Understøttelse af eksperimentelle patches",
|
||||
"experimentalPatchesHint": "Aktiver brugen af ikke-understøttede patches i enhver app version",
|
||||
"enabledExperimentalPatches": "Understøttelse af eksperimentelle patches aktiveret",
|
||||
"exportSectionTitle": "Import & eksport",
|
||||
"aboutLabel": "Om",
|
||||
"snackbarMessage": "Kopieret til udklipsholder",
|
||||
"sentryLabel": "Sentry logning",
|
||||
"sentryHint": "Send anonyme logfiler for at hjælpe os med at forbedre ReVanced Manager",
|
||||
"restartAppForChanges": "Genstart appen for at anvende ændringer",
|
||||
"deleteKeystoreLabel": "Slet keystore",
|
||||
"deleteKeystoreHint": "Slet keystore der bruges til at signere appen",
|
||||
"deletedKeystore": "Keystore slettet",
|
||||
"deleteTempDirLabel": "Slet midlertidige filer",
|
||||
"deleteTempDirHint": "Slet ubrugte midlertidige filer",
|
||||
"deletedTempDir": "Midlertidige filer slettet",
|
||||
"exportPatchesLabel": "Eksportér valgte patches",
|
||||
"exportPatchesHint": "Eksportér valgte patches til en JSON-fil",
|
||||
"exportedPatches": "Valgte patches eksporteret",
|
||||
"noExportFileFound": "Ingen patches valgt til eksport",
|
||||
"importPatchesLabel": "Importér valgte patches",
|
||||
"importPatchesHint": "Importér valgte patches fra en JSON-fil",
|
||||
"importedPatches": "Valgte patches importeret",
|
||||
"resetStoredPatchesLabel": "Nulstil patches",
|
||||
"resetStoredPatchesHint": "Nulstil den gemte patches udvælgelse",
|
||||
"resetStoredPatches": "Patches udvægelse er blevet nulstillet",
|
||||
"jsonSelectorErrorMessage": "Kan ikke bruge den valgte JSON-fil",
|
||||
"deleteLogsLabel": "Slet logfiler",
|
||||
"deleteLogsHint": "Slet indsamlede manager-logfiler",
|
||||
"deletedLogs": "Logfiler slettet"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Appinfo",
|
||||
"openButton": "Åbn",
|
||||
"uninstallButton": "Afinstallér",
|
||||
"patchButton": "Patch",
|
||||
"unpatchButton": "Unpatch",
|
||||
"unpatchDialogText": "Er du sikker på du vil unpatche denne app?",
|
||||
"rootDialogTitle": "Fejl",
|
||||
"rootDialogText": "App blev installeret med superbruger tilladelser, men i øjeblikket har ReVanced Manager ingen tilladelser.\nGiv superbruger tilladelser først.",
|
||||
"packageNameLabel": "Pakkenavn",
|
||||
"originalPackageNameLabel": "Oprindeligt pakkenavn",
|
||||
"installTypeLabel": "Installationstype",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Ikke-root",
|
||||
"patchedDateLabel": "Dato for patching",
|
||||
"patchedDateHint": "{date} kl. {time}",
|
||||
"appliedPatchesLabel": "Anvendte patches",
|
||||
"appliedPatchesHint": "{quantity} anvendte patches",
|
||||
"updateNotImplemented": "Denne funktion er ikke implementeret endnu"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Medvirkende",
|
||||
"patcherContributors": "Patcher bidragere",
|
||||
"patchesContributors": "Patches bidragere",
|
||||
"integrationsContributors": "Integrationer bidragere",
|
||||
"cliContributors": "CLI bidragere",
|
||||
"managerContributors": "Manager bidragere"
|
||||
}
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Abbrechen",
|
||||
"updateButton": "Aktualisieren",
|
||||
"enabledLabel": "Aktiviert",
|
||||
"disabledLabel": "Deaktiviert",
|
||||
"yesButton": "Ja",
|
||||
"noButton": "Nein",
|
||||
"warning": "Warnung",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Übersicht",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Einstellungen"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Übersicht",
|
||||
"updatesSubtitle": "Aktualisierungen",
|
||||
"patchedSubtitle": "Gepatchte Apps",
|
||||
"updatesAvailable": "Aktualisierungen verfügbar",
|
||||
"noUpdates": "Keine Aktualisierungen verfügbar",
|
||||
"WIP": "In Bearbeitung...",
|
||||
"noInstallations": "Keine gepatchten Apps installiert",
|
||||
"installed": "Installiert",
|
||||
"updateDialogTitle": "Manager aktualisieren",
|
||||
"updateChangelogTitle": "Änderungsverlauf",
|
||||
"notificationTitle": "Update heruntergeladen",
|
||||
"notificationText": "Tippen um Update zu installieren",
|
||||
"downloadingMessage": "Aktualisierung wird heruntergeladen...",
|
||||
"installingMessage": "Update wird installiert...",
|
||||
"errorDownloadMessage": "Aktualisierung konnte nicht heruntergeladen werden",
|
||||
"errorInstallMessage": "Aktualisierung konnte nicht installiert werden",
|
||||
"noConnection": "Keine Internetverbindung",
|
||||
"updatesDisabled": "Das Aktualisieren einer gepatchten App ist derzeit deaktiviert. Patche die App erneut."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Patchen",
|
||||
"infoButton": "Info",
|
||||
"changelogLabel": "Änderungsverlauf"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Lädt...",
|
||||
"timeagoLabel": "vor {time}",
|
||||
"patcherLabel": "Patcher: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Manager aktualisieren"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Patchen",
|
||||
"patchDialogText": "Du hast einen Patch ausgewählt und eine geteilte APK-Installation wurde entdeckt, daher können Fehler beim Patchen auftreten.\nMöchtest du wirklich die geteilte APK patchen?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Wähle eine App aus",
|
||||
"widgetTitleSelected": "Ausgewählte App",
|
||||
"widgetSubtitle": "Keine App ausgewählt",
|
||||
"noAppsLabel": "Keine Apps gefunden",
|
||||
"currentVersion": "Aktuell",
|
||||
"recommendedVersion": "Empfohlen",
|
||||
"anyVersion": "beliebig"
|
||||
},
|
||||
"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": "Wähle eine App aus",
|
||||
"searchBarHint": "Apps suchen",
|
||||
"storageButton": "Speicher",
|
||||
"errorMessage": "Ausgewählte App kann nicht verwendet werden"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Patches auswählen",
|
||||
"searchBarHint": "Patches suchen",
|
||||
"doneButton": "Fertig",
|
||||
"recommended": "Empfohlen",
|
||||
"all": "Alle",
|
||||
"none": "Keine",
|
||||
"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",
|
||||
"selectAllPatchesWarningContent": "Du bist dabei alle Patches auszuwählen, dies beinhaltet nicht empfohlene Patches und kann zu unerwünschtem Verhalten führen."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Die Auswahl dieses Patches kann zu Fehlern beim Patchen führen.\n\nApp-Version: {packageVersion}\nUnterstützte Versionen:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "Der Patch unterstützt diese Version der App nicht. Aktiviere in den Einstellungen die experimentellen Funktionen, um fortzufahren."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Installer",
|
||||
"installButton": "Installieren",
|
||||
"installRootButton": "Als Root installieren",
|
||||
"openButton": "Öffnen",
|
||||
"shareButton": "Datei teilen",
|
||||
"notificationTitle": "ReVanced Manager patcht",
|
||||
"notificationText": "Tippen, um zum Installer zurückzukehren",
|
||||
"shareApkMenuOption": "APK teilen",
|
||||
"exportApkMenuOption": "APK exportieren",
|
||||
"shareLogMenuOption": "Protokoll teilen",
|
||||
"installErrorDialogTitle": "Fehler",
|
||||
"installErrorDialogText1": "Installation per Root ist mit den aktuell ausgewählten Patches nicht möglich.\nPatche die App erneut oder installiere sie ohne Root.",
|
||||
"installErrorDialogText2": "Installation ohne Root-Rechte ist mit den aktuell ausgewählten Patches nicht möglich.\nPatche die App erneut oder installiere sie mit Root-Rechten, wenn dein Gerät gerooted ist.",
|
||||
"installErrorDialogText3": "Root-Installation ist nicht möglich, da die ursprüngliche APK aus dem Speicher ausgewählt wurde.\nWähle eine installierte App oder wähle die Installation ohne Root.",
|
||||
"noExit": "Der Installer wird noch ausgeführt, kann nicht beendet werden..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Einstellungen",
|
||||
"appearanceSectionTitle": "Darstellung",
|
||||
"teamSectionTitle": "Team",
|
||||
"infoSectionTitle": "Informationen",
|
||||
"advancedSectionTitle": "Erweitert",
|
||||
"logsSectionTitle": "Logs",
|
||||
"darkThemeLabel": "Dunkler Modus",
|
||||
"darkThemeHint": "Willkommen auf der dunklen Seite",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Genieße ein Erlebnis näher an deinem Gerät",
|
||||
"languageLabel": "Sprache",
|
||||
"englishOption": "Englisch",
|
||||
"sourcesLabel": "Quellen",
|
||||
"sourcesLabelHint": "Konfiguriere deine eigenen Quellen",
|
||||
"hostRepositoryLabel": "Repository-API",
|
||||
"orgPatchesLabel": "Patches Organisation",
|
||||
"sourcesPatchesLabel": "Quelle für Patche",
|
||||
"orgIntegrationsLabel": "Integrationen Organisation",
|
||||
"sourcesIntegrationsLabel": "Quelle für Integrationen",
|
||||
"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?",
|
||||
"contributorsLabel": "Mitwirkende",
|
||||
"contributorsHint": "Eine Liste der Mitwirkenden von ReVanced",
|
||||
"logsLabel": "Protokolle",
|
||||
"logsHint": "Manager-Protokolle teilen",
|
||||
"apiURLLabel": "API-URL",
|
||||
"apiURLHint": "Konfiguriere deine eigene API-URL",
|
||||
"selectApiURL": "API URL",
|
||||
"experimentalUniversalPatchesLabel": "Unterstützung für universelle Patches (experimentell)",
|
||||
"experimentalUniversalPatchesHint": "Zeigt alle Apps zur Verwendung mit universellen Patches, dadurch lädt die App-Liste evtl. langsamer",
|
||||
"experimentalPatchesLabel": "Experimentelle Patches aktiviert",
|
||||
"experimentalPatchesHint": "Erlaubt die Benutzung von nicht unterstützten Patches mit jeder App Version",
|
||||
"enabledExperimentalPatches": "Experimentelle Patches Unterstützung aktiviert",
|
||||
"exportSectionTitle": "Import und Export",
|
||||
"aboutLabel": "Über",
|
||||
"snackbarMessage": "In die Zwischenablage kopiert",
|
||||
"sentryLabel": "Sentry-Protokollierung",
|
||||
"sentryHint": "Sende anonyme Protokolle, um den ReVanced Manager zu verbessern",
|
||||
"restartAppForChanges": "Starte die App neu um die Änderungen zu übernehmen",
|
||||
"deleteKeystoreLabel": "Den Schlüsselspeicher löschen",
|
||||
"deleteKeystoreHint": "Löschen des Schlüsselspeichers, der zum Signieren der Anwendung verwendet wurde",
|
||||
"deletedKeystore": "Schlüsselspeicher gelöscht",
|
||||
"deleteTempDirLabel": "Lösche temporäre Dateien",
|
||||
"deleteTempDirHint": "Unbenutzte temporäre Dateien löschen",
|
||||
"deletedTempDir": "Temporäre Dateien gelöscht",
|
||||
"exportPatchesLabel": "Patchauswahl exportieren",
|
||||
"exportPatchesHint": "Patchauswahl als JSON-Datei exportieren",
|
||||
"exportedPatches": "Patchauswahl exportiert",
|
||||
"noExportFileFound": "Keine Patches zum Exportieren ausgewählt",
|
||||
"importPatchesLabel": "Patchauswahl importieren",
|
||||
"importPatchesHint": "Patchauswahl aus JSON-Datei importieren",
|
||||
"importedPatches": "Patchauswahl importiert",
|
||||
"resetStoredPatchesLabel": "Patches zurücksetzen",
|
||||
"resetStoredPatchesHint": "Gespeicherte Auswahl der Patches zurücksetzen",
|
||||
"resetStoredPatches": "Patchauswahl wurde zurückgesetzt",
|
||||
"jsonSelectorErrorMessage": "Ausgewählte JSON-Datei kann nicht verwendet werden",
|
||||
"deleteLogsLabel": "Logs löschen",
|
||||
"deleteLogsHint": "Lösche gesammelte Logs von dem Manager",
|
||||
"deletedLogs": "Logs gelöscht"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "App Info",
|
||||
"openButton": "Öffnen",
|
||||
"uninstallButton": "Deinstallieren",
|
||||
"patchButton": "Patchen",
|
||||
"unpatchButton": "Patches entfernen",
|
||||
"unpatchDialogText": "Bist du sicher, dass du die Patches dieser App entfernen möchtest?",
|
||||
"rootDialogTitle": "Fehler",
|
||||
"rootDialogText": "Die App wurde mit Superuser-Berechtigungen installiert, aber derzeit hat ReVanced Manager keine Berechtigungen.\nBitte erteile zuerst Superuser-Berechtigungen.",
|
||||
"packageNameLabel": "Paketname",
|
||||
"originalPackageNameLabel": "Ursprünglicher Paketname",
|
||||
"installTypeLabel": "Installationsart",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Nicht gerooted",
|
||||
"patchedDateLabel": "Patch-Datum",
|
||||
"patchedDateHint": "{date} um {time}",
|
||||
"appliedPatchesLabel": "Angewandte Patches",
|
||||
"appliedPatchesHint": "{quantity} angewandte Patches",
|
||||
"updateNotImplemented": "Diese Funktion ist noch nicht implementiert"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Mitwirkende",
|
||||
"patcherContributors": "Patcher Mitwirkende",
|
||||
"patchesContributors": "Patches Mitwirkende",
|
||||
"integrationsContributors": "Integrations Mitwirkende",
|
||||
"cliContributors": "CLI mitwirkende",
|
||||
"managerContributors": "Manager mitwirkende"
|
||||
}
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
{
|
||||
"okButton": "Εντάξει",
|
||||
"cancelButton": "Ακύρωση",
|
||||
"updateButton": "Ενημέρωση",
|
||||
"enabledLabel": "Ενεργό",
|
||||
"disabledLabel": "Ανενεργό",
|
||||
"yesButton": "Ναι",
|
||||
"noButton": "Όχι",
|
||||
"warning": "Προειδοποίηση",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Πίνακας Ελέγχου",
|
||||
"patcherTab": "Τροποποιητής",
|
||||
"settingsTab": "Ρυθμίσεις"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Πίνακας Ελέγχου",
|
||||
"updatesSubtitle": "Ενημερώσεις",
|
||||
"patchedSubtitle": "Τροποποιημένες Εφαρμογές",
|
||||
"updatesAvailable": "Διαθέσιμες ενημερώσεις",
|
||||
"noUpdates": "Δεν υπάρχουν διαθέσιμες ενημερώσεις",
|
||||
"WIP": "Υπό κατασκευή...",
|
||||
"noInstallations": "Δεν έχουν εγκατασταθεί τροποποιημένες εφαρμογές",
|
||||
"installed": "Εγκατεστημένες",
|
||||
"updateDialogTitle": "Ενημέρωση του Manager",
|
||||
"updateChangelogTitle": "Τι νέο υπάρχει",
|
||||
"notificationTitle": "Η λήψη της ενημέρωσης ολοκληρώθηκε",
|
||||
"notificationText": "Πατήστε για την εγκατάσταση της ενημέρωσης",
|
||||
"downloadingMessage": "Λήψη ενημέρωσης...",
|
||||
"installingMessage": "Εγκατάσταση ενημέρωσης...",
|
||||
"errorDownloadMessage": "Αδυναμία λήψης ενημέρωσης",
|
||||
"errorInstallMessage": "Αδυναμία εγκατάστασης ενημέρωσης",
|
||||
"noConnection": "Δεν υπάρχει σύνδεση στο διαδίκτυο",
|
||||
"updatesDisabled": "Η ενημέρωση τροποποιημένης εφαρμογής είναι ανενεργή προς το παρόν. Τροποποιήστε την εφαρμογή εκ νέου."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Τροποποίηση",
|
||||
"infoButton": "Πληροφορίες",
|
||||
"changelogLabel": "Τι νέο υπάρχει"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Φόρτωση...",
|
||||
"timeagoLabel": "{time} πριν",
|
||||
"patcherLabel": "Τροποποιητής: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Ενημέρωση του Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Τροποποιητής",
|
||||
"patchButton": "Τροποποίηση",
|
||||
"patchDialogText": "Έχετε επιλέξει κάποια τροποποίηση ενώ έχει εντοπιστεί εγκατάσταση split APK, μπορεί να εμφανιστούν σφάλματα κατά την τροποποίηση.\nΕίστε βέβαιοι ότι θέλετε να προχωρήσετε με την τροποποίηση ενός split base APK;"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Επιλέξτε μια εφαρμογή",
|
||||
"widgetTitleSelected": "Επιλεγμένη εφαρμογή",
|
||||
"widgetSubtitle": "Δεν έχει επιλεχθεί εφαρμογή",
|
||||
"noAppsLabel": "Δεν βρέθηκαν εφαρμογές",
|
||||
"currentVersion": "Τρέχουσα",
|
||||
"recommendedVersion": "Προτεινόμενη",
|
||||
"anyVersion": "οποιαδήποτε"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Επιλέξτε τροποποιήσεις",
|
||||
"widgetTitleSelected": "Επιλεγμένες τροποποιήσεις",
|
||||
"widgetSubtitle": "Επιλέξτε πρώτα μια εφαρμογή",
|
||||
"widgetEmptySubtitle": "Δεν επιλέχθηκαν τροποποιήσεις"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Κοινωνικά Δίκτυα",
|
||||
"widgetSubtitle": "Είμαστε ενεργοί!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Επιλέξτε μια εφαρμογή",
|
||||
"searchBarHint": "Αναζήτηση εφαρμογών",
|
||||
"storageButton": "Αποθηκευτικός χώρος",
|
||||
"errorMessage": "Αδυναμία χρήσης της επιλεγμένης εφαρμογής"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Επιλέξτε τροποποιήσεις",
|
||||
"searchBarHint": "Αναζήτηση τροποποιήσεων",
|
||||
"doneButton": "Τέλος",
|
||||
"recommended": "Προτεινόμενα",
|
||||
"all": "Όλα",
|
||||
"none": "Κανένα",
|
||||
"loadPatchesSelection": "Φόρτωση επιλεγμένων τροποποιήσεων",
|
||||
"noSavedPatches": "Δεν υπάρχουν αποθηκευμένες τροποποιήσεις για την εφαρμογή που επιλέξατε.\nΠατήστε «Τέλος» για να αποθηκεύσετε τις τωρινές επιλογές σας.",
|
||||
"noPatchesFound": "Δε βρέθηκαν τροποποιήσεις για την επιλεγμένη εφαρμογή",
|
||||
"selectAllPatchesWarningContent": "Πρόκειται να επιλέξτε όλες τις μη συνιστώμενες τροποποιήσεις, μπορεί να προκληθεί ανεπιθύμητη συμπεριφορά."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Η επιλογή αυτής της τροποποίησης μπορεί να επιφέρει σφάλματα τροποποίησης.\n\nΈκδοση εφαρμογής: {packageVersion}\nΥποστηριζόμενες εκδόσεις: {supportedVersions}",
|
||||
"unsupportedPatchVersion": "Η τροποποίηση δεν είναι διαθέσιμη για αυτή την έκδοση της εφαρμογής. Ενεργοποιήστε την «Πειραματική Υποστήριξη Τροποποιήσεων» στις ρυθμίσεις για να συνεχίσετε."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Πρόγραμμα Εγκατάστασης",
|
||||
"installButton": "Εγκατάσταση",
|
||||
"installRootButton": "Εγκατάσταση με πρόσβαση root",
|
||||
"openButton": "Άνοιγμα",
|
||||
"shareButton": "Κοινοποίηση αρχείου",
|
||||
"notificationTitle": "Το ReVanced Manager πραγματοποιεί τροποποίηση",
|
||||
"notificationText": "Πατήστε για να επιστρέψετε στο πρόγραμμα εγκατάστασης",
|
||||
"shareApkMenuOption": "Κοινοποίηση Αρχείου APK",
|
||||
"exportApkMenuOption": "Εξαγωγή APK",
|
||||
"shareLogMenuOption": "Κοινοποίηση αρχείου καταγραφής",
|
||||
"installErrorDialogTitle": "Σφάλμα",
|
||||
"installErrorDialogText1": "Η εγκατάσταση με χρήση πρόσβασης root δεν είναι δυνατή με την τρέχουσα επιλογή τροποποιήσεων.\nΤροποποιήστε ξανά την εφαρμογή σας ή επιλέξτε εγκατάσταση χωρίς πρόσβαση root.",
|
||||
"installErrorDialogText2": "Η εγκατάσταση χωρίς πρόσβαση root δεν είναι δυνατή με την τρέχουσα επιλογή τροποποιήσεων.\nΕπιλέξτε άλλες τροποποιήσεις για την εφαρμογή σας ή επιλέξτε εγκατάσταση με πρόσβαση root αν έχετε πρόσβαση root στη συσκευή σας.",
|
||||
"installErrorDialogText3": "Η εγκατάσταση με πρόσβαση root δεν είναι δυνατή διότι το αρχικό APK επιλέχθηκε από το χώρο αποθήκευσης.\nΕπιλέξτε μια εγκατεστημένη εφαρμογή ή επιλέξτε εγκατάσταση χωρίς πρόσβαση root.",
|
||||
"noExit": "Το πρόγραμμα εγκατάστασης εκτελείται ακόμη, αδυναμία εξόδου..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Ρυθμίσεις",
|
||||
"appearanceSectionTitle": "Εμφάνιση",
|
||||
"teamSectionTitle": "Ομάδα",
|
||||
"infoSectionTitle": "Πληροφορίες",
|
||||
"advancedSectionTitle": "Για Προχωρημένους",
|
||||
"logsSectionTitle": "Αρχεία καταγραφής",
|
||||
"darkThemeLabel": "Σκουρόχρωμη λειτουργία",
|
||||
"darkThemeHint": "Καλώς ήλθατε στη σκοτεινή πλευρά",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Εμφάνιση που ταιριάζει με τη δική σας συσκευή",
|
||||
"languageLabel": "Γλώσσα",
|
||||
"englishOption": "Αγγλικά",
|
||||
"sourcesLabel": "Πηγές",
|
||||
"sourcesLabelHint": "Διαμορφώστε τις δικές σας προσαρμοσμένες πηγές",
|
||||
"hostRepositoryLabel": "Αποθετήριο API",
|
||||
"orgPatchesLabel": "Οργάνωση τροποποιήσεων",
|
||||
"sourcesPatchesLabel": "Πηγή τροποποιήσεων",
|
||||
"orgIntegrationsLabel": "Οργάνωση ενσωματώσεων",
|
||||
"sourcesIntegrationsLabel": "Πηγή ενσωματώσεων",
|
||||
"sourcesResetDialogTitle": "Επαναφορά",
|
||||
"sourcesResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τις προσαρμοσμένες πηγές στις προεπιλεγμένες τιμές τους;",
|
||||
"apiURLResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε το API URL στην προεπιλεγμένη τιμή του;",
|
||||
"contributorsLabel": "Συνεισφέροντες",
|
||||
"contributorsHint": "Λίστα με όσους έχουν συμβάλει στο ReVanced",
|
||||
"logsLabel": "Αρχεία καταγραφής",
|
||||
"logsHint": "Κοινή χρήση αρχείων καταγραφής του ReVanced Manager",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Διαμορφώστε το δικό σας προσαρμοσμένο API URL",
|
||||
"selectApiURL": "Διεύθυνση URL API",
|
||||
"experimentalUniversalPatchesLabel": "Υποστήριξη γενικευμένων πειραματικών τροποποιήσεων",
|
||||
"experimentalUniversalPatchesHint": "Εμφάνιση όλων των εφαρμογών (για χρήση τροποποιήσεων που λειτουργούν σε κάθε εφαρμογή), η φόρτωση της λίστας εφαρμογών μπορεί να καθυστερεί περισσότερο",
|
||||
"experimentalPatchesLabel": "Πειραματική υποστήριξη τροποποιήσεων",
|
||||
"experimentalPatchesHint": "Ενεργοποιήστε το για χρήση μη υποστηριζόμενων τροποποιήσεων, ανεξαρτήτως έκδοσης εφαρμογής",
|
||||
"enabledExperimentalPatches": "Πειραματική υποστήριξη τροποποιήσεων ενεργή",
|
||||
"exportSectionTitle": "Εισαγωγή & εξαγωγή",
|
||||
"aboutLabel": "Σχετικά με",
|
||||
"snackbarMessage": "Αντιγράφηκε στο πρόχειρο",
|
||||
"sentryLabel": "Αρχεία καταγραφής «Sentry»",
|
||||
"sentryHint": "Στείλτε ανώνυμα αρχεία καταγραφής για να μας βοηθήσετε να βελτιώσουμε το ReVanced Manager",
|
||||
"restartAppForChanges": "Επανεκκινήστε την εφαρμογή για να εφαρμόσετε αλλαγές",
|
||||
"deleteKeystoreLabel": "Διαγραφή κλειδιών",
|
||||
"deleteKeystoreHint": "Διαγράψτε το κλειδί που χρησιμοποιείται για την υπογραφή της εφαρμογής",
|
||||
"deletedKeystore": "Το κλειδί διαγράφηκε",
|
||||
"deleteTempDirLabel": "Διαγραφή προσωρινών αρχείων",
|
||||
"deleteTempDirHint": "Διαγραφή των αχρησιμοποίητων προσωρινών αρχείων",
|
||||
"deletedTempDir": "Τα προσωρινά αρχεία διαγράφηκαν",
|
||||
"exportPatchesLabel": "Εξαγωγή των επιλεγμένων τροποποιήσεων",
|
||||
"exportPatchesHint": "Εξαγωγή των επιλεγμένων τροποποιήσεων σε ένα αρχείο JSON",
|
||||
"exportedPatches": "Η εξαγωγή των επιλεγμένων τροποποιήσεων ολοκληρώθηκε",
|
||||
"noExportFileFound": "Δεν υπάρχει επιλογή τροποποιήσεων για εξαγωγή",
|
||||
"importPatchesLabel": "Εισαγωγή των επιλεγμένων τροποποιήσεων",
|
||||
"importPatchesHint": "Εισαγωγή των επιλεγμένων τροποποιήσεων από ένα αρχείο JSON",
|
||||
"importedPatches": "Η εισαγωγή των επιλεγμένων τροποποιήσεων ολοκληρώθηκε",
|
||||
"resetStoredPatchesLabel": "Επαναφορά τροποποιήσεων",
|
||||
"resetStoredPatchesHint": "Επαναφορά των αποθηκευμένων επιλογών τροποποιήσεων",
|
||||
"resetStoredPatches": "Η επαναφορά των επιλεγμένων τροποποιήσεων ολοκληρώθηκε",
|
||||
"jsonSelectorErrorMessage": "Αδυναμία χρήσης του συγκεκριμένου αρχείου JSON",
|
||||
"deleteLogsLabel": "Διαγραφή αρχείων καταγραφής",
|
||||
"deleteLogsHint": "Διαγραφή των αρχείων καταγραφής που έχει συλλέξει το ReVanced Manager",
|
||||
"deletedLogs": "Τα αρχεία καταγραφής έχουν διαγραφεί"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Πληροφορίες εφαρμογής",
|
||||
"openButton": "Άνοιγμα",
|
||||
"uninstallButton": "Απεγκατάσταση",
|
||||
"patchButton": "Τροποποίηση",
|
||||
"unpatchButton": "Κατάργηση Τροποποιήσεων",
|
||||
"unpatchDialogText": "Είστε βέβαιοι ότι θέλετε να καταργήσετε τις τροποποιήσεις για αυτήν την εφαρμογή;",
|
||||
"rootDialogTitle": "Σφάλμα",
|
||||
"rootDialogText": "Η εφαρμογή εγκαταστάθηκε με πρόσβαση root, αλλά αυτή τη στιγμή το ReVanced Manager δεν έχει πρόσβαση root.\nΠαρακαλώ παραχωρήστε πρόσβαση root.",
|
||||
"packageNameLabel": "Όνομα πακέτου",
|
||||
"originalPackageNameLabel": "Αρχικό όνομα πακέτου",
|
||||
"installTypeLabel": "Τύπος εγκατάστασης",
|
||||
"rootTypeLabel": "Μέσω root",
|
||||
"nonRootTypeLabel": "Χωρίς root",
|
||||
"patchedDateLabel": "Ημερομηνία τροποποίησης",
|
||||
"patchedDateHint": "{date} στις {time}",
|
||||
"appliedPatchesLabel": "Τροποποιήσεις που έχουν εφαρμοστεί",
|
||||
"appliedPatchesHint": "{quantity} εφαρμοσμένες τροποποιήσεις",
|
||||
"updateNotImplemented": "Αυτή η δυνατότητα δεν είναι ακόμα διαθέσιμη"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Συνεισφέροντες",
|
||||
"patcherContributors": "Συνεισφέροντες του τροποποιητή",
|
||||
"patchesContributors": "Συνεισφέροντες των τροποποιήσεων",
|
||||
"integrationsContributors": "Συνεισφέροντες των ενσωματώσεων",
|
||||
"cliContributors": "Συνεισφέροντες του CLI",
|
||||
"managerContributors": "Συνεισφέροντες του Manager"
|
||||
}
|
||||
}
|
||||
@@ -1,216 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Cancel",
|
||||
"updateButton": "Update",
|
||||
"enabledLabel": "Enabled",
|
||||
"disabledLabel": "Disabled",
|
||||
"yesButton": "Yes",
|
||||
"noButton": "No",
|
||||
"warning": "Warning",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Dashboard",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Settings"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Refreshed successfully",
|
||||
"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",
|
||||
"updateChangelogTitle": "Changelog",
|
||||
"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?",
|
||||
"armv7WarningDialogText": "Patching on ARMv7 devices is not yet supported and might fail. Proceed anyways?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Select an application",
|
||||
"widgetTitleSelected": "Selected application",
|
||||
"widgetSubtitle": "No application selected",
|
||||
"noAppsLabel": "No applications found",
|
||||
"currentVersion": "Current",
|
||||
"suggestedVersion": "Suggested",
|
||||
"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",
|
||||
"selectFromStorageButton": "Select from storage",
|
||||
"storageButton": "Storage",
|
||||
"errorMessage": "Unable to use selected application",
|
||||
"downloadToast": "Download function is not available yet",
|
||||
"featureNotAvailable": "Feature not implemented",
|
||||
"featureNotAvailableText": "This feature has not been added yet for non-root. You'll need to select APK files from storage for now."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Select patches",
|
||||
"searchBarHint": "Search patches",
|
||||
"doneButton": "Done",
|
||||
"default": "Default",
|
||||
"defaultTooltip": "Select all default patches",
|
||||
"none": "None",
|
||||
"noneTooltip": "Deselect all patches",
|
||||
"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 non-suggested 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 the 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",
|
||||
"hostRepositoryLabel": "Repository API",
|
||||
"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",
|
||||
"experimentalUniversalPatchesLabel": "Experimental universal patches support",
|
||||
"experimentalUniversalPatchesHint": "Display all applications to use with universal patches, loading list of apps may be slower",
|
||||
"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",
|
||||
"restartAppForChanges": "Restart the app to apply changes",
|
||||
"deleteKeystoreLabel": "Delete keystore",
|
||||
"deleteKeystoreHint": "Delete the keystore used to sign the app",
|
||||
"deleteKeystoreDialogText": "Are you sure you want to delete the keystore used to sign patched applications?",
|
||||
"deletedKeystore": "Keystore deleted",
|
||||
"deleteTempDirLabel": "Delete temporary files",
|
||||
"deleteTempDirHint": "Delete 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",
|
||||
"exportKeystoreLabel": "Export keystore",
|
||||
"exportKeystoreHint": "Export keystore used to sign apps",
|
||||
"exportedKeystore": "Keystore exported",
|
||||
"noKeystoreExportFileFound": "No keystore to export",
|
||||
"importKeystoreLabel": "Import keystore",
|
||||
"importKeystoreHint": "Import keystore used to sign apps",
|
||||
"importedKeystore": "Keystore imported",
|
||||
"keystoreSelectorErrorMessage": "Unable to use selected KEYSTORE file",
|
||||
"selectKeystorePassword": "Keystore Password",
|
||||
"selectKeystorePasswordHint": "Select keystore password used to sign the apk"
|
||||
},
|
||||
"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,200 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Cancelar",
|
||||
"updateButton": "Actualizar",
|
||||
"enabledLabel": "Activado",
|
||||
"disabledLabel": "Desactivado",
|
||||
"yesButton": "Sí",
|
||||
"noButton": "No",
|
||||
"warning": "Advertencia",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Panel de control",
|
||||
"patcherTab": "Parcheador",
|
||||
"settingsTab": "Configuración"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Panel",
|
||||
"updatesSubtitle": "Actualizaciones",
|
||||
"patchedSubtitle": "Aplicaciones parcheadas",
|
||||
"updatesAvailable": "Actualizaciones disponibles",
|
||||
"noUpdates": "No hay actualizaciones disponibles",
|
||||
"WIP": "Trabajo en progreso...",
|
||||
"noInstallations": "No hay aplicaciones parcheadas instaladas",
|
||||
"installed": "Instalado",
|
||||
"updateDialogTitle": "Actualizar Manager",
|
||||
"updateChangelogTitle": "Registro de cambios",
|
||||
"notificationTitle": "Actualización descargada",
|
||||
"notificationText": "Toca para instalar la actualización",
|
||||
"downloadingMessage": "Descargando actualización...",
|
||||
"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",
|
||||
"updatesDisabled": "La actualización de una app parcheada está deshabilitada. Re-parchea la app de nuevo."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Parchear",
|
||||
"infoButton": "Información",
|
||||
"changelogLabel": "Historial de cambios"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Cargando...",
|
||||
"timeagoLabel": "Hace {time}",
|
||||
"patcherLabel": "Parcheador: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Actualizar Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Parcheador",
|
||||
"patchButton": "Parchear",
|
||||
"patchDialogText": "Acaba de seleccionar un parche de recursos y un \"Split APK\" ha sido detectado, así que pueden ocurrir algunos errores en el proceso de parcheo.\n¿Está seguro de que quiere continuar el parcheo de un \"Split APK\"?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Selecciona una aplicación",
|
||||
"widgetTitleSelected": "Aplicación seleccionada",
|
||||
"widgetSubtitle": "Ninguna aplicación seleccionada",
|
||||
"noAppsLabel": "No se encontraron aplicaciones",
|
||||
"currentVersion": "Versión actual",
|
||||
"recommendedVersion": "Versión recomendada",
|
||||
"anyVersion": "cualquiera"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Seleccionar parches",
|
||||
"widgetTitleSelected": "Parches seleccionados",
|
||||
"widgetSubtitle": "Seleccioné una aplicación antes",
|
||||
"widgetEmptySubtitle": "Ningún parche seleccionado"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Redes sociales",
|
||||
"widgetSubtitle": "¡Estamos en la red!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Selecciona una aplicación",
|
||||
"searchBarHint": "Buscar aplicaciones",
|
||||
"storageButton": "Almacenamiento",
|
||||
"errorMessage": "No se puede usar la aplicación seleccionada"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Seleccionar parches",
|
||||
"searchBarHint": "Buscar parches",
|
||||
"doneButton": "Listo",
|
||||
"recommended": "Recomendados",
|
||||
"all": "Todos",
|
||||
"none": "Ninguno",
|
||||
"loadPatchesSelection": "Cargar selección de parches",
|
||||
"noSavedPatches": "No hay parches guardados para la app seleccionada\nPresione Hecho para guardar la selección actual.",
|
||||
"noPatchesFound": "No se encontraron parches para la aplicación seleccionada",
|
||||
"selectAllPatchesWarningContent": "Está a punto de seleccionar todos los parches incluyendo parches no recomendados, lo cual puede causar comportamientos inesperados."
|
||||
},
|
||||
"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 app. Habilita la opción experimental en los ajustes para continuar."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Instalador",
|
||||
"installButton": "Instalar",
|
||||
"installRootButton": "Instalar como Root",
|
||||
"openButton": "Abrir",
|
||||
"shareButton": "Compartir archivo",
|
||||
"notificationTitle": "ReVanced Manager está parcheando",
|
||||
"notificationText": "Toque para volver al instalador",
|
||||
"shareApkMenuOption": "Compartir APK",
|
||||
"exportApkMenuOption": "Exportar APK",
|
||||
"shareLogMenuOption": "Compartir registros",
|
||||
"installErrorDialogTitle": "Error",
|
||||
"installErrorDialogText1": "La instalación como root no es posible con la selección actual de parches.\nVuelva a parchear la aplicación o elija una instalación no-root.",
|
||||
"installErrorDialogText2": "La instalación sin root no es posible con la selección actual de parches.\nVuelva a parchear la app o elija una instalación root.",
|
||||
"installErrorDialogText3": "La instalación como root no es posible porque la APK original fue seleccionada desde el almacenamiento.\nSeleccione una app ya instalada o utilice una instalación sin root.",
|
||||
"noExit": "El instalador todavía se está ejecutando, no se puede salir..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Configuración",
|
||||
"appearanceSectionTitle": "Apariencia",
|
||||
"teamSectionTitle": "Equipo",
|
||||
"infoSectionTitle": "Info",
|
||||
"advancedSectionTitle": "Avanzado",
|
||||
"logsSectionTitle": "Registros",
|
||||
"darkThemeLabel": "Modo oscuro",
|
||||
"darkThemeHint": "Bienvenido al lado oscuro",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Disfrute de una experiencia más acorde a su dispositivo",
|
||||
"languageLabel": "Idioma",
|
||||
"englishOption": "Inglés",
|
||||
"sourcesLabel": "Fuentes",
|
||||
"sourcesLabelHint": "Configure sus fuentes personalizadas",
|
||||
"hostRepositoryLabel": "Repositorio API",
|
||||
"orgPatchesLabel": "Organización de los parches",
|
||||
"sourcesPatchesLabel": "Fuente de los parches",
|
||||
"orgIntegrationsLabel": "Organización de integraciones",
|
||||
"sourcesIntegrationsLabel": "Fuente de las integraciones",
|
||||
"sourcesResetDialogTitle": "Restablecer",
|
||||
"sourcesResetDialogText": "¿Está seguro de que desea restablecer las fuentes personalizadas a sus valores predeterminados?",
|
||||
"apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de la API a su valor predeterminado?",
|
||||
"contributorsLabel": "Contribuidores",
|
||||
"contributorsHint": "Una lista de contribuidores de ReVanced",
|
||||
"logsLabel": "Registros",
|
||||
"logsHint": "Compartir registros del Manager",
|
||||
"apiURLLabel": "URL de la API",
|
||||
"apiURLHint": "Configure su URL personalizada para la API",
|
||||
"selectApiURL": "URL de la API",
|
||||
"experimentalUniversalPatchesLabel": "Soporte experimental para parches universales",
|
||||
"experimentalUniversalPatchesHint": "Mostrar todas las aplicaciones a usar con parches universales, la carga de la lista de aplicaciones puede ser más lenta",
|
||||
"experimentalPatchesLabel": "Soporte para parches experimentales",
|
||||
"experimentalPatchesHint": "Habilite el uso de parches no compatibles en cualquier versión de la app",
|
||||
"enabledExperimentalPatches": "Soporte para parches experimentales activado",
|
||||
"exportSectionTitle": "Importar y Exportar",
|
||||
"aboutLabel": "Acerca de",
|
||||
"snackbarMessage": "Copiado al portapapeles",
|
||||
"sentryLabel": "Registro Sentry",
|
||||
"sentryHint": "Enviar registros anónimos para ayudarnos a mejorar ReVanced Manager",
|
||||
"restartAppForChanges": "Reinicie la app para aplicar los cambios",
|
||||
"deleteKeystoreLabel": "Eliminar keystore",
|
||||
"deleteKeystoreHint": "Eliminar el keystore usado para firmar la app",
|
||||
"deletedKeystore": "Keystore eliminado",
|
||||
"deleteTempDirLabel": "Borrar archivos temporales",
|
||||
"deleteTempDirHint": "Eliminar archivos temporales no utilizados",
|
||||
"deletedTempDir": "Archivos temporales eliminados",
|
||||
"exportPatchesLabel": "Exportar la selección de parches",
|
||||
"exportPatchesHint": "Exportar selección de parches a un archivo JSON",
|
||||
"exportedPatches": "Selección de parches exportados",
|
||||
"noExportFileFound": "No hay selección de parches para exportar",
|
||||
"importPatchesLabel": "Importar la selección de parches",
|
||||
"importPatchesHint": "Importar selección de parches desde un archivo JSON",
|
||||
"importedPatches": "Selección de parches importados",
|
||||
"resetStoredPatchesLabel": "Restablecer parches",
|
||||
"resetStoredPatchesHint": "Restablece la selección de parches almacenados",
|
||||
"resetStoredPatches": "La selección de parches ha sido restablecida",
|
||||
"jsonSelectorErrorMessage": "No se puede utilizar el archivo JSON seleccionado",
|
||||
"deleteLogsLabel": "Eliminar registros",
|
||||
"deleteLogsHint": "Borrar los registros del Manager recopilados",
|
||||
"deletedLogs": "Registros eliminados"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Información de la app",
|
||||
"openButton": "Abrir",
|
||||
"uninstallButton": "Desinstalar",
|
||||
"patchButton": "Parchear",
|
||||
"unpatchButton": "Desparchear",
|
||||
"unpatchDialogText": "¿Está seguro de que desea desparchear esta aplicación?",
|
||||
"rootDialogTitle": "Error",
|
||||
"rootDialogText": "La app se instaló con permisos de superusuario, pero actualmente ReVanced Manager no tiene permisos.\nPor favor, concede permisos de superusuario primero.",
|
||||
"packageNameLabel": "Nombre del paquete",
|
||||
"originalPackageNameLabel": "Nombre del paquete original",
|
||||
"installTypeLabel": "Tipo de instalación",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "No-Root",
|
||||
"patchedDateLabel": "Fecha del parche",
|
||||
"patchedDateHint": "{date} a las {time}",
|
||||
"appliedPatchesLabel": "Parches aplicados",
|
||||
"appliedPatchesHint": "{quantity} parches aplicados",
|
||||
"updateNotImplemented": "Esta función no se ha implementado aún"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contribuidores",
|
||||
"patcherContributors": "Contribuidores de los parches",
|
||||
"patchesContributors": "Contribuidores de los parches",
|
||||
"integrationsContributors": "Contribuidores de las integraciones",
|
||||
"cliContributors": "Contribuidores del CLI",
|
||||
"managerContributors": "Contribuidores del Manager"
|
||||
}
|
||||
}
|
||||
@@ -1,196 +0,0 @@
|
||||
{
|
||||
"okButton": "Ok",
|
||||
"cancelButton": "Cancelar",
|
||||
"enabledLabel": "Activado",
|
||||
"disabledLabel": "Desactivado",
|
||||
"yesButton": "Si",
|
||||
"noButton": "No",
|
||||
"warning": "Advertencia",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Panel de control",
|
||||
"patcherTab": "Aplicador de parches",
|
||||
"settingsTab": "Ajustes"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Panel de control",
|
||||
"updatesSubtitle": "Actualizaciones",
|
||||
"patchedSubtitle": "Aplicaciones parcheadas",
|
||||
"updatesAvailable": "Actualizaciones disponibles",
|
||||
"noUpdates": "No hay actualizaciones disponibles",
|
||||
"WIP": "Trabajo en curso...",
|
||||
"noInstallations": "No hay aplicaciones parcheadas instaladas",
|
||||
"installed": "Instaladas",
|
||||
"updateDialogTitle": "Actualizar administrador",
|
||||
"updateDialogText": "¿Estás seguro de que quieres descargar y actualizar ReVanced Manager?",
|
||||
"notificationTitle": "Actualización descargada",
|
||||
"notificationText": "Toca para instalar la actualización",
|
||||
"downloadingMessage": "Descargando actualización...",
|
||||
"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",
|
||||
"updatesDisabled": "La actualización de una aplicación parcheada está deshabilitada. Vuelve a parchear la aplicación."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Parchear",
|
||||
"infoButton": "Información",
|
||||
"changelogLabel": "Registro de cambios"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Cargando...",
|
||||
"timeagoLabel": "hace {time}",
|
||||
"patcherLabel": "Patcher: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Actualizar ReVanced Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Parcheador",
|
||||
"patchButton": "Parchear",
|
||||
"patchDialogText": "Seleccionaste un parche de recursos y se ha detectado una instalación de APK dividida, por lo que pueden ocurrir errores de parcheado.\n¿Estás seguro de que deseas continuar?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Selecciona una aplicación",
|
||||
"widgetTitleSelected": "Aplicación seleccionada",
|
||||
"widgetSubtitle": "Ninguna aplicación seleccionada",
|
||||
"noAppsLabel": "No se encontraron aplicaciones",
|
||||
"currentVersion": "Versión actual",
|
||||
"recommendedVersion": "Versión recomendada",
|
||||
"anyVersion": "Cualquier versión"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Seleccionar parches",
|
||||
"widgetTitleSelected": "Parches seleccionados",
|
||||
"widgetSubtitle": "Seleccione primero una aplicación",
|
||||
"widgetEmptySubtitle": "Ningún parche seleccionado"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Redes sociales",
|
||||
"widgetSubtitle": "¡Estamos en línea!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Selecciona una aplicación",
|
||||
"searchBarHint": "Buscar aplicaciones",
|
||||
"storageButton": "Almacenamiento",
|
||||
"errorMessage": "No se puede usar la aplicación seleccionada"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Selecciona parches",
|
||||
"searchBarHint": "Buscar parches",
|
||||
"doneButton": "Completado",
|
||||
"recommended": "Recomendados",
|
||||
"all": "Todos",
|
||||
"none": "Ninguno",
|
||||
"loadPatchesSelection": "Cargar parches seleccionados",
|
||||
"noSavedPatches": "No hay parches guardados para la aplicacion seleccionada\nPresiona Listo para guardar la seleccion actual",
|
||||
"noPatchesFound": "No se encontraron parches para la aplicación seleccionada",
|
||||
"selectAllPatchesWarningContent": "Estás seleccionando todos los parches, esto incluye algunos que no están recomendados y podrían causar comportamientos inadecuados."
|
||||
},
|
||||
"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. Activa la opción experimental en la configuración para continuar."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Instalador",
|
||||
"installButton": "Instalar",
|
||||
"installRootButton": "Instalar como Root",
|
||||
"openButton": "Abrir",
|
||||
"shareButton": "Compartir archivo",
|
||||
"notificationTitle": "ReVanced Manager está parcheando",
|
||||
"notificationText": "Pulsa para volver al instalador",
|
||||
"shareApkMenuOption": "Compartir APK",
|
||||
"exportApkMenuOption": "Exportar APK",
|
||||
"shareLogMenuOption": "Compartir registro",
|
||||
"installErrorDialogTitle": "Error",
|
||||
"installErrorDialogText1": "La instalación de root no es posible con la selección de parches actual.\nVuelva a parchar su aplicación o elija una instalación sin-root.",
|
||||
"installErrorDialogText2": "La instalación sin-root no es posible con la selección de parches actual.\nVuelva a parchar su aplicación o elija una instalación con root, si tu dispositivo cuenta con ello.",
|
||||
"installErrorDialogText3": "La instalación con Root no es posible ya que la APK fue seleccionada desde el almacenamiento.\nSelecciona una aplicación instalada o elige la opcion no-root.",
|
||||
"noExit": "El instalador se está ejecutando, no puedes salir..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Ajustes",
|
||||
"appearanceSectionTitle": "Apariencia",
|
||||
"teamSectionTitle": "Equipo",
|
||||
"infoSectionTitle": "Información",
|
||||
"advancedSectionTitle": "Avanzado",
|
||||
"logsSectionTitle": "Registros",
|
||||
"darkThemeLabel": "Modo oscuro",
|
||||
"darkThemeHint": "Bienvenido al lado oscuro",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Disfruta de una experiencia más cercana a tu dispositivo",
|
||||
"languageLabel": "Idioma",
|
||||
"englishOption": "Inglés",
|
||||
"sourcesLabel": "Fuentes",
|
||||
"sourcesLabelHint": "Configura tus fuentes personalizadas",
|
||||
"orgPatchesLabel": "Organización de parches",
|
||||
"sourcesPatchesLabel": "Fuente de los parches",
|
||||
"orgIntegrationsLabel": "Organización de integraciones",
|
||||
"sourcesIntegrationsLabel": "Fuente de integraciones",
|
||||
"sourcesResetDialogTitle": "Reiniciar",
|
||||
"sourcesResetDialogText": "¿Esta seguro de reiniciar las fuentes personalizadas a su valor predeterminado?",
|
||||
"apiURLResetDialogText": "¿Esta seguro de restablecer la URL de la API a su valor predeterminado?",
|
||||
"contributorsLabel": "Contribuidores",
|
||||
"contributorsHint": "Lista de contribuidores de ReVanced",
|
||||
"logsLabel": "Registros",
|
||||
"logsHint": "Compartir registros de la aplicación",
|
||||
"apiURLLabel": "URL API",
|
||||
"apiURLHint": "Configure la URL personalizada de la API",
|
||||
"selectApiURL": "URL de la API",
|
||||
"experimentalPatchesLabel": "Soporte a parches experimentales",
|
||||
"experimentalPatchesHint": "Habilite el uso de parches no compatibles en cualquier versión de la aplicación",
|
||||
"enabledExperimentalPatches": "Soporte a parches experimentales activado",
|
||||
"exportSectionTitle": "Importar y Exportar",
|
||||
"aboutLabel": "Acerca de",
|
||||
"snackbarMessage": "Copiado al portapapeles",
|
||||
"sentryLabel": "Registro centinela",
|
||||
"sentryHint": "Enviar registros anónimos para ayudarnos a mejorar ReVanced Manager",
|
||||
"restartAppForChanges": "Reinicie la aplicación para aplicar los cambios",
|
||||
"deleteKeystoreLabel": "Eliminar keystore",
|
||||
"deleteKeystoreHint": "Eliminar el keystore usado para firmar la app",
|
||||
"deletedKeystore": "Keystore eliminado",
|
||||
"deleteTempDirLabel": "Borrar archivos temporales",
|
||||
"deleteTempDirHint": "Eliminar archivos temporales sin utilizar",
|
||||
"deletedTempDir": "Archivos temporales eliminados",
|
||||
"exportPatchesLabel": "Exportar la selección de parches",
|
||||
"exportPatchesHint": "Exportar 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": "Importar selección de parches desde un archivo JSON",
|
||||
"importedPatches": "Selección de parches importada",
|
||||
"resetStoredPatchesLabel": "Restablecer parches",
|
||||
"resetStoredPatchesHint": "Restablecer la selección de parches almacenados",
|
||||
"resetStoredPatches": "Se ha restablecido la selección de parches",
|
||||
"jsonSelectorErrorMessage": "No se puede utilizar el archivo JSON seleccionado",
|
||||
"deleteLogsLabel": "Eliminar registros",
|
||||
"deleteLogsHint": "Borrar los registros del administrador",
|
||||
"deletedLogs": "Registros eliminados"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Informacion de la applicacion",
|
||||
"openButton": "Abrir",
|
||||
"uninstallButton": "Desinstalar",
|
||||
"patchButton": "Parchar",
|
||||
"unpatchButton": "Desparchar",
|
||||
"unpatchDialogText": "¿Estás seguro que quieres remover el parche?",
|
||||
"rootDialogTitle": "Error",
|
||||
"rootDialogText": "La aplicación se instaló con permisos de superusuario, pero actualmente ReVanced Manager no tiene permisos.\nPor favor, conceda primero los permisos de superusuario.",
|
||||
"packageNameLabel": "Nombre del paquete",
|
||||
"originalPackageNameLabel": "Original package name",
|
||||
"installTypeLabel": "Installation type",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Sin-Root",
|
||||
"patchedDateLabel": "Fecha de parcheo",
|
||||
"patchedDateHint": "{date} a las {time}",
|
||||
"appliedPatchesLabel": "Parches aplicados",
|
||||
"appliedPatchesHint": "{quantity} parches aplicados",
|
||||
"updateNotImplemented": "Esta función aún no se ha implementado"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contribuidores",
|
||||
"patcherContributors": "Colaboradores del parcheador",
|
||||
"patchesContributors": "Colaboradores de parches",
|
||||
"integrationsContributors": "Colaboradores de la integración",
|
||||
"cliContributors": "Colaboradores de la CLI",
|
||||
"managerContributors": "Colaboradores del administrador"
|
||||
}
|
||||
}
|
||||
@@ -1,196 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Peruuta",
|
||||
"enabledLabel": "Käytössä",
|
||||
"disabledLabel": "Poistettu käytöstä",
|
||||
"yesButton": "Kyllä",
|
||||
"noButton": "Ei",
|
||||
"warning": "Varoitus",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Hallinta",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Asetukset"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Hallintapaneeli",
|
||||
"updatesSubtitle": "Päivitykset",
|
||||
"patchedSubtitle": "Paikatut sovellukset",
|
||||
"updatesAvailable": "Päivityksiä on saatavilla",
|
||||
"noUpdates": "Päivityksiä ei ole saatavilla",
|
||||
"WIP": "Työn alla...",
|
||||
"noInstallations": "Paikattuja sovelluksia ei ole asennettu",
|
||||
"installed": "Asennettu",
|
||||
"updateDialogTitle": "Päivitä Manager",
|
||||
"updateDialogText": "Haluatko varmasti ladata ja päivittää ReVanced Managerin?",
|
||||
"notificationTitle": "Päivitys ladattu",
|
||||
"notificationText": "Asenna päivitys napauttamalla",
|
||||
"downloadingMessage": "Ladataan päivitystä...",
|
||||
"installingMessage": "Asennetaan päivitystä...",
|
||||
"errorDownloadMessage": "Päivityksen lataus epäonnistui",
|
||||
"errorInstallMessage": "Päivityksen asennus epäonnistui",
|
||||
"noConnection": "Ei internetyhteyttä",
|
||||
"updatesDisabled": "Paikatun sovelluksen päivitys ei tällä hetkellä ole käytössä. Paikkaa sovellus uudelleen."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Paikkaa",
|
||||
"infoButton": "Info",
|
||||
"changelogLabel": "Muutosloki"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Ladataan...",
|
||||
"timeagoLabel": "{time} sitten",
|
||||
"patcherLabel": "Patcher: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Päivitä Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Paikkaa",
|
||||
"patchDialogText": "Olet valinnut resurssipaikkauksen ja havaittu asennus on ns. split APK -tyyppinen, joten paikkausvirheet ovat mahdollisia.\nHaluatko varmasti jatkaa ja paikata split APK -asennuksen?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Valitse sovellus",
|
||||
"widgetTitleSelected": "Valittu sovellus",
|
||||
"widgetSubtitle": "Sovellusta ei ole valittu",
|
||||
"noAppsLabel": "Sovelluksia ei löytynyt",
|
||||
"currentVersion": "Nykyinen",
|
||||
"recommendedVersion": "Suositeltu",
|
||||
"anyVersion": "mikä tahansa"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Valitse paikkaukset",
|
||||
"widgetTitleSelected": "Valitut paikkaukset",
|
||||
"widgetSubtitle": "Valitse ensin sovellus",
|
||||
"widgetEmptySubtitle": "Paikkauksia ei ole valittu"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Somet",
|
||||
"widgetSubtitle": "Löydymme täältä!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Valitse sovellus",
|
||||
"searchBarHint": "Hae sovelluksia",
|
||||
"storageButton": "Tallennustila",
|
||||
"errorMessage": "Valittua sovellusta ei voida käyttää"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Valitse paikkaukset",
|
||||
"searchBarHint": "Etsi paikkauksia",
|
||||
"doneButton": "Valmis",
|
||||
"recommended": "Suositellut",
|
||||
"all": "Kaikki",
|
||||
"none": "Ei mitään",
|
||||
"loadPatchesSelection": "Lataa paikkausvalikoima",
|
||||
"noSavedPatches": "Paikkauksia ei ole tallennettu valitulle sovellukselle\nTallenna nykyinen valikoima paunamalla Valmis",
|
||||
"noPatchesFound": "Valitulle sovellukselle ei löytynyt paikkauksia",
|
||||
"selectAllPatchesWarningContent": "Olet valitsemassa kaikki paikkaukset ja näihin sisältyy myös ei suositeltavia paikkauksia, jotka saattavat aiheuttaa ei toivottua toimintaa."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Tämän paikkauksen valinta voi aiheuttaa virheitä.\n\nSovelluksen versio: {packageVersion}\nTuetut versiot: \n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "Tämän sovellusversion paikkausta ei tueta. Jos haluat jatkaa, ota kokeellinen paikkaustuki käyttöön asetuksista."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Asennusohjelma",
|
||||
"installButton": "Asenna",
|
||||
"installRootButton": "Asenna root-oikeuksilla",
|
||||
"openButton": "Avaa",
|
||||
"shareButton": "Jaa tiedosto",
|
||||
"notificationTitle": "ReVanced Manager suorittaa paikkauksia",
|
||||
"notificationText": "Napauta palataksesi hallintasovellukseen",
|
||||
"shareApkMenuOption": "Jaa APK",
|
||||
"exportApkMenuOption": "Vie APK",
|
||||
"shareLogMenuOption": "Jaa loki",
|
||||
"installErrorDialogTitle": "Virhe",
|
||||
"installErrorDialogText1": "Root-asennus ei ole mahdollista nykyisillä paikkausvalinnoilla.\nPaikkaa sovellus uudelleen tai valitse normaali asennus.",
|
||||
"installErrorDialogText2": "Nykyisten paikkausvalintojen normaali asennus ei ole mahdollista.\nPaikkaa sovellus uudelleen tai valitse root-asennus, jos laitteesi on rootattu.",
|
||||
"installErrorDialogText3": "Root-asennus ei ole mahdollista, koska tallennusmedialta valittiin alkuperäinen APK.\nValitse asennettu sovellus tai valitse normaali asennus.",
|
||||
"noExit": "Asennus on vielä kesken, eikä poistuminen ole mahdollista..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Asetukset",
|
||||
"appearanceSectionTitle": "Ulkoasu",
|
||||
"teamSectionTitle": "Tiimi",
|
||||
"infoSectionTitle": "Tiedot",
|
||||
"advancedSectionTitle": "Lisäasetukset",
|
||||
"logsSectionTitle": "Lokitiedot",
|
||||
"darkThemeLabel": "Tumma tila",
|
||||
"darkThemeHint": "Tervetuloa pimeälle puolelle",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Nauti kokemuksesta, joka on lähempänä laitettasi",
|
||||
"languageLabel": "Kieli",
|
||||
"englishOption": "Englanti",
|
||||
"sourcesLabel": "Lähteet",
|
||||
"sourcesLabelHint": "Määritä mukautetut lähteet",
|
||||
"orgPatchesLabel": "Paikkauksien organisaatio",
|
||||
"sourcesPatchesLabel": "Paikkauksien lähde",
|
||||
"orgIntegrationsLabel": "Integraatioiden organisaatio",
|
||||
"sourcesIntegrationsLabel": "Integraatioiden lähde",
|
||||
"sourcesResetDialogTitle": "Palauta",
|
||||
"sourcesResetDialogText": "Haluatko varmasti palauttaa nämä asetukset oletusarvoihin?",
|
||||
"apiURLResetDialogText": "Haluatko varmasti palauttaa API URL-osoitteen oletusarvoon?",
|
||||
"contributorsLabel": "Osallistujat",
|
||||
"contributorsHint": "Listaus ReVancedin kehitykseen osallistuneista",
|
||||
"logsLabel": "Lokit",
|
||||
"logsHint": "Jaa Managerin lokitiedot",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Määritä oma API URL-osoite",
|
||||
"selectApiURL": "API:n URL-osoite",
|
||||
"experimentalPatchesLabel": "Kokeellinen paikkaustuki",
|
||||
"experimentalPatchesHint": "Mahdollistaa paikkausten asennuksen myös ei tuettuihin sovellusversiohin",
|
||||
"enabledExperimentalPatches": "Kokeellinen paikkaustuki on käytössä",
|
||||
"exportSectionTitle": "Tuonti/vienti",
|
||||
"aboutLabel": "Tietoja",
|
||||
"snackbarMessage": "Kopioitu leikepöydälle",
|
||||
"sentryLabel": "Sentry-lokikirjaus",
|
||||
"sentryHint": "Lähetä nimettömiä tietoja auttaaksesi ReVanced Managerin kehityksessä",
|
||||
"restartAppForChanges": "Käynnistä sovellus uudestaan muutosten käyttöönottamiseksi",
|
||||
"deleteKeystoreLabel": "Poista avainsäilö",
|
||||
"deleteKeystoreHint": "Poista sovelluksen allekirjoitukseen käytetty avainsäilö",
|
||||
"deletedKeystore": "Avainsäilö poistettiin",
|
||||
"deleteTempDirLabel": "Poista väliaikaistiedostot",
|
||||
"deleteTempDirHint": "Poista käyttämättömät väliaikaistiedostot",
|
||||
"deletedTempDir": "Väliaikaistiedostot poistettiin",
|
||||
"exportPatchesLabel": "Vie paikkausvalikoima",
|
||||
"exportPatchesHint": "Vie paikkausvalikoima JSON-tiedostona",
|
||||
"exportedPatches": "Paikkausvalikoima vietiin",
|
||||
"noExportFileFound": "Vietävää paikkausvalikoimaa ei ole",
|
||||
"importPatchesLabel": "Tuo paikkausvalikoima",
|
||||
"importPatchesHint": "Tuo paikkausvalikoima JSON-tiedostosta",
|
||||
"importedPatches": "Paikkausvalikoima tuotiin",
|
||||
"resetStoredPatchesLabel": "Palauta paikkaukset",
|
||||
"resetStoredPatchesHint": "Palauta tallennettu paikkausvalikoima",
|
||||
"resetStoredPatches": "Paikkausvalikoima palautettiin",
|
||||
"jsonSelectorErrorMessage": "Valittua JSON-tiedostoa ei voida käyttää",
|
||||
"deleteLogsLabel": "Poista lokitiedot",
|
||||
"deleteLogsHint": "Poista kerätyt Managerin lokitiedot",
|
||||
"deletedLogs": "Lokitiedot on poistettu"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Sovelluksen tiedot",
|
||||
"openButton": "Avaa",
|
||||
"uninstallButton": "Poista asennus",
|
||||
"patchButton": "Paikkaa",
|
||||
"unpatchButton": "Poista paikkaus",
|
||||
"unpatchDialogText": "Haluatko varmasti poistaa sovelluksen paikkauksen?",
|
||||
"rootDialogTitle": "Virhe",
|
||||
"rootDialogText": "Sovellus on asennettu superuser-käyttöoikeudella, mutta ReVanced Managerilla ei tällä hetkellä ole käyttöoikeutta.\nMyönnä superuser-käyttöoikeus ensin.",
|
||||
"packageNameLabel": "Paketin nimi",
|
||||
"originalPackageNameLabel": "Paketin alkuperäinen nimi",
|
||||
"installTypeLabel": "Asennustyyppi",
|
||||
"rootTypeLabel": "Rootattu",
|
||||
"nonRootTypeLabel": "Normaali",
|
||||
"patchedDateLabel": "Paikkausaika",
|
||||
"patchedDateHint": "{date} klo {time}",
|
||||
"appliedPatchesLabel": "Suoritetut paikkaukset",
|
||||
"appliedPatchesHint": "{quantity} suoritettua paikkausta",
|
||||
"updateNotImplemented": "Toimintoa ei ole toteutettu vielä"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Osallistujat",
|
||||
"patcherContributors": "Patcheriin osallistuneet",
|
||||
"patchesContributors": "Paikkauksiin osallistuneet",
|
||||
"integrationsContributors": "Integrointeihin osallistuneet",
|
||||
"cliContributors": "Komentoriviin osallistuneet",
|
||||
"managerContributors": "Manageriin osallistuneet"
|
||||
}
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Annuler",
|
||||
"updateButton": "Mise à jour",
|
||||
"enabledLabel": "Activé",
|
||||
"disabledLabel": "Désactivé",
|
||||
"yesButton": "Oui",
|
||||
"noButton": "Non",
|
||||
"warning": "Avertissement",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Tableau de bord",
|
||||
"patcherTab": "Patcheur",
|
||||
"settingsTab": "Paramètres"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Tableau de bord",
|
||||
"updatesSubtitle": "Mises à jour",
|
||||
"patchedSubtitle": "Applications patchées",
|
||||
"updatesAvailable": "Mises à jour disponibles",
|
||||
"noUpdates": "Aucune mise à jour disponible",
|
||||
"WIP": "Bientôt disponible...",
|
||||
"noInstallations": "Aucune application patchée n'est installée",
|
||||
"installed": "Installée",
|
||||
"updateDialogTitle": "Mettre à jour le Manager",
|
||||
"updateChangelogTitle": "Liste des changements",
|
||||
"notificationTitle": "Mise à jour téléchargée",
|
||||
"notificationText": "Appuyez sur pour installer la mise à jour",
|
||||
"downloadingMessage": "Téléchargement de la mise à jour...",
|
||||
"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",
|
||||
"updatesDisabled": "Mettre à jour une application patchée est actuellement désactivé. Réappliquez à nouveau le patch."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Patch",
|
||||
"infoButton": "Info",
|
||||
"changelogLabel": "Liste des changements"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Chargement...",
|
||||
"timeagoLabel": "Il y a {time}",
|
||||
"patcherLabel": "Patcheur:",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Mettre à jour le Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcheur",
|
||||
"patchButton": "Patch",
|
||||
"patchDialogText": "Vous avez sélectionné un emplacement de ressource et une installation d'un APK divisé a été détecté, donc le patch pourrait entrainer des erreurs.\nÊtes-vous sûr de vouloir continuer?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Sélectionner une application",
|
||||
"widgetTitleSelected": "Application sélectionnée",
|
||||
"widgetSubtitle": "Aucune application sélectionnée",
|
||||
"noAppsLabel": "Aucune application trouvée",
|
||||
"currentVersion": "Version actuelle",
|
||||
"recommendedVersion": "Version recommandée",
|
||||
"anyVersion": "n'importe laquelle"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Sélectionner les patchs",
|
||||
"widgetTitleSelected": "Patchs sélectionnés",
|
||||
"widgetSubtitle": "Choisissez d'abord une application",
|
||||
"widgetEmptySubtitle": "Aucun patch n'est sélectionné"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Réseaux sociaux",
|
||||
"widgetSubtitle": "Nous sommes en ligne !"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Sélectionner une application",
|
||||
"searchBarHint": "Rechercher une application",
|
||||
"storageButton": "Stockage",
|
||||
"errorMessage": "Impossible d'utiliser l'application sélectionnée"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Sélectionner les patchs",
|
||||
"searchBarHint": "Rechercher des patchs",
|
||||
"doneButton": "Terminé",
|
||||
"recommended": "Recommandé",
|
||||
"all": "Tout",
|
||||
"none": "Aucun",
|
||||
"loadPatchesSelection": "Charger les patchs sélectionnés",
|
||||
"noSavedPatches": "Aucun patch enregistré pour l'application sélectionnée.\nAppuyez sur Terminé pour enregistrer la sélection actuelle.",
|
||||
"noPatchesFound": "Aucun patch n'a été trouvé pour l'application sélectionnée",
|
||||
"selectAllPatchesWarningContent": "Vous êtes sur le point de sélectionner tous les patchs, cela inclut des patchs non recommandés et peut causer des comportements indésirables."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "La sélection de ce patch peut entraîner des erreurs.\n\nVersion de l'application : {packageVersion}\nVersions prises en charge :\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "Le correctif n'est pas pris en charge pour cette version de l'application. Activez le bouton expérimental dans les paramètres pour continuer."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Installateur",
|
||||
"installButton": "Installer",
|
||||
"installRootButton": "Installer en tant que Root",
|
||||
"openButton": "Ouvrir",
|
||||
"shareButton": "Partager le fichier",
|
||||
"notificationTitle": "ReVanced Manager est en train de patcher",
|
||||
"notificationText": "Appuyer pour revenir à l’installateur",
|
||||
"shareApkMenuOption": "Partager le fichier APK",
|
||||
"exportApkMenuOption": "Exporter l'APK",
|
||||
"shareLogMenuOption": "Partager le journal",
|
||||
"installErrorDialogTitle": "Erreur",
|
||||
"installErrorDialogText1": "L'installation Root n'est pas possible avec la sélection actuelle de patchs.\nRe-patchez votre application ou choisissez une installation non root.",
|
||||
"installErrorDialogText2": "L'installation Non-root n'est pas possible avec la sélection actuelle de patchs.\nRe-patchez votre application ou choisissez une installation en tant que Root.",
|
||||
"installErrorDialogText3": "L'installation root n'est pas possible car l'APK original a été sélectionné à partir du stockage.\nSélectionnez une application installée ou choisissez une installation non root.",
|
||||
"noExit": "L'installateur est toujours en fonctionnement, impossible de quitter..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Réglages",
|
||||
"appearanceSectionTitle": "Apparence",
|
||||
"teamSectionTitle": "Équipe",
|
||||
"infoSectionTitle": "Info",
|
||||
"advancedSectionTitle": "Avancé",
|
||||
"logsSectionTitle": "Journaux",
|
||||
"darkThemeLabel": "Mode sombre",
|
||||
"darkThemeHint": "Bienvenue dans le côté obscur",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Profitez d'une expérience plus proche de votre appareil",
|
||||
"languageLabel": "Langue",
|
||||
"englishOption": "Anglais",
|
||||
"sourcesLabel": "Sources",
|
||||
"sourcesLabelHint": "Configurer vos sources personnalisées",
|
||||
"hostRepositoryLabel": "Dépôt de l'API",
|
||||
"orgPatchesLabel": "Organisation des patchs",
|
||||
"sourcesPatchesLabel": "Source des patches",
|
||||
"orgIntegrationsLabel": "Organisme d'intégration",
|
||||
"sourcesIntegrationsLabel": "Source des intégrations",
|
||||
"sourcesResetDialogTitle": "Réinitialiser",
|
||||
"sourcesResetDialogText": "Êtes-vous sûr de vouloir réinitialiser les sources personnalisées à leur valeur par défaut ?",
|
||||
"apiURLResetDialogText": "Êtes-vous sûr de vouloir réinitialiser l'URL d'API à sa valeur par défaut ?",
|
||||
"contributorsLabel": "Contributeurs",
|
||||
"contributorsHint": "Liste des contributeurs de ReVanced",
|
||||
"logsLabel": "Journal",
|
||||
"logsHint": "Partager les journaux du Manager",
|
||||
"apiURLLabel": "URL de l'API",
|
||||
"apiURLHint": "Configurez l'URL de votre API personnalisée",
|
||||
"selectApiURL": "URL de l'API",
|
||||
"experimentalUniversalPatchesLabel": "Support expérimental des patchs universels",
|
||||
"experimentalUniversalPatchesHint": "Afficher toutes les applications à utiliser avec les patchs universels, le chargement de la liste des applications pourrait être lent",
|
||||
"experimentalPatchesLabel": "Support des patchs expérimentaux",
|
||||
"experimentalPatchesHint": "Activer l'utilisation des patchs non supportés dans n'importe quelle version de l'application",
|
||||
"enabledExperimentalPatches": "Support pour les patchs expérimentaux activé",
|
||||
"exportSectionTitle": "Importer & exporter",
|
||||
"aboutLabel": "À propos",
|
||||
"snackbarMessage": "Copié dans le presse-papier",
|
||||
"sentryLabel": "Journal sentinel",
|
||||
"sentryHint": "Envoyer des journaux anonymes pour nous aider à améliorer ReVanced Manager",
|
||||
"restartAppForChanges": "Redémarrez l'application pour appliquer les changements",
|
||||
"deleteKeystoreLabel": "Supprimer le magasin de clés",
|
||||
"deleteKeystoreHint": "Supprimer le magasin de clés utilisé pour signer l'application",
|
||||
"deletedKeystore": "Magasin de clés supprimé",
|
||||
"deleteTempDirLabel": "Supprimer les fichiers temporaires",
|
||||
"deleteTempDirHint": "Supprimer les fichiers temporaires inutilisés",
|
||||
"deletedTempDir": "Fichiers temporaires supprimés",
|
||||
"exportPatchesLabel": "Exporter la sélection de patchs",
|
||||
"exportPatchesHint": "Exporter la sélection de patchs vers un fichier JSON",
|
||||
"exportedPatches": "Sélection de patchs exportée",
|
||||
"noExportFileFound": "Aucune sélection de patchs à exporter",
|
||||
"importPatchesLabel": "Importer une sélection de patchs",
|
||||
"importPatchesHint": "Importer une sélection de patchs depuis un fichier JSON",
|
||||
"importedPatches": "Sélection de patchs importée",
|
||||
"resetStoredPatchesLabel": "Réinitialiser les patches",
|
||||
"resetStoredPatchesHint": "Réinitialiser la sélection des patches sauvegardés",
|
||||
"resetStoredPatches": "La sélection des patches a été réinitialisée",
|
||||
"jsonSelectorErrorMessage": "Impossible d'utiliser le fichier JSON sélectionné",
|
||||
"deleteLogsLabel": "Supprimer les journaux",
|
||||
"deleteLogsHint": "Supprimer les journaux du gestionnaire collectés",
|
||||
"deletedLogs": "Journaux supprimés"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Infos concernant l'application",
|
||||
"openButton": "Ouvrir",
|
||||
"uninstallButton": "Désinstaller",
|
||||
"patchButton": "Patcher",
|
||||
"unpatchButton": "Dépatcher",
|
||||
"unpatchDialogText": "Êtes-vous sûr de vouloir dépatcher cette application?",
|
||||
"rootDialogTitle": "Erreur",
|
||||
"rootDialogText": "L'application a été installée avec les permissions d'accès à la racine, mais ReVanced Manager n'a actuellement aucune permissions.\nVeuillez d'abord accorder l'accès à la racine.",
|
||||
"packageNameLabel": "Nom du paquet",
|
||||
"originalPackageNameLabel": "Nom originel du paquet",
|
||||
"installTypeLabel": "Type d'installation",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Non-root",
|
||||
"patchedDateLabel": "Date du patch",
|
||||
"patchedDateHint": "le {date} à {time}",
|
||||
"appliedPatchesLabel": "Patchs appliqués",
|
||||
"appliedPatchesHint": "{quantity} patchs appliqués",
|
||||
"updateNotImplemented": "Cette fonction n'a pas encore été implémentée"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contributeurs",
|
||||
"patcherContributors": "Contributeurs du patcheur",
|
||||
"patchesContributors": "Contributeurs des patchs",
|
||||
"integrationsContributors": "Contributeurs des intégrations",
|
||||
"cliContributors": "Contributeurs de la CLI",
|
||||
"managerContributors": "Contributeurs du Manager"
|
||||
}
|
||||
}
|
||||
@@ -1,196 +0,0 @@
|
||||
{
|
||||
"okButton": "ठीक है",
|
||||
"cancelButton": "रद्द करें",
|
||||
"enabledLabel": "सक्रिय",
|
||||
"disabledLabel": "निष्क्रिय",
|
||||
"yesButton": "हाँ",
|
||||
"noButton": "नहीं",
|
||||
"warning": "चेतावनी",
|
||||
"navigationView": {
|
||||
"dashboardTab": "नियंत्रण-पट्ट",
|
||||
"patcherTab": "पैचर",
|
||||
"settingsTab": "सेटिंग्स"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "नियंत्रण पट्ट",
|
||||
"updatesSubtitle": "अपडेट",
|
||||
"patchedSubtitle": "पैच किए हुए एप्लीकेशन",
|
||||
"updatesAvailable": "अपडेट उपलब्ध है",
|
||||
"noUpdates": "कोई अपडेट उपलब्ध नहीं",
|
||||
"WIP": "कार्य प्रगति पर है।",
|
||||
"noInstallations": "कोई पैबंद किये हुआ अनुप्रयोग नहीं है।",
|
||||
"installed": "इंस्टॉल किया हुआ",
|
||||
"updateDialogTitle": "अपडेट Manager",
|
||||
"updateDialogText": "क्या आप ReVanced Manager को डाउनलोड और अपडेट करना चाहते है?",
|
||||
"notificationTitle": "अपडेट डाउनलोड हो चुका है",
|
||||
"notificationText": "अपडेट को इंस्टॉल करने हेतु यहाँ टैप करें",
|
||||
"downloadingMessage": "अपडेट डाउनलोड हो रहा है",
|
||||
"installingMessage": "अपडेट इंस्टॉल हो रहा है",
|
||||
"errorDownloadMessage": "अपडेट डाउनलोड करने मे असफल",
|
||||
"errorInstallMessage": "अपडेट इंस्टॉल करने में असफल",
|
||||
"noConnection": "कोई इंटरनेट कनेक्शन नहीं",
|
||||
"updatesDisabled": "पैच किए गए ऐप को अपडेट करना वर्तमान में अक्षम है।\nएप को फिर से पैच करें।"
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "पैबंद",
|
||||
"infoButton": "जानकारी",
|
||||
"changelogLabel": "परिवर्तन पत्र"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "लोड हो रहा है...",
|
||||
"timeagoLabel": "{time} पहले",
|
||||
"patcherLabel": "पैबंद: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Manager अपडेट करे"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "पैचर",
|
||||
"patchButton": "पैबंद",
|
||||
"patchDialogText": "आपने एक रिसोर्स पैच चुना है और स्प्लिट APK के इंस्टॉल का पता चला है इसलिए पैचिंग त्रुटियां हो सकती हैं।\nक्या आप स्प्लिट APK के साथ आगे बढ़ना चाहते है?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "एप्लिकेशन का चयन करें",
|
||||
"widgetTitleSelected": "चुना हुआ ऐप्लकैशन",
|
||||
"widgetSubtitle": "कोई ऐप्लकैशन चुना हुआ नहीं",
|
||||
"noAppsLabel": "कोई एप्लिकेशन नहीं मिला।",
|
||||
"currentVersion": "वर्तमान",
|
||||
"recommendedVersion": "अनुशंसित",
|
||||
"anyVersion": "कोई"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "पैच चुने",
|
||||
"widgetTitleSelected": "चुने हुए पैच",
|
||||
"widgetSubtitle": "पहले किसी एप्लिकेशन को चुने",
|
||||
"widgetEmptySubtitle": "कोई पैच चुना हुआ नहीं"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "सामाजिक",
|
||||
"widgetSubtitle": "हम ऑनलाइन है"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "एप्लिकेशन का चयन करें",
|
||||
"searchBarHint": "ऐप्लकैशन खोजे",
|
||||
"storageButton": "स्टोरेज",
|
||||
"errorMessage": "चुने हुए ऐप्लकैशन को उपयोग करने मे असमर्थ"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "पैच चुने",
|
||||
"searchBarHint": "पैच खोजे",
|
||||
"doneButton": "पूर्ण",
|
||||
"recommended": "अनुशंसित",
|
||||
"all": "सभी",
|
||||
"none": "कोई भी नहीं",
|
||||
"loadPatchesSelection": "चयन किए गए पैच लोड करें",
|
||||
"noSavedPatches": "चयनित ऐप के लिए कोई सहेजा पैच नहीं है\nवर्तमान चयन को सेव करने के लिए \"डन\" दबाएं",
|
||||
"noPatchesFound": "चुने हुए ऐप्लकैशन के लिए कोई पैच नहीं मिले",
|
||||
"selectAllPatchesWarningContent": "आप सभी पैच का चयन करने वाले हैं, जिसमें अनुशंसित पैच शामिल हैं और अवांछित व्यवहार का कारण बन सकते हैं।"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "इस पैच को चुनने से पैचिंग मे त्रुटि हो सकती है। \n\nएप वर्ज़न: {packageVersion}\nसमर्थित वर्ज़न:\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": "इंस्टॉल कर्ता अब भी चल रहा है, बाहर नहीं निकल सकते"
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "सेटिंग्स",
|
||||
"appearanceSectionTitle": "स्वरूप",
|
||||
"teamSectionTitle": "टीम",
|
||||
"infoSectionTitle": "जानकारी",
|
||||
"advancedSectionTitle": "एडवांसड",
|
||||
"logsSectionTitle": "लॉग्स",
|
||||
"darkThemeLabel": "अंधकार करें",
|
||||
"darkThemeHint": "अंधेर नगरी में स्वागत है।",
|
||||
"dynamicThemeLabel": "मेटीरियल यू",
|
||||
"dynamicThemeHint": "अपने डिवाइस के करीब एक अनुभव का आनंद लें",
|
||||
"languageLabel": "भाषा",
|
||||
"englishOption": "अंग्रेज़ी",
|
||||
"sourcesLabel": "स्रोत",
|
||||
"sourcesLabelHint": "अपने कस्टम साधन कॉन्फ़िगर करे",
|
||||
"orgPatchesLabel": "पैच संगठन",
|
||||
"sourcesPatchesLabel": "पैच स्रोत",
|
||||
"orgIntegrationsLabel": "एकीकरण संगठन",
|
||||
"sourcesIntegrationsLabel": "एकीकरण स्रोत",
|
||||
"sourcesResetDialogTitle": "रीसेट करें",
|
||||
"sourcesResetDialogText": "क्या आप वाकई कस्टम साधन को डिफ़ॉल्ट वैल्यू पर रीसेट करना चाहते हैं?",
|
||||
"apiURLResetDialogText": "क्या आप वाकई कस्टम API URL को डिफ़ॉल्ट वैल्यू पर रीसेट करना चाहते हैं?",
|
||||
"contributorsLabel": "योगदानकर्ता",
|
||||
"contributorsHint": "ReVanced के योगदानकर्ताओ की सूची",
|
||||
"logsLabel": "लॉग्स",
|
||||
"logsHint": "मैनेजर के लॉग को शेयर करे",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "अपनी कस्टम API URL कॉन्फ़िगर करे",
|
||||
"selectApiURL": "API URL",
|
||||
"experimentalPatchesLabel": "प्रायोगिक पैच समर्थन",
|
||||
"experimentalPatchesHint": "किसी भी ऐप संस्करण में असमर्थित पैच का उपयोग करने में सक्षम करें",
|
||||
"enabledExperimentalPatches": "प्रायोगिक पैच समर्थन इनेबल्ड",
|
||||
"exportSectionTitle": "आयात और निर्यात",
|
||||
"aboutLabel": "विवरण",
|
||||
"snackbarMessage": "क्लिपबोर्ड में कॉपी हो गया है",
|
||||
"sentryLabel": "संतरी लॉगिंग",
|
||||
"sentryHint": "उन्नत प्रबंधक को बेहतर बनाने में हमारी सहायता करने के लिए अनाम लॉग भेजें",
|
||||
"restartAppForChanges": "Restart the app to apply changes",
|
||||
"deleteKeystoreLabel": "कीस्टोर मिटाएं",
|
||||
"deleteKeystoreHint": "ऐप पर हस्ताक्षर करने के लिए उपयोग की जाने वाली कीस्टोर हटाएं",
|
||||
"deletedKeystore": "कीस्टोर हटा दिया गया",
|
||||
"deleteTempDirLabel": "अस्थाई फ़ाइलें मिटायें",
|
||||
"deleteTempDirHint": "अप्रयुक्त अस्थाई फ़ाइलें मिटायें",
|
||||
"deletedTempDir": "क्षणिक फ़ाईल मिटाए गए।",
|
||||
"exportPatchesLabel": "चयन किए गए पैच एक्सपोर्ट करें",
|
||||
"exportPatchesHint": "चयन किए गए पैच को JSON फाइल में एक्सपोर्ट करें",
|
||||
"exportedPatches": "चयन किए गए पैच एक्सपोर्ट सफल",
|
||||
"noExportFileFound": "कोई पैच एक्सपोर्ट के लिए चयन नहीं है",
|
||||
"importPatchesLabel": "चयन किए गए पैच इम्पोर्ट करें",
|
||||
"importPatchesHint": "चयन किए गए पैच को JSON फाइल से इम्पोर्ट करें",
|
||||
"importedPatches": "चयन किए गए पैच इम्पोर्ट सफल",
|
||||
"resetStoredPatchesLabel": "पैच रीसेट करें",
|
||||
"resetStoredPatchesHint": "संग्रहित चयन किए गए पैच रीसेट करें",
|
||||
"resetStoredPatches": "चयन किए गए पैच रीसेट सफल",
|
||||
"jsonSelectorErrorMessage": "चुने हुए JSON फाइल को उपयोग करने मे असमर्थ",
|
||||
"deleteLogsLabel": "लॉग हटाएं",
|
||||
"deleteLogsHint": "एकत्रित प्रबंधक लॉग हटाएं",
|
||||
"deletedLogs": "लॉग हटा दिए गए"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "ऐप की जानकारी",
|
||||
"openButton": "खोलें",
|
||||
"uninstallButton": "अनइंस्टॉल करें",
|
||||
"patchButton": "पैच",
|
||||
"unpatchButton": "अनपैच करे",
|
||||
"unpatchDialogText": "क्या वाकई आप इस एप को अनपैच करना चाहते हैं?",
|
||||
"rootDialogTitle": "त्रुटि",
|
||||
"rootDialogText": "एप्प superuser परमिशन के साथ इनस्टॉल हुआ था, परन्तु ReVanced मैनेजर के पास कोई परमिशन नहीं है। पहले superuser परमिशन इनेबल करे।",
|
||||
"packageNameLabel": "पैकेज का नाम",
|
||||
"originalPackageNameLabel": "मूल पैकेज का नाम",
|
||||
"installTypeLabel": "इंस्टॉल का प्रकार",
|
||||
"rootTypeLabel": "रूट",
|
||||
"nonRootTypeLabel": "नॉन-रूट",
|
||||
"patchedDateLabel": "पैच करने की तिथि",
|
||||
"patchedDateHint": "{date} {time} पर",
|
||||
"appliedPatchesLabel": "लागू किए हुआ पैच",
|
||||
"appliedPatchesHint": "{quantity} लागू किए हुआ पैच",
|
||||
"updateNotImplemented": "यह फीचर फिलहाल इम्प्लीमेंट नहीं हुआ है"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "योगदानकर्ता",
|
||||
"patcherContributors": "पैचर योगदानकर्ता",
|
||||
"patchesContributors": "पैच योगदानकर्ता",
|
||||
"integrationsContributors": "एकीकरण योगदानकर्ता",
|
||||
"cliContributors": "CLI योगदानकर्ता",
|
||||
"managerContributors": "प्रबंधक योगदानकर्ता"
|
||||
}
|
||||
}
|
||||
@@ -1,196 +0,0 @@
|
||||
{
|
||||
"okButton": "Rendben",
|
||||
"cancelButton": "Mégse",
|
||||
"enabledLabel": "Engedélyezve",
|
||||
"disabledLabel": "Letiltva",
|
||||
"yesButton": "Igen",
|
||||
"noButton": "Nem",
|
||||
"warning": "Figyelmeztetés",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Irányítópult",
|
||||
"patcherTab": "Patchelő",
|
||||
"settingsTab": "Beállítások"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Irányítópult",
|
||||
"updatesSubtitle": "Frissítések",
|
||||
"patchedSubtitle": "Patchelt alkalmazások",
|
||||
"updatesAvailable": "Frissítések",
|
||||
"noUpdates": "Nincs elérhető frissítés",
|
||||
"WIP": "Fejlesztés alatt...",
|
||||
"noInstallations": "Nincs telepítve patchelt alkalmazás",
|
||||
"installed": "Telepítve",
|
||||
"updateDialogTitle": "Frissítéskezelő",
|
||||
"updateDialogText": "Biztosan le akarod tölteni és frissíteni a ReVanced Manager-t?",
|
||||
"notificationTitle": "Frissítés letöltve",
|
||||
"notificationText": "Érintse meg a frissítés telepítéséhez",
|
||||
"downloadingMessage": "Frissítés letöltése...",
|
||||
"installingMessage": "Frissítés telepítése...",
|
||||
"errorDownloadMessage": "Frissítés letöltése sikertelen",
|
||||
"errorInstallMessage": "Frissítés telepítése sikertelen",
|
||||
"noConnection": "Nincs internetkapcsolat",
|
||||
"updatesDisabled": "A patchelt alkalmazások frissítése jelenleg nem lehetséges, ehelyett újra kell patchelni."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Patch",
|
||||
"infoButton": "Infó",
|
||||
"changelogLabel": "Újdonságok"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Betöltés...",
|
||||
"timeagoLabel": "{time} ideje",
|
||||
"patcherLabel": "Patchelő: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Manager frissitése"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patchelő",
|
||||
"patchButton": "Patch",
|
||||
"patchDialogText": "Kiválasztottál egy TODO(resource) patchet, de a kiválasztott alkalmazás több komponensből áll, ez pedig hibákat okozhat patchelés közben.\nBiztos folytatni szeretnéd?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Alkalmazás kiválasztása",
|
||||
"widgetTitleSelected": "Kiválasztott alkalmazás",
|
||||
"widgetSubtitle": "Nincs kiválasztott alkalmazás",
|
||||
"noAppsLabel": "Nem találhatóak alkalmazások",
|
||||
"currentVersion": "Jelenlegi",
|
||||
"recommendedVersion": "Ajánlott",
|
||||
"anyVersion": "bármely"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Patchek kiválasztása",
|
||||
"widgetTitleSelected": "Kiválasztott patchek",
|
||||
"widgetSubtitle": "Először válassz egy alkalmazást",
|
||||
"widgetEmptySubtitle": "Nem választottál patch-et"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Közösségi oldalak",
|
||||
"widgetSubtitle": "Online vagyunk!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Válasszon egy alkalmazást",
|
||||
"searchBarHint": "Alkalmazások keresése",
|
||||
"storageButton": "Tárhely",
|
||||
"errorMessage": "A kiválasztott alkalmazás nem használható"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Patchek kiválasztása",
|
||||
"searchBarHint": "Patchek keresése",
|
||||
"doneButton": "Kész",
|
||||
"recommended": "Ajánlott",
|
||||
"all": "Összes",
|
||||
"none": "Semmi",
|
||||
"loadPatchesSelection": "Korábbi kiválasztás betöltése",
|
||||
"noSavedPatches": "Ehhez az alkalmazáshoz nem tartozik egy mentett kiválasztás sem\nNyomd meg a Kész gombot hogy elmentsd a jelenlegi listát",
|
||||
"noPatchesFound": "A kiválasztott alkalmazáshoz nem találhatóak patchek",
|
||||
"selectAllPatchesWarningContent": "Az összes patchet készülsz kiválasztani, ami nem ajánlott patcheket is tartalmaz, melyek váratlan hibákhoz vezethetnek."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Ezt a patchet nem biztos hogy sikerül alkalmazni, mert más verzióhoz készült.\n\nAlkalmazás verzió: {packageVersion}\nJelenleg támogatott verziók:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "Nem támogatott verzió. Engedélyezd a kísérleti jellegű patchelést a beállításokban ha mégis alkalmaznád."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Telepítő",
|
||||
"installButton": "Telepítés",
|
||||
"installRootButton": "Telepítés root jogosultsággal",
|
||||
"openButton": "Megnyitás",
|
||||
"shareButton": "Fájl megosztása",
|
||||
"notificationTitle": "A ReVanced Manager jelenleg patchel",
|
||||
"notificationText": "Koppints a telepítőhöz való visszalépéshez",
|
||||
"shareApkMenuOption": "APK megosztása",
|
||||
"exportApkMenuOption": "APK exportálása",
|
||||
"shareLogMenuOption": "Napló megosztása",
|
||||
"installErrorDialogTitle": "Hiba",
|
||||
"installErrorDialogText1": "Root telepítés nem lehetséges a jelenleg kiválasztott patchekkel.\nPatcheld újra az appod vagy válaszd a root nélküli telepítést.",
|
||||
"installErrorDialogText2": "A non-root telepítés nem lehetséges a jelenleg kiválasztott patchekkel.\nPatcheld újra az appod vagy válaszd a root telepítést, ha az eszközöd rootolt.",
|
||||
"installErrorDialogText3": "A root telepítés nem lehetséges, mert az eredeti APK a tárhelyről lett kiválasztva. Válassz egy telepített alkalmazást vagy válaszd a root nélküli telepítést.",
|
||||
"noExit": "A telepítő még fut, most nem lehet visszalépni..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Beállítások",
|
||||
"appearanceSectionTitle": "Megjelenés",
|
||||
"teamSectionTitle": "Csapat",
|
||||
"infoSectionTitle": "Infó",
|
||||
"advancedSectionTitle": "Haladó",
|
||||
"logsSectionTitle": "Naplók",
|
||||
"darkThemeLabel": "Sötét mód",
|
||||
"darkThemeHint": "Üdvözlünk a sötét oldalon",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Élvezd az eszközödhöz közelibb élményt",
|
||||
"languageLabel": "Nyelv",
|
||||
"englishOption": "Angol (English)",
|
||||
"sourcesLabel": "Források",
|
||||
"sourcesLabelHint": "Állítsd be egyedi forrásaid",
|
||||
"orgPatchesLabel": "Patchek - szervezet",
|
||||
"sourcesPatchesLabel": "Patchek - forrás",
|
||||
"orgIntegrationsLabel": "Integrációk - szervezet",
|
||||
"sourcesIntegrationsLabel": "Integrációk - forrás",
|
||||
"sourcesResetDialogTitle": "Visszaállítás",
|
||||
"sourcesResetDialogText": "Biztos, hogy visszaállítod az egyéni forrásokat az alap értékekre?",
|
||||
"apiURLResetDialogText": "Biztos, hogy visszaállítod az API URL-t az eredeti értékre?",
|
||||
"contributorsLabel": "Közreműködők",
|
||||
"contributorsHint": "A ReVanced közreműködőinek listája",
|
||||
"logsLabel": "Naplók",
|
||||
"logsHint": "Manager naplófájlok megosztása",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Itt állíthatod be az API címét",
|
||||
"selectApiURL": "API címe",
|
||||
"experimentalPatchesLabel": "Kísérleti patchelés",
|
||||
"experimentalPatchesHint": "A patcheket nem támogatott verziókra is lehessen alkalmazni",
|
||||
"enabledExperimentalPatches": "Kísérleti patchelés engedélyezve",
|
||||
"exportSectionTitle": "Importálás & exportálás",
|
||||
"aboutLabel": "Rólunk",
|
||||
"snackbarMessage": "Vágólapra másolva",
|
||||
"sentryLabel": "Sentry naplózás",
|
||||
"sentryHint": "Névtelen használati adatok küldésével hozzájárulhatsz, hogy a ReVanced Manager még jobb legyen",
|
||||
"restartAppForChanges": "Indítsd újra az alkalmazást a változások alkalmazásához",
|
||||
"deleteKeystoreLabel": "Kulcstartó törlése",
|
||||
"deleteKeystoreHint": "Törli az alkalmazás aláírásához használt kulcstartót",
|
||||
"deletedKeystore": "Kulcstartó törölve",
|
||||
"deleteTempDirLabel": "Ideiglenes fájlok törlése",
|
||||
"deleteTempDirHint": "Felesleges átmeneti fájlok törlése",
|
||||
"deletedTempDir": "Ideiglenes fájlok törölve",
|
||||
"exportPatchesLabel": "Kiválasztások exportálása",
|
||||
"exportPatchesHint": "Az összes korábbi kiválasztás mentáse JSON fájlba",
|
||||
"exportedPatches": "Sikeres exportálás",
|
||||
"noExportFileFound": "Nincs mit exportálni",
|
||||
"importPatchesLabel": "Kiválasztások importálása",
|
||||
"importPatchesHint": "Korábban kiválasztott lista betöltése JSON fájlból",
|
||||
"importedPatches": "Sikeres importálás",
|
||||
"resetStoredPatchesLabel": "Korábbi kiválasztások törlése",
|
||||
"resetStoredPatchesHint": "Minden korábban mentett kiválasztást töröl",
|
||||
"resetStoredPatches": "A kiválasztott patchek listája alaphelyzetbe állítva",
|
||||
"jsonSelectorErrorMessage": "A kiválasztott JSON nem hasznalható",
|
||||
"deleteLogsLabel": "Naplók törlése",
|
||||
"deleteLogsHint": "A managerben összegyűjtott naplófájlok törlése",
|
||||
"deletedLogs": "Naplók törölve"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Alkalmazás információ",
|
||||
"openButton": "Megnyitás",
|
||||
"uninstallButton": "Eltávolítás",
|
||||
"patchButton": "Patch",
|
||||
"unpatchButton": "Patch törlése",
|
||||
"unpatchDialogText": "Biztos, hogy törölni akarod a patcheket?",
|
||||
"rootDialogTitle": "Hiba",
|
||||
"rootDialogText": "A patchelt alkalmazás root jogosultsággal lett telepítve, de a Managernek már nincs ilyen jogosultsága.\nKérlek, engedélyezd a root hozzáférést a Managernek.",
|
||||
"packageNameLabel": "Csomagnév",
|
||||
"originalPackageNameLabel": "Eredeti csomagnév",
|
||||
"installTypeLabel": "Telepítés módja",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Non-root",
|
||||
"patchedDateLabel": "Patchelve",
|
||||
"patchedDateHint": "{date} {time}-kor",
|
||||
"appliedPatchesLabel": "Alkalmazott patchek",
|
||||
"appliedPatchesHint": "{quantity} alkalmazott patch",
|
||||
"updateNotImplemented": "Ez a funkció még nem készült el"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Közreműködők",
|
||||
"patcherContributors": "Patcher közreműködők",
|
||||
"patchesContributors": "Patchek közreműködői",
|
||||
"integrationsContributors": "Integrációk közreműködői",
|
||||
"cliContributors": "CLI közreműködők",
|
||||
"managerContributors": "Manager közreműködők"
|
||||
}
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
{
|
||||
"okButton": "Oke",
|
||||
"cancelButton": "Batal",
|
||||
"updateButton": "Perbarui",
|
||||
"enabledLabel": "Aktif",
|
||||
"disabledLabel": "Nonaktif",
|
||||
"yesButton": "Ya",
|
||||
"noButton": "Tidak",
|
||||
"warning": "Peringatan",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Dasbor",
|
||||
"patcherTab": "Pemodifikasi",
|
||||
"settingsTab": "Pengaturan"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Dasbor",
|
||||
"updatesSubtitle": "Pembaruan",
|
||||
"patchedSubtitle": "Aplikasi yang dimodifikasi",
|
||||
"updatesAvailable": "Pembaruan tersedia",
|
||||
"noUpdates": "Pembaruan tidak tersedia",
|
||||
"WIP": "Sedang dalam pengerjaan...",
|
||||
"noInstallations": "Tidak ada aplikasi termodifikasi yang terpasang",
|
||||
"installed": "Terpasang",
|
||||
"updateDialogTitle": "Perbarui Manager",
|
||||
"updateChangelogTitle": "Catatan perubahan",
|
||||
"notificationTitle": "Pembaruan sudah diunduh",
|
||||
"notificationText": "Ketuk untuk memasang pembaharuan",
|
||||
"downloadingMessage": "Mengunduh pembaruan...",
|
||||
"installingMessage": "Memasang pembaruan...",
|
||||
"errorDownloadMessage": "Tidak dapat mengunduh pembaruan",
|
||||
"errorInstallMessage": "Tidak dapat memasang pembaruan",
|
||||
"noConnection": "Tidak ada koneksi internet",
|
||||
"updatesDisabled": "Memperbarui aplikasi yang dimodifikasi saat ini dinonaktifkan. Pasang ulang aplikasi lagi."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Modifikasi",
|
||||
"infoButton": "Info",
|
||||
"changelogLabel": "Catatan perubahan"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Memuat...",
|
||||
"timeagoLabel": "{time} yang lalu",
|
||||
"patcherLabel": "Pemodifikasi: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Perbarui Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Pemodifikasi",
|
||||
"patchButton": "Modifikasi",
|
||||
"patchDialogText": "Anda telah memilih sumber modifikasi dan pemasangan split APK terdeteksi sehingga kesalahan pemodifikasi dapat terjadi.\nApakah Anda yakin ingin melanjutkan pemasangan split base APK?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Pilih aplikasi",
|
||||
"widgetTitleSelected": "Aplikasi terpilih",
|
||||
"widgetSubtitle": "Tidak ada aplikasi yang dipilih",
|
||||
"noAppsLabel": "Aplikasi tidak ditemukan",
|
||||
"currentVersion": "Saat ini",
|
||||
"recommendedVersion": "Rekomendasi",
|
||||
"anyVersion": "semua"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Pilih Modifikasi",
|
||||
"widgetTitleSelected": "Modifikasi terpilih",
|
||||
"widgetSubtitle": "Pilih aplikasi terlebih dahulu",
|
||||
"widgetEmptySubtitle": "Tidak ada modifikasi yang terpilih"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Media Sosial",
|
||||
"widgetSubtitle": "Ikuti kami!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Pilih aplikasi",
|
||||
"searchBarHint": "Cari aplikasi",
|
||||
"storageButton": "Penyimpanan",
|
||||
"errorMessage": "Tidak dapat menggunakan aplikasi yang dipilih"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Pilih modifikasi",
|
||||
"searchBarHint": "Cari modifikasi",
|
||||
"doneButton": "Selesai",
|
||||
"recommended": "Direkomendasikan",
|
||||
"all": "Semua",
|
||||
"none": "Tidak ada",
|
||||
"loadPatchesSelection": "Tidak ada modifikasi yang terpilih",
|
||||
"noSavedPatches": "Tidak ada tambalan tersimpan untuk aplikasi terpilih.\nTekan \"Sudah\" untuk menyimpan seleksi saat ini.",
|
||||
"noPatchesFound": "Modifikasi tidak ditemukan untuk aplikasi terpilih",
|
||||
"selectAllPatchesWarningContent": "Anda akan memilih semua modifikasi, termasuk modifikasi yang tidak direkomendasikan dan dapat mengakibatkan hal yang tidak diinginkan."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Menggunakan modifikasi ini dapat menyebabkan error pada saat memodifikasi aplikasi\n\nVersi aplikasi: {packageVersion}\nVersi yang mendukung:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "Patch tidak didukung untuk versi aplikasi ini. Aktifkan tombol eksperimental di pengaturan untuk melanjutkan."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Pemasang",
|
||||
"installButton": "Pasang",
|
||||
"installRootButton": "Pasang sebagai Root",
|
||||
"openButton": "Buka",
|
||||
"shareButton": "Bagikan file",
|
||||
"notificationTitle": "ReVanced Manager sedang memodifikasi",
|
||||
"notificationText": "Ketuk untuk kembali ke pemasang",
|
||||
"shareApkMenuOption": "Bagikan APK",
|
||||
"exportApkMenuOption": "Ekspor APK",
|
||||
"shareLogMenuOption": "Bagikan log",
|
||||
"installErrorDialogTitle": "Kesalahan",
|
||||
"installErrorDialogText1": "Pemasangan root tidak mungkin dengan pilihan modifikasi sekarang.\nModifikasi ulang aplikasi Anda atau pilih pemasangan non-root.",
|
||||
"installErrorDialogText2": "Pemasangan non-root tidak mungkin dengan pilihan modifikasi sekarang.\nModifikasi ulang aplikasi Anda atau pilih pemasangan root jika perangkat Anda memiliki root.",
|
||||
"installErrorDialogText3": "Pemasangan root tidak memungkinkan karena APK dipilih dari penyimpanan.\nPilih aplikasi terpasang atau pilih pemasangan non-root.",
|
||||
"noExit": "Pemasangan masih berjalan, tidak bisa keluar..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Pengaturan",
|
||||
"appearanceSectionTitle": "Tampilan",
|
||||
"teamSectionTitle": "Tim",
|
||||
"infoSectionTitle": "Info",
|
||||
"advancedSectionTitle": "Lanjutan",
|
||||
"logsSectionTitle": "Log",
|
||||
"darkThemeLabel": "Mode gelap",
|
||||
"darkThemeHint": "Selamat datang di sisi gelap",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Nikmati pengalaman lebih dekat ke perangkat Anda",
|
||||
"languageLabel": "Bahasa",
|
||||
"englishOption": "Inggris",
|
||||
"sourcesLabel": "Sumber",
|
||||
"sourcesLabelHint": "Konfigurasi sumber kustom Anda",
|
||||
"hostRepositoryLabel": "API Repositori",
|
||||
"orgPatchesLabel": "Organisasi Modifikasi",
|
||||
"sourcesPatchesLabel": "Sumber Modifikasi",
|
||||
"orgIntegrationsLabel": "Organisasi Intergrasi",
|
||||
"sourcesIntegrationsLabel": "Sumber Integrasi",
|
||||
"sourcesResetDialogTitle": "Atur ulang",
|
||||
"sourcesResetDialogText": "Apakah Anda yakin ingin mengatur ulang sumber kustom ke bawaannya?",
|
||||
"apiURLResetDialogText": "Apakah Anda yakin ingin mengatur ulang URL API ke bawaan?",
|
||||
"contributorsLabel": "Kontributor",
|
||||
"contributorsHint": "Daftar kontributor ReVanced",
|
||||
"logsLabel": "Log",
|
||||
"logsHint": "Bagikan log manager",
|
||||
"apiURLLabel": "URL API",
|
||||
"apiURLHint": "Konfigurasi URL API kustom Anda",
|
||||
"selectApiURL": "URL API",
|
||||
"experimentalUniversalPatchesLabel": "Dukungan tambalan universal eksperimental",
|
||||
"experimentalUniversalPatchesHint": "Menampilkan semua aplikasi yang digunakan tambalan universal, pemuatan daftar aplikasi akan membuat lambat",
|
||||
"experimentalPatchesLabel": "Dukungan Modifikasi Eksperimental",
|
||||
"experimentalPatchesHint": "Aktifkan untuk menggunakan modifikasi yang tidak didukung di versi aplikasi apa pun",
|
||||
"enabledExperimentalPatches": "Modifikasi eksperimental diaktifkan",
|
||||
"exportSectionTitle": "Impor & Ekspor",
|
||||
"aboutLabel": "Tentang",
|
||||
"snackbarMessage": "Disalin ke papan klip",
|
||||
"sentryLabel": "Log sentry",
|
||||
"sentryHint": "Kirim log anonim untuk membantu kami meningkatkan ReVanced Manager",
|
||||
"restartAppForChanges": "Mulai ulang aplikasi untuk menerapkan perubahan",
|
||||
"deleteKeystoreLabel": "Hapus penyimpanan kunci",
|
||||
"deleteKeystoreHint": "Hapus penyimpanan kunci yang digunakan untuk menandatangani aplikasi",
|
||||
"deletedKeystore": "Penyimpanan kunci dihapus",
|
||||
"deleteTempDirLabel": "Hapus berkas sementara",
|
||||
"deleteTempDirHint": "Hapus berkas sementara yang tidak dipakai",
|
||||
"deletedTempDir": "Berkas sementara dihapus",
|
||||
"exportPatchesLabel": "Ekspor modifikasi terpilih",
|
||||
"exportPatchesHint": "Ekspor modifikasi terpilih ke file JSON",
|
||||
"exportedPatches": "Modifikasi terpilih telah diekspor",
|
||||
"noExportFileFound": "Tidak ada modifikasi terpilih untuk diekspor",
|
||||
"importPatchesLabel": "Impor modifikasi terpilih",
|
||||
"importPatchesHint": "Impor modifikasi terpilih dari file JSON",
|
||||
"importedPatches": "Modifikasi terpilih telah diimpor",
|
||||
"resetStoredPatchesLabel": "Kembalikan modifikasi",
|
||||
"resetStoredPatchesHint": "Kembalikan modifikasi terpilih yang telah disimpan",
|
||||
"resetStoredPatches": "Modifikasi terpilih telah dikembalikan",
|
||||
"jsonSelectorErrorMessage": "Tidak bisa menggunakan berkas JSON tersebut",
|
||||
"deleteLogsLabel": "Hapus log",
|
||||
"deleteLogsHint": "Hapus log pengelola yang terkumpul",
|
||||
"deletedLogs": "Log dihapus"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Info aplikasi",
|
||||
"openButton": "Buka",
|
||||
"uninstallButton": "Copot",
|
||||
"patchButton": "Modifikasi",
|
||||
"unpatchButton": "Memulihkan",
|
||||
"unpatchDialogText": "Apakah Anda yakin ingin memulihkan aplikasi ini?",
|
||||
"rootDialogTitle": "Kesalahan",
|
||||
"rootDialogText": "App telah diinstal dengan izin superuser, tapi saat ini ReVanced Manager tidak memiliki izin. Mohon izinkan superuser.",
|
||||
"packageNameLabel": "Nama paket",
|
||||
"originalPackageNameLabel": "Nama Paket Asli",
|
||||
"installTypeLabel": "Tipe pemasangan",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Non-root",
|
||||
"patchedDateLabel": "Tanggal Termodifikasi",
|
||||
"patchedDateHint": "{date} pukul {time}",
|
||||
"appliedPatchesLabel": "Modifikasi Terpasang",
|
||||
"appliedPatchesHint": "{quantity} modifikasi terpasang",
|
||||
"updateNotImplemented": "Fitur ini belum diimplementasikan"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Kontributor",
|
||||
"patcherContributors": "Kontributor Pemodifikasi",
|
||||
"patchesContributors": "Kontributor Pemodifikasi",
|
||||
"integrationsContributors": "Kontributor Integrasi",
|
||||
"cliContributors": "Kontributor CLI",
|
||||
"managerContributors": "Kontributor Manager"
|
||||
}
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Annulla",
|
||||
"updateButton": "Aggiorna",
|
||||
"enabledLabel": "Attivo",
|
||||
"disabledLabel": "Disattivato",
|
||||
"yesButton": "Sì",
|
||||
"noButton": "No",
|
||||
"warning": "Attenzione",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Gestione",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Impostazioni"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Gestione",
|
||||
"updatesSubtitle": "Aggiornamenti",
|
||||
"patchedSubtitle": "Applicazioni Patchate",
|
||||
"updatesAvailable": "Aggiornamenti disponibili",
|
||||
"noUpdates": "Nessun aggiornamento disponibile",
|
||||
"WIP": "Lavori in corso...",
|
||||
"noInstallations": "Non è stata installata nessuna applicazione modificata",
|
||||
"installed": "Installate",
|
||||
"updateDialogTitle": "Aggiorna Manager",
|
||||
"updateChangelogTitle": "Changelog",
|
||||
"notificationTitle": "Aggiornamento scaricato",
|
||||
"notificationText": "Tocca per installare l'aggiornamento",
|
||||
"downloadingMessage": "Sto scaricando l'aggiornamento...",
|
||||
"installingMessage": "Sto installando l'aggiornamento...",
|
||||
"errorDownloadMessage": "Impossibile scaricare l'aggiornamento",
|
||||
"errorInstallMessage": "Impossibile installare l'aggiornamento",
|
||||
"noConnection": "Nessuna connessione internet",
|
||||
"updatesDisabled": "L'aggiornamento di un'app patchata è attualmente disabilitato. Applica nuovamente la patch."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Patch",
|
||||
"infoButton": "Info",
|
||||
"changelogLabel": "Novità"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Caricamento...",
|
||||
"timeagoLabel": "{time} fa",
|
||||
"patcherLabel": "Patcher: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Aggiorna Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Applica",
|
||||
"patchDialogText": "Hai selezionato una patch di risorse ed è stato rilevato un file di installazione diviso (Split APK), quindi potrebbero verificarsi errori di patching.\nSei sicuro di voler procedere?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Seleziona un'applicazione",
|
||||
"widgetTitleSelected": "Applicazione selezionata",
|
||||
"widgetSubtitle": "Nessuna applicazione selezionata",
|
||||
"noAppsLabel": "Nessuna applicazione trovata",
|
||||
"currentVersion": "Attuale",
|
||||
"recommendedVersion": "Consigliata",
|
||||
"anyVersion": "qualsiasi"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Seleziona patch",
|
||||
"widgetTitleSelected": "Patch selezionate",
|
||||
"widgetSubtitle": "Seleziona prima un'applicazione",
|
||||
"widgetEmptySubtitle": "Nessuna patch selezionata"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Social",
|
||||
"widgetSubtitle": "Seguici sui nostri canali!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Seleziona un'applicazione",
|
||||
"searchBarHint": "Cerca applicazioni",
|
||||
"storageButton": "Archiviazione",
|
||||
"errorMessage": "Impossibile utilizzare l'applicazione selezionata"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Seleziona patch",
|
||||
"searchBarHint": "Cerca patch",
|
||||
"doneButton": "Fatto",
|
||||
"recommended": "Raccomandati",
|
||||
"all": "Tutte",
|
||||
"none": "Nessuna",
|
||||
"loadPatchesSelection": "Carica selezione patch",
|
||||
"noSavedPatches": "Nessuna patch salvata per l'app selezionata.\nPremi Fatto per salvare la selezione corrente.",
|
||||
"noPatchesFound": "Nessuna patch trovata per l'applicazione selezionata",
|
||||
"selectAllPatchesWarningContent": "Stai per selezionare tutte le patch, incluse patch non consigliate che potrebbero causare comportamenti indesiderati."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "La selezione di questa patch potrebbe causare degli errori.\n\nVersione dell'app: {packageVersion}\nVersioni supportate:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "La patch non è supportata per questa versione dell'app. Abilitare l'impostazione sperimentale per procedere."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Installer",
|
||||
"installButton": "Installa",
|
||||
"installRootButton": "Installa come Root",
|
||||
"openButton": "Apri",
|
||||
"shareButton": "Condividi file",
|
||||
"notificationTitle": "ReVanced Manager è in fase di patch",
|
||||
"notificationText": "Tocca per tornare all'installer",
|
||||
"shareApkMenuOption": "Condividi APK",
|
||||
"exportApkMenuOption": "Esporta APK",
|
||||
"shareLogMenuOption": "Condividi log",
|
||||
"installErrorDialogTitle": "Errore",
|
||||
"installErrorDialogText1": "Impossibile installare come root con le patch selezionate. Modifica le patch della tua app o scegli la modalità di installazione non-root.",
|
||||
"installErrorDialogText2": "Impossibile installare come non-root con le patch selezionate. Modifica le patch della tua app o scegli la modalità di installazione root.",
|
||||
"installErrorDialogText3": "Impossibile eseguire l'installazione come root perché l'APK originale è stato selezionato dall'archiviazione.\nSeleziona un'app già installata o scegli l'installazione non-root.",
|
||||
"noExit": "Installer ancora in esecuzione, impossibile uscire..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Impostazioni",
|
||||
"appearanceSectionTitle": "Aspetto",
|
||||
"teamSectionTitle": "Team",
|
||||
"infoSectionTitle": "Info",
|
||||
"advancedSectionTitle": "Avanzate",
|
||||
"logsSectionTitle": "Log",
|
||||
"darkThemeLabel": "Modalità scura",
|
||||
"darkThemeHint": "Benvenuto nel lato oscuro",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Goditi un'esperienza più in armonia con il tuo dispositivo",
|
||||
"languageLabel": "Lingua",
|
||||
"englishOption": "English",
|
||||
"sourcesLabel": "Sorgenti",
|
||||
"sourcesLabelHint": "Configura le tue sorgenti personalizzate",
|
||||
"hostRepositoryLabel": "Repository API",
|
||||
"orgPatchesLabel": "Organizzazione Patch",
|
||||
"sourcesPatchesLabel": "Sorgente Patch",
|
||||
"orgIntegrationsLabel": "Organizzazione Integrazioni",
|
||||
"sourcesIntegrationsLabel": "Sorgente Integrazioni",
|
||||
"sourcesResetDialogTitle": "Reimposta",
|
||||
"sourcesResetDialogText": "Sei sicuro di voler reimpostare le sorgenti personalizzate ai valori predefiniti?",
|
||||
"apiURLResetDialogText": "Sei sicuro di voler ripristinare l'URL delle API al suo valore predefinito?",
|
||||
"contributorsLabel": "Contributori",
|
||||
"contributorsHint": "Lista dei contributori di ReVanced",
|
||||
"logsLabel": "Log",
|
||||
"logsHint": "Condividi i log del manager",
|
||||
"apiURLLabel": "URL API",
|
||||
"apiURLHint": "Configura il tuo URL delle API personalizzato",
|
||||
"selectApiURL": "URL API",
|
||||
"experimentalUniversalPatchesLabel": "Supporto per patch universali sperimentali",
|
||||
"experimentalUniversalPatchesHint": "Visualizza tutte le applicazioni da utilizzare con le patch universali, il caricamento dell'elenco delle app potrebbe essere più lento",
|
||||
"experimentalPatchesLabel": "Supporto per patch sperimentali",
|
||||
"experimentalPatchesHint": "Abilita l'utilizzo di patch non supportate in qualsiasi versione dell'app",
|
||||
"enabledExperimentalPatches": "Supporto patch sperimentali abilitato",
|
||||
"exportSectionTitle": "Importa / Esporta",
|
||||
"aboutLabel": "Informazioni",
|
||||
"snackbarMessage": "Copiato negli appunti",
|
||||
"sentryLabel": "Log di Sentry",
|
||||
"sentryHint": "Invia log anonimi per aiutarci a migliorare ReVanced Manager",
|
||||
"restartAppForChanges": "Riavvia l'app per applicare le modifiche",
|
||||
"deleteKeystoreLabel": "Elimina keystore",
|
||||
"deleteKeystoreHint": "Elimina il keystore usato per firmare l'applicazione",
|
||||
"deletedKeystore": "Keystore eliminato",
|
||||
"deleteTempDirLabel": "Elimina file temporanei",
|
||||
"deleteTempDirHint": "Elimina i file temporanei non utilizzati",
|
||||
"deletedTempDir": "File temporanei eliminati",
|
||||
"exportPatchesLabel": "Esporta patch selezionate",
|
||||
"exportPatchesHint": "Esporta le patch selezionate in un file JSON",
|
||||
"exportedPatches": "Patch selezionate esportate",
|
||||
"noExportFileFound": "Nessuna patch selezionata da esportare",
|
||||
"importPatchesLabel": "Importa patch selezionate",
|
||||
"importPatchesHint": "Importa le patch selezionate da un file JSON",
|
||||
"importedPatches": "Patch selezionate importate",
|
||||
"resetStoredPatchesLabel": "Ripristina le patch",
|
||||
"resetStoredPatchesHint": "Resetta la selezione delle patch memorizzate",
|
||||
"resetStoredPatches": "La selezione delle patch è stata resettata",
|
||||
"jsonSelectorErrorMessage": "Impossibile utilizzare il file json selezionato",
|
||||
"deleteLogsLabel": "Cancella log",
|
||||
"deleteLogsHint": "Elimina i log del manager raccolti",
|
||||
"deletedLogs": "Log cancellati"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Info app",
|
||||
"openButton": "Apri",
|
||||
"uninstallButton": "Disinstalla",
|
||||
"patchButton": "Patch",
|
||||
"unpatchButton": "Ripristina",
|
||||
"unpatchDialogText": "Sei sicuro di voler ripristinare questa applicazione?",
|
||||
"rootDialogTitle": "Errore",
|
||||
"rootDialogText": "L'app è stata installata con i permessi di root, ma attualmente ReVanced Manager non ha nessun permesso.\nSi prega di concedere prima i permessi di root.",
|
||||
"packageNameLabel": "Nome pacchetto",
|
||||
"originalPackageNameLabel": "Nome originale del pacchetto",
|
||||
"installTypeLabel": "Tipo di installazione",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Non-root",
|
||||
"patchedDateLabel": "Data di patch",
|
||||
"patchedDateHint": "{date} alle {time}",
|
||||
"appliedPatchesLabel": "Patch applicate",
|
||||
"appliedPatchesHint": "{quantity} patch applicate",
|
||||
"updateNotImplemented": "Questa funzionalità non è stata ancora implementata"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contributori",
|
||||
"patcherContributors": "Collaboratori patcher",
|
||||
"patchesContributors": "Collaboratori patch",
|
||||
"integrationsContributors": "Collaboratori integrazioni",
|
||||
"cliContributors": "Collaboratori CLI",
|
||||
"managerContributors": "Contributori Manager"
|
||||
}
|
||||
}
|
||||
@@ -1,196 +0,0 @@
|
||||
{
|
||||
"okButton": "확인",
|
||||
"cancelButton": "취소",
|
||||
"enabledLabel": "활성화됨",
|
||||
"disabledLabel": "비활성화됨",
|
||||
"yesButton": "네",
|
||||
"noButton": "아니요",
|
||||
"warning": "경고",
|
||||
"navigationView": {
|
||||
"dashboardTab": "대시보드",
|
||||
"patcherTab": "패처",
|
||||
"settingsTab": "설정"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "대시보드",
|
||||
"updatesSubtitle": "업데이트",
|
||||
"patchedSubtitle": "패치된 앱",
|
||||
"updatesAvailable": "새 업데이트가 있습니다",
|
||||
"noUpdates": "새 업데이트가 없습니다",
|
||||
"WIP": "개발 중 입니다...",
|
||||
"noInstallations": "패치된 앱이 설치되지 않았습니다.",
|
||||
"installed": "설치됨",
|
||||
"updateDialogTitle": "매니저 업데이트",
|
||||
"updateDialogText": "ReVanced Manager를 다운로드하고 업데이트 하시겠습니까?",
|
||||
"notificationTitle": "업데이트 다운로드됨",
|
||||
"notificationText": "탭하여 업데이트 설치",
|
||||
"downloadingMessage": "업데이트 다운로드 중...",
|
||||
"installingMessage": "업데이트 설치 중...",
|
||||
"errorDownloadMessage": "업데이트 다운로드 실패",
|
||||
"errorInstallMessage": "업데이트 설치 실패",
|
||||
"noConnection": "인터넷이 연결되지 않음",
|
||||
"updatesDisabled": "패치된 앱 업데이트는 현재 비활성화 되어 있습니다. 앱을 다시 패치하세요."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "패치",
|
||||
"infoButton": "정보",
|
||||
"changelogLabel": "변경사항"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "로딩 중...",
|
||||
"timeagoLabel": "{time} 전",
|
||||
"patcherLabel": "패처: ",
|
||||
"managerLabel": "매니저: ",
|
||||
"updateButton": "매니저 업데이트"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "패처",
|
||||
"patchButton": "패치",
|
||||
"patchDialogText": "리소스 패치가 선택되어 있으며 분할 APK 설치가 감지되었습니다. 패치 도중 에러가 발생할 수 있습니다.\n계속 진행하시겠습니까?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "앱을 선택하세요",
|
||||
"widgetTitleSelected": "선택된 앱",
|
||||
"widgetSubtitle": "선택된 앱 없음",
|
||||
"noAppsLabel": "앱이 발견되지 않음",
|
||||
"currentVersion": "현재 버전",
|
||||
"recommendedVersion": "권장 버전",
|
||||
"anyVersion": "모든 버전"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "패치를 선택하세요",
|
||||
"widgetTitleSelected": "선택된 패치",
|
||||
"widgetSubtitle": "앱을 먼저 선택하세요.",
|
||||
"widgetEmptySubtitle": "선택된 패치가 없습니다."
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "소셜",
|
||||
"widgetSubtitle": "SNS에서 저희를 만나보세요!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "앱을 선택하세요",
|
||||
"searchBarHint": "앱 찾기",
|
||||
"storageButton": "저장소",
|
||||
"errorMessage": "선택한 앱을 사용할 수 없음"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "패치 선택",
|
||||
"searchBarHint": "패치 찾기",
|
||||
"doneButton": "완료",
|
||||
"recommended": "권장",
|
||||
"all": "모두",
|
||||
"none": "없음",
|
||||
"loadPatchesSelection": "패치 선택사항 불러오기",
|
||||
"noSavedPatches": "선택된 앱에 적용할 패치가 저장되지 않았습니다\n완료를 눌어 현재 선택사항을 저장하세요",
|
||||
"noPatchesFound": "선택된 앱에 대한 패치를 찾을 수 없습니다.",
|
||||
"selectAllPatchesWarningContent": "권장하지 않는 패치를 포함한 모든 패치를 선택하려 하고 있습니다. 이 패치는 원치 않는 문제를 유발할 수 있습니다."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "이 패치는 오류를 발생시킬 수 있습니다.\n\n앱 버전: {packageVersion}\n지원되는 버전:\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": "인스톨러가 실행 중이므로 중단할 수 없습니다..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "설정",
|
||||
"appearanceSectionTitle": "모양",
|
||||
"teamSectionTitle": "팀",
|
||||
"infoSectionTitle": "정보",
|
||||
"advancedSectionTitle": "고급 설정",
|
||||
"logsSectionTitle": "로그",
|
||||
"darkThemeLabel": "다크 모드",
|
||||
"darkThemeHint": "다크 사이드로 오신 것을 환영합니다",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "당신의 디바이스에 더 맞는 경험을 즐겨보세요",
|
||||
"languageLabel": "언어",
|
||||
"englishOption": "영어",
|
||||
"sourcesLabel": "소스",
|
||||
"sourcesLabelHint": "커스텀 소스 설정",
|
||||
"orgPatchesLabel": "패치 구성",
|
||||
"sourcesPatchesLabel": "패치 소스",
|
||||
"orgIntegrationsLabel": "통합 기능 구성",
|
||||
"sourcesIntegrationsLabel": "통합 기능 소스",
|
||||
"sourcesResetDialogTitle": "초기화",
|
||||
"sourcesResetDialogText": "정말 모든 커스텀 소스를 기본값으로 복구하시겠습니까?",
|
||||
"apiURLResetDialogText": "정말 API URL을 기본값으로 되돌릴까요?",
|
||||
"contributorsLabel": "기여자",
|
||||
"contributorsHint": "ReVanced 기여자들",
|
||||
"logsLabel": "로그",
|
||||
"logsHint": "매니저의 로그 공유하기",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "커스텀 API URL 설정",
|
||||
"selectApiURL": "API URL",
|
||||
"experimentalPatchesLabel": "실험적 패치 활성화",
|
||||
"experimentalPatchesHint": "지원되지 않는 패치를 앱의 모든 버전에 적용할 수 있도록 활성화",
|
||||
"enabledExperimentalPatches": "실험적 패치 활성화됨",
|
||||
"exportSectionTitle": "가져오기 & 내보내기",
|
||||
"aboutLabel": "정보",
|
||||
"snackbarMessage": "클립보드에 복사됨",
|
||||
"sentryLabel": "Sentry 로깅",
|
||||
"sentryHint": "익명의 로그를 보내 ReVanced Manager를 개선할 수 있도록 도와주세요",
|
||||
"restartAppForChanges": "변경 사항을 적용하려면 앱을 다시 시작하세요",
|
||||
"deleteKeystoreLabel": "키스토어 제거",
|
||||
"deleteKeystoreHint": "앱을 서명하기 위해 사용되는 키스토어를 제거합니다.",
|
||||
"deletedKeystore": "키스토어 제거됨",
|
||||
"deleteTempDirLabel": "임시 파일 삭제",
|
||||
"deleteTempDirHint": "사용되지 않은 임시 파일 삭제",
|
||||
"deletedTempDir": "임시 파일 삭제됨",
|
||||
"exportPatchesLabel": "패치 선택목록 내보내기",
|
||||
"exportPatchesHint": "패치 선택목록을 JSON 파일로 내보내기",
|
||||
"exportedPatches": "패치 선택목록을 내보냈음",
|
||||
"noExportFileFound": "내보낼 패치 선택목록이 없습니다",
|
||||
"importPatchesLabel": "패치 선택목록 불러오기",
|
||||
"importPatchesHint": "패치 선택목록을 JSON 파일에서 불러오기",
|
||||
"importedPatches": "패치 선택목록을 불러옴",
|
||||
"resetStoredPatchesLabel": "패치 초기화",
|
||||
"resetStoredPatchesHint": "저장된 패치 선택사항 초기화",
|
||||
"resetStoredPatches": "패치 선택사항이 초기화 되었습니다",
|
||||
"jsonSelectorErrorMessage": "선택한 JSON 파일을 사용할 수 없음",
|
||||
"deleteLogsLabel": "로그 삭제",
|
||||
"deleteLogsHint": "수집된 매니저 로그 삭제",
|
||||
"deletedLogs": "제거된 로그"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "앱 정보",
|
||||
"openButton": "열기",
|
||||
"uninstallButton": "삭제",
|
||||
"patchButton": "패치",
|
||||
"unpatchButton": "패치 제거",
|
||||
"unpatchDialogText": "정말 이 앱의 패치를 제거할까요?",
|
||||
"rootDialogTitle": "오류",
|
||||
"rootDialogText": "앱이 슈퍼유저 권한으로 설치되었으나 현재 ReVanced Manager에게 권한이 없습니다. 슈퍼유저 권한을 부여해주세요.",
|
||||
"packageNameLabel": "패키지 이름",
|
||||
"originalPackageNameLabel": "원본 패키지 이름",
|
||||
"installTypeLabel": "설치 타입",
|
||||
"rootTypeLabel": "루트",
|
||||
"nonRootTypeLabel": "루트 아님",
|
||||
"patchedDateLabel": "패치된 날짜",
|
||||
"patchedDateHint": "{date} {time}",
|
||||
"appliedPatchesLabel": "적용된 패치",
|
||||
"appliedPatchesHint": "{quantity}개의 패치 적용됨",
|
||||
"updateNotImplemented": "이 기능은 아직 구현되지 않았습니다"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "기여자",
|
||||
"patcherContributors": "패쳐 기여자",
|
||||
"patchesContributors": "패치 기여자",
|
||||
"integrationsContributors": "통합 기능 기여자",
|
||||
"cliContributors": "CLI 기여자",
|
||||
"managerContributors": "Manager 기여자"
|
||||
}
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
{
|
||||
"okButton": "Gerai",
|
||||
"cancelButton": "Atšaukti",
|
||||
"updateButton": "Atnaujinti",
|
||||
"enabledLabel": "Įjungta",
|
||||
"disabledLabel": "Išjungta",
|
||||
"yesButton": "Taip",
|
||||
"noButton": "Ne",
|
||||
"warning": "Įspėjimas",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Valdymo skydas",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Nustatymai"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Valdymo skydas",
|
||||
"updatesSubtitle": "Atnaujinimai",
|
||||
"patchedSubtitle": "Modifikuotos programos",
|
||||
"updatesAvailable": "Galimi atnaujinimai",
|
||||
"noUpdates": "Atnaujinimų nėra",
|
||||
"WIP": "Vykdomi darbai...",
|
||||
"noInstallations": "Nėra įdiegtų modifikuotų programų",
|
||||
"installed": "Įdiegta",
|
||||
"updateDialogTitle": "Atnaujinti Manager",
|
||||
"updateChangelogTitle": "Pakeitimų sąrašas",
|
||||
"notificationTitle": "Atnaujinimas atsiųstas",
|
||||
"notificationText": "Paspauskite, kad įdiegtumėte naujinimą",
|
||||
"downloadingMessage": "Atsiunčiamas atnaujinimas...",
|
||||
"installingMessage": "Įdiegiamas atnaujinimas...",
|
||||
"errorDownloadMessage": "Nepavyksta atsisiųsti atnaujinimo",
|
||||
"errorInstallMessage": "Nepavyksta įdiegti atnaujinimo",
|
||||
"noConnection": "Nėra interneto ryšio",
|
||||
"updatesDisabled": "Modifikuotų programų atnaujinimas šiuo metu išjungtas. Vėl modifikuokite programą."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Modifikuoti",
|
||||
"infoButton": "Info",
|
||||
"changelogLabel": "Pakeitimai"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Kraunama...",
|
||||
"timeagoLabel": "Prieš {time}",
|
||||
"patcherLabel": "Patcher: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Atnaujinti Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Modifikuoti",
|
||||
"patchDialogText": "Jūs pasirinkote resource modifikaciją ir padalinta APK instaliacija buvo aptikta, tai modifikavimo klaidos gali atsitikti.\nAr esate tikri kad norite tęsti modifikuoti padalytą APK?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Pasirinkite programą",
|
||||
"widgetTitleSelected": "Pasirinkta programa",
|
||||
"widgetSubtitle": "Nepasirinkta programa",
|
||||
"noAppsLabel": "Nerastos jokios programos",
|
||||
"currentVersion": "Dabartinė",
|
||||
"recommendedVersion": "Rekomenduojama",
|
||||
"anyVersion": "bet kokia"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Pasirinkite modifikacijas",
|
||||
"widgetTitleSelected": "Pasirinktos modifikacijos",
|
||||
"widgetSubtitle": "Pirmiausia pasirinkite programą",
|
||||
"widgetEmptySubtitle": "Nepasirinkta jokių modifikacijų"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Socialiniai tinklai",
|
||||
"widgetSubtitle": "Mes esame internete!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Pasirinkite programą",
|
||||
"searchBarHint": "Ieškoti programų",
|
||||
"storageButton": "Saugykla",
|
||||
"errorMessage": "Neina naudoti parinktos programos"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Pasirinkti modifikacijas",
|
||||
"searchBarHint": "Ieškoti modifikacijų",
|
||||
"doneButton": "Atlikta",
|
||||
"recommended": "Rekomenduojama",
|
||||
"all": "Visi",
|
||||
"none": "Nėra",
|
||||
"loadPatchesSelection": "Įkelti modifikacijų pasirinkimą",
|
||||
"noSavedPatches": "Nėra išsaugotų pasirinktos programos modifikacijų.\nPaspauskite Atlikta, kad išsaugotumėte dabartinį pasirinkimą.",
|
||||
"noPatchesFound": "Nerasta modifikacijų pasirinktai programai",
|
||||
"selectAllPatchesWarningContent": "Jūs pasirinksite visas modifikacijas, tai įskaito ir nerekomenduojamas modifikacijas ir tai gali sukelti nepageidaujama elgesį."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Šios modifikacijos pasirinkimas gali sukelti modifikavimo klaidų.\n\nProgramos versija: {packageVersion}\npalaikomos versijos:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "Modifikacija nepalaikoma šios programos versijai. Norėdami tęsti, nustatymuose įjunkite eksperimentinį jungiklį."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Įdiegėjas",
|
||||
"installButton": "Įdiegti",
|
||||
"installRootButton": "Įdiegti kaip Root",
|
||||
"openButton": "Atidaryti",
|
||||
"shareButton": "Bendrinti failą",
|
||||
"notificationTitle": "ReVanced Manager modifikuoja programą",
|
||||
"notificationText": "Paspauskite sugrįžti į įdiegėją",
|
||||
"shareApkMenuOption": "Bendrinti APK",
|
||||
"exportApkMenuOption": "Eksportuoti APK",
|
||||
"shareLogMenuOption": "Bendrinti įrašus",
|
||||
"installErrorDialogTitle": "Klaida",
|
||||
"installErrorDialogText1": "Root instaliacija negalima su dabartinėm pasirinktom modifikacijom.\nPer modifikuok programą arba pasirink ne root instaliaciją.",
|
||||
"installErrorDialogText2": "Ne root instaliacija negalima su dabartinėm pasirinktom modifikacijom.\nPer modifikuok programą arba pasirink root instaliaciją jei tavo įrenginys turi root.",
|
||||
"installErrorDialogText3": "Root instaliacija negalima nes originalus APK buvo pasirinktas iš saugyklos.\nPasirink jau instaliuotą programą arba pasirink ne root instaliaciją.",
|
||||
"noExit": "Diegimo programa vis dar veikia, negalima išeiti..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Nustatymai",
|
||||
"appearanceSectionTitle": "Išvaizda",
|
||||
"teamSectionTitle": "Komanda",
|
||||
"infoSectionTitle": "Info",
|
||||
"advancedSectionTitle": "Išplėstiniai nustatymai",
|
||||
"logsSectionTitle": "Įrašai",
|
||||
"darkThemeLabel": "Tamsus rėžimas",
|
||||
"darkThemeHint": "Sveikas atvykęs į tamsiąją pusę",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Mėgaukis patirtimi artimiau tavo įrenginiui",
|
||||
"languageLabel": "Kalba",
|
||||
"englishOption": "Anglų",
|
||||
"sourcesLabel": "Šaltiniai",
|
||||
"sourcesLabelHint": "Sukonfigūruoti tavo nurodytus šaltinius",
|
||||
"hostRepositoryLabel": "API saugykla",
|
||||
"orgPatchesLabel": "Modifikacijų organizacija",
|
||||
"sourcesPatchesLabel": "Modifikacijų šaltinis",
|
||||
"orgIntegrationsLabel": "Integracijų organizacija",
|
||||
"sourcesIntegrationsLabel": "Integracijų šaltinis",
|
||||
"sourcesResetDialogTitle": "Nustatyti iš naujo",
|
||||
"sourcesResetDialogText": "Ar esi tikras kad nori iš naujo nustatyti šaltinius į jų numatytas reikšmes?",
|
||||
"apiURLResetDialogText": "Ar esi tikras kad nori iš naujo nustatyti API URL adresą į numatytą reikšmę?",
|
||||
"contributorsLabel": "Prisidėjusieji žmonės",
|
||||
"contributorsHint": "Žmonės prisidėję prie ReVanced",
|
||||
"logsLabel": "Įrašai",
|
||||
"logsHint": "Bendrinti Manager įrašus",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Sukonfigūruoti tavo nurodytus API URL",
|
||||
"selectApiURL": "API URL",
|
||||
"experimentalUniversalPatchesLabel": "Eksperimentinių universalių modifikacijų palaikymas",
|
||||
"experimentalUniversalPatchesHint": "Rodyti visas programas, skirtas naudoti su universaliom modifikacijom, krovimas programų sąrašo gali būti lėtesnis",
|
||||
"experimentalPatchesLabel": "Eksperimentinių modifikacijų palaikymas",
|
||||
"experimentalPatchesHint": "Įgalinti naudoti nepalaikomas modifikacijas bet kurioje programos versijoje",
|
||||
"enabledExperimentalPatches": "Eksperimentinių modifikacijų palaikymas įjungtas",
|
||||
"exportSectionTitle": "Importuoti ir eksportuoti",
|
||||
"aboutLabel": "Apie",
|
||||
"snackbarMessage": "Nukopijuota į iškarpinę",
|
||||
"sentryLabel": "Klaidų rinkimo įrankio įrašai",
|
||||
"sentryHint": "Siųsti anoniminius įrašus, kad padėtumėte mums tobulinti ReVanced Manager",
|
||||
"restartAppForChanges": "Iš naujo paleiskite programą, kad modifikacijos įsigaliotų",
|
||||
"deleteKeystoreLabel": "Ištrinti keystore",
|
||||
"deleteKeystoreHint": "Ištrinti keystore kuris naudojamas pasirašyti programą",
|
||||
"deletedKeystore": "Keystore ištrintas",
|
||||
"deleteTempDirLabel": "Ištrinti laikinus failus",
|
||||
"deleteTempDirHint": "Ištrinti nenaudojamus laikinus failus",
|
||||
"deletedTempDir": "Laikini failai ištrinti",
|
||||
"exportPatchesLabel": "Eksportuoti modifikacijų pasirinkimą",
|
||||
"exportPatchesHint": "Eksportuoti modifikacijų pasirinkimą į JSON failą",
|
||||
"exportedPatches": "Modifikacijų pasirinkimai eksportuoti",
|
||||
"noExportFileFound": "Nėra pasirinktų modifikacijų eksportuoti",
|
||||
"importPatchesLabel": "Įkelti modifikacijų pasirinkimą",
|
||||
"importPatchesHint": "Įkelti modifikacijų pasirinkimą iš JSON failo",
|
||||
"importedPatches": "Modifikacijų pasirinkimai įkelti",
|
||||
"resetStoredPatchesLabel": "Atstatyti modifikacijas",
|
||||
"resetStoredPatchesHint": "Atstatyti išsaugotą modifikacijų pasirinkimą",
|
||||
"resetStoredPatches": "Modifikacijų pasirinkimas buvo atstatytas",
|
||||
"jsonSelectorErrorMessage": "Neina naudoti pasirinkto JSON failo",
|
||||
"deleteLogsLabel": "Ištrinti įrašus",
|
||||
"deleteLogsHint": "Ištrinti surinktus Manager įrašus",
|
||||
"deletedLogs": "Įrašai ištrinti"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Programos informacija",
|
||||
"openButton": "Atidaryti",
|
||||
"uninstallButton": "Išdiegti",
|
||||
"patchButton": "Modifikuoti",
|
||||
"unpatchButton": "Išimti modifikacijas",
|
||||
"unpatchDialogText": "Ar esi tikras kad nori išimti modifikacijas iš šios programos?",
|
||||
"rootDialogTitle": "Klaida",
|
||||
"rootDialogText": "Programa buvo įdiegta su supervartotojo leidimais, bet ReVanced Manager neturi leidimų.\nPirmiausia suteikite supervartotojo leidimus.",
|
||||
"packageNameLabel": "Paketo pavadinimas",
|
||||
"originalPackageNameLabel": "Originalus paketo pavadinimas",
|
||||
"installTypeLabel": "Įdiegimo tipas",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Ne root",
|
||||
"patchedDateLabel": "Modifikavimo data",
|
||||
"patchedDateHint": "{date} {time}",
|
||||
"appliedPatchesLabel": "Uždėtos modifikacijos",
|
||||
"appliedPatchesHint": "{quantity} uždėtos modifikacijos",
|
||||
"updateNotImplemented": "Ši funkcija dar neįgyvendinta"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Prisidėjusieji žmonės",
|
||||
"patcherContributors": "Prisidėjusieji prie Patcher",
|
||||
"patchesContributors": "Prisidėjusieji prie Patcher",
|
||||
"integrationsContributors": "Prisidėjusieji prie integracijų",
|
||||
"cliContributors": "Prisidėjusieji prie CLI",
|
||||
"managerContributors": "Prisidėjusieji prie Manager"
|
||||
}
|
||||
}
|
||||
@@ -1,196 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Batal",
|
||||
"enabledLabel": "Diaktifkan",
|
||||
"disabledLabel": "Dimatikan",
|
||||
"yesButton": "Ya",
|
||||
"noButton": "Tidak",
|
||||
"warning": "Amaran",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Papan Pemuka",
|
||||
"patcherTab": "Pemodifikasi",
|
||||
"settingsTab": "Tetapan"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Papan Pemuka",
|
||||
"updatesSubtitle": "Kemas Kini",
|
||||
"patchedSubtitle": "Aplikasi Yang Telah Dimodifikasi",
|
||||
"updatesAvailable": "Kemas kini tersedia",
|
||||
"noUpdates": "Tiada kemas kini tersedia",
|
||||
"WIP": "Kerja Masih Berjalan...",
|
||||
"noInstallations": "Tiada aplikasi dimodifikasi yang telah dipasang",
|
||||
"installed": "Dipasang",
|
||||
"updateDialogTitle": "Kemas Kini Manager",
|
||||
"updateDialogText": "Adakah anda ingin memuat turun dan mengemas kini ReVanced Manager?",
|
||||
"notificationTitle": "Kemaskini dimuat turun",
|
||||
"notificationText": "Tap untuk memuat masuk kemas kini",
|
||||
"downloadingMessage": "Memuat turun pengemaskinian...",
|
||||
"installingMessage": "Memasang pengemaskinian...",
|
||||
"errorDownloadMessage": "Tidak dapat memuat turun pengemaskinian",
|
||||
"errorInstallMessage": "Tidak dapat memasang pengemaskinian",
|
||||
"noConnection": "Tiada sambungan internet",
|
||||
"updatesDisabled": "Kemas kini aplikasi yang telah dimodifikasi kini sedang dinyah aktif. Modifikasi semula aplikasi."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Modifikasi",
|
||||
"infoButton": "Maklumat",
|
||||
"changelogLabel": "Log perubahan"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Memuatkan...",
|
||||
"timeagoLabel": "{time} lepas",
|
||||
"patcherLabel": "Pemodifikasi: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Kemas Kini Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Pemodifikasi",
|
||||
"patchButton": "Modifikasi",
|
||||
"patchDialogText": "Anda telah memilih modifikasi dan APK dipasang secara split telah dikesan jadi ralat mungkin terjadi ketika memodifikasi.\nAdakah anda pasti untuk teruskan modifikasi secara split base APK?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Pilih aplikasi",
|
||||
"widgetTitleSelected": "Aplikasi dipilih",
|
||||
"widgetSubtitle": "Tiada aplikasi dipilih",
|
||||
"noAppsLabel": "Tiada aplikasi ditemui",
|
||||
"currentVersion": "Semasa",
|
||||
"recommendedVersion": "Disyorkan",
|
||||
"anyVersion": "mana-mana"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Pilih modifikasi",
|
||||
"widgetTitleSelected": "Modifikasi pilihan",
|
||||
"widgetSubtitle": "Pilih aplikasi dahulu",
|
||||
"widgetEmptySubtitle": "Tiada modifikasi terpilih"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Sosial",
|
||||
"widgetSubtitle": "Ikuti kami!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Pilih aplikasi",
|
||||
"searchBarHint": "Cari aplikasi",
|
||||
"storageButton": "Storan",
|
||||
"errorMessage": "Tidak dapat menggunakan aplikasi yang dipilih"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Pilih modifikasi",
|
||||
"searchBarHint": "Cari modifikasi",
|
||||
"doneButton": "Selesai",
|
||||
"recommended": "Disyorkan",
|
||||
"all": "Semua",
|
||||
"none": "Tiada",
|
||||
"loadPatchesSelection": "Memuat pilihan modifikasi",
|
||||
"noSavedPatches": "Tiada modifkasi disimpan untuk aplikasi dipilih\nTekan Selesai untuk menyimpan pilihan semasa",
|
||||
"noPatchesFound": "Tiada modifikasi dijumpai untuk apl pilihan",
|
||||
"selectAllPatchesWarningContent": "Anda telah memilih untuk menggunakan kesemua modifikasi, termasuk modifikasi yang tidak disyorkan dan boleh mengakibatkan kesan yang tidak dijangka."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Memilih modifikasi mungkin menyebabkan ralat ketika modifikasi.\n\nVersi aplikasi: {packageVersion}\nVersi disokong:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "Patch tidak disokong untuk versi apl ini. Benarkan punat percubaan di ruang tetapan untuk teruskan."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Pemasang",
|
||||
"installButton": "Pasang",
|
||||
"installRootButton": "Pasang sebagai Root",
|
||||
"openButton": "Buka",
|
||||
"shareButton": "Kongsi fail",
|
||||
"notificationTitle": "Revanced Manager sedang memodifikasi",
|
||||
"notificationText": "Tap untuk kembali ke pemasang",
|
||||
"shareApkMenuOption": "Kongsi APK",
|
||||
"exportApkMenuOption": "Eksport APK",
|
||||
"shareLogMenuOption": "Kongsi Log",
|
||||
"installErrorDialogTitle": "Ralat",
|
||||
"installErrorDialogText1": "Pemasangan root adalah mustahil menggunakan modifikasi terpilih.\nModifikasi semula apl anda atau pilih pemasangan tanpa root.",
|
||||
"installErrorDialogText2": "Pemasangan tanpa root adalah mustahil menggunakan modifikasi tepilih.\nModifikasi semula apl anda atau pilih pemasangan root jika peranti anda telah root.",
|
||||
"installErrorDialogText3": "Pemasangan sebagai root adalah mustahil kerana APK asal dipilih dari storan.\nSila pilih aplikasi yang telah dipasang atau pilih pemasangan tanpa root.",
|
||||
"noExit": "Pemasang masih dijalankan, jangan keluar..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Tetapan",
|
||||
"appearanceSectionTitle": "Penampilan",
|
||||
"teamSectionTitle": "Pasukan",
|
||||
"infoSectionTitle": "Maklumat",
|
||||
"advancedSectionTitle": "Lanjutan",
|
||||
"logsSectionTitle": "Log",
|
||||
"darkThemeLabel": "Mod Gelap",
|
||||
"darkThemeHint": "Selamat datang ke Kegelapan",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Nikmati tema yang lebih serasi dengan anda",
|
||||
"languageLabel": "Bahasa",
|
||||
"englishOption": "Inggeris",
|
||||
"sourcesLabel": "Sumber",
|
||||
"sourcesLabelHint": "Tetapkan sumber khas",
|
||||
"orgPatchesLabel": "Pengarang Modifikasi",
|
||||
"sourcesPatchesLabel": "Sumber Modifikasi",
|
||||
"orgIntegrationsLabel": "Pengarang Integrasi",
|
||||
"sourcesIntegrationsLabel": "Sumber Integrasi",
|
||||
"sourcesResetDialogTitle": "Set semula",
|
||||
"sourcesResetDialogText": "Adakah anda pasti untuk tetapkan semula sumber khas kepada tetapan asal?",
|
||||
"apiURLResetDialogText": "Adakah anda pasti untuk tetapkan semula URL API kepada tetapan asal?",
|
||||
"contributorsLabel": "Penyumbang",
|
||||
"contributorsHint": "Senarai penyokong ReVanced",
|
||||
"logsLabel": "Log",
|
||||
"logsHint": "Kongsi log Manager",
|
||||
"apiURLLabel": "URL API",
|
||||
"apiURLHint": "Tetapkan URL API khas",
|
||||
"selectApiURL": "URL API",
|
||||
"experimentalPatchesLabel": "Sokongan modifikasi percubaan",
|
||||
"experimentalPatchesHint": "Benarkan untuk menggunakan patch yang tidak disokong untuk mana-mana versi apl",
|
||||
"enabledExperimentalPatches": "Sokongan modifikasi percubaan dibenarkan",
|
||||
"exportSectionTitle": "Import & Eksport",
|
||||
"aboutLabel": "Tentang",
|
||||
"snackbarMessage": "Disalin ke papan klip",
|
||||
"sentryLabel": "Rekod Sentry",
|
||||
"sentryHint": "Hantarkan log anonymous untuk bantu kami menambah baik Revanced Manager",
|
||||
"restartAppForChanges": "Mulakan semula apl untuk menggunakan tetapan",
|
||||
"deleteKeystoreLabel": "Buang keystore",
|
||||
"deleteKeystoreHint": "Buang keystore yang digunakan untuk mengesahkan apl",
|
||||
"deletedKeystore": "Keystore dibuang",
|
||||
"deleteTempDirLabel": "Buang fail sementara",
|
||||
"deleteTempDirHint": "Buang fail sementara yang tidak digunakan",
|
||||
"deletedTempDir": "Fail sementara dibuang",
|
||||
"exportPatchesLabel": "Eksport pilihan modifikasi",
|
||||
"exportPatchesHint": "Eksport pilihan modifikasi ke fail JSON",
|
||||
"exportedPatches": "Pilihan modifikasi telah dieksport",
|
||||
"noExportFileFound": "Tiada pilihan modifikasi untuk dieksport",
|
||||
"importPatchesLabel": "Import pilihan modifikasi",
|
||||
"importPatchesHint": "Import pilihan modifikasi dari fail JSON",
|
||||
"importedPatches": "Pilihan modifikasi telah diimport",
|
||||
"resetStoredPatchesLabel": "Set semula modifikasi",
|
||||
"resetStoredPatchesHint": "Set semula pilihan modifikasi tersimpan",
|
||||
"resetStoredPatches": "Pilihan modifikasi telah diset semula",
|
||||
"jsonSelectorErrorMessage": "Tidak dapat menggunakan fail JSON yang dipilih",
|
||||
"deleteLogsLabel": "Padam log",
|
||||
"deleteLogsHint": "Padam log manager terkumpul",
|
||||
"deletedLogs": "Log telah dipadam"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Maklumat apl",
|
||||
"openButton": "Buka",
|
||||
"uninstallButton": "Nyah pasang",
|
||||
"patchButton": "Modifikasi",
|
||||
"unpatchButton": "Nyah modifikasi",
|
||||
"unpatchDialogText": "Adakah anda pasti untuk nyah modifikasi aplikasi ini?",
|
||||
"rootDialogTitle": "Ralat",
|
||||
"rootDialogText": "Aplikasi telah dipasang dengan kebenaran superuser, tetapi ReVanced Manager sekarang tidak ada kebeneran.\nMinta membenarkan kebenaran superuser dahulu.",
|
||||
"packageNameLabel": "Nama pakej",
|
||||
"originalPackageNameLabel": "Nama asal pakej",
|
||||
"installTypeLabel": "Jenis Pemasangan",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Tanpa root",
|
||||
"patchedDateLabel": "Tarikh Modifikasi",
|
||||
"patchedDateHint": "{date} pada {time}",
|
||||
"appliedPatchesLabel": "Modifikasi Digunakan",
|
||||
"appliedPatchesHint": "{quantity} modifikasi digunakan",
|
||||
"updateNotImplemented": "Ciri ini masih belum dilaksanakan"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Penyumbang",
|
||||
"patcherContributors": "Penyumpang pemodifikasi",
|
||||
"patchesContributors": "Penyumbang Modifikasi",
|
||||
"integrationsContributors": "Penyumbang Integrasi",
|
||||
"cliContributors": "Penyumbang CLI",
|
||||
"managerContributors": "Penyumbang Manager"
|
||||
}
|
||||
}
|
||||
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();
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Anuluj",
|
||||
"updateButton": "Aktualizuj",
|
||||
"enabledLabel": "Włączone",
|
||||
"disabledLabel": "Wyłączone",
|
||||
"yesButton": "Tak",
|
||||
"noButton": "Nie",
|
||||
"warning": "Ostrzeżenie",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Panel główny",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Ustawienia"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Panel główny",
|
||||
"updatesSubtitle": "Aktualizacje",
|
||||
"patchedSubtitle": "Zaktualizowane aplikacje",
|
||||
"updatesAvailable": "Dostępne aktualizacje",
|
||||
"noUpdates": "Brak dostępnych aktualizacji",
|
||||
"WIP": "Prace w toku...",
|
||||
"noInstallations": "Nie zainstalowano żadnych zmodyfikowanych aplikacji",
|
||||
"installed": "Zainstalowane",
|
||||
"updateDialogTitle": "Zaktualizuj Managera",
|
||||
"updateChangelogTitle": "Lista zmian",
|
||||
"notificationTitle": "Pobrano aktualizacje",
|
||||
"notificationText": "Kliknij, aby zainstalować aktualizację",
|
||||
"downloadingMessage": "Pobieranie aktualizacji...",
|
||||
"installingMessage": "Instalowanie aktualizacji...",
|
||||
"errorDownloadMessage": "Nie udało się pobrać aktualizacji",
|
||||
"errorInstallMessage": "Nie udało się zainstalować aktualizacji",
|
||||
"noConnection": "Brak połączenia z internetem",
|
||||
"updatesDisabled": "Aktualizowanie załatanej aplikacji jest obecnie niemożliwe. Spróbuj załatać aplikację jeszcze raz."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Łataj",
|
||||
"infoButton": "Info",
|
||||
"changelogLabel": "Lista zmian"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Ładowanie...",
|
||||
"timeagoLabel": "{time} temu",
|
||||
"patcherLabel": "Patcher: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Zaktualizuj Menedżera"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Łataj",
|
||||
"patchDialogText": "Wykryto instalację split APK, więc mogą wystąpić błędy podczas aktualizacji.\nCzy na pewno chcesz kontynuować?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Wybierz aplikację",
|
||||
"widgetTitleSelected": "Wybrana aplikacja",
|
||||
"widgetSubtitle": "Nie wybrano aplikacji",
|
||||
"noAppsLabel": "Nie znaleziono aplikacji",
|
||||
"currentVersion": "Aktualna",
|
||||
"recommendedVersion": "Zalecana",
|
||||
"anyVersion": "dowolna"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Wybierz łatki",
|
||||
"widgetTitleSelected": "Wybrane łatki",
|
||||
"widgetSubtitle": "Najpierw wybierz aplikację",
|
||||
"widgetEmptySubtitle": "Nie wybrano żadnych łatek"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Media społecznościowe",
|
||||
"widgetSubtitle": "Jesteśmy online!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Wybierz aplikację",
|
||||
"searchBarHint": "Wyszukaj aplikacje",
|
||||
"storageButton": "Pamięć",
|
||||
"errorMessage": "Nie można użyć wybranej aplikacji"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Wybierz łatki",
|
||||
"searchBarHint": "Wyszukaj łatki",
|
||||
"doneButton": "Gotowe",
|
||||
"recommended": "Zalecane",
|
||||
"all": "Wszystkie",
|
||||
"none": "Żadne",
|
||||
"loadPatchesSelection": "Załaduj wybrane łatki",
|
||||
"noSavedPatches": "Brak zapisanych łatek dla wybranej aplikacji.\nNaciśnij Gotowe, aby zapisać bieżący wybór.",
|
||||
"noPatchesFound": "Nie znaleziono żadnych łatek dla wybranej aplikacji",
|
||||
"selectAllPatchesWarningContent": "Zamierzasz wybrać wszystkie łatki, włącznie z tymi niezalecanymi, które mogą powodować niepożądane zachowania."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Wybranie tej łatki może spowodować błędy podczas modyfikowania.\n\nWersja aplikacji: {packageVersion}\nAktualnie wspierana wersja:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "Łatka nie jest obsługiwana dla tej wersji aplikacji. Włącz opcje eksperymentalne w ustawieniach, aby kontynuować."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Instalator",
|
||||
"installButton": "Zainstaluj",
|
||||
"installRootButton": "Zainstaluj jako Root",
|
||||
"openButton": "Otwórz",
|
||||
"shareButton": "Udostępnij plik",
|
||||
"notificationTitle": "ReVanced Manager patchuje",
|
||||
"notificationText": "Dotknij, aby powrócić do instalatora",
|
||||
"shareApkMenuOption": "Udostępnij plik APK",
|
||||
"exportApkMenuOption": "Eksportuj APK",
|
||||
"shareLogMenuOption": "Udostępnij logi",
|
||||
"installErrorDialogTitle": "Błąd",
|
||||
"installErrorDialogText1": "Instalacja za pomocą roota nie jest możliwa przy obecnym wyborze łatek.\nZałataj aplikacje ponownie lub wybierz instalacje bez roota.",
|
||||
"installErrorDialogText2": "Instalacja bez roota nie jest możliwa przy obecnym wyborze łatek.\nZałataj aplikacje ponownie lub wybierz instalacje za pomocą roota, jeśli masz zrootowane urządzenie.",
|
||||
"installErrorDialogText3": "Instalacja jako root nie jest możliwa, ponieważ oryginalny plik APK został wybrany z pamięci.\nWybierz zainstalowaną aplikację lub wybierz instalację bez używania roota.",
|
||||
"noExit": "Instalator jest nadal uruchomiony, nie można zakończyć jego działania..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Ustawienia",
|
||||
"appearanceSectionTitle": "Wygląd",
|
||||
"teamSectionTitle": "Zespół",
|
||||
"infoSectionTitle": "Informacje",
|
||||
"advancedSectionTitle": "Zaawansowane",
|
||||
"logsSectionTitle": "Logi",
|
||||
"darkThemeLabel": "Tryb ciemny",
|
||||
"darkThemeHint": "Witamy na ciemnej stronie mocy",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Ciesz się wrażeniami bliższymi twojemu urządzeniu",
|
||||
"languageLabel": "Język",
|
||||
"englishOption": "Angielski",
|
||||
"sourcesLabel": "Źródła",
|
||||
"sourcesLabelHint": "Skonfiguruj własne źródła",
|
||||
"hostRepositoryLabel": "Repozytorium API",
|
||||
"orgPatchesLabel": "Organizacja łatek",
|
||||
"sourcesPatchesLabel": "Źródło łatek",
|
||||
"orgIntegrationsLabel": "Organizacja integracji",
|
||||
"sourcesIntegrationsLabel": "Źródło integracji",
|
||||
"sourcesResetDialogTitle": "Zresetuj",
|
||||
"sourcesResetDialogText": "Czy na pewno chcesz przywrócić niestandardowe źródła do wartości domyślnych?",
|
||||
"apiURLResetDialogText": "Czy jesteś pewien, że chcesz przywrócić wszystkie adresy API do domyślnych wartości?",
|
||||
"contributorsLabel": "Współtwórcy",
|
||||
"contributorsHint": "Lista współtwórców ReVanced",
|
||||
"logsLabel": "Logi",
|
||||
"logsHint": "Udostępnij logi menedżera",
|
||||
"apiURLLabel": "Adres API",
|
||||
"apiURLHint": "Ustaw własny adres API",
|
||||
"selectApiURL": "Adres API",
|
||||
"experimentalUniversalPatchesLabel": "Wsparcie dla uniwersalnych eksperymentalnych łatek",
|
||||
"experimentalUniversalPatchesHint": "Wyświetl wszystkie aplikacje do użycia z uniwersalnymi łatkami, ładowanie listy aplikacji może być wolniejsze",
|
||||
"experimentalPatchesLabel": "Wsparcie dla eksperymentalnych łatek",
|
||||
"experimentalPatchesHint": "Włącz użycie nieobsługiwanych łatek w dowolnej wersji aplikacji",
|
||||
"enabledExperimentalPatches": "Włączone wsparcie dla eksperymentalnych łatek",
|
||||
"exportSectionTitle": "Import i eksport",
|
||||
"aboutLabel": "O Aplikacji",
|
||||
"snackbarMessage": "Skopiowano do schowka",
|
||||
"sentryLabel": "Zapisywanie logów",
|
||||
"sentryHint": "Wysyłaj anonimowe logi, aby pomóc nam ulepszyć ReVanced Manager",
|
||||
"restartAppForChanges": "Zrestartuj aplikację, aby zastosować zmiany",
|
||||
"deleteKeystoreLabel": "Usuń klucz",
|
||||
"deleteKeystoreHint": "Usuń klucz używany do podpisywania aplikacji",
|
||||
"deletedKeystore": "Klucz usunięty",
|
||||
"deleteTempDirLabel": "Usuń pliki tymczasowe",
|
||||
"deleteTempDirHint": "Usuń nieużywane pliki tymczasowe",
|
||||
"deletedTempDir": "Pliki tymczasowe zostały usunięte",
|
||||
"exportPatchesLabel": "Eksportuj wybrane łatki",
|
||||
"exportPatchesHint": "Eksportuj wybrane łatki do pliku JSON",
|
||||
"exportedPatches": "Wyeksportowano wybór łatek",
|
||||
"noExportFileFound": "Brak wybranych łatek do wyeksportowania",
|
||||
"importPatchesLabel": "Importuj wybrane łatki",
|
||||
"importPatchesHint": "Importuj wybrane łatki z pliku JSON",
|
||||
"importedPatches": "Zaimportowano wybrane łatki",
|
||||
"resetStoredPatchesLabel": "Resetuj łatki",
|
||||
"resetStoredPatchesHint": "Zresetuj wybrane przechowywane łatki",
|
||||
"resetStoredPatches": "Wybrane łatki zostały zresetowane",
|
||||
"jsonSelectorErrorMessage": "Nie można użyć wybranego pliku JSON",
|
||||
"deleteLogsLabel": "Usuń logi",
|
||||
"deleteLogsHint": "Usuń logi zebrane przez menadżera",
|
||||
"deletedLogs": "Logi usunięte"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Informacje o aplikacji",
|
||||
"openButton": "Otwórz",
|
||||
"uninstallButton": "Odinstaluj",
|
||||
"patchButton": "Aktualizuj",
|
||||
"unpatchButton": "Usuń aktualizację",
|
||||
"unpatchDialogText": "Czy na pewno chcesz usunąć łatki z tej aplikacji?",
|
||||
"rootDialogTitle": "Błąd",
|
||||
"rootDialogText": "Aplikacja została zainstalowana z uprawnieniami superużytkownika, ale obecnie ReVanced Manager nie ma uprawnień.\nProszę najpierw przyznać uprawnienia superużytkownika.",
|
||||
"packageNameLabel": "Nazwa pakietu",
|
||||
"originalPackageNameLabel": "Oryginalna nazwa pakietu",
|
||||
"installTypeLabel": "Typ instalacji",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Bez roota",
|
||||
"patchedDateLabel": "Data modyfikacji",
|
||||
"patchedDateHint": "{date} o godzinie {time}",
|
||||
"appliedPatchesLabel": "Zastosowane łatki",
|
||||
"appliedPatchesHint": "Zastosowano {quantity} łatek",
|
||||
"updateNotImplemented": "Ta funkcja nie została jeszcze zaimplementowana"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Współtwórcy",
|
||||
"patcherContributors": "Współtwórcy patcher'a",
|
||||
"patchesContributors": "Współtwórcy łatek",
|
||||
"integrationsContributors": "Współtwórcy integracji",
|
||||
"cliContributors": "Współtwórcy CLI",
|
||||
"managerContributors": "Współtwórcy menedżera"
|
||||
}
|
||||
}
|
||||
@@ -1,196 +0,0 @@
|
||||
{
|
||||
"okButton": "Aceitar",
|
||||
"cancelButton": "Cancelar",
|
||||
"enabledLabel": "Ativado",
|
||||
"disabledLabel": "Desativado",
|
||||
"yesButton": "Sim",
|
||||
"noButton": "Não",
|
||||
"warning": "Atenção",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Painel",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Configurações"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Painel",
|
||||
"updatesSubtitle": "Atualizações",
|
||||
"patchedSubtitle": "Aplicativos modificados",
|
||||
"updatesAvailable": "Atualizações disponíveis",
|
||||
"noUpdates": "Nenhuma atualização disponível",
|
||||
"WIP": "Em desenvolvimento...",
|
||||
"noInstallations": "Nenhum aplicativo modificado instalado",
|
||||
"installed": "Instalado",
|
||||
"updateDialogTitle": "Atualizar o Manager",
|
||||
"updateDialogText": "Tem certeza que deseja baixar e atualizar o ReVanced Manager?",
|
||||
"notificationTitle": "Atualização baixada",
|
||||
"notificationText": "Toque para instalar a atualização",
|
||||
"downloadingMessage": "Baixando atualização...",
|
||||
"installingMessage": "Instalando atualização...",
|
||||
"errorDownloadMessage": "Não foi possível baixar a atualização",
|
||||
"errorInstallMessage": "Não foi possível instalar a atualização",
|
||||
"noConnection": "Sem conexão com a internet",
|
||||
"updatesDisabled": "A opção de atualização de um aplicativo modificado está temporariamente desabilitada. Refaça o \"patch\" do aplicativo e tente novamente."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Patch",
|
||||
"infoButton": "Info",
|
||||
"changelogLabel": "Registro de alterações"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Carregando...",
|
||||
"timeagoLabel": "há {time}",
|
||||
"patcherLabel": "Patcher: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Atualizar Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Patch",
|
||||
"patchDialogText": "Você selecionou um recurso de patch e uma instalação dividida de APK foi detectada, então erros no patch podem ocorrer.\nVocê tem certeza que quer continuar?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Selecione um app",
|
||||
"widgetTitleSelected": "Aplicativo selecionado",
|
||||
"widgetSubtitle": "Nenhum aplicativo selecionado",
|
||||
"noAppsLabel": "Nenhum app foi encontrado",
|
||||
"currentVersion": "Atual",
|
||||
"recommendedVersion": "Recomendado",
|
||||
"anyVersion": "todos"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Selecionar patches",
|
||||
"widgetTitleSelected": "Patches selecionados",
|
||||
"widgetSubtitle": "Escolha um aplicativo primeiro",
|
||||
"widgetEmptySubtitle": "Nenhum patch selecionado"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Mídias sociais",
|
||||
"widgetSubtitle": "Nós estamos online!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Selecione um app",
|
||||
"searchBarHint": "Procurar aplicativos",
|
||||
"storageButton": "Armazenamento",
|
||||
"errorMessage": "Não foi possível usar o app selecionado"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Selecionar patches",
|
||||
"searchBarHint": "Buscar patches",
|
||||
"doneButton": "Concluído",
|
||||
"recommended": "Recomendado",
|
||||
"all": "Todos",
|
||||
"none": "Nenhum",
|
||||
"loadPatchesSelection": "Carregar seleção de patches",
|
||||
"noSavedPatches": "Sem patches salvados para o app selecionado\nAperte Feito para salvar a seleção atual",
|
||||
"noPatchesFound": "Nenhum patch encontrado para o aplicativo selecionado",
|
||||
"selectAllPatchesWarningContent": "Você está prestes a selecionar todos os 'patchs', isso inclui 'patchs' não-recomendados e isso pode causar comportamentos inesperados."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Selecionar esse patch pode resultar em erros de patcheamento.\n\nVersão do app: {packageVersion}\nVersões suportadas:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "O patch não é suportado para essa versão do app. Habilite a opção experimental nas configurações para continuar."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Instalador",
|
||||
"installButton": "Instalar",
|
||||
"installRootButton": "Instalar como root",
|
||||
"openButton": "Abrir",
|
||||
"shareButton": "Compartilhar arquivo",
|
||||
"notificationTitle": "ReVanced manager está aplicando os patches",
|
||||
"notificationText": "Toque para voltar ao instalador",
|
||||
"shareApkMenuOption": "Compartilhar APK",
|
||||
"exportApkMenuOption": "Exportar APK",
|
||||
"shareLogMenuOption": "Compartilhar registros",
|
||||
"installErrorDialogTitle": "Erro",
|
||||
"installErrorDialogText1": "A instalação como superusuário não é possível com a seleção de patches atual.\nRefaça o patch do aplicativo ou escolha a instalação não-superusuário.",
|
||||
"installErrorDialogText2": "A instalação sem root não é possível com a seleção de patches atual.\nRefaça os patches do aplicativo ou escolha a instalação com root se seu dispositivo for rooteado.",
|
||||
"installErrorDialogText3": "A instalação com root não é possível porque o APK original foi selecionado do armazenamento.\nSelecione um aplicativo instalado ou escolha a instalação sem root.",
|
||||
"noExit": "O instalador ainda está trabalhando, não é possível sair..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Configurações",
|
||||
"appearanceSectionTitle": "Aparência",
|
||||
"teamSectionTitle": "Time",
|
||||
"infoSectionTitle": "Info",
|
||||
"advancedSectionTitle": "Avançado",
|
||||
"logsSectionTitle": "Registros",
|
||||
"darkThemeLabel": "Modo escuro",
|
||||
"darkThemeHint": "Bem-vindo ao lado negro",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Aproveite uma experiência mais próxima do tema de seu dispositivo",
|
||||
"languageLabel": "Idioma",
|
||||
"englishOption": "Inglês",
|
||||
"sourcesLabel": "Fontes",
|
||||
"sourcesLabelHint": "Configure sua URL de API customizada",
|
||||
"orgPatchesLabel": "Organização de Patches",
|
||||
"sourcesPatchesLabel": "Fonte dos Patches",
|
||||
"orgIntegrationsLabel": "Organização das Integrações",
|
||||
"sourcesIntegrationsLabel": "Fonte das Integrações",
|
||||
"sourcesResetDialogTitle": "Redefinir",
|
||||
"sourcesResetDialogText": "Você tem certeza que quer resetar as fontes personalizadas para o padrão?",
|
||||
"apiURLResetDialogText": "Tem certeza de que deseja redefinir a URL da API para seu valor padrão?",
|
||||
"contributorsLabel": "Contribuidores",
|
||||
"contributorsHint": "Uma lista de contribuidores do ReVanced",
|
||||
"logsLabel": "Registros",
|
||||
"logsHint": "Compartilhar logs do Manager",
|
||||
"apiURLLabel": "URL da API",
|
||||
"apiURLHint": "Configure sua URL de API customizada",
|
||||
"selectApiURL": "URL da API",
|
||||
"experimentalPatchesLabel": "Suporte de Patches Experimentais",
|
||||
"experimentalPatchesHint": "Habilitar o uso de patches não suportados em qualquer versão do app",
|
||||
"enabledExperimentalPatches": "Suporte a patches experimentais ativado",
|
||||
"exportSectionTitle": "Importar & Exportar",
|
||||
"aboutLabel": "Sobre",
|
||||
"snackbarMessage": "Copiado para a área de transferência",
|
||||
"sentryLabel": "Registro do sentinela de erros",
|
||||
"sentryHint": "Envie registros anônimos para nos ajudar a melhorar o ReVanced Manager",
|
||||
"restartAppForChanges": "Reinicie o app para aplicar as mudanças",
|
||||
"deleteKeystoreLabel": "Apagar registro de chaves",
|
||||
"deleteKeystoreHint": "Apagar o registro de chaves usado para assinar o app",
|
||||
"deletedKeystore": "Registro de chaves apagado",
|
||||
"deleteTempDirLabel": "Apagar arquivos temporários",
|
||||
"deleteTempDirHint": "Apagar os arquivos temporários inutilizados",
|
||||
"deletedTempDir": "Arquivos temporários apagados",
|
||||
"exportPatchesLabel": "Exportar seleção de patches",
|
||||
"exportPatchesHint": "Exportar a seleção de patches para um arquivo JSON",
|
||||
"exportedPatches": "Seleção de patches exportadas",
|
||||
"noExportFileFound": "Nenhuma seleção de patches para exportar",
|
||||
"importPatchesLabel": "Importar seleção de patches",
|
||||
"importPatchesHint": "Importar a seleção de patches de um arquivo JSON",
|
||||
"importedPatches": "Seleção de patches importadas",
|
||||
"resetStoredPatchesLabel": "Redefinir patches",
|
||||
"resetStoredPatchesHint": "Redefinir a seleção de patches armazenados",
|
||||
"resetStoredPatches": "A seleção de patches foi redefinida",
|
||||
"jsonSelectorErrorMessage": "Não é possível usar o arquivo JSON selecionado",
|
||||
"deleteLogsLabel": "Apagar registros",
|
||||
"deleteLogsHint": "Apagar registros coletados pelo administrador",
|
||||
"deletedLogs": "Registros apagados"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Inform. do app",
|
||||
"openButton": "Abrir",
|
||||
"uninstallButton": "Desisntalar",
|
||||
"patchButton": "Patch",
|
||||
"unpatchButton": "Remover patches",
|
||||
"unpatchDialogText": "Você tem certeza que deseja remover os patches deste aplicativo?",
|
||||
"rootDialogTitle": "Erro",
|
||||
"rootDialogText": "O aplicativo foi instalado com permissões de superusuário, mas atualmente o ReVanced Manager não tem permissões.\nPor favor, conceda permissões de superusuário primeiro.",
|
||||
"packageNameLabel": "Nome do pacote",
|
||||
"originalPackageNameLabel": "Nome original do pacote",
|
||||
"installTypeLabel": "Tipo de instalação",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Não-root",
|
||||
"patchedDateLabel": "Data de patcheamento",
|
||||
"patchedDateHint": "{date} às {time}",
|
||||
"appliedPatchesLabel": "Patches aplicados",
|
||||
"appliedPatchesHint": "{quantity} patches aplicados",
|
||||
"updateNotImplemented": "Esta função ainda não foi implementada"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contribuidores",
|
||||
"patcherContributors": "Contribuidores do Patcher",
|
||||
"patchesContributors": "Contribuidores de patches",
|
||||
"integrationsContributors": "Contribuidores de integrações",
|
||||
"cliContributors": "Contribuidores CLI",
|
||||
"managerContributors": "Contribuidores do Manager"
|
||||
}
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Cancelar",
|
||||
"updateButton": "Atualizar",
|
||||
"enabledLabel": "Ativado",
|
||||
"disabledLabel": "Desativado",
|
||||
"yesButton": "Sim",
|
||||
"noButton": "Não",
|
||||
"warning": "Aviso",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Painel de controlo",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Definições"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Painel de controlo",
|
||||
"updatesSubtitle": "Atualizações",
|
||||
"patchedSubtitle": "Aplicações Modificadas",
|
||||
"updatesAvailable": "Atualizações disponíveis",
|
||||
"noUpdates": "Nenhuma atualização disponível",
|
||||
"WIP": "Em desenvolvimento...",
|
||||
"noInstallations": "Nenhuma aplicação modificada instalada",
|
||||
"installed": "Instalado",
|
||||
"updateDialogTitle": "Atualizar Manager",
|
||||
"updateChangelogTitle": "Alterações",
|
||||
"notificationTitle": "Atualização transferida",
|
||||
"notificationText": "Toque para instalar a atualização",
|
||||
"downloadingMessage": "A transferir a atualização...",
|
||||
"installingMessage": "A instalar atualização...",
|
||||
"errorDownloadMessage": "Não é possível transferir a atualização",
|
||||
"errorInstallMessage": "Não foi possível instalar a atualização",
|
||||
"noConnection": "Sem ligação à Internet",
|
||||
"updatesDisabled": "Atualizar uma aplicação modificada está atualmente desabilitado. Volta a modificar a aplicação."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Modificar",
|
||||
"infoButton": "Informação",
|
||||
"changelogLabel": "Alterações"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "A carregar...",
|
||||
"timeagoLabel": "há {time}",
|
||||
"patcherLabel": "Patcher: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Atualizar Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Modificar",
|
||||
"patchDialogText": "Selecionou uma modificação de recurso e uma instalação dividida de APK foi detetada, logo podem ocorrer erros de modificação.\nTem a certeza que deseja prosseguir?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Selecione uma aplicação",
|
||||
"widgetTitleSelected": "Aplicação selecionada",
|
||||
"widgetSubtitle": "Nenhuma aplicação selecionada",
|
||||
"noAppsLabel": "Não foram encontradas aplicações",
|
||||
"currentVersion": "Atual",
|
||||
"recommendedVersion": "Recomendada",
|
||||
"anyVersion": "qualquer"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Selecionar modificações",
|
||||
"widgetTitleSelected": "Modificações selecionadas",
|
||||
"widgetSubtitle": "Selecione uma aplicação primeiro",
|
||||
"widgetEmptySubtitle": "Nenhuma modificação selecionada"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Redes sociais",
|
||||
"widgetSubtitle": "Estamos online!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Selecione uma aplicação",
|
||||
"searchBarHint": "Procurar aplicações",
|
||||
"storageButton": "Armazenamento",
|
||||
"errorMessage": "Não é possível usar a aplicação selecionada"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Selecionar modificações",
|
||||
"searchBarHint": "Procurar modificações",
|
||||
"doneButton": "Concluído",
|
||||
"recommended": "Recomendadas",
|
||||
"all": "Todas",
|
||||
"none": "Nenhuma",
|
||||
"loadPatchesSelection": "Carregar seleção de modificações",
|
||||
"noSavedPatches": "Nenhuma correção salva para o aplicativo selecionado.\nPressione \"Concluir\" para salvar a seleção atual.",
|
||||
"noPatchesFound": "Nenhuma modificação encontrada para a aplicação selecionada",
|
||||
"selectAllPatchesWarningContent": "Está prestes a selecionar todos os patches que incluem correções não recomendadas e podem causar comportamentos indesejados."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Selecionar esta modificação pode resultar em erros.\n\nVersão da aplicação: {packageVersion}\nVersões suportadas:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "Modificar não é suportado para esta versão da aplicação. Ativa a opção experimental nas definições para proceder."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Instalador",
|
||||
"installButton": "Instalar",
|
||||
"installRootButton": "Instalar como Root",
|
||||
"openButton": "Abrir",
|
||||
"shareButton": "Partilhar ficheiro",
|
||||
"notificationTitle": "O ReVanced Manager está a fazer as modificações",
|
||||
"notificationText": "Toca para voltar ao instalador",
|
||||
"shareApkMenuOption": "Partilhar APK",
|
||||
"exportApkMenuOption": "Exportar APK",
|
||||
"shareLogMenuOption": "Partilhar registo",
|
||||
"installErrorDialogTitle": "Erro",
|
||||
"installErrorDialogText1": "A instalação com root não é possível com a seleção de modificações atuais.\nVolta a fazer a modificação da tua aplicação ou escolhe uma instalação sem root.",
|
||||
"installErrorDialogText2": "A instalação sem root não é possível com a seleção de modificações atuais.\nVolta a fazer a modificação da tua aplicação ou escolhe uma instalação com root se o teu dispositivo estiver rooted.",
|
||||
"installErrorDialogText3": "Não é possível instalar com root, pois o APK original foi selecionado do armazenamento.\nSelecione uma aplicação instalada ou escolha uma instalação sem root.",
|
||||
"noExit": "O instalador ainda está em execução, não é possível sair..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Definições",
|
||||
"appearanceSectionTitle": "Aparência",
|
||||
"teamSectionTitle": "Equipa",
|
||||
"infoSectionTitle": "Informação",
|
||||
"advancedSectionTitle": "Opções avançadas",
|
||||
"logsSectionTitle": "Registos",
|
||||
"darkThemeLabel": "Modo escuro",
|
||||
"darkThemeHint": "Bem-vindo ao lado negro",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Aproveite uma experiência mais próxima do tema do seu dispositivo",
|
||||
"languageLabel": "Idioma",
|
||||
"englishOption": "Inglês",
|
||||
"sourcesLabel": "Fontes",
|
||||
"sourcesLabelHint": "Configure as suas fontes personalizadas",
|
||||
"hostRepositoryLabel": "API do Repositório",
|
||||
"orgPatchesLabel": "Organização de Modificações",
|
||||
"sourcesPatchesLabel": "Fonte das Modificações",
|
||||
"orgIntegrationsLabel": "Organização de Integrações",
|
||||
"sourcesIntegrationsLabel": "Fonte das Integrações",
|
||||
"sourcesResetDialogTitle": "Repor",
|
||||
"sourcesResetDialogText": "Tem certeza que deseja redefinir as fontes personalizadas para os seus valores padrão?",
|
||||
"apiURLResetDialogText": "Tem certeza de que deseja repor o URL da API para o seu valor padrão?",
|
||||
"contributorsLabel": "Contribuidores",
|
||||
"contributorsHint": "Uma lista de contribuidores do ReVanced",
|
||||
"logsLabel": "Registos",
|
||||
"logsHint": "Compartilhar registos do Manager",
|
||||
"apiURLLabel": "URL da API",
|
||||
"apiURLHint": "Configura a tua URL de API personalizada",
|
||||
"selectApiURL": "URL da API",
|
||||
"experimentalUniversalPatchesLabel": "Suporte experimental para modificações universais",
|
||||
"experimentalUniversalPatchesHint": "Mostrar todas as aplicações a usar com as modificações universais, a lista de carregamento de apps pode ser mais lenta",
|
||||
"experimentalPatchesLabel": "Suporte para modificações experimentais",
|
||||
"experimentalPatchesHint": "Ativa o uso de modificações não suportadas em qualquer versão das aplicações",
|
||||
"enabledExperimentalPatches": "Suporte para modificações experimentais ativo",
|
||||
"exportSectionTitle": "Importar e exportar",
|
||||
"aboutLabel": "Sobre",
|
||||
"snackbarMessage": "Copiado para a área de transferência",
|
||||
"sentryLabel": "Registo do coletor de erros",
|
||||
"sentryHint": "Enviar registos anónimos para nos ajudar a melhorar o ReVanced Manager",
|
||||
"restartAppForChanges": "Reinicia a aplicação para aplicar as alterações",
|
||||
"deleteKeystoreLabel": "Excluir keystore",
|
||||
"deleteKeystoreHint": "Excluir a keystore usada para assinar a aplicação",
|
||||
"deletedKeystore": "Keystore excluída",
|
||||
"deleteTempDirLabel": "Apagar arquivos temporários",
|
||||
"deleteTempDirHint": "Apagar arquivos temporários não utilizados",
|
||||
"deletedTempDir": "Arquivos temporários apagados",
|
||||
"exportPatchesLabel": "Exportar seleção de modificações",
|
||||
"exportPatchesHint": "Exporta a seleção de modificações para um arquivo JSON",
|
||||
"exportedPatches": "Seleção de modificações exportada",
|
||||
"noExportFileFound": "Nenhuma seleção de modificações para exportar",
|
||||
"importPatchesLabel": "Importar seleção de modificações",
|
||||
"importPatchesHint": "Importa a seleção de modificações de um arquivo JSON",
|
||||
"importedPatches": "Seleção de modificações importada",
|
||||
"resetStoredPatchesLabel": "Redefinir modificações",
|
||||
"resetStoredPatchesHint": "Redefinir a seleção de modificações armazenada",
|
||||
"resetStoredPatches": "A seleção de modificações foi redefinida",
|
||||
"jsonSelectorErrorMessage": "Não é possível usar o arquivo JSON selecionado",
|
||||
"deleteLogsLabel": "Eliminar registos",
|
||||
"deleteLogsHint": "Exclui registos do manager coletados",
|
||||
"deletedLogs": "Registos excluídos"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Informações da aplicação",
|
||||
"openButton": "Abrir",
|
||||
"uninstallButton": "Desinstalar",
|
||||
"patchButton": "Modificar",
|
||||
"unpatchButton": "Desalterar",
|
||||
"unpatchDialogText": "Tens a certeza que queres desalterar esta app?",
|
||||
"rootDialogTitle": "Erro",
|
||||
"rootDialogText": "A aplicação foi instalada com permissões de superutilizador, mas atualmente o ReVanced Manager não tem permissões.\nPor favor, conceda permissões de superutilizador primeiro.",
|
||||
"packageNameLabel": "Nome do pacote",
|
||||
"originalPackageNameLabel": "Nome original do pacote",
|
||||
"installTypeLabel": "Tipo de instalação",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Sem root",
|
||||
"patchedDateLabel": "Data da Modificação",
|
||||
"patchedDateHint": "{date} às {time}",
|
||||
"appliedPatchesLabel": "Modificações aplicadas",
|
||||
"appliedPatchesHint": "{quantity} modificação/ões aplicada/s",
|
||||
"updateNotImplemented": "Este recurso ainda não foi implementado"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contribuidores",
|
||||
"patcherContributors": "Contribuidores do Modificador",
|
||||
"patchesContributors": "Contribuidores das Modificações",
|
||||
"integrationsContributors": "Contribuidores das Integrações",
|
||||
"cliContributors": "Contribuidores do CLI",
|
||||
"managerContributors": "Contribuidores do Manager"
|
||||
}
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Anulează",
|
||||
"updateButton": "Actualizare",
|
||||
"enabledLabel": "Activat",
|
||||
"disabledLabel": "Dezactivat",
|
||||
"yesButton": "Da",
|
||||
"noButton": "Nu",
|
||||
"warning": "Avertizare",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Panou de administrare",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Setări"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Panou de administrare",
|
||||
"updatesSubtitle": "Actualizări",
|
||||
"patchedSubtitle": "Aplicații Patch-uite",
|
||||
"updatesAvailable": "Actualizări disponibile",
|
||||
"noUpdates": "Nu există actualizări disponibile",
|
||||
"WIP": "Lucru în curs...",
|
||||
"noInstallations": "Nu sunt instalate aplicații patch-uite",
|
||||
"installed": "Instalat",
|
||||
"updateDialogTitle": "Manager Actualizări",
|
||||
"updateChangelogTitle": "Istoric schimbări",
|
||||
"notificationTitle": "Actualizare descărcată",
|
||||
"notificationText": "Apăsați pentru a instala actualizarea",
|
||||
"downloadingMessage": "Se descarcă actualizarea...",
|
||||
"installingMessage": "Se instalează actualizarea...",
|
||||
"errorDownloadMessage": "Nu s-a putut descărca actualizarea",
|
||||
"errorInstallMessage": "Nu s-a putut instala actualizarea",
|
||||
"noConnection": "Nu există conexiune la internet",
|
||||
"updatesDisabled": "Actualizarea aplicației patch-uite este dezactivată la moment.\nRepatch-uiți aplicația din nou."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Patch",
|
||||
"infoButton": "Informații",
|
||||
"changelogLabel": "Istoric schimbări"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Se încarcă...",
|
||||
"timeagoLabel": "În urmă cu {time}",
|
||||
"patcherLabel": "Patcher: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Manager Actualizări"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Patch",
|
||||
"patchDialogText": "Ați selectat un patch de resurse și a fost detectată o instalare a unui split APK, astfel că anumite erori ar putea apărea în momentul efectuării patch-ului.\nSunteți sigur că doriți să continuați?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Selectați o aplicație",
|
||||
"widgetTitleSelected": "Aplicația selectată",
|
||||
"widgetSubtitle": "Nicio aplicație selectată",
|
||||
"noAppsLabel": "Nu s-au găsit aplicații",
|
||||
"currentVersion": "Actual",
|
||||
"recommendedVersion": "Recomandat",
|
||||
"anyVersion": "oricare"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Selectați patch-urile",
|
||||
"widgetTitleSelected": "Patch-uri selectate",
|
||||
"widgetSubtitle": "Selectați mai întâi o aplicație",
|
||||
"widgetEmptySubtitle": "Nici un patch selectat"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Rețele de socializare",
|
||||
"widgetSubtitle": "Suntem online!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Selectați o aplicație",
|
||||
"searchBarHint": "Căutați aplicații",
|
||||
"storageButton": "Stocare",
|
||||
"errorMessage": "Aplicația selectată nu poate fi utilizată"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Selectați patch-urile",
|
||||
"searchBarHint": "Căutați patch-uri",
|
||||
"doneButton": "Finalizat",
|
||||
"recommended": "Recomandat",
|
||||
"all": "Toate",
|
||||
"none": "Niciunul",
|
||||
"loadPatchesSelection": "Încărcați selecția de patch-uri",
|
||||
"noSavedPatches": "Nu există patch-uri salvate pentru aplicația selectată.\nApăsați Terminat pentru a salva selecția curentă.",
|
||||
"noPatchesFound": "Nu s-au găsit patch-uri pentru aplicația selectată",
|
||||
"selectAllPatchesWarningContent": "Urmează să selectați toate patch-urile, acestea incluzând patch-uri nerecomandate care pot cauza funcționarea necorespunzătoare a aplicației."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Selectarea acestui patch poate rezulta în erori de patch-uire.\n\nVersiunea aplicației: {packageVersion}\nVersiuni compatibile:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "Patch-ul nu este compatibil cu această versiune a aplicației. Activați comutatorul experimental din setări pentru a continua."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Instalator",
|
||||
"installButton": "Instalează",
|
||||
"installRootButton": "Instalează ca Root",
|
||||
"openButton": "Deschide",
|
||||
"shareButton": "Distribuie fișierul",
|
||||
"notificationTitle": "ReVanced Manager efectuează patch-uirea",
|
||||
"notificationText": "Apăsați pentru a reveni la instalator",
|
||||
"shareApkMenuOption": "Distribuie APK-ul",
|
||||
"exportApkMenuOption": "Exportă APK-ul",
|
||||
"shareLogMenuOption": "Distribuie log-ul",
|
||||
"installErrorDialogTitle": "Eroare",
|
||||
"installErrorDialogText1": "Instalarea root nu este posibilă cu selecția curentă de patch-uri.\nReluați procesul de aplicare a patch-urilor sau selectați instalarea non-root.",
|
||||
"installErrorDialogText2": "Instalarea non-root nu este posibilă cu selecția curentă de patch-uri.\nReluați procesul de aplicare a patch-urilor sau selectați instalarea root, dacă aveți dispozitivul rootat.",
|
||||
"installErrorDialogText3": "Instalarea root nu este posibilă, deoarece fișierul APK original a fost selectat din stocarea internă.\nSelectați o aplicație deja instalată pe dispozitiv sau alegeți instalarea non-root.",
|
||||
"noExit": "Instalarea este încă în funcțiune, nu se poate ieși..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Setări",
|
||||
"appearanceSectionTitle": "Aspect",
|
||||
"teamSectionTitle": "Echipă",
|
||||
"infoSectionTitle": "Informații",
|
||||
"advancedSectionTitle": "Setări avansate",
|
||||
"logsSectionTitle": "Log-uri",
|
||||
"darkThemeLabel": "Mod întunecat",
|
||||
"darkThemeHint": "Bun venit în partea întunecată",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Bucură-te de o experiență mai apropiată de dispozitivul tău",
|
||||
"languageLabel": "Limbă",
|
||||
"englishOption": "Engleză",
|
||||
"sourcesLabel": "Surse",
|
||||
"sourcesLabelHint": "Configurați-vă sursele personalizate",
|
||||
"hostRepositoryLabel": "Repository API",
|
||||
"orgPatchesLabel": "Organizarea patch-urilor",
|
||||
"sourcesPatchesLabel": "Sursă patch-uri",
|
||||
"orgIntegrationsLabel": "Organizare integrări",
|
||||
"sourcesIntegrationsLabel": "Sursă integrări",
|
||||
"sourcesResetDialogTitle": "Resetează",
|
||||
"sourcesResetDialogText": "Ești sigur că dorești să resetezi sursele personalizate la valorile lor implicite?",
|
||||
"apiURLResetDialogText": "Ești sigur că dorești să resetezi API URL la valorile sale inițiale?",
|
||||
"contributorsLabel": "Contribuitori",
|
||||
"contributorsHint": "O listă cu contribuitorii ReVanced",
|
||||
"logsLabel": "Log-uri",
|
||||
"logsHint": "Partajează jurnalele managerului",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Configurați-vă API URL-ul personalizat",
|
||||
"selectApiURL": "API URL",
|
||||
"experimentalUniversalPatchesLabel": "Suport pentru patch-uri experimentale universale",
|
||||
"experimentalUniversalPatchesHint": "Afișează toate aplicațiile de utilizat cu patch-uri universale, lista de aplicații poate fi mai lentă",
|
||||
"experimentalPatchesLabel": "Suport pentru patch-uri experimentale",
|
||||
"experimentalPatchesHint": "Activați utilizarea de patch-uri nesuportate în orice versiune a aplicației",
|
||||
"enabledExperimentalPatches": "Suport pentru patch-uri experimentale",
|
||||
"exportSectionTitle": "Importă & exportă",
|
||||
"aboutLabel": "Despre",
|
||||
"snackbarMessage": "Copiat în clipboard",
|
||||
"sentryLabel": "Logging de Santinelă",
|
||||
"sentryHint": "Trimite log-uri anonime pentru a ne ajuta să îmbunătățim ReVanced Manager",
|
||||
"restartAppForChanges": "Reporniți aplicația pentru a aplica modificările",
|
||||
"deleteKeystoreLabel": "Ștergeți keystore-ul",
|
||||
"deleteKeystoreHint": "Ștergeți keystore-ul utilizat pentru a însemna aplicația",
|
||||
"deletedKeystore": "Keystore șters",
|
||||
"deleteTempDirLabel": "Ștergeți fișierele temporare",
|
||||
"deleteTempDirHint": "Șterge fișierele temporare neutilizate",
|
||||
"deletedTempDir": "Fișierele temporare au fost șterse",
|
||||
"exportPatchesLabel": "Exportă selecția patch-urilor",
|
||||
"exportPatchesHint": "Exportă selecția patch-urilor într-un fișier JSON",
|
||||
"exportedPatches": "Selecția patch-urilor a fost exportată",
|
||||
"noExportFileFound": "Nicio selecție a patch-urilor de exportat",
|
||||
"importPatchesLabel": "Importă selecția patch-urilor",
|
||||
"importPatchesHint": "Importă selecția patch-urilor dintr-un fișier JSON",
|
||||
"importedPatches": "Selecția patch-urilor a fost importată",
|
||||
"resetStoredPatchesLabel": "Resetați patch-uri",
|
||||
"resetStoredPatchesHint": "Resetează selecția de patch-uri salvată",
|
||||
"resetStoredPatches": "Selecția de patch-uri a fost resetată",
|
||||
"jsonSelectorErrorMessage": "Imposibil de folosit fișierul JSON selectat",
|
||||
"deleteLogsLabel": "Ștergeți log-urile",
|
||||
"deleteLogsHint": "Ștergeți log-urile de manager colectate",
|
||||
"deletedLogs": "Log-urile au fost șterse"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Informații despre aplicație",
|
||||
"openButton": "Deschide",
|
||||
"uninstallButton": "Dezinstalează",
|
||||
"patchButton": "Patch",
|
||||
"unpatchButton": "Unpatch",
|
||||
"unpatchDialogText": "Sunteți sigur că vreți să unpatch-uiți această aplicație?",
|
||||
"rootDialogTitle": "Eroare",
|
||||
"rootDialogText": "Aplicația a fost instalată cu permisiuni de superuser, dar momentan ReVanced Manager nu are permisiuni.\nVă rugăm să acordați mai întâi permisiuni superuser.",
|
||||
"packageNameLabel": "Numele pachetului",
|
||||
"originalPackageNameLabel": "Numele original al pachetului",
|
||||
"installTypeLabel": "Tipul instalării",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Non-root",
|
||||
"patchedDateLabel": "Data patch-uirii",
|
||||
"patchedDateHint": "{date} la {time}",
|
||||
"appliedPatchesLabel": "Patch-uri aplicate",
|
||||
"appliedPatchesHint": "{quantity} patch-uri aplicate",
|
||||
"updateNotImplemented": "Această funcție nu a fost încă implementată"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contribuitori",
|
||||
"patcherContributors": "Contribuitori ai patcher-ului",
|
||||
"patchesContributors": "Contribuitori ai patch-urilor",
|
||||
"integrationsContributors": "Contribuitori ai integrărilor",
|
||||
"cliContributors": "Contribuitori ai CLI",
|
||||
"managerContributors": "Contribuitori ai manager-ului"
|
||||
}
|
||||
}
|
||||
@@ -1,200 +0,0 @@
|
||||
{
|
||||
"okButton": "ОК",
|
||||
"cancelButton": "Отмена",
|
||||
"updateButton": "Обновить",
|
||||
"enabledLabel": "Включено",
|
||||
"disabledLabel": "Выключено",
|
||||
"yesButton": "Да",
|
||||
"noButton": "Нет",
|
||||
"warning": "Внимание",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Главная",
|
||||
"patcherTab": "Патчер",
|
||||
"settingsTab": "Настройки"
|
||||
},
|
||||
"homeView": {
|
||||
"widgetTitle": "Главная",
|
||||
"updatesSubtitle": "Обновления",
|
||||
"patchedSubtitle": "Пропатченные приложения",
|
||||
"updatesAvailable": "Доступны обновления",
|
||||
"noUpdates": "Нет доступных обновлений",
|
||||
"WIP": "В разработке...",
|
||||
"noInstallations": "Не установлено пропатченных приложений",
|
||||
"installed": "Установлено",
|
||||
"updateDialogTitle": "Обновить Manager",
|
||||
"updateChangelogTitle": "Список изменений",
|
||||
"notificationTitle": "Обновление загружено",
|
||||
"notificationText": "Нажмите, чтобы установить обновление",
|
||||
"downloadingMessage": "Скачивается обновление...",
|
||||
"installingMessage": "Устанавливается обновление...",
|
||||
"errorDownloadMessage": "Не удалось загрузить обновление",
|
||||
"errorInstallMessage": "Не удалось установить обновление",
|
||||
"noConnection": "Нет подключения к интернету",
|
||||
"updatesDisabled": "Обновление пропатченных приложений в настоящее время отключено. Пожалуйста, пропатчьте приложение заново."
|
||||
},
|
||||
"applicationItem": {
|
||||
"patchButton": "Пропатчить",
|
||||
"infoButton": "Инфо",
|
||||
"changelogLabel": "Список изменений"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Загрузка...",
|
||||
"timeagoLabel": "{time} назад",
|
||||
"patcherLabel": "Патчер: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Обновить Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Патчер",
|
||||
"patchButton": "Пропатчить",
|
||||
"patchDialogText": "Вы выбрали патч ресурсов, и была обнаружена установка разделённого APK, поэтому могут возникнуть ошибки.\nВы уверены, что хотите продолжить?"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Выберите приложение",
|
||||
"widgetTitleSelected": "Выбранное приложение",
|
||||
"widgetSubtitle": "Не выбрано приложение",
|
||||
"noAppsLabel": "Приложения не найдены",
|
||||
"currentVersion": "Текущая",
|
||||
"recommendedVersion": "Рекомендуемая",
|
||||
"anyVersion": "любая"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Выберите патчи",
|
||||
"widgetTitleSelected": "Выбранные патчи",
|
||||
"widgetSubtitle": "Сначала выберите приложение",
|
||||
"widgetEmptySubtitle": "Не выбраны патчи"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Соцсети",
|
||||
"widgetSubtitle": "Мы онлайн!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Выберите приложение",
|
||||
"searchBarHint": "Искать приложения",
|
||||
"storageButton": "Хранилище",
|
||||
"errorMessage": "Невозможно использовать выбранное приложение"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Выберите патчи",
|
||||
"searchBarHint": "Искать патчи",
|
||||
"doneButton": "Готово",
|
||||
"recommended": "Рекомендуется",
|
||||
"all": "Все",
|
||||
"none": "Никакие",
|
||||
"loadPatchesSelection": "Загрузить выбор патчей",
|
||||
"noSavedPatches": "Нет сохранённых патчей для выбранного приложения.\nНажмите «Готово» для сохранения текущего выбора.",
|
||||
"noPatchesFound": "Для выбранного приложения не найдены патчи",
|
||||
"selectAllPatchesWarningContent": "Вы собираетесь выбрать все патчи, в том числе и нерекомендуемые патчи, которые могут вызвать нежелательное поведение."
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Выбор этого патча может привести к ошибкам во время патча.\n\nВерсия приложения: {packageVersion}\nПоддерживаемые версии:\n{supportedVersions}",
|
||||
"unsupportedPatchVersion": "Патч не поддерживается для этой версии приложения. Чтобы продолжить, включите опцию экспериментальной поддержки в настройках."
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Установщик",
|
||||
"installButton": "Установить",
|
||||
"installRootButton": "Установить как Root",
|
||||
"openButton": "Открыть",
|
||||
"shareButton": "Поделиться файлом",
|
||||
"notificationTitle": "ReVanced Manager патчит",
|
||||
"notificationText": "Нажмите, чтобы вернуться к установщику",
|
||||
"shareApkMenuOption": "Поделиться APK",
|
||||
"exportApkMenuOption": "Экспорт APK",
|
||||
"shareLogMenuOption": "Отправить лог",
|
||||
"installErrorDialogTitle": "Ошибка",
|
||||
"installErrorDialogText1": "Root-установка невозможна с выбранными патчами.\nПерепатчите приложение или выберите non-root установку.",
|
||||
"installErrorDialogText2": "Non-root установка невозможна с выбранными патчами.\nПерепатчите приложение, или выберите root-установку, если на вашем устройстве есть root.",
|
||||
"installErrorDialogText3": "Root-установка невозможна, так как оригинальный APK был выбран из хранилища.\nВыберите установленное приложение, или выберите non-root установку.",
|
||||
"noExit": "Установщик все еще запущен, выход невозможен..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Настройки",
|
||||
"appearanceSectionTitle": "Оформление",
|
||||
"teamSectionTitle": "Команда",
|
||||
"infoSectionTitle": "Инфо",
|
||||
"advancedSectionTitle": "Дополнительные",
|
||||
"logsSectionTitle": "Логи",
|
||||
"darkThemeLabel": "Тёмный режим",
|
||||
"darkThemeHint": "Добро пожаловать на тёмную сторону",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Наслаждайтесь темой вашего устройства",
|
||||
"languageLabel": "Язык",
|
||||
"englishOption": "Английский",
|
||||
"sourcesLabel": "Источники",
|
||||
"sourcesLabelHint": "Настройте свои источники",
|
||||
"hostRepositoryLabel": "API репозитория",
|
||||
"orgPatchesLabel": "Организация патчей",
|
||||
"sourcesPatchesLabel": "Репозиторий патчей",
|
||||
"orgIntegrationsLabel": "Организация интеграций",
|
||||
"sourcesIntegrationsLabel": "Репозиторий интеграций",
|
||||
"sourcesResetDialogTitle": "Сброс",
|
||||
"sourcesResetDialogText": "Вы уверены, что хотите сбросить пользовательские источники к значениям по умолчанию?",
|
||||
"apiURLResetDialogText": "Вы уверены, что хотите сбросить API-ссылку к значению по умолчанию?",
|
||||
"contributorsLabel": "Участники проекта",
|
||||
"contributorsHint": "Список соучастников ReVanced",
|
||||
"logsLabel": "Логи",
|
||||
"logsHint": "Поделиться логами Manager-а",
|
||||
"apiURLLabel": "API-ссылка",
|
||||
"apiURLHint": "Настройте свою API-ссылку",
|
||||
"selectApiURL": "API-ссылка",
|
||||
"experimentalUniversalPatchesLabel": "Экспериментальная поддержка универсальных патчей",
|
||||
"experimentalUniversalPatchesHint": "Отображать все приложения, поддерживающие универсальные патчи; загрузка списка приложений может быть медленнее",
|
||||
"experimentalPatchesLabel": "Экспериментальная поддержка патчей",
|
||||
"experimentalPatchesHint": "Разрешить использование несовместимых патчей в любой версии приложения",
|
||||
"enabledExperimentalPatches": "Экспериментальная поддержка патчей включена",
|
||||
"exportSectionTitle": "Импорт и экспорт",
|
||||
"aboutLabel": "Информация",
|
||||
"snackbarMessage": "Скопировано в буфер обмена",
|
||||
"sentryLabel": "Логирование Sentry",
|
||||
"sentryHint": "Отправлять анонимные логи для улучшения ReVanced Manager-а",
|
||||
"restartAppForChanges": "Перезапустите приложение для применения изменений",
|
||||
"deleteKeystoreLabel": "Удалить хранилище ключей",
|
||||
"deleteKeystoreHint": "Удалить хранилище ключей, использованных для подписи приложения",
|
||||
"deletedKeystore": "Хранилище ключей удалено",
|
||||
"deleteTempDirLabel": "Удалить временные файлы",
|
||||
"deleteTempDirHint": "Удалить неиспользуемые временные файлы",
|
||||
"deletedTempDir": "Временные файлы удалены",
|
||||
"exportPatchesLabel": "Экспорт выбора патчей",
|
||||
"exportPatchesHint": "Экспорт выбора патчей в JSON-файл",
|
||||
"exportedPatches": "Выбор патчей экспортирован",
|
||||
"noExportFileFound": "Нет выбора патчей для экспорта",
|
||||
"importPatchesLabel": "Импорт выбора патчей",
|
||||
"importPatchesHint": "Импорт выбора патчей из JSON-файла",
|
||||
"importedPatches": "Выбор патчей импортирован",
|
||||
"resetStoredPatchesLabel": "Сбросить патчи",
|
||||
"resetStoredPatchesHint": "Сбросить выбор сохраненных патчей",
|
||||
"resetStoredPatches": "Выбор патчей был сброшен",
|
||||
"jsonSelectorErrorMessage": "Невозможно использовать выбранный JSON-файл",
|
||||
"deleteLogsLabel": "Удалить логи",
|
||||
"deleteLogsHint": "Удалить собранные Manager-ом логи",
|
||||
"deletedLogs": "Логи удалены"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "О приложении",
|
||||
"openButton": "Открыть",
|
||||
"uninstallButton": "Удалить",
|
||||
"patchButton": "Пропатчить",
|
||||
"unpatchButton": "Удалить патчи",
|
||||
"unpatchDialogText": "Вы уверены, что хотите удалить патчи у этого приложения?",
|
||||
"rootDialogTitle": "Ошибка",
|
||||
"rootDialogText": "Приложение было установлено с правами суперпользователя, но сейчас ReVanced Manager не имеет прав.\nПожалуйста, сначала предоставьте права суперпользователя.",
|
||||
"packageNameLabel": "Название пакета",
|
||||
"originalPackageNameLabel": "Исходное название пакета",
|
||||
"installTypeLabel": "Тип установки",
|
||||
"rootTypeLabel": "Root",
|
||||
"nonRootTypeLabel": "Non-root",
|
||||
"patchedDateLabel": "Дата применения патчей",
|
||||
"patchedDateHint": "{date} в {time}",
|
||||
"appliedPatchesLabel": "Применённые патчи",
|
||||
"appliedPatchesHint": "{quantity} применённых патчей",
|
||||
"updateNotImplemented": "Эта возможность ещё не реализована"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Участники проекта",
|
||||
"patcherContributors": "Соучастники патчера",
|
||||
"patchesContributors": "Соучастники патчей",
|
||||
"integrationsContributors": "Соучастники интеграций",
|
||||
"cliContributors": "Соучастники CLI",
|
||||
"managerContributors": "Соучастники Manager-а"
|
||||
}
|
||||
}
|
||||