Compare commits

..

232 Commits

Author SHA1 Message Date
29db947e25 fix: using non const value in a const variable 2023-07-23 14:04:35 +05:30
fd43ac7581 chore: merge dev branch to main branch (#1032) 2023-07-23 13:53:25 +05:30
e49c19b3cd feat: support older version of android for reddit client patches 2023-07-23 13:51:36 +05:30
Pun
06f0e59967 chore(deps): update libsu to v5.2.0 2023-07-22 13:21:13 +07:00
Pun
c5fc5ee93b build: speed up compilation time
faster build faster build faster build faster build faster build
2023-07-19 18:30:50 +07:00
159c85bd1f fix: close previous dialog when user reset the API URL (#1025) 2023-07-16 21:04:35 +07:00
Pun
2460acf0f4 ci(analyze): don't run when PR is in draft 2023-07-16 17:10:29 +07:00
Pun
6495687841 docs: correct misspelling (EN_US)
This correct spelling to English American, because by default, we use English US.
2023-07-16 16:31:08 +07:00
Pun
d229ccb36c ci(analyze): clarify job name that the job do static analysis & format checking 2023-07-16 16:21:16 +07:00
Pun
4d6a57ddcf ci(analyze): restore run when commit push to dev branch 2023-07-16 16:17:15 +07:00
d161d55aaf fix: patched applications not showing at launch (#1031) 2023-07-16 12:46:01 +07:00
Pun
768ad0c9bc chore: merge dev branch to main branch (#1011)
ReVanced Manager v1.4.1
2023-07-15 20:33:30 +07:00
29323d4e20 build: update app version to v1.4.1 2023-07-15 12:55:59 +07:00
630b22e193 refactor: applies changes from formatter & linter 2023-07-15 12:41:03 +07:00
79116f9e67 fix(patched-applications): non-patched app showing on Installed section (#1022) 2023-07-15 08:11:51 +07:00
eb58475259 fix: showing Installed when it's actually not (#1021) 2023-07-15 08:10:36 +07:00
a879ac30fb fix: prevent unsupported operation exception (#1018) 2023-07-14 17:55:04 +07:00
c5b0621323 fix(navigation-view): back button closing the app from any page (#1019) 2023-07-13 19:25:48 +05:45
0462815014 fix(app-selector): fix text overflow on small screen (#1017) 2023-07-13 00:16:53 +05:45
e64318c947 fix(app-selector): fix text overflow on small screen 2023-07-13 00:14:47 +05:45
b784482788 chore: update libsu to 5.1.0
This should fixes some issues with root
2023-07-11 19:28:59 +07:00
2834e8b348 fix: patchable apps not showing if none of them is installed (#1009) 2023-07-11 17:11:45 +07:00
b23dfd4289 chore: merge dev branch to main branch (#1010) 2023-07-11 01:24:54 +05:30
217d525cb2 build: update app version to v1.4.0 2023-07-11 01:22:57 +05:30
85b166cbda fix: update hardcoded patch name 2023-07-11 01:21:45 +05:30
9a57f8b858 ci(build): use correct JDK version
There's no reasons to go higher than JDK 11 since we compile the application using JDK 11
2023-07-10 21:42:24 +07:00
Pun
3bfdc932c2 chore: update app description
👍👍 Patch your favourite apps, right on your device.
2023-07-10 21:27:20 +07:00
48c878af21 chore: merge dev branch to main branch (#996) 2023-07-10 16:56:50 +03:00
490a7a58fc build: update app version to v1.3.9
ReVanced Manager, 1.3.9 (10030009)

See PR #996
2023-07-10 20:40:40 +07:00
567b1a3ace refactor: improve code readability according to linter 2023-07-10 19:45:50 +07:00
6a45db8a38 refactor: improve code readability according to formatter 2023-07-10 19:36:50 +07:00
Pun
b272988929 build: always compile with the latest SDK supported by Flutter
`targetSdkVersion` is still the same, we want to test the application first before bumping up to latest.
2023-07-10 18:43:07 +07:00
9828857570 fix: fixed typo 2023-07-10 12:16:51 +05:45
ecb54d8e44 docs: improve clarity of speech in issue template (#1005)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2023-07-09 23:15:20 +02:00
344717b021 fix: app crash after custom source (#1003) 2023-07-08 23:07:19 +05:45
da6cf585c0 fix: app crash after custom source 2023-07-08 22:26:31 +05:45
9e93177afd feat: show warning dialog when resetting stored patches
This prevent user from accidentally resetting stored patches by showing
them warning dialog.
2023-07-08 11:01:10 +07:00
16318efb01 refactor: seperate translation string by context 2023-07-08 10:45:13 +07:00
e83e13b6d4 refactor: fix more problem with analyser
Missing trailing comma in app_selector_view
2023-07-07 22:21:22 +07:00
7c2c695d88 refactor: apply changes from analyser 2023-07-07 22:15:12 +07:00
c7b227529d chore: disable unnecessary tooltip
Remove tooltip in Navigation View, there's no impact to accessibility.

Tested using: Android TalkBack
2023-07-07 22:11:13 +07:00
14f49e9d30 docs: fix description for next page 2023-07-05 15:43:40 +02:00
1875c4ee73 fix: update button being clickable when offline (#987) 2023-07-05 19:59:53 +07:00
76c68baa1f build: update gradle to v7.6.2 2023-07-01 18:21:49 +07:00
68876a4414 build: bump version to v1.3.8 and patcher dep 2023-07-01 14:33:25 +05:30
26d7e5b60f build: bump version to v1.3.7 and patcher dep 2023-07-01 02:46:43 +03:00
e78af6ae99 chore: merge dev to main (#976) 2023-07-01 02:41:57 +03:00
6fe05cd86e feat: show all the unseen changelogs on changelog section (#970) 2023-07-01 02:41:03 +03:00
4100d7a391 fix: different message when trying to patch spilt apk (#973) 2023-07-01 02:40:30 +03:00
c1cc812ea4 build: bump version to v1.3.6 2023-06-24 19:17:59 +03:00
9663e3f0f4 chore: merge dev branch to main branch (#945) 2023-06-24 19:16:22 +03:00
941f618153 fix(app-selector): remove direct use of strings (#944) 2023-06-23 16:39:12 +03:00
716a30bf7b fix: experimental patches stay selected when toggled off (#946) 2023-06-23 16:37:23 +03:00
d051ae576b feat(updater): download successful dialog (#938) 2023-06-23 16:36:36 +03:00
35e99cb014 feat(mount): use /data/adb/revanced again and ensure migration scenario (#948) 2023-06-23 01:03:03 +03:00
af054fba49 docs: improve clarity of footnotes [skip ci] (#950) 2023-06-17 14:48:57 +02:00
58d837d641 feat(app-selector): Improve app item UI to avoid overflow issues (#943) 2023-06-16 10:04:55 +03:00
6cc1bd21cd fix(updater): ability to start again after cancelling (#937) 2023-06-16 10:04:07 +03:00
cebfa7c8ae docs: simplify steps 2023-06-16 05:09:52 +02:00
e2d7ab8f8f chore: fix broken docs link 2023-06-15 16:42:09 +02:00
ec77987fcd feat(app-selector): improve skeleton UI (#939) 2023-06-15 12:57:39 +03:00
b161608d02 feat(patches-selector): improve disabled card UI (#941) 2023-06-15 12:54:49 +03:00
5e7458ff1c fix: import patches selects unsupported patches (#942) 2023-06-14 21:34:11 +07:00
Pun
ed06aaa1f5 docs(readme): fix invalid url for building manager from source
📜 fix invalid URL for building manager from source.

Old: https://github.com/revanced/revanced-manager/blob/docs/docs/5_building-from-source.md
New: https://github.com/revanced/revanced-manager/blob/main/docs/4_building.md
2023-06-14 19:52:10 +07:00
13b7179941 fix: fix not asking for permission 2023-06-12 09:56:49 +05:30
da0d88d86f build: bump patcher 2023-06-12 09:08:29 +05:30
b7347c312a build: bump version to v1.3.4 2023-06-12 08:59:49 +05:30
c876f2f7e3 feat: add permission to manage storage 2023-06-12 08:59:14 +05:30
adad5fd8ff build: bump version to v1.3.3 2023-06-12 07:02:49 +05:30
2aaa7ae8c9 chore: merge dev to main (#935) 2023-06-12 07:01:12 +05:30
1f64ea37bd fix: using wrong string 2023-06-12 06:59:43 +05:30
cac1525da0 build: bump patcher 2023-06-12 06:02:16 +05:30
1ad906fedc refactor: improve code 2023-06-12 06:01:57 +05:30
20ffef39a3 fix: update button being shown as clickable on launch (#932) 2023-06-12 05:55:53 +05:30
185460c054 chore(fastlane): update description (#933)
Co-authored-by: Ushie <ushiekane@gmail.com>
2023-06-12 03:21:33 +03:00
0079e74d77 feat: clarify suggested version in app list (#934)
Co-authored-by: Aunali321 <48486084+Aunali321@users.noreply.github.com>
2023-06-12 05:35:02 +05:30
a8e019482f ci: add workflow to update documentation repository 2023-06-10 23:41:36 +02:00
f01b8e47aa fix: aborting message changed (#928)
Change aborting message from "aborting..." to "aborted..."

----------------------
Co-authored-by: Ushie <github@ushie.dev>
Co-authored-by: Ushie <ushiekane@gmail.com>
2023-06-09 17:34:55 +07:00
Pun
e43dfb7599 docs(troubleshooting): fix markdown styling (#929)
`docs`: `84a9168` - Self-explanatory, fix markdown styling issue
2023-06-09 17:24:31 +07:00
6b8cfe2b49 build: bump version to v1.3.2 2023-06-09 11:42:06 +03:00
7f7b14bae3 fix: use correct variable name for armv7 check 2023-06-09 11:40:54 +03:00
810b02d9fd build: bump version to v1.3.1 2023-06-09 10:45:22 +03:00
62813145b2 chore: merge dev to main (#926) 2023-06-09 01:59:18 +03:00
4877058253 chore(fastlane): add banner 2023-06-09 01:58:02 +03:00
2a9fd3abb8 chore(fastlane): add missing directory 2023-06-09 01:57:49 +03:00
a244f7b598 chore: merge dev to main 2023-06-08 21:31:41 +03:00
5396457ad5 chore: move fastlane to correct directory 2023-06-08 21:30:44 +03:00
0186b6ea61 chore: merge dev to main (#924) 2023-06-07 20:18:21 +03:00
fe
f6e99f7e88 fix: return fetched patch version if non default patch repo is used (#922) 2023-06-07 20:16:25 +03:00
Pun
c24a3828be ci(analyze): don't run when pushed to repository (#920) 2023-06-07 20:15:43 +03:00
Pun
2e38a4567a feat: clarify architecture in about section
This commit changes `Arch` to `Supported Arch(s)`
2023-06-07 20:13:42 +03:00
67c5d67a61 feat: update icons for the new logo
fixed #918
2023-06-07 20:10:14 +03:00
9592dde534 feat: add fastlane for F-Droid (#889)
Co-authored-by: Ushie <ushiekane@gmail.com>
2023-06-07 19:59:17 +03:00
d030b0af70 docs: init (#911)
Co-authored-by: afn <_@afn.lol>
2023-06-07 12:01:36 +02:00
4ccb9ac94d fix: remove redundant "v" in the downloader screen (#895) 2023-05-26 13:54:52 +03:00
8af62b917c build: bump version to 1.3.0 (#892) 2023-05-24 23:33:04 +03:00
311f114132 chore: update v1.3.0 2023-05-24 21:46:00 +02:00
d015bd03f7 chore: merge dev to main (#891) 2023-05-24 22:17:16 +03:00
a61b9de0fa chore(deps): bump revanced-patcher to 9.0.0 2023-05-24 02:02:59 +02:00
ef1b283917 chore(deps): bump revanced-patcher to 8.0.0 (#880) 2023-05-24 01:07:22 +05:30
c677f00105 build: bump version to v1.2.0 2023-05-20 02:30:18 +03:00
8d2f778dfe chore: merge dev to main (#881) 2023-05-20 02:28:58 +03:00
c549d102f6 build: migrate to dart 3 (#871) 2023-05-20 04:07:53 +05:30
39a9ee4e9d chore: remove coreLibraryDesugaring (#873) 2023-05-20 04:05:46 +05:30
a27dc6ad1c feat: migrate to dart3 2023-05-19 14:23:48 +05:45
8ccb75fc8d chore: remove coreLibraryDesugaring 2023-05-17 15:38:03 +09:00
8fc86dbe02 feat: allow selecting installed if app is full apk 2023-05-13 04:54:35 +03:00
359f052608 fix: export keystore not working in some conditions (#862) 2023-05-12 19:36:47 +03:00
4150e2265c fix: use correct version in update download dialog (#859) 2023-05-10 13:23:02 +03:00
b803ce7435 fix: system navigation overlapping UI (#853) 2023-05-10 13:18:51 +03:00
289c6cd7a9 chore: merge dev to main (#857) 2023-05-08 21:46:33 +05:30
31fc7b74c2 build: bump version to v1.1.0 2023-05-08 21:38:19 +05:30
3e565f25be fix(appselector): closing dialog closes app selector 2023-05-08 21:27:07 +05:30
e509be4e21 chore(deps): bump patcher to 7.1.1 2023-05-08 21:19:45 +05:30
170fc537ac fix: fix armv7 dialog shown for x86, x86_64 2023-05-07 04:14:57 +05:30
3fe5882145 feat: remove cronet 2023-05-06 05:39:46 +05:30
a290791410 chore: merge dev to main (#844) 2023-05-06 03:26:14 +05:30
Pun
2ebd38ff68 feat: add checksums verification to Gradle (#813) 2023-05-03 21:38:47 +03:00
cd987a5b19 fix: broken filename when saving files with the same name (#837) 2023-05-03 21:34:30 +03:00
7f1dab7ee1 ci: temporarily restore old release workflow 2023-05-02 17:50:07 +03:00
bed3945aa5 feat: clarify warning and consequences for ARMv7 users (#836) 2023-05-02 16:41:11 +07:00
15a32a18b7 fix: fix broken manager update implmentation 2023-04-30 17:38:08 +07:00
d2e8e7dd5d chore: comply with review changes 2023-04-30 01:03:36 +07:00
ce12ec89c4 ci(release): automatically bump version codes 2023-04-29 20:53:54 +07:00
b286444ad9 fix(i18n): update translation for refreshSucess 2023-04-29 20:43:02 +07:00
941263102d refactor: change name from "recommendedVersion" to "suggestedVersion" 2023-04-29 20:43:02 +07:00
e2ed296dc7 chore(deps): constrain get_it to 7.2.0 2023-04-29 19:46:07 +07:00
cfc866bef2 feat: change continue anyways to cancel 2023-04-29 15:37:30 +03:00
affba669ce feat: add continue anyway button to select from storage dialog (#810) 2023-04-29 15:36:25 +03:00
7230152ab8 chore: fix issues with gitignore [skip ci] 2023-04-29 17:42:19 +07:00
21fee7171f chore: update pubspec version
skip-checks: true
2023-04-29 15:40:25 +07:00
ad17995f28 feat: improve suggested app version text (#822) 2023-04-28 17:41:28 +03:00
ac830cbe7f fix: resized monochrome icon to match the original (#789)
cherry-pick from 6281ae82876c69ff4194a782e4b08b398a1285d6
2023-04-27 18:12:48 +07:00
65da6af3f9 fix: update pubspec version 2023-04-21 14:56:31 +03:00
3d90bf7588 ci: bypass push permission on protected branches with owner PAT 2023-04-21 14:55:29 +03:00
62ef1c88fe feat: resetting source to default dismiss the sources pop-up (#797)
* feat: resetting source to default dismiss the sources pop-up

* chore: format using `dart format`
2023-04-21 00:29:37 +05:30
d6918920b6 chore: add missing translations 2023-04-20 23:53:24 +05:30
cdfb09fbfa feat: warning for armv7 devices 2023-04-20 23:20:30 +05:30
bb681e31c9 feat: disable selecting installed apps for nonroot 2023-04-20 22:25:29 +05:30
c7483936ec docs: remove alpha disclaimer 2023-04-20 05:07:46 +05:30
0a1f2da33d feat: appreciation message for new contributors 2023-04-20 05:04:37 +05:30
f5aafdb7d6 feat: progress bar for manager updates 2023-04-20 04:45:46 +05:30
c9adf1c492 style: sort imports 2023-04-19 01:32:43 +05:30
4c9cb560e3 feat: auto select default patches 2023-04-19 01:21:08 +05:30
f0b028279c fix: open contributor links externally (#791) 2023-04-18 19:46:16 +05:30
197770b68b chore: update dependencies (#772)
* chore: updated some dependencies

* refactor: reimplemented cache interceptor

* Revert "Updated dependencies & migrated breaking changes"

This reverts commit e6743b0d6b2552fdbf1c99d23e158e682362dd5d.

* chore: migrated flutter_local_notifications

* revert: reimplemented cache interceptor
2023-04-18 19:45:29 +05:30
37b583f560 feat: trim extra space when setting custom source (#771) 2023-04-18 17:15:04 +07:00
dca2d4fe12 feat: add option to import/export keystore (#776)
* feat: add option to import/export keystore

* change the order of import/export keystore buttons

* feat: add option to change the keystore password
2023-04-18 15:08:10 +05:30
3b677f8ae3 feat: improve ux (#752)
* feat: restart app toast when changing sources, api url

* fix: potentially fix manager stuck on black screen

* feat: remove select all patches chip

* feat: show all apps and recommended versions

* chore(i18n): remove unused strings

remove unused strings left out in 7e05bca

* feat: select install type before patching

* feat: update patches button (#782)

* feat: update patches button

* feat: show toast when force refresh

* chore: don't translate "ReVanced Manager" and "ReVanced Patches"

* Revert "feat: select install type before patching"

This reverts commit 74e0c09b543fe70b70cd917e6e21ceb0f46f3533.

* feat: rename recommended patches to default patches

* feat: add missing localization

* feat: display restart app toast for resetting source

---------

Co-authored-by: EvadeMaster <93124920+EvadeMaster@users.noreply.github.com>
2023-04-18 13:27:26 +05:30
0b952578d1 ci(release): update semantic-release 2023-04-02 02:37:49 +07:00
054afbbedd feat: confirmation dialog for deleting keystore (#764)
* feat: confirmation dialog for deleting keystore

* refactor(i18n): apply suggestion from code-reviewer

Co-authored-by: Ushie <github@ushie.dev>

* refactor: apply suggestion from code-reviewer

Co-authored-by: Mipirakas <borismichiels@gmail.com>

---------

Co-authored-by: Ushie <github@ushie.dev>
Co-authored-by: Mipirakas <borismichiels@gmail.com>
2023-04-01 21:02:28 +07:00
866a6e4a44 chore(CHANGELOG): reset changelog 2023-03-30 23:29:26 +07:00
8ea7dd478b ci(release): update node dependencies 2023-03-30 23:20:31 +07:00
7839252934 ci(analyze): only run when necessary (#766)
* ci(analyser): only run on lib/`.dart` changes

* ci(analyser): runs on workflow changes

* ci(analyze): run on all dart file changes

---------

Co-authored-by: Palm <palmpasuthorn@gmail.com>
2023-03-29 20:51:08 +03:00
fa4063220f ci: dart analyser (#761)
* ci: dart analyser

* ci(analyser): clarify the dart analysing step

* refactor: ignore generated files

* ci(analyser): apply suggestion from code-reviewer

Co-Authored-By: Palm <palmpasuthorn@gmail.com>

* ci(analyser): apply suggestion from code-reviewer

Co-Authored-By: Palm <palmpasuthorn@gmail.com>

* ci(analyser): apply suggestion from code-reviewer

Co-authored-by: Palm <palmpasuthorn@gmail.com>

---------

Co-authored-by: Palm <palmpasuthorn@gmail.com>
2023-03-28 15:47:34 +07:00
d214a02abd ci(release): fix argument parsing of npm exec 2023-03-26 23:02:57 +07:00
d1c12edd1b ci(release): use appropriate npm commands for ci environment 2023-03-26 23:02:57 +07:00
ded1a44c37 ci(release): fix step not moving artifact to accessible path 2023-03-26 23:02:57 +07:00
790a6cd1e3 ci(release): remove unnecessary variables in flutter build step 2023-03-26 18:57:27 +03:00
a79f883a0f ci: use caching to speed up workflows (#760)
Use caching to speed up workflows: 9-14 minutes (ish) to 6-8 minutes (ish)

Commits:
* ci(release): use GitHub cache

* ci(release): restore signing
2023-03-26 20:02:56 +07:00
d9c5a540a3 ci(release): fix wrong artifact name and ci not uploading build 2023-03-24 01:01:44 +07:00
276f33b9ec ci: use semantic-release (#746) 2023-03-23 17:34:52 +01:00
ded59d2da0 feat(ci): update crowdin workflow to use new main branch 2023-03-20 22:39:29 +03:00
62f7a820d8 feat: remove notice about stale development [skip ci] 2023-03-20 18:03:58 +03:00
7063ffa013 build: bump version to v0.0.57 2023-03-14 21:00:48 +03:00
bf4dc3c095 chore: bump stacked
stacked: ^3.0.0 -> ^3.2.0
stacked_generator: ^0.8.0 -> ^1.0.0
stacked_services: ^0.9.3 -> ^1.0.0
2023-03-14 21:00:28 +03:00
c10e5848bf Merge pull request #707 from revanced/dev
chore: merge branch `dev` to `flutter`
2023-03-14 22:07:35 +07:00
92a3b0d6e0 feat(style): use native switch & chip (#732)
* chore: remove useless themedata

* feat(style): new switch

* feat(style): use native chip components

* chore: remove unused import

* feat(accessibility): set tooltip

* chore: remove unneeded themedata

* chore: fix theme

* feat(i18n): add 3 new strings

* feat(style): correct material 3 theme on nondynamic
2023-03-14 21:53:42 +07:00
b475bd25c8 build: remove env setup step 2023-03-11 23:01:26 +05:30
d318224a6f fix: black screen after resetting custom sources 2023-03-06 18:08:48 +05:30
0074fee865 build: new ci (#731)
New Build CI

Commits:
* buid: re-do ci

* build: ignore tags

* build: get the latest flutter version automatically && formatting

---------

Co-authored-by: EvadeMaster <93124920+EvadeMaster@users.noreply.github.com>
2023-03-05 16:23:51 +07:00
5617535a63 refactor: remove sentry and crowdin (#730)
We no longer use sentry and crowdin.
2023-03-05 16:12:46 +07:00
68ccefc59f revert: "refactor: update deprecated and minor code refactors (#710)"
This reverts commit 6829d3cdeac94fb305b8885570840fe25769b6a6.

Signed-off-by: EvadeMaster <93124920+EvadeMaster@users.noreply.github.com>
2023-03-03 18:06:24 +07:00
6d60541626 chore(deps): meet patcher breaking changes 2023-03-03 03:11:44 +03:00
a635e5b8d0 chore: addFiles -> addIntegrations (#725)
fix #721
2023-03-02 14:51:35 +07:00
48a10440fe ci(build): remove environment on PR build 2023-03-02 11:06:15 +07:00
8e3ba88318 chore: bump gradle 7.5-rc.1 -> 7.6.1 (#717)
* chore: upgrade gradle from 7.5-rc.1 -> 7.6.1

* chore: remove unrelated changes
2023-02-27 19:26:10 +07:00
ab8fccc544 chore(deps): bump patcher version from 6.4.3 -> 7.0.0 2023-02-27 19:19:19 +07:00
8319dc9164 fix: improperly sized monochrome icon (#715) 2023-02-27 19:07:44 +07:00
6829d3cdea refactor: update deprecated and minor code refactors (#710)
Improve code readability & additional refactoring

Commits:
chore: exclude generated from analyzer

refactor: add SharedPreferences to locator

refactor: access shared pref from locator, and code refactor

refactor: remove unwanted `await`

refactor: remove `const` from `CacheConfig`
2023-02-27 19:06:05 +07:00
3ae4d69110 chore: migrate deprecation code && code cleanup (#708)
Fixes all issues in `flutter analyze`.
<Reviewed>

Commits:
* chore: migrate deprecated text style

* chore: migrate `toggleableActiveColor` to individual theme

* chore: don't use 'BuildContext's across async gaps
2023-02-20 16:53:53 +07:00
dc665f227e fix: use high resolution adaptive icons (#675)
Use high-resolution icons instead of the low-resolution ones on ReVanced Manager.

Commits:
* High resolution adaptive icons, built using revanced-logo-no-background.svg

Same icons currently used for ReVanced YouTube.

* tweak background color to match revanced-logo-no-background.svg

* recreated foreground using 'revanced-logo-shape.svg'

* updated full resolution icons, using same ratio as original SVG

* updated icons with gradient border
2023-02-17 19:28:01 +07:00
a83496568f chore: code cleanup (#681)
Improve the readability of the code.

Commits:
* chore: correct typos `fragement` to `fragment`

* chore: put a single newline at end of file.
2023-02-17 18:53:23 +07:00
12d25570af fix: Long patch description truncated (#702)
fix: long patch description truncated (#702)

Allow flexible height
2023-02-14 18:42:24 +07:00
378c947654 chore: bump version to v0.0.56 2023-02-12 13:04:34 +07:00
bd39a3140e feat: fix patch bundle version no longer displayed (#686) 2023-02-12 00:02:30 +07:00
7d3ca3dec1 fix: display patches version on first load (#687) 2023-02-12 00:00:01 +07:00
1cb556c8f8 chore: bump version to 0.0.55 2023-02-11 23:59:53 +07:00
8c8f96de1c build: bump patcher version 2023-02-11 23:59:47 +07:00
318cd87a9a feat(style): use the correct m3 theming (partially) (#680) 2023-02-07 15:46:29 +03:00
5d63d5c2d3 feat: potentially fix apps disappearing when update is available (#674) 2023-01-31 15:42:00 +03:00
7d347fccc6 build: bump version to v0.0.54 2023-01-30 15:57:06 +03:00
a54ca799b9 feat: update rules of analysis_options.yaml. and solved all problems (#665)
* update rules of analysis_options.yaml. and solved all problems

* refactor: fix remaining problems

---------

Co-authored-by: Ushie <ushiekane@gmail.com>
2023-01-30 15:35:06 +03:00
f5bc1a996f feat: remove select all icon from searchbar (#669) 2023-01-30 15:13:25 +03:00
8591bc4d01 chore: update cr_file_saver (#668)
Co-authored-by: Ushie <github@ushie.dev>
2023-01-30 15:11:31 +03:00
40888c07f3 feat: fix overflow text & separate version from patch name (#666)
* chore: Add note

* feat: Fix overflow text & seperate version from patch title

* feat: Fix overflow text & separate version from patch name
2023-01-30 15:07:25 +03:00
1c965c3788 refactor: cleanup remember patches feature (#630) 2023-01-30 15:03:55 +03:00
4df690c2a2 feat: monochrome icon + predictive back gesture (#591)
* Add monochrome icon

* Enable predictive back gesture

* feat: monochrome icon + predictive back gesture
2023-01-30 01:23:56 +03:00
d6abb61e2b ci(build): update workflow actions (#662)
- Bump upload-artifact to v3

- Update crowdin/github-action according to new versioning format [https://github.com/crowdin/github-action/releases/tag/v1.6.0]
2023-01-29 23:56:13 +03:00
3434c862e9 feat: improve note [skip ci] 2023-01-28 07:49:57 +01:00
ea8af926fa chore: update broken documentation link (#659)
* chorus: fix invalid documentation link

* chorus: Update broken documentation link
2023-01-22 16:18:41 +03:00
c3df48174c feat: warn user for selecting all patches (#649) 2023-01-21 16:37:28 +01:00
f1e60f96c4 chore: bump version to 0.0.53 2023-01-18 22:07:00 +01:00
cdd852678b build: bump patcher version 2023-01-18 22:07:00 +01:00
bf518b5467 bump: kotlin gradle plugin 2023-01-18 22:07:00 +01:00
ffd53fab26 feat: clarify acknowledgement label (#608) 2023-01-14 20:23:49 +03:00
5aad7dad35 chore: fix incorrect wording 2023-01-12 21:03:11 +01:00
b1c1a9f4e1 feat: stale development notice [skip ci] 2023-01-07 14:24:43 +01:00
d847a8e0b2 build: bump version to v0.0.52 2022-12-19 01:39:48 +01:00
9668730b5d build: bump patcher version (#610) 2022-12-19 01:35:58 +01:00
dc049cf26a New Crowdin translations by Github Action (#601)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
2022-12-16 22:41:26 +03:00
82c2b2f128 build: bump version to v0.0.51 2022-12-15 21:24:06 +03:00
5f81d65911 feat: sort by amount of patches, display patches count, setting to enable universal patches (#593)
* feat: sort by amount of patches

* feat: display patches count in application card

* feat: setting to enable universal patches
2022-12-15 23:35:45 +05:30
19f990c564 build: bump version to v0.0.50 2022-12-14 14:17:38 +03:00
62467007b2 Revert "feat: display app's patch count in appcard"
This reverts commit 8d4e4ba6c9c30fdade2fcbf79aaaba34c68458ac.
2022-12-14 13:20:17 +03:00
d7624e5e1f Revert "feat: filter apps by patch count"
This reverts commit d78868b4625747b8c30e278d5a6a8fbb49bdc19d.
2022-12-14 13:19:59 +03:00
4505f10e50 build: bump version number 2022-12-14 06:04:42 +01:00
3ce3df5e19 build: bump patcher version 2022-12-14 06:04:10 +01:00
8d4e4ba6c9 feat: display app's patch count in appcard 2022-12-14 02:12:57 +03:00
d78868b462 feat: filter apps by patch count 2022-12-14 01:52:06 +03:00
01a681ad00 build: bump version to v0.0.48 2022-12-12 22:34:39 +03:00
adfeb61eab fix: print patch fail cause if message is null 2022-12-12 22:32:11 +03:00
8c3faac343 build: bump version to v0.0.47 2022-12-12 17:09:32 +03:00
c81acce31c feat: improve patch fail logging 2022-12-12 17:09:32 +03:00
fe629ce77c Merge branch 'flutter' of https://github.com/revanced/revanced-manager into flutter 2022-12-11 18:04:06 +05:30
5c27add2b2 bump:bump version to v0.0.46 2022-12-11 18:04:00 +05:30
ff90dae695 feat: add support for shared patches (#577)
* fix: avoid npe if a patch has empty compatible package.

* feat: support for shared patches

* fix: incorrect bool check and cleanup

Co-authored-by: Aunali321 <aunvakil.aa@gmail.com>
2022-12-11 18:00:44 +05:30
4f8aec6a05 build: bump version to v0.0.45 2022-12-09 17:47:51 +05:30
ba8df57580 Update broken link (#569) 2022-12-09 17:42:09 +05:30
3bab1940c1 Support Gitea repositories (#570) 2022-12-09 17:40:43 +05:30
e300c92215 build: bump version to v0.0.44 2022-12-06 03:15:23 +01:00
99764e25ed build: bump patcher dependency version 2022-12-06 03:14:35 +01:00
170 changed files with 11727 additions and 1922 deletions

3
.env
View File

@ -1,3 +0,0 @@
sentryDSN=
apiKey=
appId=

View File

@ -29,7 +29,7 @@ body:
- type: textarea - type: textarea
attributes: attributes:
label: Steps to reproduce label: Steps to reproduce
description: Add the steps to reproduce this bug including your environment. description: Add the steps to reproduce this bug, including your environment.
placeholder: Step 1. Download some files. Step 2. ... placeholder: Step 1. Download some files. Step 2. ...
validations: validations:
required: true required: true
@ -74,20 +74,20 @@ body:
- type: textarea - type: textarea
attributes: attributes:
label: Device logs (exported using Manager settings). 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. description: Please copy and paste any relevant log output. This will be automatically formatted into code, so there is no need for backticks.
render: shell render: shell
validations: validations:
required: true required: true
- type: textarea - type: textarea
attributes: attributes:
label: Installer logs (exported using Installer menu option) [unneeded if issue is not during patching]. label: Installer logs (exported using Installer menu option) [unneeded if the 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. description: Please copy and paste any relevant log output. This will be automatically formatted into code, so there is no need for backticks.
render: shell render: shell
validations: validations:
required: false required: false
- type: textarea - type: textarea
attributes: attributes:
label: Screenshots or videos label: Screenshots or video
description: Add screenshots or videos that show the bug here. description: Add screenshots or videos that show the bug here.
placeholder: Drag and drop the screenshots/videos into this box. placeholder: Drag and drop the screenshots/videos into this box.
validations: validations:
@ -105,16 +105,16 @@ body:
validations: validations:
required: false required: false
- type: checkboxes - type: checkboxes
id: acknowledgements id: acknowledgments
attributes: attributes:
label: Acknowledgements label: Acknowledgments
description: Your issue will be closed if you haven't done these steps. description: Your issue will be closed if you haven't done these steps.
options: options:
- label: I have searched the existing issues and this is a new and no duplicate or related to another open issue. - label: I have searched the existing issues; this is new and no duplicate or related to another open issue.
required: true required: true
- label: I have written a short but informative title. - label: I have written a short but informative title.
required: true required: true
- label: I filled out all of the requested information in this issue properly. - label: I properly filled out all of the requested information in this issue.
required: true required: true
- label: The issue is related solely to the ReVanced Manager - label: The issue is solely related to ReVanced Manager and not caused by patches.
required: true required: true

2
.github/config.yaml vendored Normal file
View File

@ -0,0 +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.

38
.github/workflows/analyze.yml vendored Normal file
View File

@ -0,0 +1,38 @@
name: Analyze Code
on:
push:
branches: [ "dev" ]
paths:
- "**.dart"
- ".github/workflows/analyze.yml"
pull_request:
branches: [ "main", "dev" ]
types:
- opened
- reopened
- synchronize
- ready_for_review
paths:
- "**.dart"
- ".github/workflows/analyze.yml"
jobs:
build:
name: "Static analysis & format check"
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

View File

@ -1,55 +0,0 @@
name: "Android CI Actions"
on:
push:
branches:
- "**"
tags-ignore:
- "v*" # Ignore tags that start with "v" (e.g. v1.0.0) because they are handled by release-build.yml
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 environment variables
run: echo $SECRETS | base64 -d > lib/utils/environment.dart
env:
SECRETS: ${{ secrets.SECRETS }}
- name: Set up Flutter
run: flutter pub get
- name: Generate files with Builder
run: flutter packages pub run build_runner build --delete-conflicting-outputs
- name: Build with Flutter
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
run: flutter build apk
- name: Sign APK
id: sign_apk
uses: 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: Upload APK
uses: actions/upload-artifact@v2
with:
name: revanced-manager-${{ env.RELEASE_VERSION }}
path: revanced-manager-${{ env.RELEASE_VERSION }}.apk

View File

@ -3,7 +3,7 @@ name: Sync Crowdin translations
on: on:
push: push:
branches: branches:
- "flutter" - "dev"
paths: paths:
- "assets/i18n/en_US.json" - "assets/i18n/en_US.json"
- ".github/workflows/crowdin.yml" - ".github/workflows/crowdin.yml"
@ -19,7 +19,7 @@ jobs:
uses: actions/checkout@v3 uses: actions/checkout@v3
- name: Crowdin - name: Crowdin
uses: crowdin/github-action@1.5.0 uses: crowdin/github-action@v1
with: with:
config: crowdin.yml config: crowdin.yml
upload_sources: true upload_sources: true

View File

@ -1,41 +1,41 @@
name: "Android CI PR Build" name: PR Build
on: on:
pull_request: workflow_dispatch:
branches:
- "**" jobs:
build:
jobs: name: Build
release: runs-on: ubuntu-latest
runs-on: ubuntu-latest steps:
steps: - name: Checkout
- uses: actions/checkout@v3 uses: actions/checkout@v3
- name: Set env with:
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV # Make sure the release step uses its own credentials:
- name: Set up JDK 12 # https://github.com/cycjimmy/semantic-release-action#private-packages
uses: actions/setup-java@v3 persist-credentials: false
with: fetch-depth: 0
java-version: '12' - name: Setup JDK
distribution: 'zulu' uses: actions/setup-java@v3
- uses: subosito/flutter-action@v2 with:
with: java-version: '11'
channel: 'stable' distribution: 'zulu'
- name: Set environment variables cache: 'gradle'
run: echo $SECRETS | base64 -d > lib/utils/environment.dart - name: Setup Flutter
env: uses: subosito/flutter-action@v2
SECRETS: ${{ secrets.SECRETS }} with:
- name: Set up Flutter channel: 'stable'
run: flutter pub get cache: true
- name: Generate files with Builder - name: Install Flutter dependencies
run: flutter packages pub run build_runner build --delete-conflicting-outputs run: flutter pub get
- name: Build with Flutter - name: Generate files with Builder
env: run: flutter packages pub run build_runner build --delete-conflicting-outputs
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Build with Flutter
run: flutter build apk env:
- name: Add version to APK GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: mv build/app/outputs/flutter-apk/app-release.apk revanced-manager-${{ env.RELEASE_VERSION }}.apk run: flutter build apk
- name: Upload APK - name: Upload build
uses: actions/upload-artifact@v2 uses: actions/upload-artifact@v3
with: with:
name: revanced-manager-${{ env.RELEASE_VERSION }} name: revanced-manager
path: revanced-manager-${{ env.RELEASE_VERSION }}.apk path: build/app/outputs/flutter-apk/app-release.apk

View File

@ -12,18 +12,14 @@ jobs:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
- name: Set env - name: Set env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Set up JDK 12 - name: Set up JDK 11
uses: actions/setup-java@v3 uses: actions/setup-java@v3
with: with:
java-version: '12' java-version: "11"
distribution: 'zulu' distribution: "zulu"
- uses: subosito/flutter-action@v2 - uses: subosito/flutter-action@v2
with: with:
channel: 'stable' channel: "stable"
- name: Set environment variables
run: echo $SECRETS | base64 -d > lib/utils/environment.dart
env:
SECRETS: ${{ secrets.SECRETS }}
- name: Set up Flutter - name: Set up Flutter
run: flutter pub get run: flutter pub get
- name: Generate files with Builder - name: Generate files with Builder
@ -51,4 +47,4 @@ jobs:
with: with:
repo_token: "${{ secrets.GITHUB_TOKEN }}" repo_token: "${{ secrets.GITHUB_TOKEN }}"
prerelease: false prerelease: false
files: revanced-manager-${{ env.RELEASE_VERSION }}.apk files: revanced-manager-${{ env.RELEASE_VERSION }}.apk

68
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,68 @@
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: '11'
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

View 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@v2
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 }}"}'

10
.gitignore vendored
View File

@ -134,5 +134,11 @@ app.*.map.json
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
!/dev/ci/**/Gemfile.lock !/dev/ci/**/Gemfile.lock
Firebase related # Firebase related
.firebase .firebase
# Dependency directories
node_modules/
# FVM
.fvm

75
.releaserc Normal file
View File

@ -0,0 +1,75 @@
{
"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
}
]
]
}

1
CHANGELOG.md Normal file
View File

@ -0,0 +1 @@

View File

@ -3,15 +3,11 @@
The official ReVanced Manager based on Flutter. The official ReVanced Manager based on Flutter.
## 🔽 Download ## 🔽 Download
To download the Alpha version of Manager, go [here](https://github.com/revanced/revanced-manager/releases/latest) and install the provided APK file. To download latest Manager, go [here](https://github.com/revanced/revanced-manager/releases/latest) and install the provided APK file.
## 📝 Prerequisites ## 📝 Prerequisites
1. Android 8 or higher 1. Android 8 or higher
2. Does not work on some armv7 devices 2. Does not work on some armv7 devices
3. [Vanced MicroG](https://github.com/TeamVanced/VancedMicroG/releases) required for YouTube and YouTube Music (Only for non-root)
## ⚠️ Disclaimer
*Please note that even though we're releasing the Manager, it is an ALPHA version. There's a big chance that the Manager might not work at all for you.*
## 🔴 Issues ## 🔴 Issues
For suggestions and bug reports, open an issue [here](https://github.com/revanced/revanced-manager/issues/new/choose). For suggestions and bug reports, open an issue [here](https://github.com/revanced/revanced-manager/issues/new/choose).
@ -28,7 +24,7 @@ If you wish to translate ReVanced Manager, we're accepting translations on [Crow
## 🛠️ Building Manager from source ## 🛠️ Building Manager from source
1. Setup flutter environment for your [platform](https://docs.flutter.dev/get-started/install) 1. Setup flutter environment for your [platform](https://docs.flutter.dev/get-started/install)
2. Clone the repository locally 2. Clone the repository locally
3. Add your github token in gradle.properties like [this](https://github.com/revanced/revanced-documentation/wiki/Building-from-source) 3. Add your github token in gradle.properties like [this](/docs/4_building.md)
4. Open the project in terminal 4. Open the project in terminal
5. Run `flutter pub get` 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) 6. Then `flutter packages pub run build_runner build --delete-conflicting-outputs` (Must be done on each git pull)

View File

@ -11,23 +11,154 @@ include: package:flutter_lints/flutter.yaml
analyzer: analyzer:
exclude: exclude:
- lib/utils/env_class.g.dart - lib/app/app.locator.dart
- lib/app/app.router.dart
- lib/models/patch.g.dart
- lib/models/patched_application.g.dart
linter: linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at
# https://dart-lang.github.io/linter/lints/index.html.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
rules: rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule - always_declare_return_types
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule - require_trailing_commas
- always_put_control_body_on_new_line
# Additional information about this file can be found at - always_require_non_null_named_parameters
# https://dart.dev/guides/language/analysis-options - always_use_package_imports # we do this commonly
- annotate_overrides
- avoid_bool_literals_in_conditional_expressions
- avoid_double_and_int_checks
- avoid_empty_else
- avoid_equals_and_hash_code_on_mutable_classes
- avoid_escaping_inner_quotes
- avoid_field_initializers_in_const_classes
- avoid_function_literals_in_foreach_calls
- avoid_implementing_value_types
- avoid_init_to_null
- avoid_js_rounded_ints
- avoid_null_checks_in_equality_operators
- avoid_print
- avoid_redundant_argument_values
- avoid_relative_lib_imports
- avoid_renaming_method_parameters
- avoid_return_types_on_setters
- avoid_returning_null
- avoid_returning_null_for_future
- avoid_returning_null_for_void
- avoid_setters_without_getters
- avoid_shadowing_type_parameters
- avoid_single_cascade_in_expression_statements
- avoid_type_to_string
- avoid_types_as_parameter_names
- avoid_unnecessary_containers
- avoid_void_async
- avoid_web_libraries_in_flutter # we use web libraries in web-specific code, and our tests prevent us from using them elsewhere
- await_only_futures
- camel_case_extensions
- camel_case_types
- cancel_subscriptions
- cast_nullable_to_non_nullable
- close_sinks # not reliable enough
- control_flow_in_finally
- curly_braces_in_flow_control_structures
- depend_on_referenced_packages
- deprecated_consistency
- directives_ordering
- empty_catches
- empty_constructor_bodies
- empty_statements
- eol_at_end_of_file
- exhaustive_cases
- file_names
- flutter_style_todos
- hash_and_equals
- implementation_imports
- iterable_contains_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
- no_logic_in_create_state
- non_constant_identifier_names
- noop_primitive_operations
- null_check_on_nullable_type_parameter
- null_closures
- overridden_fields
- package_api_docs
- package_names
- package_prefixed_library_names
- prefer_adjacent_string_concatenation
- prefer_asserts_in_initializer_lists
- prefer_collection_literals
- prefer_conditional_assignment
- prefer_const_constructors
- prefer_const_constructors_in_immutables
- prefer_const_declarations
- prefer_const_literals_to_create_immutables
- prefer_contains
- prefer_final_fields
- prefer_final_in_for_each
- prefer_final_locals
- prefer_for_elements_to_map_fromIterable
- prefer_foreach
- prefer_function_declarations_over_variables
- prefer_generic_function_type_aliases
- prefer_if_elements_to_conditional_expressions
- prefer_if_null_operators
- prefer_initializing_formals
- prefer_inlined_adds
- prefer_interpolation_to_compose_strings
- prefer_is_empty
- prefer_is_not_empty
- prefer_is_not_operator
- prefer_iterable_whereType
- prefer_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_unnamed_constructors_first
- test_types_in_equals
- throw_in_finally
- tighten_type_of_initializing_formals
- type_init_formals
- unnecessary_brace_in_string_interps
- unnecessary_const
- unnecessary_getters_setters
- unnecessary_new
- unnecessary_null_aware_assignments
- unnecessary_null_checks
- unnecessary_null_in_if_null_operators
- unnecessary_nullable_for_final_variable_declarations
- unnecessary_overrides
- unnecessary_parenthesis
- unnecessary_statements
- unnecessary_string_escapes
- unnecessary_string_interpolations
- unnecessary_this
- unrelated_type_equality_checks
- unsafe_html
- use_build_context_synchronously
- use_full_hex_values_for_flutter_colors
- use_function_type_syntax_for_parameters
- use_if_null_to_convert_nulls_to_bools
- use_is_even_rather_than_modulo
- use_key_in_widget_constructors
- use_late_for_private_fields_and_variables
- use_named_constants
- use_raw_strings
- use_rethrow_when_possible
- use_setters_to_change_properties
- use_test_throws_matchers
- valid_regexps
- void_checks

3
android/Gemfile Normal file
View File

@ -0,0 +1,3 @@
source "https://rubygems.org"
gem "fastlane"

View File

@ -26,7 +26,7 @@ apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android { android {
compileSdkVersion 33 compileSdkVersion flutter.compileSdkVersion
ndkVersion flutter.ndkVersion ndkVersion flutter.ndkVersion
compileOptions { compileOptions {
@ -71,14 +71,10 @@ dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
// ReVanced // ReVanced
implementation "app.revanced:revanced-patcher:6.1.1" implementation "app.revanced:revanced-patcher:11.0.4"
// Signing & aligning // Signing & aligning
implementation("org.bouncycastle:bcpkix-jdk15on:1.70") implementation("org.bouncycastle:bcpkix-jdk15on:1.70")
implementation("com.android.tools.build:apksig:7.2.2") implementation("com.android.tools.build:apksig:7.2.2")
// MicroG cronet
implementation("org.microg:cronet-common:$cronetVersion")
implementation("org.microg:cronet-native:$cronetVersion")
} }

View File

@ -2,22 +2,31 @@
package="app.revanced.manager.flutter"> package="app.revanced.manager.flutter">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <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_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> <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_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" /> <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<application <application
android:label="ReVanced Manager" android:label="ReVanced Manager"
android:name="${applicationName}" android:name="${applicationName}"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:largeHeap="true" android:largeHeap="true"
android:extractNativeLibs="true"> android:requestLegacyExternalStorage="true"
android:extractNativeLibs="true"
android:enableOnBackInvokedCallback="true">
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true" android:exported="true"
@ -28,8 +37,7 @@
android:windowSoftInputMode="adjustResize"> android:windowSoftInputMode="adjustResize">
<meta-data <meta-data
android:name="io.flutter.embedding.android.NormalTheme" android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme" android:resource="@style/NormalTheme"/>
/>
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/> <category android:name="android.intent.category.LAUNCHER"/>

View File

@ -43,8 +43,9 @@ class MainActivity : FlutterActivity() {
val integrationsPath = call.argument<String>("integrationsPath") val integrationsPath = call.argument<String>("integrationsPath")
val selectedPatches = call.argument<List<String>>("selectedPatches") val selectedPatches = call.argument<List<String>>("selectedPatches")
val cacheDirPath = call.argument<String>("cacheDirPath") val cacheDirPath = call.argument<String>("cacheDirPath")
val mergeIntegrations = call.argument<Boolean>("mergeIntegrations")
val keyStoreFilePath = call.argument<String>("keyStoreFilePath") val keyStoreFilePath = call.argument<String>("keyStoreFilePath")
val keystorePassword = call.argument<String>("keystorePassword")
if (patchBundleFilePath != null && if (patchBundleFilePath != null &&
originalFilePath != null && originalFilePath != null &&
inputFilePath != null && inputFilePath != null &&
@ -53,8 +54,8 @@ class MainActivity : FlutterActivity() {
integrationsPath != null && integrationsPath != null &&
selectedPatches != null && selectedPatches != null &&
cacheDirPath != null && cacheDirPath != null &&
mergeIntegrations != null && keyStoreFilePath != null &&
keyStoreFilePath != null keystorePassword != null
) { ) {
runPatcher( runPatcher(
result, result,
@ -66,8 +67,8 @@ class MainActivity : FlutterActivity() {
integrationsPath, integrationsPath,
selectedPatches, selectedPatches,
cacheDirPath, cacheDirPath,
mergeIntegrations, keyStoreFilePath,
keyStoreFilePath keystorePassword
) )
} else { } else {
result.notImplemented() result.notImplemented()
@ -88,8 +89,8 @@ class MainActivity : FlutterActivity() {
integrationsPath: String, integrationsPath: String,
selectedPatches: List<String>, selectedPatches: List<String>,
cacheDirPath: String, cacheDirPath: String,
mergeIntegrations: Boolean, keyStoreFilePath: String,
keyStoreFilePath: String keystorePassword: String
) { ) {
val originalFile = File(originalFilePath) val originalFile = File(originalFilePath)
val inputFile = File(inputFilePath) val inputFile = File(inputFilePath)
@ -139,19 +140,17 @@ class MainActivity : FlutterActivity() {
mapOf("progress" to 0.3, "header" to "", "log" to "") mapOf("progress" to 0.3, "header" to "", "log" to "")
) )
} }
if (mergeIntegrations) { handler.post {
handler.post { installerChannel.invokeMethod(
installerChannel.invokeMethod( "update",
"update", mapOf(
mapOf( "progress" to 0.4,
"progress" to 0.4, "header" to "Merging integrations...",
"header" to "Merging integrations...", "log" to "Merging integrations"
"log" to "Merging integrations"
)
) )
} )
patcher.addFiles(listOf(integrations)) {}
} }
patcher.addIntegrations(listOf(integrations)) {}
handler.post { handler.post {
installerChannel.invokeMethod( installerChannel.invokeMethod(
@ -174,7 +173,7 @@ class MainActivity : FlutterActivity() {
javaClass.classLoader javaClass.classLoader
) )
).loadPatches().filter { patch -> ).loadPatches().filter { patch ->
patch.compatiblePackages!!.any { it.name == patcher.context.packageMetadata.packageName } && (patch.compatiblePackages?.any { it.name == patcher.context.packageMetadata.packageName } == true || patch.compatiblePackages.isNullOrEmpty()) &&
selectedPatches.any { it == patch.patchName } selectedPatches.any { it == patch.patchName }
} }
} else { } else {
@ -196,7 +195,7 @@ class MainActivity : FlutterActivity() {
} }
return@forEach return@forEach
} }
val msg = "$patch failed.\nError:\n" + res.exceptionOrNull()!!.printStackTrace() val msg = "Failed to apply $patch: " + "${res.exceptionOrNull()!!.message ?: res.exceptionOrNull()!!.cause!!::class.simpleName}"
handler.post { handler.post {
installerChannel.invokeMethod( installerChannel.invokeMethod(
"update", "update",
@ -248,7 +247,7 @@ class MainActivity : FlutterActivity() {
// Signer("ReVanced", "s3cur3p@ssw0rd").signApk(patchedFile, outFile, keyStoreFile) // Signer("ReVanced", "s3cur3p@ssw0rd").signApk(patchedFile, outFile, keyStoreFile)
try { try {
Signer("ReVanced", "s3cur3p@ssw0rd").signApk(patchedFile, outFile, keyStoreFile) Signer("ReVanced", keystorePassword).signApk(patchedFile, outFile, keyStoreFile)
} catch (e: Exception) { } catch (e: Exception) {
//log to console //log to console
print("Error signing apk: ${e.message}") print("Error signing apk: ${e.message}")
@ -272,8 +271,8 @@ class MainActivity : FlutterActivity() {
"update", "update",
mapOf( mapOf(
"progress" to -100.0, "progress" to -100.0,
"header" to "Aborting...", "header" to "Aborted...",
"log" to "An error occurred! Aborting\nError:\n$stack" "log" to "An error occurred! Aborted\nError:\n$stack"
) )
) )
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

View 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>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/> <background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/> <foreground android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon> <monochrome android:drawable="@drawable/ic_launcher_foreground"/>
</adaptive-icon>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.4 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<resources> <resources>
<color name="ic_launcher_background">#1B1B1B</color> <color name="ic_launcher_background">#1B1B1B</color>
</resources> </resources>

View File

@ -1,6 +1,5 @@
buildscript { buildscript {
ext.cronetVersion = '102.5005.125' ext.kotlin_version = '1.7.10'
ext.kotlin_version = '1.7.20'
repositories { repositories {
google() google()
mavenCentral() mavenCentral()
@ -32,6 +31,6 @@ subprojects {
project.evaluationDependsOn(':app') project.evaluationDependsOn(':app')
} }
task clean(type: Delete) { tasks.register("clean", Delete) {
delete rootProject.buildDir delete rootProject.buildDir
} }

View File

@ -1,3 +1,6 @@
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M -XX:+UseParallelGC
org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.caching=true
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true

View File

@ -1,6 +1,7 @@
#Mon May 09 12:07:41 MSK 2022
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-rc-1-bin.zip
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStorePath=wrapper/dists distributionSha256Sum=a01b6587e15fe7ed120a0ee299c25982a1eee045abd6a9dd5e216b2f628ef9ac
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip
networkTimeout=10000
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

View File

@ -1,6 +1,7 @@
{ {
"okButton": "موافق", "okButton": "موافق",
"cancelButton": "إلغاء", "cancelButton": "إلغاء",
"updateButton": "تحديث",
"enabledLabel": "مفعّل", "enabledLabel": "مفعّل",
"disabledLabel": "معطّل", "disabledLabel": "معطّل",
"yesButton": "نعم", "yesButton": "نعم",
@ -21,7 +22,7 @@
"noInstallations": "لا توجد تطبيقات معدلة مثبتة", "noInstallations": "لا توجد تطبيقات معدلة مثبتة",
"installed": "مثبت", "installed": "مثبت",
"updateDialogTitle": "تحديث المدير", "updateDialogTitle": "تحديث المدير",
"updateDialogText": "هل أنت متأكد من رغبتك في تنزيل وتحديث ReVanced Manager ؟", "updateChangelogTitle": "سجل التغييرات",
"notificationTitle": "تم تنزيل التحديث", "notificationTitle": "تم تنزيل التحديث",
"notificationText": "أنقر لتثبيت التحديث", "notificationText": "أنقر لتثبيت التحديث",
"downloadingMessage": "جاري تحميل التحديث...", "downloadingMessage": "جاري تحميل التحديث...",
@ -54,8 +55,7 @@
"widgetSubtitle": "لم يتم اختيار أي تطبيق", "widgetSubtitle": "لم يتم اختيار أي تطبيق",
"noAppsLabel": "لم يتم العثور على تطبيقات", "noAppsLabel": "لم يتم العثور على تطبيقات",
"currentVersion": "الحالي", "currentVersion": "الحالي",
"recommendedVersion": "موصى به", "recommendedVersion": "موصى به"
"anyVersion": "أي"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "اختر التعديلات", "widgetTitle": "اختر التعديلات",
@ -81,13 +81,13 @@
"all": "الكل", "all": "الكل",
"none": "بدون", "none": "بدون",
"loadPatchesSelection": "تحميل التعديلات المحددة", "loadPatchesSelection": "تحميل التعديلات المحددة",
"noSavedPatches": "لا توجد تعديلات محفوظة للتطبيق المحدد\nاضغط على تم لحفظ التحديد الحالي", "noSavedPatches": "لا توجد تعديلات محفوظة للتطبيق المختار.\nاضغط على تم لحفظ الاختيار الحالي.",
"noPatchesFound": "لم يتم العثور على تعديلات للتطبيق المحدد", "noPatchesFound": "لم يتم العثور على تعديلات للتطبيق المحدد",
"selectAllPatchesWarningContent": "أنت على وشك تحديد جميع التعديلات، بما في ذلك التعديلات غير الموصى بها والتي يمكن أن تسبب سلوكاً غير مرغوب فيه." "selectAllPatchesWarningContent": "أنت على وشك تحديد جميع التعديلات، بما في ذلك التعديلات غير الموصى بها والتي يمكن أن تسبب سلوكاً غير مرغوب فيه."
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "قد يؤدي تحديد هذا التعديل إلى حدوث أخطاء في عملية التعديل.\n\nإصدار التطبيق: {packageVersion}\nالإصدارات المدعومة حالياً:\n{supportedVersions}", "unsupportedDialogText": "قد يؤدي تحديد هذا التعديل إلى حدوث أخطاء في عملية التعديل.\n\nإصدار التطبيق: {packageVersion}\nالإصدارات المدعومة حالياً:\n{supportedVersions}",
"unsupportedPatchVersion": "التعديل غير مدعوم لهذا الإصدار من التطبيق. مكن التعديل التجريبي في الإعدادات للمتابعة." "unsupportedPatchVersion": "التعديل غير مدعوم لهذا الإصدار من التطبيق. فعِّل خِيار التعديل التجريبي في الإعدادات للمتابعة."
}, },
"installerView": { "installerView": {
"widgetTitle": "المثبت", "widgetTitle": "المثبت",
@ -121,6 +121,7 @@
"englishOption": "الإنجليزية", "englishOption": "الإنجليزية",
"sourcesLabel": "المصادر", "sourcesLabel": "المصادر",
"sourcesLabelHint": "تكوين مصادرك المخصصة", "sourcesLabelHint": "تكوين مصادرك المخصصة",
"hostRepositoryLabel": "مستودع API",
"orgPatchesLabel": "تنظيم التعديلات", "orgPatchesLabel": "تنظيم التعديلات",
"sourcesPatchesLabel": "مصدر التعديلات", "sourcesPatchesLabel": "مصدر التعديلات",
"orgIntegrationsLabel": "تنظيم الدمج", "orgIntegrationsLabel": "تنظيم الدمج",
@ -135,6 +136,8 @@
"apiURLLabel": "رابط API", "apiURLLabel": "رابط API",
"apiURLHint": "تكوين رابط API الخاص بك", "apiURLHint": "تكوين رابط API الخاص بك",
"selectApiURL": "رابط API", "selectApiURL": "رابط API",
"experimentalUniversalPatchesLabel": "دعم التعديلات العامة التجريبية",
"experimentalUniversalPatchesHint": "عرض جميع التطبيقات المراد استخدامها مع التعديلات العامة، قد يكون تحميل قائمة التطبيقات أبطأ",
"experimentalPatchesLabel": "دعم التعديلات التجريبية", "experimentalPatchesLabel": "دعم التعديلات التجريبية",
"experimentalPatchesHint": "تمكين استخدام التعديلات غير المدعومة في أي إصدار للتطبيق", "experimentalPatchesHint": "تمكين استخدام التعديلات غير المدعومة في أي إصدار للتطبيق",
"enabledExperimentalPatches": "تم تمكين دعم التعديلات التجريبية", "enabledExperimentalPatches": "تم تمكين دعم التعديلات التجريبية",

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "Heç bir tətbiq seçilməyib", "widgetSubtitle": "Heç bir tətbiq seçilməyib",
"noAppsLabel": "Heç bir tətbiq tapılmadı", "noAppsLabel": "Heç bir tətbiq tapılmadı",
"currentVersion": "Hazırkı", "currentVersion": "Hazırkı",
"recommendedVersion": "Tövsiyyə edilən", "recommendedVersion": "Tövsiyyə edilən"
"anyVersion": "istənilən"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Yamaqları seçin", "widgetTitle": "Yamaqları seçin",

199
assets/i18n/bg_BG.json Normal file
View File

@ -0,0 +1,199 @@
{
"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": "Препоръчана"
},
"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": "Допринесли към мениджъра"
}
}

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "কোনো অ্যাপ্লিকেশন নির্বাচন করা হয়নি", "widgetSubtitle": "কোনো অ্যাপ্লিকেশন নির্বাচন করা হয়নি",
"noAppsLabel": "কোন অ্যাপ্লিকেশন পাওয়া যায়নি", "noAppsLabel": "কোন অ্যাপ্লিকেশন পাওয়া যায়নি",
"currentVersion": "বর্তমান", "currentVersion": "বর্তমান",
"recommendedVersion": "প্রস্তাবিত", "recommendedVersion": "প্রস্তাবিত"
"anyVersion": "যেকোনো সংস্করণ"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "প্যাচ নির্বাচন করুন", "widgetTitle": "প্যাচ নির্বাচন করুন",

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "Nebyla vybrána žádná aplikace", "widgetSubtitle": "Nebyla vybrána žádná aplikace",
"noAppsLabel": "Nebyly nalezeny žádné aplikace", "noAppsLabel": "Nebyly nalezeny žádné aplikace",
"currentVersion": "Aktuální", "currentVersion": "Aktuální",
"recommendedVersion": "Doporučeno", "recommendedVersion": "Doporučeno"
"anyVersion": "jakákoliv"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Vybrat záplaty", "widgetTitle": "Vybrat záplaty",

View File

@ -1,6 +1,7 @@
{ {
"okButton": "OK", "okButton": "OK",
"cancelButton": "Afbryd", "cancelButton": "Afbryd",
"updateButton": "Opdatér",
"enabledLabel": "Aktiveret", "enabledLabel": "Aktiveret",
"disabledLabel": "Deaktiveret", "disabledLabel": "Deaktiveret",
"yesButton": "Ja", "yesButton": "Ja",
@ -21,7 +22,7 @@
"noInstallations": "Ingen patchede apps installeret", "noInstallations": "Ingen patchede apps installeret",
"installed": "Installeret", "installed": "Installeret",
"updateDialogTitle": "Opdater Manager", "updateDialogTitle": "Opdater Manager",
"updateDialogText": "Er du sikker på, at du vil downloade og opdatere ReVanced Manager?", "updateChangelogTitle": "Ændringslog",
"notificationTitle": "Opdatering downloadet", "notificationTitle": "Opdatering downloadet",
"notificationText": "Tryk for at installere opdateringen", "notificationText": "Tryk for at installere opdateringen",
"downloadingMessage": "Downloader opdatering...", "downloadingMessage": "Downloader opdatering...",
@ -54,8 +55,7 @@
"widgetSubtitle": "Ingen applikation valgt", "widgetSubtitle": "Ingen applikation valgt",
"noAppsLabel": "Ingen applikationer fundet", "noAppsLabel": "Ingen applikationer fundet",
"currentVersion": "Nuværende", "currentVersion": "Nuværende",
"recommendedVersion": "Anbefalet", "recommendedVersion": "Anbefalet"
"anyVersion": "enhver"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Vælg patches", "widgetTitle": "Vælg patches",
@ -81,13 +81,13 @@
"all": "Alle", "all": "Alle",
"none": "Ingen", "none": "Ingen",
"loadPatchesSelection": "Indlæs patches udvælgelse", "loadPatchesSelection": "Indlæs patches udvælgelse",
"noSavedPatches": "Ingen gemte patches til den valgte app\nTryk på Udført for at gemme det aktuelle valg", "noSavedPatches": "Ingen gemte patches til den valgte app.\nTryk på Udført for at gemme det aktuelle valg.",
"noPatchesFound": "Ingen patches fundet til den valgte app", "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." "selectAllPatchesWarningContent": "Du er ved at vælge alle patches, der inkluderer ikke-anbefalede patches, og kan forårsage uønsket adfærd."
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "Valg af denne patch kan medføre patching-fejl.\n\nApp version: {packageVersion}\nUnderstøttede versioner:\n{supportedVersions}", "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 eksperimentel indstilling i indstillinger for at fortsætte." "unsupportedPatchVersion": "Patch er ikke understøttet for denne app-version. Aktivér den eksperimentelle indstilling i indstillinger for at fortsætte."
}, },
"installerView": { "installerView": {
"widgetTitle": "Installationsprogram", "widgetTitle": "Installationsprogram",
@ -121,6 +121,7 @@
"englishOption": "Engelsk", "englishOption": "Engelsk",
"sourcesLabel": "Kilder", "sourcesLabel": "Kilder",
"sourcesLabelHint": "Konfigurér dine brugerdefinerede kilder", "sourcesLabelHint": "Konfigurér dine brugerdefinerede kilder",
"hostRepositoryLabel": "Repository API",
"orgPatchesLabel": "Organisation for Patches", "orgPatchesLabel": "Organisation for Patches",
"sourcesPatchesLabel": "Kilde til Patches", "sourcesPatchesLabel": "Kilde til Patches",
"orgIntegrationsLabel": "Organisation for Integrationer", "orgIntegrationsLabel": "Organisation for Integrationer",
@ -135,6 +136,8 @@
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"apiURLHint": "Konfigurer din brugerdefineret API URL", "apiURLHint": "Konfigurer din brugerdefineret API URL",
"selectApiURL": "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", "experimentalPatchesLabel": "Understøttelse af eksperimentelle patches",
"experimentalPatchesHint": "Aktiver brugen af ikke-understøttede patches i enhver app version", "experimentalPatchesHint": "Aktiver brugen af ikke-understøttede patches i enhver app version",
"enabledExperimentalPatches": "Understøttelse af eksperimentelle patches aktiveret", "enabledExperimentalPatches": "Understøttelse af eksperimentelle patches aktiveret",
@ -148,7 +151,7 @@
"deleteKeystoreHint": "Slet keystore der bruges til at signere appen", "deleteKeystoreHint": "Slet keystore der bruges til at signere appen",
"deletedKeystore": "Keystore slettet", "deletedKeystore": "Keystore slettet",
"deleteTempDirLabel": "Slet midlertidige filer", "deleteTempDirLabel": "Slet midlertidige filer",
"deleteTempDirHint": "Slet de ubrugte midlertidige filer", "deleteTempDirHint": "Slet ubrugte midlertidige filer",
"deletedTempDir": "Midlertidige filer slettet", "deletedTempDir": "Midlertidige filer slettet",
"exportPatchesLabel": "Eksportér valgte patches", "exportPatchesLabel": "Eksportér valgte patches",
"exportPatchesHint": "Eksportér valgte patches til en JSON-fil", "exportPatchesHint": "Eksportér valgte patches til en JSON-fil",

View File

@ -1,6 +1,7 @@
{ {
"okButton": "OK", "okButton": "OK",
"cancelButton": "Abbrechen", "cancelButton": "Abbrechen",
"updateButton": "Aktualisieren",
"enabledLabel": "Aktiviert", "enabledLabel": "Aktiviert",
"disabledLabel": "Deaktiviert", "disabledLabel": "Deaktiviert",
"yesButton": "Ja", "yesButton": "Ja",
@ -21,11 +22,11 @@
"noInstallations": "Keine gepatchten Apps installiert", "noInstallations": "Keine gepatchten Apps installiert",
"installed": "Installiert", "installed": "Installiert",
"updateDialogTitle": "Manager aktualisieren", "updateDialogTitle": "Manager aktualisieren",
"updateDialogText": "Bist du sicher, dass du den ReVanced Manager herunterladen und aktualisieren möchtest?", "updateChangelogTitle": "Änderungsverlauf",
"notificationTitle": "Update heruntergeladen", "notificationTitle": "Update heruntergeladen",
"notificationText": "Tippen um Update zu installieren", "notificationText": "Tippen um Update zu installieren",
"downloadingMessage": "Aktualisierung wird heruntergeladen...", "downloadingMessage": "Aktualisierung wird heruntergeladen...",
"installingMessage": "Aktualisierung wird installiert...", "installingMessage": "Update wird installiert...",
"errorDownloadMessage": "Aktualisierung konnte nicht heruntergeladen werden", "errorDownloadMessage": "Aktualisierung konnte nicht heruntergeladen werden",
"errorInstallMessage": "Aktualisierung konnte nicht installiert werden", "errorInstallMessage": "Aktualisierung konnte nicht installiert werden",
"noConnection": "Keine Internetverbindung", "noConnection": "Keine Internetverbindung",
@ -54,8 +55,7 @@
"widgetSubtitle": "Keine App ausgewählt", "widgetSubtitle": "Keine App ausgewählt",
"noAppsLabel": "Keine Apps gefunden", "noAppsLabel": "Keine Apps gefunden",
"currentVersion": "Aktuell", "currentVersion": "Aktuell",
"recommendedVersion": "Empfohlen", "recommendedVersion": "Empfohlen"
"anyVersion": "beliebig"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Patches auswählen", "widgetTitle": "Patches auswählen",
@ -81,13 +81,13 @@
"all": "Alle", "all": "Alle",
"none": "Keine", "none": "Keine",
"loadPatchesSelection": "Patchauswahl laden", "loadPatchesSelection": "Patchauswahl laden",
"noSavedPatches": "Keine gespeicherten Patches für die ausgewählte App\nDrücken Sie Fertig, um die aktuelle Auswahl zu speichern", "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", "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." "selectAllPatchesWarningContent": "Du bist dabei alle Patches auszuwählen, dies beinhaltet nicht empfohlene Patches und kann zu unerwünschtem Verhalten führen."
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "Die Auswahl dieses Patches kann zu Fehlern beim Patchen führen.\n\nApp-Version: {packageVersion}\nUnterstützte Versionen:\n{supportedVersions}", "unsupportedDialogText": "Die Auswahl dieses Patches kann zu Fehlern beim Patchen führen.\n\nApp-Version: {packageVersion}\nUnterstützte Versionen:\n{supportedVersions}",
"unsupportedPatchVersion": "Patch wird für diese App-Version nicht unterstützt. Aktiviere das experimentelle Feature in den Einstellungen, um fortzufahren." "unsupportedPatchVersion": "Der Patch unterstützt diese Version der App nicht. Aktiviere in den Einstellungen die experimentellen Funktionen, um fortzufahren."
}, },
"installerView": { "installerView": {
"widgetTitle": "Installer", "widgetTitle": "Installer",
@ -121,6 +121,7 @@
"englishOption": "Englisch", "englishOption": "Englisch",
"sourcesLabel": "Quellen", "sourcesLabel": "Quellen",
"sourcesLabelHint": "Konfiguriere deine eigenen Quellen", "sourcesLabelHint": "Konfiguriere deine eigenen Quellen",
"hostRepositoryLabel": "Repository-API",
"orgPatchesLabel": "Patches Organisation", "orgPatchesLabel": "Patches Organisation",
"sourcesPatchesLabel": "Quelle für Patche", "sourcesPatchesLabel": "Quelle für Patche",
"orgIntegrationsLabel": "Integrationen Organisation", "orgIntegrationsLabel": "Integrationen Organisation",
@ -135,6 +136,8 @@
"apiURLLabel": "API-URL", "apiURLLabel": "API-URL",
"apiURLHint": "Konfiguriere deine eigene API-URL", "apiURLHint": "Konfiguriere deine eigene API-URL",
"selectApiURL": "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", "experimentalPatchesLabel": "Experimentelle Patches aktiviert",
"experimentalPatchesHint": "Erlaubt die Benutzung von nicht unterstützten Patches mit jeder App Version", "experimentalPatchesHint": "Erlaubt die Benutzung von nicht unterstützten Patches mit jeder App Version",
"enabledExperimentalPatches": "Experimentelle Patches Unterstützung aktiviert", "enabledExperimentalPatches": "Experimentelle Patches Unterstützung aktiviert",

View File

@ -1,6 +1,7 @@
{ {
"okButton": "Εντάξει", "okButton": "Εντάξει",
"cancelButton": "Ακύρωση", "cancelButton": "Ακύρωση",
"updateButton": "Ενημέρωση",
"enabledLabel": "Ενεργό", "enabledLabel": "Ενεργό",
"disabledLabel": "Ανενεργό", "disabledLabel": "Ανενεργό",
"yesButton": "Ναι", "yesButton": "Ναι",
@ -21,7 +22,7 @@
"noInstallations": "Δεν έχουν εγκατασταθεί τροποποιημένες εφαρμογές", "noInstallations": "Δεν έχουν εγκατασταθεί τροποποιημένες εφαρμογές",
"installed": "Εγκατεστημένες", "installed": "Εγκατεστημένες",
"updateDialogTitle": "Ενημέρωση του Manager", "updateDialogTitle": "Ενημέρωση του Manager",
"updateDialogText": "Είστε βέβαιοι ότι θέλετε να κατεβάσετε και να ενημερώσετε το ReVanced Manager;", "updateChangelogTitle": "Τι νέο υπάρχει",
"notificationTitle": "Η λήψη της ενημέρωσης ολοκληρώθηκε", "notificationTitle": "Η λήψη της ενημέρωσης ολοκληρώθηκε",
"notificationText": "Πατήστε για την εγκατάσταση της ενημέρωσης", "notificationText": "Πατήστε για την εγκατάσταση της ενημέρωσης",
"downloadingMessage": "Λήψη ενημέρωσης...", "downloadingMessage": "Λήψη ενημέρωσης...",
@ -54,8 +55,7 @@
"widgetSubtitle": "Δεν έχει επιλεχθεί εφαρμογή", "widgetSubtitle": "Δεν έχει επιλεχθεί εφαρμογή",
"noAppsLabel": "Δεν βρέθηκαν εφαρμογές", "noAppsLabel": "Δεν βρέθηκαν εφαρμογές",
"currentVersion": "Τρέχουσα", "currentVersion": "Τρέχουσα",
"recommendedVersion": "Προτεινόμενη", "recommendedVersion": "Προτεινόμενη"
"anyVersion": "οποιαδήποτε"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Επιλέξτε τροποποιήσεις", "widgetTitle": "Επιλέξτε τροποποιήσεις",
@ -81,7 +81,7 @@
"all": "Όλα", "all": "Όλα",
"none": "Κανένα", "none": "Κανένα",
"loadPatchesSelection": "Φόρτωση επιλεγμένων τροποποιήσεων", "loadPatchesSelection": "Φόρτωση επιλεγμένων τροποποιήσεων",
"noSavedPatches": "Δεν υπάρχουν αποθηκευμένες τροποποιήσεις για την εφαρμογή που επιλέξατε.\nΠατήστε «Τέλος» για να αποθηκεύσετε τις τωρινές επιλογές σας", "noSavedPatches": "Δεν υπάρχουν αποθηκευμένες τροποποιήσεις για την εφαρμογή που επιλέξατε.\nΠατήστε «Τέλος» για να αποθηκεύσετε τις τωρινές επιλογές σας.",
"noPatchesFound": "Δε βρέθηκαν τροποποιήσεις για την επιλεγμένη εφαρμογή", "noPatchesFound": "Δε βρέθηκαν τροποποιήσεις για την επιλεγμένη εφαρμογή",
"selectAllPatchesWarningContent": "Πρόκειται να επιλέξτε όλες τις μη συνιστώμενες τροποποιήσεις, μπορεί να προκληθεί ανεπιθύμητη συμπεριφορά." "selectAllPatchesWarningContent": "Πρόκειται να επιλέξτε όλες τις μη συνιστώμενες τροποποιήσεις, μπορεί να προκληθεί ανεπιθύμητη συμπεριφορά."
}, },
@ -121,6 +121,7 @@
"englishOption": "Αγγλικά", "englishOption": "Αγγλικά",
"sourcesLabel": "Πηγές", "sourcesLabel": "Πηγές",
"sourcesLabelHint": "Διαμορφώστε τις δικές σας προσαρμοσμένες πηγές", "sourcesLabelHint": "Διαμορφώστε τις δικές σας προσαρμοσμένες πηγές",
"hostRepositoryLabel": "Αποθετήριο API",
"orgPatchesLabel": "Οργάνωση τροποποιήσεων", "orgPatchesLabel": "Οργάνωση τροποποιήσεων",
"sourcesPatchesLabel": "Πηγή τροποποιήσεων", "sourcesPatchesLabel": "Πηγή τροποποιήσεων",
"orgIntegrationsLabel": "Οργάνωση ενσωματώσεων", "orgIntegrationsLabel": "Οργάνωση ενσωματώσεων",
@ -135,6 +136,8 @@
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"apiURLHint": "Διαμορφώστε το δικό σας προσαρμοσμένο API URL", "apiURLHint": "Διαμορφώστε το δικό σας προσαρμοσμένο API URL",
"selectApiURL": "Διεύθυνση URL API", "selectApiURL": "Διεύθυνση URL API",
"experimentalUniversalPatchesLabel": "Υποστήριξη γενικευμένων πειραματικών τροποποιήσεων",
"experimentalUniversalPatchesHint": "Εμφάνιση όλων των εφαρμογών (για χρήση τροποποιήσεων που λειτουργούν σε κάθε εφαρμογή), η φόρτωση της λίστας εφαρμογών μπορεί να καθυστερεί περισσότερο",
"experimentalPatchesLabel": "Πειραματική υποστήριξη τροποποιήσεων", "experimentalPatchesLabel": "Πειραματική υποστήριξη τροποποιήσεων",
"experimentalPatchesHint": "Ενεργοποιήστε το για χρήση μη υποστηριζόμενων τροποποιήσεων, ανεξαρτήτως έκδοσης εφαρμογής", "experimentalPatchesHint": "Ενεργοποιήστε το για χρήση μη υποστηριζόμενων τροποποιήσεων, ανεξαρτήτως έκδοσης εφαρμογής",
"enabledExperimentalPatches": "Πειραματική υποστήριξη τροποποιήσεων ενεργή", "enabledExperimentalPatches": "Πειραματική υποστήριξη τροποποιήσεων ενεργή",

View File

@ -4,6 +4,8 @@
"updateButton": "Update", "updateButton": "Update",
"enabledLabel": "Enabled", "enabledLabel": "Enabled",
"disabledLabel": "Disabled", "disabledLabel": "Disabled",
"installed":"Installed: {version}",
"suggested":"Suggested: {version}",
"yesButton": "Yes", "yesButton": "Yes",
"noButton": "No", "noButton": "No",
"warning": "Warning", "warning": "Warning",
@ -13,22 +15,35 @@
"settingsTab": "Settings" "settingsTab": "Settings"
}, },
"homeView": { "homeView": {
"refreshSuccess": "Refreshed successfully",
"widgetTitle": "Dashboard", "widgetTitle": "Dashboard",
"updatesSubtitle": "Updates", "updatesSubtitle": "Updates",
"patchedSubtitle": "Patched applications", "patchedSubtitle": "Patched applications",
"updatesAvailable": "Updates available", "updatesAvailable": "Updates available",
"noUpdates": "No updates available", "noUpdates": "No updates available",
"WIP": "Work in progress...", "WIP": "Work in progress...",
"noInstallations": "No patched applications installed", "noInstallations": "No patched applications installed",
"installed": "Installed", "installed": "Installed",
"installUpdate": "Continue to install the update?",
"updateDialogTitle": "Update Manager", "updateDialogTitle": "Update Manager",
"updateChangelogTitle": "Changelog", "updateChangelogTitle": "Changelog",
"notificationTitle": "Update downloaded", "notificationTitle": "Update downloaded",
"notificationText": "Tap to install the update", "notificationText": "Tap to install the update",
"downloadingMessage": "Downloading update...", "downloadingMessage": "Downloading update...",
"downloadedMessage": "Update downloaded!",
"installingMessage": "Installing update...", "installingMessage": "Installing update...",
"errorDownloadMessage": "Unable to download update", "errorDownloadMessage": "Unable to download update",
"errorInstallMessage": "Unable to install update", "errorInstallMessage": "Unable to install update",
"noConnection": "No internet connection", "noConnection": "No internet connection",
"updatesDisabled": "Updating a patched app is currently disabled. Repatch the app again." "updatesDisabled": "Updating a patched app is currently disabled. Repatch the app again."
}, },
@ -47,20 +62,27 @@
"patcherView": { "patcherView": {
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "Patch", "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?"
"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?",
"splitApkWarningDialogText": "Patching a split APK is not yet supported and might fail. Proceed anyways?"
}, },
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "Select an application", "widgetTitle": "Select an application",
"widgetTitleSelected": "Selected application", "widgetTitleSelected": "Selected application",
"widgetSubtitle": "No application selected", "widgetSubtitle": "No application selected",
"noAppsLabel": "No applications found", "noAppsLabel": "No applications found",
"notInstalled":"App not installed",
"currentVersion": "Current", "currentVersion": "Current",
"recommendedVersion": "Recommended", "suggestedVersion": "Suggested",
"anyVersion": "any" "allVersions": "All versions"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Select patches", "widgetTitle": "Select patches",
"widgetTitleSelected": "Selected patches", "widgetTitleSelected": "Selected patches",
"widgetSubtitle": "Select an application first", "widgetSubtitle": "Select an application first",
"widgetEmptySubtitle": "No patches selected" "widgetEmptySubtitle": "No patches selected"
}, },
@ -71,20 +93,34 @@
"appSelectorView": { "appSelectorView": {
"viewTitle": "Select an application", "viewTitle": "Select an application",
"searchBarHint": "Search applications", "searchBarHint": "Search applications",
"storageButton": "Storage", "storageButton": "Storage",
"errorMessage": "Unable to use selected application" "selectFromStorageButton": "Select from storage",
"errorMessage": "Unable to use selected application",
"downloadToast": "Download function is not available yet",
"featureNotAvailable": "Feature not implemented",
"featureNotAvailableText": "This application is a split APK and cannot be selected. Unfortunately, this feature is only available for rooted users at the moment. However, you can still install the application by selecting its APK files from your device's storage instead"
}, },
"patchesSelectorView": { "patchesSelectorView": {
"viewTitle": "Select patches", "viewTitle": "Select patches",
"searchBarHint": "Search patches", "searchBarHint": "Search patches",
"doneButton": "Done", "doneButton": "Done",
"recommended": "Recommended",
"all": "All", "default": "Default",
"defaultTooltip": "Select all default patches",
"none": "None", "none": "None",
"noneTooltip": "Deselect all patches",
"loadPatchesSelection": "Load patches selection", "loadPatchesSelection": "Load patches selection",
"noSavedPatches": "No saved patches for the selected app.\nPress Done to save current selection.", "noSavedPatches": "No saved patches for the selected app.\nPress Done to save current selection.",
"noPatchesFound": "No patches found for the selected app", "noPatchesFound": "No patches found for the selected app",
"selectAllPatchesWarningContent": "You are about to select all patches, that includes unrecommended patches and can cause unwanted behavior."
"selectAllPatchesWarningContent": "You are about to select all patches, that includes non-suggested patches and can cause unwanted behavior."
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "Selecting this patch may result in patching errors.\n\nApp version: {packageVersion}\nSupported versions:\n{supportedVersions}", "unsupportedDialogText": "Selecting this patch may result in patching errors.\n\nApp version: {packageVersion}\nSupported versions:\n{supportedVersions}",
@ -96,11 +132,14 @@
"installRootButton": "Install as Root", "installRootButton": "Install as Root",
"openButton": "Open", "openButton": "Open",
"shareButton": "Share file", "shareButton": "Share file",
"notificationTitle": "ReVanced Manager is patching", "notificationTitle": "ReVanced Manager is patching",
"notificationText": "Tap to return to the installer", "notificationText": "Tap to return to the installer",
"shareApkMenuOption": "Share APK", "shareApkMenuOption": "Share APK",
"exportApkMenuOption": "Export APK", "exportApkMenuOption": "Export APK",
"shareLogMenuOption": "Share log", "shareLogMenuOption": "Share log",
"installErrorDialogTitle": "Error", "installErrorDialogTitle": "Error",
"installErrorDialogText1": "Root install is not possible with the current patches selection.\nRepatch your app or choose non-root install.", "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.", "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.",
@ -109,62 +148,95 @@
}, },
"settingsView": { "settingsView": {
"widgetTitle": "Settings", "widgetTitle": "Settings",
"appearanceSectionTitle": "Appearance", "appearanceSectionTitle": "Appearance",
"teamSectionTitle": "Team", "teamSectionTitle": "Team",
"infoSectionTitle": "Info", "infoSectionTitle": "Info",
"advancedSectionTitle": "Advanced", "advancedSectionTitle": "Advanced",
"exportSectionTitle": "Import & export",
"logsSectionTitle": "Logs", "logsSectionTitle": "Logs",
"darkThemeLabel": "Dark mode", "darkThemeLabel": "Dark mode",
"darkThemeHint": "Welcome to the dark side", "darkThemeHint": "Welcome to the dark side",
"dynamicThemeLabel": "Material You", "dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Enjoy an experience closer to your device", "dynamicThemeHint": "Enjoy an experience closer to your device",
"languageLabel": "Language", "languageLabel": "Language",
"englishOption": "English", "englishOption": "English",
"sourcesLabel": "Sources", "sourcesLabel": "Sources",
"sourcesLabelHint": "Configure your custom sources", "sourcesLabelHint": "Configure your custom sources",
"orgPatchesLabel": "Patches organization",
"sourcesPatchesLabel": "Patches source",
"orgIntegrationsLabel": "Integrations organization",
"sourcesIntegrationsLabel": "Integrations source", "sourcesIntegrationsLabel": "Integrations source",
"sourcesResetDialogTitle": "Reset", "sourcesResetDialogTitle": "Reset",
"sourcesResetDialogText": "Are you sure you want to reset custom sources to their default values?", "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?", "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", "apiURLLabel": "API URL",
"apiURLHint": "Configure your custom API URL", "apiURLHint": "Configure your custom API URL",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"hostRepositoryLabel": "Repository API",
"orgPatchesLabel": "Patches organization",
"sourcesPatchesLabel": "Patches source",
"orgIntegrationsLabel": "Integrations organization",
"contributorsLabel": "Contributors",
"contributorsHint": "A list of contributors of ReVanced",
"logsLabel": "Logs",
"logsHint": "Share Manager's logs",
"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", "experimentalPatchesLabel": "Experimental patches support",
"experimentalPatchesHint": "Enable usage of unsupported patches in any app version", "experimentalPatchesHint": "Enable usage of unsupported patches in any app version",
"enabledExperimentalPatches": "Experimental patches support enabled", "enabledExperimentalPatches": "Experimental patches support enabled",
"exportSectionTitle": "Import & export",
"aboutLabel": "About", "aboutLabel": "About",
"snackbarMessage": "Copied to clipboard", "snackbarMessage": "Copied to clipboard",
"sentryLabel": "Sentry logging",
"sentryHint": "Send anonymous logs to help us improve ReVanced Manager",
"restartAppForChanges": "Restart the app to apply changes", "restartAppForChanges": "Restart the app to apply changes",
"deleteKeystoreLabel": "Delete keystore",
"deleteKeystoreHint": "Delete the keystore used to sign the app",
"deletedKeystore": "Keystore deleted",
"deleteTempDirLabel": "Delete temporary files", "deleteTempDirLabel": "Delete temporary files",
"deleteTempDirHint": "Delete unused temporary files", "deleteTempDirHint": "Delete unused temporary files",
"deletedTempDir": "Temporary files deleted", "deletedTempDir": "Temporary files deleted",
"exportPatchesLabel": "Export patches selection", "exportPatchesLabel": "Export patches selection",
"exportPatchesHint": "Export patches selection to a JSON file", "exportPatchesHint": "Export patches selection to a JSON file",
"exportedPatches": "Patches selection exported", "exportedPatches": "Patches selection exported",
"noExportFileFound": "No patches selection to export", "noExportFileFound": "No patches selection to export",
"importPatchesLabel": "Import patches selection", "importPatchesLabel": "Import patches selection",
"importPatchesHint": "Import patches selection from a JSON file", "importPatchesHint": "Import patches selection from a JSON file",
"importedPatches": "Patches selection imported", "importedPatches": "Patches selection imported",
"resetStoredPatchesLabel": "Reset patches", "resetStoredPatchesLabel": "Reset patches",
"resetStoredPatchesHint": "Reset the stored patches selection", "resetStoredPatchesHint": "Reset the stored patches selection",
"resetStoredPatchesDialogText": "Are you sure you want to reset the stored patches selection?",
"resetStoredPatches": "Patches selection has been reset", "resetStoredPatches": "Patches selection has been reset",
"jsonSelectorErrorMessage": "Unable to use selected JSON file",
"deleteLogsLabel": "Delete logs", "deleteLogsLabel": "Delete logs",
"deleteLogsHint": "Delete collected manager logs", "deleteLogsHint": "Delete collected manager logs",
"deletedLogs": "Logs deleted" "deletedLogs": "Logs deleted",
"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",
"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",
"selectKeystorePassword": "Keystore Password",
"selectKeystorePasswordHint": "Select keystore password used to sign the apk",
"jsonSelectorErrorMessage": "Unable to use selected JSON file",
"keystoreSelectorErrorMessage": "Unable to use selected KEYSTORE file"
}, },
"appInfoView": { "appInfoView": {
"widgetTitle": "App info", "widgetTitle": "App info",
@ -172,18 +244,22 @@
"uninstallButton": "Uninstall", "uninstallButton": "Uninstall",
"patchButton": "Patch", "patchButton": "Patch",
"unpatchButton": "Unpatch", "unpatchButton": "Unpatch",
"unpatchDialogText": "Are you sure you want to unpatch this app?",
"rootDialogTitle": "Error", "rootDialogTitle": "Error",
"unpatchDialogText": "Are you sure you want to unpatch this app?",
"rootDialogText": "App was installed with superuser permissions, but currently ReVanced Manager has no permissions.\nPlease grant superuser permissions first.", "rootDialogText": "App was installed with superuser permissions, but currently ReVanced Manager has no permissions.\nPlease grant superuser permissions first.",
"packageNameLabel": "Package name", "packageNameLabel": "Package name",
"originalPackageNameLabel": "Original package name", "originalPackageNameLabel": "Original package name",
"installTypeLabel": "Installation type", "installTypeLabel": "Installation type",
"rootTypeLabel": "Root", "rootTypeLabel": "Root",
"nonRootTypeLabel": "Non-root", "nonRootTypeLabel": "Non-root",
"patchedDateLabel": "Patched date", "patchedDateLabel": "Patched date",
"patchedDateHint": "{date} at {time}",
"appliedPatchesLabel": "Applied patches", "appliedPatchesLabel": "Applied patches",
"patchedDateHint": "{date} at {time}",
"appliedPatchesHint": "{quantity} applied patches", "appliedPatchesHint": "{quantity} applied patches",
"updateNotImplemented": "This feature has not been implemented yet" "updateNotImplemented": "This feature has not been implemented yet"
}, },
"contributorsView": { "contributorsView": {

View File

@ -1,6 +1,7 @@
{ {
"okButton": "OK", "okButton": "OK",
"cancelButton": "Cancelar", "cancelButton": "Cancelar",
"updateButton": "Actualizar",
"enabledLabel": "Activado", "enabledLabel": "Activado",
"disabledLabel": "Desactivado", "disabledLabel": "Desactivado",
"yesButton": "Sí", "yesButton": "Sí",
@ -21,7 +22,7 @@
"noInstallations": "No hay aplicaciones parcheadas instaladas", "noInstallations": "No hay aplicaciones parcheadas instaladas",
"installed": "Instalado", "installed": "Instalado",
"updateDialogTitle": "Actualizar Manager", "updateDialogTitle": "Actualizar Manager",
"updateDialogText": "¿Está seguro de que desea descargar y actualizar ReVanced Manager?", "updateChangelogTitle": "Registro de cambios",
"notificationTitle": "Actualización descargada", "notificationTitle": "Actualización descargada",
"notificationText": "Toca para instalar la actualización", "notificationText": "Toca para instalar la actualización",
"downloadingMessage": "Descargando actualización...", "downloadingMessage": "Descargando actualización...",
@ -54,8 +55,7 @@
"widgetSubtitle": "Ninguna aplicación seleccionada", "widgetSubtitle": "Ninguna aplicación seleccionada",
"noAppsLabel": "No se encontraron aplicaciones", "noAppsLabel": "No se encontraron aplicaciones",
"currentVersion": "Versión actual", "currentVersion": "Versión actual",
"recommendedVersion": "Versión recomendada", "recommendedVersion": "Versión recomendada"
"anyVersion": "cualquiera"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Seleccionar parches", "widgetTitle": "Seleccionar parches",
@ -81,7 +81,7 @@
"all": "Todos", "all": "Todos",
"none": "Ninguno", "none": "Ninguno",
"loadPatchesSelection": "Cargar selección de parches", "loadPatchesSelection": "Cargar selección de parches",
"noSavedPatches": "No hay parches guardados para la app seleccionada\nPresione Hecho para guardar la selección actual", "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", "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." "selectAllPatchesWarningContent": "Está a punto de seleccionar todos los parches incluyendo parches no recomendados, lo cual puede causar comportamientos inesperados."
}, },
@ -121,6 +121,7 @@
"englishOption": "Inglés", "englishOption": "Inglés",
"sourcesLabel": "Fuentes", "sourcesLabel": "Fuentes",
"sourcesLabelHint": "Configure sus fuentes personalizadas", "sourcesLabelHint": "Configure sus fuentes personalizadas",
"hostRepositoryLabel": "Repositorio API",
"orgPatchesLabel": "Organización de los parches", "orgPatchesLabel": "Organización de los parches",
"sourcesPatchesLabel": "Fuente de los parches", "sourcesPatchesLabel": "Fuente de los parches",
"orgIntegrationsLabel": "Organización de integraciones", "orgIntegrationsLabel": "Organización de integraciones",
@ -135,6 +136,8 @@
"apiURLLabel": "URL de la API", "apiURLLabel": "URL de la API",
"apiURLHint": "Configure su URL personalizada para la API", "apiURLHint": "Configure su URL personalizada para la API",
"selectApiURL": "URL de 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", "experimentalPatchesLabel": "Soporte para parches experimentales",
"experimentalPatchesHint": "Habilite el uso de parches no compatibles en cualquier versión de la app", "experimentalPatchesHint": "Habilite el uso de parches no compatibles en cualquier versión de la app",
"enabledExperimentalPatches": "Soporte para parches experimentales activado", "enabledExperimentalPatches": "Soporte para parches experimentales activado",
@ -148,7 +151,7 @@
"deleteKeystoreHint": "Eliminar el keystore usado para firmar la app", "deleteKeystoreHint": "Eliminar el keystore usado para firmar la app",
"deletedKeystore": "Keystore eliminado", "deletedKeystore": "Keystore eliminado",
"deleteTempDirLabel": "Borrar archivos temporales", "deleteTempDirLabel": "Borrar archivos temporales",
"deleteTempDirHint": "Elimina los archivos temporales no utilizados", "deleteTempDirHint": "Eliminar archivos temporales no utilizados",
"deletedTempDir": "Archivos temporales eliminados", "deletedTempDir": "Archivos temporales eliminados",
"exportPatchesLabel": "Exportar la selección de parches", "exportPatchesLabel": "Exportar la selección de parches",
"exportPatchesHint": "Exportar selección de parches a un archivo JSON", "exportPatchesHint": "Exportar selección de parches a un archivo JSON",

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "Ninguna aplicación seleccionada", "widgetSubtitle": "Ninguna aplicación seleccionada",
"noAppsLabel": "No se encontraron aplicaciones", "noAppsLabel": "No se encontraron aplicaciones",
"currentVersion": "Versión actual", "currentVersion": "Versión actual",
"recommendedVersion": "Versión recomendada", "recommendedVersion": "Versión recomendada"
"anyVersion": "Cualquier versión"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Seleccionar parches", "widgetTitle": "Seleccionar parches",

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "Sovellusta ei ole valittu", "widgetSubtitle": "Sovellusta ei ole valittu",
"noAppsLabel": "Sovelluksia ei löytynyt", "noAppsLabel": "Sovelluksia ei löytynyt",
"currentVersion": "Nykyinen", "currentVersion": "Nykyinen",
"recommendedVersion": "Suositeltu", "recommendedVersion": "Suositeltu"
"anyVersion": "mikä tahansa"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Valitse paikkaukset", "widgetTitle": "Valitse paikkaukset",

View File

@ -1,6 +1,7 @@
{ {
"okButton": "OK", "okButton": "OK",
"cancelButton": "Annuler", "cancelButton": "Annuler",
"updateButton": "Mise à jour",
"enabledLabel": "Activé", "enabledLabel": "Activé",
"disabledLabel": "Désactivé", "disabledLabel": "Désactivé",
"yesButton": "Oui", "yesButton": "Oui",
@ -21,9 +22,9 @@
"noInstallations": "Aucune application patchée n'est installée", "noInstallations": "Aucune application patchée n'est installée",
"installed": "Installée", "installed": "Installée",
"updateDialogTitle": "Mettre à jour le Manager", "updateDialogTitle": "Mettre à jour le Manager",
"updateDialogText": "Êtes-vous sûr de vouloir télécharger et mettre à jour ReVanced Manager?", "updateChangelogTitle": "Liste des changements",
"notificationTitle": "Mise à jour téléchargée", "notificationTitle": "Mise à jour téléchargée",
"notificationText": "Appuyer pour installer la mise à jour", "notificationText": "Appuyez sur pour installer la mise à jour",
"downloadingMessage": "Téléchargement de la mise à jour...", "downloadingMessage": "Téléchargement de la mise à jour...",
"installingMessage": "Installation de la mise à jour...", "installingMessage": "Installation de la mise à jour...",
"errorDownloadMessage": "Impossible de télécharger la mise à jour", "errorDownloadMessage": "Impossible de télécharger la mise à jour",
@ -51,11 +52,10 @@
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "Sélectionner une application", "widgetTitle": "Sélectionner une application",
"widgetTitleSelected": "Application sélectionnée", "widgetTitleSelected": "Application sélectionnée",
"widgetSubtitle": "Aucune application n'a été sélectionnée", "widgetSubtitle": "Aucune application sélectionnée",
"noAppsLabel": "Aucune application trouvée", "noAppsLabel": "Aucune application trouvée",
"currentVersion": "Version actuelle", "currentVersion": "Version actuelle",
"recommendedVersion": "Version recommandée", "recommendedVersion": "Version recommandée"
"anyVersion": "n'importe laquelle"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Sélectionner les patchs", "widgetTitle": "Sélectionner les patchs",
@ -80,14 +80,14 @@
"recommended": "Recommandé", "recommended": "Recommandé",
"all": "Tout", "all": "Tout",
"none": "Aucun", "none": "Aucun",
"loadPatchesSelection": "Charger les patches sélectionnés", "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", "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", "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." "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": { "patchItem": {
"unsupportedDialogText": "Sélectionner ce patch pourrait entrainer des erreurs dans la modification.\n\nVersion de l'application: {packageVersion}\nVersions supportées:\n{supportedVersions}", "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 patch n'est pas supporté pour cette version de l'application. Activez le commutateur expérimental dans les réglages pour continuer." "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": { "installerView": {
"widgetTitle": "Installateur", "widgetTitle": "Installateur",
@ -99,7 +99,7 @@
"notificationText": "Appuyer pour revenir à linstallateur", "notificationText": "Appuyer pour revenir à linstallateur",
"shareApkMenuOption": "Partager le fichier APK", "shareApkMenuOption": "Partager le fichier APK",
"exportApkMenuOption": "Exporter l'APK", "exportApkMenuOption": "Exporter l'APK",
"shareLogMenuOption": "Partager le log", "shareLogMenuOption": "Partager le journal",
"installErrorDialogTitle": "Erreur", "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.", "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.", "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.",
@ -121,6 +121,7 @@
"englishOption": "Anglais", "englishOption": "Anglais",
"sourcesLabel": "Sources", "sourcesLabel": "Sources",
"sourcesLabelHint": "Configurer vos sources personnalisées", "sourcesLabelHint": "Configurer vos sources personnalisées",
"hostRepositoryLabel": "Dépôt de l'API",
"orgPatchesLabel": "Organisation des patchs", "orgPatchesLabel": "Organisation des patchs",
"sourcesPatchesLabel": "Source des patches", "sourcesPatchesLabel": "Source des patches",
"orgIntegrationsLabel": "Organisme d'intégration", "orgIntegrationsLabel": "Organisme d'intégration",
@ -135,6 +136,8 @@
"apiURLLabel": "URL de l'API", "apiURLLabel": "URL de l'API",
"apiURLHint": "Configurez l'URL de votre API personnalisée", "apiURLHint": "Configurez l'URL de votre API personnalisée",
"selectApiURL": "URL de l'API", "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", "experimentalPatchesLabel": "Support des patchs expérimentaux",
"experimentalPatchesHint": "Activer l'utilisation des patchs non supportés dans n'importe quelle version de l'application", "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é", "enabledExperimentalPatches": "Support pour les patchs expérimentaux activé",

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "कोई ऐप्लकैशन चुना हुआ नहीं", "widgetSubtitle": "कोई ऐप्लकैशन चुना हुआ नहीं",
"noAppsLabel": "कोई एप्लिकेशन नहीं मिला।", "noAppsLabel": "कोई एप्लिकेशन नहीं मिला।",
"currentVersion": "वर्तमान", "currentVersion": "वर्तमान",
"recommendedVersion": "अनुशंसित", "recommendedVersion": "अनुशंसित"
"anyVersion": "कोई"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "पैच चुने", "widgetTitle": "पैच चुने",

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "Nincs kiválasztott alkalmazás", "widgetSubtitle": "Nincs kiválasztott alkalmazás",
"noAppsLabel": "Nem találhatóak alkalmazások", "noAppsLabel": "Nem találhatóak alkalmazások",
"currentVersion": "Jelenlegi", "currentVersion": "Jelenlegi",
"recommendedVersion": "Ajánlott", "recommendedVersion": "Ajánlott"
"anyVersion": "bármely"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Patchek kiválasztása", "widgetTitle": "Patchek kiválasztása",

View File

@ -1,6 +1,7 @@
{ {
"okButton": "Oke", "okButton": "Oke",
"cancelButton": "Batal", "cancelButton": "Batal",
"updateButton": "Perbarui",
"enabledLabel": "Aktif", "enabledLabel": "Aktif",
"disabledLabel": "Nonaktif", "disabledLabel": "Nonaktif",
"yesButton": "Ya", "yesButton": "Ya",
@ -21,7 +22,7 @@
"noInstallations": "Tidak ada aplikasi termodifikasi yang terpasang", "noInstallations": "Tidak ada aplikasi termodifikasi yang terpasang",
"installed": "Terpasang", "installed": "Terpasang",
"updateDialogTitle": "Perbarui Manager", "updateDialogTitle": "Perbarui Manager",
"updateDialogText": "Apakah Anda yakin ingin mengunduh dan memperbarui ReVanced Manager?", "updateChangelogTitle": "Catatan perubahan",
"notificationTitle": "Pembaruan sudah diunduh", "notificationTitle": "Pembaruan sudah diunduh",
"notificationText": "Ketuk untuk memasang pembaharuan", "notificationText": "Ketuk untuk memasang pembaharuan",
"downloadingMessage": "Mengunduh pembaruan...", "downloadingMessage": "Mengunduh pembaruan...",
@ -54,8 +55,7 @@
"widgetSubtitle": "Tidak ada aplikasi yang dipilih", "widgetSubtitle": "Tidak ada aplikasi yang dipilih",
"noAppsLabel": "Aplikasi tidak ditemukan", "noAppsLabel": "Aplikasi tidak ditemukan",
"currentVersion": "Saat ini", "currentVersion": "Saat ini",
"recommendedVersion": "Rekomendasi", "recommendedVersion": "Rekomendasi"
"anyVersion": "semua"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Pilih Modifikasi", "widgetTitle": "Pilih Modifikasi",
@ -81,13 +81,13 @@
"all": "Semua", "all": "Semua",
"none": "Tidak ada", "none": "Tidak ada",
"loadPatchesSelection": "Tidak ada modifikasi yang terpilih", "loadPatchesSelection": "Tidak ada modifikasi yang terpilih",
"noSavedPatches": "Tidak ada modifikasi tersimpan untuk aplikasi terpilih", "noSavedPatches": "Tidak ada tambalan tersimpan untuk aplikasi terpilih.\nTekan \"Sudah\" untuk menyimpan seleksi saat ini.",
"noPatchesFound": "Modifikasi tidak ditemukan untuk aplikasi terpilih", "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." "selectAllPatchesWarningContent": "Anda akan memilih semua modifikasi, termasuk modifikasi yang tidak direkomendasikan dan dapat mengakibatkan hal yang tidak diinginkan."
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "Menggunakan modifikasi ini dapat menyebabkan error pada saat memodifikasi aplikasi\n\nVersi aplikasi: {packageVersion}\nVersi yang mendukung:\n{supportedVersions}", "unsupportedDialogText": "Menggunakan modifikasi ini dapat menyebabkan error pada saat memodifikasi aplikasi\n\nVersi aplikasi: {packageVersion}\nVersi yang mendukung:\n{supportedVersions}",
"unsupportedPatchVersion": "Modifikasi tidak didukung untuk versi aplikasi ini. Aktifkan eksperimental dalam pengaturan untuk melanjutkan." "unsupportedPatchVersion": "Patch tidak didukung untuk versi aplikasi ini. Aktifkan tombol eksperimental di pengaturan untuk melanjutkan."
}, },
"installerView": { "installerView": {
"widgetTitle": "Pemasang", "widgetTitle": "Pemasang",
@ -121,6 +121,7 @@
"englishOption": "Inggris", "englishOption": "Inggris",
"sourcesLabel": "Sumber", "sourcesLabel": "Sumber",
"sourcesLabelHint": "Konfigurasi sumber kustom Anda", "sourcesLabelHint": "Konfigurasi sumber kustom Anda",
"hostRepositoryLabel": "API Repositori",
"orgPatchesLabel": "Organisasi Modifikasi", "orgPatchesLabel": "Organisasi Modifikasi",
"sourcesPatchesLabel": "Sumber Modifikasi", "sourcesPatchesLabel": "Sumber Modifikasi",
"orgIntegrationsLabel": "Organisasi Intergrasi", "orgIntegrationsLabel": "Organisasi Intergrasi",
@ -135,6 +136,8 @@
"apiURLLabel": "URL API", "apiURLLabel": "URL API",
"apiURLHint": "Konfigurasi URL API kustom Anda", "apiURLHint": "Konfigurasi URL API kustom Anda",
"selectApiURL": "URL API", "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", "experimentalPatchesLabel": "Dukungan Modifikasi Eksperimental",
"experimentalPatchesHint": "Aktifkan untuk menggunakan modifikasi yang tidak didukung di versi aplikasi apa pun", "experimentalPatchesHint": "Aktifkan untuk menggunakan modifikasi yang tidak didukung di versi aplikasi apa pun",
"enabledExperimentalPatches": "Modifikasi eksperimental diaktifkan", "enabledExperimentalPatches": "Modifikasi eksperimental diaktifkan",

View File

@ -1,6 +1,7 @@
{ {
"okButton": "OK", "okButton": "OK",
"cancelButton": "Annulla", "cancelButton": "Annulla",
"updateButton": "Aggiorna",
"enabledLabel": "Attivo", "enabledLabel": "Attivo",
"disabledLabel": "Disattivato", "disabledLabel": "Disattivato",
"yesButton": "Sì", "yesButton": "Sì",
@ -21,7 +22,7 @@
"noInstallations": "Non è stata installata nessuna applicazione modificata", "noInstallations": "Non è stata installata nessuna applicazione modificata",
"installed": "Installate", "installed": "Installate",
"updateDialogTitle": "Aggiorna Manager", "updateDialogTitle": "Aggiorna Manager",
"updateDialogText": "Sei sicuro di voler scaricare e aggiornare ReVanced Manager?", "updateChangelogTitle": "Changelog",
"notificationTitle": "Aggiornamento scaricato", "notificationTitle": "Aggiornamento scaricato",
"notificationText": "Tocca per installare l'aggiornamento", "notificationText": "Tocca per installare l'aggiornamento",
"downloadingMessage": "Sto scaricando l'aggiornamento...", "downloadingMessage": "Sto scaricando l'aggiornamento...",
@ -54,8 +55,7 @@
"widgetSubtitle": "Nessuna applicazione selezionata", "widgetSubtitle": "Nessuna applicazione selezionata",
"noAppsLabel": "Nessuna applicazione trovata", "noAppsLabel": "Nessuna applicazione trovata",
"currentVersion": "Attuale", "currentVersion": "Attuale",
"recommendedVersion": "Consigliata", "recommendedVersion": "Consigliata"
"anyVersion": "qualsiasi"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Seleziona patch", "widgetTitle": "Seleziona patch",
@ -81,7 +81,7 @@
"all": "Tutte", "all": "Tutte",
"none": "Nessuna", "none": "Nessuna",
"loadPatchesSelection": "Carica selezione patch", "loadPatchesSelection": "Carica selezione patch",
"noSavedPatches": "Nessuna patch salvata per l'app selezionata\nPremi Fatto per salvare la selezione corrente", "noSavedPatches": "Nessuna patch salvata per l'app selezionata.\nPremi Fatto per salvare la selezione corrente.",
"noPatchesFound": "Nessuna patch trovata per l'applicazione selezionata", "noPatchesFound": "Nessuna patch trovata per l'applicazione selezionata",
"selectAllPatchesWarningContent": "Stai per selezionare tutte le patch, incluse patch non consigliate che potrebbero causare comportamenti indesiderati." "selectAllPatchesWarningContent": "Stai per selezionare tutte le patch, incluse patch non consigliate che potrebbero causare comportamenti indesiderati."
}, },
@ -121,6 +121,7 @@
"englishOption": "English", "englishOption": "English",
"sourcesLabel": "Sorgenti", "sourcesLabel": "Sorgenti",
"sourcesLabelHint": "Configura le tue sorgenti personalizzate", "sourcesLabelHint": "Configura le tue sorgenti personalizzate",
"hostRepositoryLabel": "Repository API",
"orgPatchesLabel": "Organizzazione Patch", "orgPatchesLabel": "Organizzazione Patch",
"sourcesPatchesLabel": "Sorgente Patch", "sourcesPatchesLabel": "Sorgente Patch",
"orgIntegrationsLabel": "Organizzazione Integrazioni", "orgIntegrationsLabel": "Organizzazione Integrazioni",
@ -135,6 +136,8 @@
"apiURLLabel": "URL API", "apiURLLabel": "URL API",
"apiURLHint": "Configura il tuo URL delle API personalizzato", "apiURLHint": "Configura il tuo URL delle API personalizzato",
"selectApiURL": "URL API", "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", "experimentalPatchesLabel": "Supporto per patch sperimentali",
"experimentalPatchesHint": "Abilita l'utilizzo di patch non supportate in qualsiasi versione dell'app", "experimentalPatchesHint": "Abilita l'utilizzo di patch non supportate in qualsiasi versione dell'app",
"enabledExperimentalPatches": "Supporto patch sperimentali abilitato", "enabledExperimentalPatches": "Supporto patch sperimentali abilitato",

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "선택된 앱 없음", "widgetSubtitle": "선택된 앱 없음",
"noAppsLabel": "앱이 발견되지 않음", "noAppsLabel": "앱이 발견되지 않음",
"currentVersion": "현재 버전", "currentVersion": "현재 버전",
"recommendedVersion": "권장 버전", "recommendedVersion": "권장 버전"
"anyVersion": "모든 버전"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "패치를 선택하세요", "widgetTitle": "패치를 선택하세요",

199
assets/i18n/lt_LT.json Normal file
View File

@ -0,0 +1,199 @@
{
"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"
},
"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"
}
}

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "Tiada aplikasi dipilih", "widgetSubtitle": "Tiada aplikasi dipilih",
"noAppsLabel": "Tiada aplikasi ditemui", "noAppsLabel": "Tiada aplikasi ditemui",
"currentVersion": "Semasa", "currentVersion": "Semasa",
"recommendedVersion": "Disyorkan", "recommendedVersion": "Disyorkan"
"anyVersion": "mana-mana"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Pilih modifikasi", "widgetTitle": "Pilih modifikasi",

View File

@ -1,6 +1,7 @@
{ {
"okButton": "OK", "okButton": "OK",
"cancelButton": "Anuluj", "cancelButton": "Anuluj",
"updateButton": "Aktualizuj",
"enabledLabel": "Włączone", "enabledLabel": "Włączone",
"disabledLabel": "Wyłączone", "disabledLabel": "Wyłączone",
"yesButton": "Tak", "yesButton": "Tak",
@ -21,7 +22,7 @@
"noInstallations": "Nie zainstalowano żadnych zmodyfikowanych aplikacji", "noInstallations": "Nie zainstalowano żadnych zmodyfikowanych aplikacji",
"installed": "Zainstalowane", "installed": "Zainstalowane",
"updateDialogTitle": "Zaktualizuj Managera", "updateDialogTitle": "Zaktualizuj Managera",
"updateDialogText": "Czy na pewno chcesz pobrać i zaktualizować ReVanced Manager?", "updateChangelogTitle": "Lista zmian",
"notificationTitle": "Pobrano aktualizacje", "notificationTitle": "Pobrano aktualizacje",
"notificationText": "Kliknij, aby zainstalować aktualizację", "notificationText": "Kliknij, aby zainstalować aktualizację",
"downloadingMessage": "Pobieranie aktualizacji...", "downloadingMessage": "Pobieranie aktualizacji...",
@ -29,7 +30,7 @@
"errorDownloadMessage": "Nie udało się pobrać aktualizacji", "errorDownloadMessage": "Nie udało się pobrać aktualizacji",
"errorInstallMessage": "Nie udało się zainstalować aktualizacji", "errorInstallMessage": "Nie udało się zainstalować aktualizacji",
"noConnection": "Brak połączenia z internetem", "noConnection": "Brak połączenia z internetem",
"updatesDisabled": "Aktualizowanie nowej wersji aplikacji jest obecnie niemożliwe. Spróbuj zaktualizować aplikację jeszcze raz." "updatesDisabled": "Aktualizowanie załatanej aplikacji jest obecnie niemożliwe. Spróbuj załatać aplikację jeszcze raz."
}, },
"applicationItem": { "applicationItem": {
"patchButton": "Łataj", "patchButton": "Łataj",
@ -54,8 +55,7 @@
"widgetSubtitle": "Nie wybrano aplikacji", "widgetSubtitle": "Nie wybrano aplikacji",
"noAppsLabel": "Nie znaleziono aplikacji", "noAppsLabel": "Nie znaleziono aplikacji",
"currentVersion": "Aktualna", "currentVersion": "Aktualna",
"recommendedVersion": "Zalecana", "recommendedVersion": "Zalecana"
"anyVersion": "dowolna"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Wybierz łatki", "widgetTitle": "Wybierz łatki",
@ -75,33 +75,33 @@
}, },
"patchesSelectorView": { "patchesSelectorView": {
"viewTitle": "Wybierz łatki", "viewTitle": "Wybierz łatki",
"searchBarHint": "Wyszukaj aktualizacje", "searchBarHint": "Wyszukaj łatki",
"doneButton": "Gotowe", "doneButton": "Gotowe",
"recommended": "Rekomendowane", "recommended": "Zalecane",
"all": "Wszystkie", "all": "Wszystkie",
"none": "Żadne", "none": "Żadne",
"loadPatchesSelection": "Wczytaj wybór aktualizacji", "loadPatchesSelection": "Załaduj wybrane łatki",
"noSavedPatches": "Brak zapisanych aktualizacji dla wybranej aplikacji\nNaciśnij Gotowe, aby zapisać bieżący wybór", "noSavedPatches": "Brak zapisanych łatek dla wybranej aplikacji.\nNaciśnij Gotowe, aby zapisać bieżący wybór.",
"noPatchesFound": "Nie znaleziono żadnych łatek dla wybranej aplikacji", "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." "selectAllPatchesWarningContent": "Zamierzasz wybrać wszystkie łatki, włącznie z tymi niezalecanymi, które mogą powodować niepożądane zachowania."
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "Wybranie tej łatki może spowodować błędy podczas modyfikowania.\n\nWersja aplikacji: {packageVersion}\nAktualnie wspierana wersja:\n{supportedVersions}", "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 eksperymentalne przełączanie w ustawieniach, aby kontynuować." "unsupportedPatchVersion": "Łatka nie jest obsługiwana dla tej wersji aplikacji. Włącz opcje eksperymentalne w ustawieniach, aby kontynuować."
}, },
"installerView": { "installerView": {
"widgetTitle": "Instalator", "widgetTitle": "Instalator",
"installButton": "Zainstaluj", "installButton": "Zainstaluj",
"installRootButton": "Instaluj jako Root", "installRootButton": "Zainstaluj jako Root",
"openButton": "Otwórz", "openButton": "Otwórz",
"shareButton": "Udostępnij plik", "shareButton": "Udostępnij plik",
"notificationTitle": "ReVanced Manager jest aktualizowany", "notificationTitle": "ReVanced Manager patchuje",
"notificationText": "Dotknij, aby powrócić do instalatora", "notificationText": "Dotknij, aby powrócić do instalatora",
"shareApkMenuOption": "Udostępnij plik APK", "shareApkMenuOption": "Udostępnij plik APK",
"exportApkMenuOption": "Eksportuj APK", "exportApkMenuOption": "Eksportuj APK",
"shareLogMenuOption": "Udostępnij logi", "shareLogMenuOption": "Udostępnij logi",
"installErrorDialogTitle": "Błąd", "installErrorDialogTitle": "Błąd",
"installErrorDialogText1": "Instalacja za pomocą roota nie jest możliwa przy obecnym wyborze aktualizacji.\nZaktualizuj aplikacje ponownie lub wybierz instalacje bez roota.", "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.", "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.", "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..." "noExit": "Instalator jest nadal uruchomiony, nie można zakończyć jego działania..."
@ -121,6 +121,7 @@
"englishOption": "Angielski", "englishOption": "Angielski",
"sourcesLabel": "Źródła", "sourcesLabel": "Źródła",
"sourcesLabelHint": "Skonfiguruj własne źródła", "sourcesLabelHint": "Skonfiguruj własne źródła",
"hostRepositoryLabel": "Repozytorium API",
"orgPatchesLabel": "Organizacja łatek", "orgPatchesLabel": "Organizacja łatek",
"sourcesPatchesLabel": "Źródło łatek", "sourcesPatchesLabel": "Źródło łatek",
"orgIntegrationsLabel": "Organizacja integracji", "orgIntegrationsLabel": "Organizacja integracji",
@ -135,6 +136,8 @@
"apiURLLabel": "Adres API", "apiURLLabel": "Adres API",
"apiURLHint": "Ustaw własny adres API", "apiURLHint": "Ustaw własny adres API",
"selectApiURL": "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", "experimentalPatchesLabel": "Wsparcie dla eksperymentalnych łatek",
"experimentalPatchesHint": "Włącz użycie nieobsługiwanych łatek w dowolnej wersji aplikacji", "experimentalPatchesHint": "Włącz użycie nieobsługiwanych łatek w dowolnej wersji aplikacji",
"enabledExperimentalPatches": "Włączone wsparcie dla eksperymentalnych łatek", "enabledExperimentalPatches": "Włączone wsparcie dla eksperymentalnych łatek",
@ -150,16 +153,16 @@
"deleteTempDirLabel": "Usuń pliki tymczasowe", "deleteTempDirLabel": "Usuń pliki tymczasowe",
"deleteTempDirHint": "Usuń nieużywane pliki tymczasowe", "deleteTempDirHint": "Usuń nieużywane pliki tymczasowe",
"deletedTempDir": "Pliki tymczasowe zostały usunięte", "deletedTempDir": "Pliki tymczasowe zostały usunięte",
"exportPatchesLabel": "Eksportuj wybrane aktualizacje", "exportPatchesLabel": "Eksportuj wybrane łatki",
"exportPatchesHint": "Eksportuj wybrane aktualizacje do pliku JSON", "exportPatchesHint": "Eksportuj wybrane łatki do pliku JSON",
"exportedPatches": "Wyeksportowano wybrane aktualizacje", "exportedPatches": "Wyeksportowano wybór łatek",
"noExportFileFound": "Brak wybranych aktualizacji do wyeksportowania", "noExportFileFound": "Brak wybranych łatek do wyeksportowania",
"importPatchesLabel": "Importuj wybrane aktualizacje", "importPatchesLabel": "Importuj wybrane łatki",
"importPatchesHint": "Importuj wybrane aktualizacje z pliku JSON", "importPatchesHint": "Importuj wybrane łatki z pliku JSON",
"importedPatches": "Zaimportowano wybrane aktualizacje", "importedPatches": "Zaimportowano wybrane łatki",
"resetStoredPatchesLabel": "Zresetuj aktualizacje", "resetStoredPatchesLabel": "Resetuj łatki",
"resetStoredPatchesHint": "Zresetuj wybrane aktualizacje", "resetStoredPatchesHint": "Zresetuj wybrane przechowywane łatki",
"resetStoredPatches": "Wybrane aktualizacje zostały zresetowane", "resetStoredPatches": "Wybrane łatki zostały zresetowane",
"jsonSelectorErrorMessage": "Nie można użyć wybranego pliku JSON", "jsonSelectorErrorMessage": "Nie można użyć wybranego pliku JSON",
"deleteLogsLabel": "Usuń logi", "deleteLogsLabel": "Usuń logi",
"deleteLogsHint": "Usuń logi zebrane przez menadżera", "deleteLogsHint": "Usuń logi zebrane przez menadżera",
@ -178,17 +181,17 @@
"originalPackageNameLabel": "Oryginalna nazwa pakietu", "originalPackageNameLabel": "Oryginalna nazwa pakietu",
"installTypeLabel": "Typ instalacji", "installTypeLabel": "Typ instalacji",
"rootTypeLabel": "Root", "rootTypeLabel": "Root",
"nonRootTypeLabel": "Bez Roota", "nonRootTypeLabel": "Bez roota",
"patchedDateLabel": "Data modyfikacji", "patchedDateLabel": "Data modyfikacji",
"patchedDateHint": "{date} o godzinie {time}", "patchedDateHint": "{date} o godzinie {time}",
"appliedPatchesLabel": "Zastosowane aktualizacje", "appliedPatchesLabel": "Zastosowane łatki",
"appliedPatchesHint": "Zastosowano {quantity} aktualizacji", "appliedPatchesHint": "Zastosowano {quantity} łatek",
"updateNotImplemented": "Ta funkcja nie została jeszcze zaimplementowana" "updateNotImplemented": "Ta funkcja nie została jeszcze zaimplementowana"
}, },
"contributorsView": { "contributorsView": {
"widgetTitle": "Współtwórcy", "widgetTitle": "Współtwórcy",
"patcherContributors": "Współtwórcy patcher'a", "patcherContributors": "Współtwórcy patcher'a",
"patchesContributors": "Współtwórcy aktualizacji", "patchesContributors": "Współtwórcy łatek",
"integrationsContributors": "Współtwórcy integracji", "integrationsContributors": "Współtwórcy integracji",
"cliContributors": "Współtwórcy CLI", "cliContributors": "Współtwórcy CLI",
"managerContributors": "Współtwórcy menedżera" "managerContributors": "Współtwórcy menedżera"

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "Nenhum aplicativo selecionado", "widgetSubtitle": "Nenhum aplicativo selecionado",
"noAppsLabel": "Nenhum app foi encontrado", "noAppsLabel": "Nenhum app foi encontrado",
"currentVersion": "Atual", "currentVersion": "Atual",
"recommendedVersion": "Recomendado", "recommendedVersion": "Recomendado"
"anyVersion": "todos"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Selecionar patches", "widgetTitle": "Selecionar patches",

199
assets/i18n/pt_PT.json Normal file
View File

@ -0,0 +1,199 @@
{
"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"
},
"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"
}
}

View File

@ -1,6 +1,7 @@
{ {
"okButton": "OK", "okButton": "OK",
"cancelButton": "Anulează", "cancelButton": "Anulează",
"updateButton": "Actualizare",
"enabledLabel": "Activat", "enabledLabel": "Activat",
"disabledLabel": "Dezactivat", "disabledLabel": "Dezactivat",
"yesButton": "Da", "yesButton": "Da",
@ -21,7 +22,7 @@
"noInstallations": "Nu sunt instalate aplicații patch-uite", "noInstallations": "Nu sunt instalate aplicații patch-uite",
"installed": "Instalat", "installed": "Instalat",
"updateDialogTitle": "Manager Actualizări", "updateDialogTitle": "Manager Actualizări",
"updateDialogText": "Sunteți sigur că doriți să descărcați și să actualizați ReVanced Manager?", "updateChangelogTitle": "Istoric schimbări",
"notificationTitle": "Actualizare descărcată", "notificationTitle": "Actualizare descărcată",
"notificationText": "Apăsați pentru a instala actualizarea", "notificationText": "Apăsați pentru a instala actualizarea",
"downloadingMessage": "Se descarcă actualizarea...", "downloadingMessage": "Se descarcă actualizarea...",
@ -54,8 +55,7 @@
"widgetSubtitle": "Nicio aplicație selectată", "widgetSubtitle": "Nicio aplicație selectată",
"noAppsLabel": "Nu s-au găsit aplicații", "noAppsLabel": "Nu s-au găsit aplicații",
"currentVersion": "Actual", "currentVersion": "Actual",
"recommendedVersion": "Recomandat", "recommendedVersion": "Recomandat"
"anyVersion": "oricare"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Selectați patch-urile", "widgetTitle": "Selectați patch-urile",
@ -81,13 +81,13 @@
"all": "Toate", "all": "Toate",
"none": "Niciunul", "none": "Niciunul",
"loadPatchesSelection": "Încărcați selecția de patch-uri", "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ă", "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ă", "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." "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": { "patchItem": {
"unsupportedDialogText": "Selectarea acestui patch poate rezulta în erori de patch-uire.\n\nVersiunea aplicației: {packageVersion}\nVersiuni compatibile:\n{supportedVersions}", "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 versiunea curentă a aplicației.\nActivați comutatorul experimental din setări pentru a continua." "unsupportedPatchVersion": "Patch-ul nu este compatibil cu această versiune a aplicației. Activați comutatorul experimental din setări pentru a continua."
}, },
"installerView": { "installerView": {
"widgetTitle": "Instalator", "widgetTitle": "Instalator",
@ -121,6 +121,7 @@
"englishOption": "Engleză", "englishOption": "Engleză",
"sourcesLabel": "Surse", "sourcesLabel": "Surse",
"sourcesLabelHint": "Configurați-vă sursele personalizate", "sourcesLabelHint": "Configurați-vă sursele personalizate",
"hostRepositoryLabel": "Repository API",
"orgPatchesLabel": "Organizarea patch-urilor", "orgPatchesLabel": "Organizarea patch-urilor",
"sourcesPatchesLabel": "Sursă patch-uri", "sourcesPatchesLabel": "Sursă patch-uri",
"orgIntegrationsLabel": "Organizare integrări", "orgIntegrationsLabel": "Organizare integrări",
@ -135,6 +136,8 @@
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"apiURLHint": "Configurați-vă API URL-ul personalizat", "apiURLHint": "Configurați-vă API URL-ul personalizat",
"selectApiURL": "API URL", "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", "experimentalPatchesLabel": "Suport pentru patch-uri experimentale",
"experimentalPatchesHint": "Activați utilizarea de patch-uri nesuportate în orice versiune a aplicației", "experimentalPatchesHint": "Activați utilizarea de patch-uri nesuportate în orice versiune a aplicației",
"enabledExperimentalPatches": "Suport pentru patch-uri experimentale", "enabledExperimentalPatches": "Suport pentru patch-uri experimentale",
@ -148,7 +151,7 @@
"deleteKeystoreHint": "Ștergeți keystore-ul utilizat pentru a însemna aplicația", "deleteKeystoreHint": "Ștergeți keystore-ul utilizat pentru a însemna aplicația",
"deletedKeystore": "Keystore șters", "deletedKeystore": "Keystore șters",
"deleteTempDirLabel": "Ștergeți fișierele temporare", "deleteTempDirLabel": "Ștergeți fișierele temporare",
"deleteTempDirHint": "Ștergeți fișierele temporare neutilizate", "deleteTempDirHint": "Șterge fișierele temporare neutilizate",
"deletedTempDir": "Fișierele temporare au fost șterse", "deletedTempDir": "Fișierele temporare au fost șterse",
"exportPatchesLabel": "Exportă selecția patch-urilor", "exportPatchesLabel": "Exportă selecția patch-urilor",
"exportPatchesHint": "Exportă selecția patch-urilor într-un fișier JSON", "exportPatchesHint": "Exportă selecția patch-urilor într-un fișier JSON",

View File

@ -1,6 +1,7 @@
{ {
"okButton": "ОК", "okButton": "ОК",
"cancelButton": "Отмена", "cancelButton": "Отмена",
"updateButton": "Обновить",
"enabledLabel": "Включено", "enabledLabel": "Включено",
"disabledLabel": "Выключено", "disabledLabel": "Выключено",
"yesButton": "Да", "yesButton": "Да",
@ -21,7 +22,7 @@
"noInstallations": "Не установлено пропатченных приложений", "noInstallations": "Не установлено пропатченных приложений",
"installed": "Установлено", "installed": "Установлено",
"updateDialogTitle": "Обновить Manager", "updateDialogTitle": "Обновить Manager",
"updateDialogText": "Вы уверены, что хотите загрузить и обновить ReVanced Manager?", "updateChangelogTitle": "Список изменений",
"notificationTitle": "Обновление загружено", "notificationTitle": "Обновление загружено",
"notificationText": "Нажмите, чтобы установить обновление", "notificationText": "Нажмите, чтобы установить обновление",
"downloadingMessage": "Скачивается обновление...", "downloadingMessage": "Скачивается обновление...",
@ -54,8 +55,7 @@
"widgetSubtitle": "Не выбрано приложение", "widgetSubtitle": "Не выбрано приложение",
"noAppsLabel": "Приложения не найдены", "noAppsLabel": "Приложения не найдены",
"currentVersion": "Текущая", "currentVersion": "Текущая",
"recommendedVersion": "Рекомендуемая", "recommendedVersion": "Рекомендуемая"
"anyVersion": "любая"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Выберите патчи", "widgetTitle": "Выберите патчи",
@ -77,17 +77,17 @@
"viewTitle": "Выберите патчи", "viewTitle": "Выберите патчи",
"searchBarHint": "Искать патчи", "searchBarHint": "Искать патчи",
"doneButton": "Готово", "doneButton": "Готово",
"recommended": "Рекомендуемые", "recommended": "Рекомендуется",
"all": "Все", "all": "Все",
"none": "Никакие", "none": "Никакие",
"loadPatchesSelection": "Загрузить выбор патчей", "loadPatchesSelection": "Загрузить выбор патчей",
"noSavedPatches": "Нет сохранённых патчей для выбранного приложения\nНажмите «Готово» для сохранения текущего выбора", "noSavedPatches": "Нет сохранённых патчей для выбранного приложения.\nНажмите «Готово» для сохранения текущего выбора.",
"noPatchesFound": "Для выбранного приложения не найдены патчи", "noPatchesFound": "Для выбранного приложения не найдены патчи",
"selectAllPatchesWarningContent": "Вы собираетесь выбрать все патчи, в том числе и нерекомендуемые патчи, которые могут вызвать нежелательное поведение." "selectAllPatchesWarningContent": "Вы собираетесь выбрать все патчи, в том числе и нерекомендуемые патчи, которые могут вызвать нежелательное поведение."
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "Выбор этого патча может привести к ошибкам во время патча.\n\nВерсия приложения: {packageVersion}\nПоддерживаемые версии:\n{supportedVersions}", "unsupportedDialogText": "Выбор этого патча может привести к ошибкам во время патча.\n\nВерсия приложения: {packageVersion}\nПоддерживаемые версии:\n{supportedVersions}",
"unsupportedPatchVersion": "Патч не поддерживается этой версией приложения. Для продолжения включите опцию экспериментальной поддержки в настройках." "unsupportedPatchVersion": "Патч не поддерживается для этой версии приложения. Чтобы продолжить, включите опцию экспериментальной поддержки в настройках."
}, },
"installerView": { "installerView": {
"widgetTitle": "Установщик", "widgetTitle": "Установщик",
@ -101,7 +101,7 @@
"exportApkMenuOption": "Экспорт APK", "exportApkMenuOption": "Экспорт APK",
"shareLogMenuOption": "Отправить лог", "shareLogMenuOption": "Отправить лог",
"installErrorDialogTitle": "Ошибка", "installErrorDialogTitle": "Ошибка",
"installErrorDialogText1": "Root-установка невозможна с выбранными патчами.\nПерепатчите приложение, или выберите non-root установку.", "installErrorDialogText1": "Root-установка невозможна с выбранными патчами.\nПерепатчите приложение или выберите non-root установку.",
"installErrorDialogText2": "Non-root установка невозможна с выбранными патчами.\nПерепатчите приложение, или выберите root-установку, если на вашем устройстве есть root.", "installErrorDialogText2": "Non-root установка невозможна с выбранными патчами.\nПерепатчите приложение, или выберите root-установку, если на вашем устройстве есть root.",
"installErrorDialogText3": "Root-установка невозможна, так как оригинальный APK был выбран из хранилища.\nВыберите установленное приложение, или выберите non-root установку.", "installErrorDialogText3": "Root-установка невозможна, так как оригинальный APK был выбран из хранилища.\nВыберите установленное приложение, или выберите non-root установку.",
"noExit": "Установщик все еще запущен, выход невозможен..." "noExit": "Установщик все еще запущен, выход невозможен..."
@ -121,6 +121,7 @@
"englishOption": "Английский", "englishOption": "Английский",
"sourcesLabel": "Источники", "sourcesLabel": "Источники",
"sourcesLabelHint": "Настройте свои источники", "sourcesLabelHint": "Настройте свои источники",
"hostRepositoryLabel": "API репозитория",
"orgPatchesLabel": "Организация патчей", "orgPatchesLabel": "Организация патчей",
"sourcesPatchesLabel": "Репозиторий патчей", "sourcesPatchesLabel": "Репозиторий патчей",
"orgIntegrationsLabel": "Организация интеграций", "orgIntegrationsLabel": "Организация интеграций",
@ -135,6 +136,8 @@
"apiURLLabel": "API-ссылка", "apiURLLabel": "API-ссылка",
"apiURLHint": "Настройте свою API-ссылку", "apiURLHint": "Настройте свою API-ссылку",
"selectApiURL": "API-ссылка", "selectApiURL": "API-ссылка",
"experimentalUniversalPatchesLabel": "Экспериментальная поддержка универсальных патчей",
"experimentalUniversalPatchesHint": "Отображать все приложения, поддерживающие универсальные патчи; загрузка списка приложений может быть медленнее",
"experimentalPatchesLabel": "Экспериментальная поддержка патчей", "experimentalPatchesLabel": "Экспериментальная поддержка патчей",
"experimentalPatchesHint": "Разрешить использование несовместимых патчей в любой версии приложения", "experimentalPatchesHint": "Разрешить использование несовместимых патчей в любой версии приложения",
"enabledExperimentalPatches": "Экспериментальная поддержка патчей включена", "enabledExperimentalPatches": "Экспериментальная поддержка патчей включена",

View File

@ -1,6 +1,7 @@
{ {
"okButton": "OK", "okButton": "OK",
"cancelButton": "Zrušiť", "cancelButton": "Zrušiť",
"updateButton": "Aktualizovať",
"enabledLabel": "Zapnuté", "enabledLabel": "Zapnuté",
"disabledLabel": "Vypnuté", "disabledLabel": "Vypnuté",
"yesButton": "Áno", "yesButton": "Áno",
@ -21,7 +22,7 @@
"noInstallations": "Žiadne zaplátané aplikácie nie sú nainštalované", "noInstallations": "Žiadne zaplátané aplikácie nie sú nainštalované",
"installed": "Nainštalované", "installed": "Nainštalované",
"updateDialogTitle": "Aktualizovať Manažéra", "updateDialogTitle": "Aktualizovať Manažéra",
"updateDialogText": "Ste si istý, že chcete stiahnuť a aktualizovať ReVanced manažér?", "updateChangelogTitle": "Zoznam zmien",
"notificationTitle": "Aktualizácia bola stiahnutá", "notificationTitle": "Aktualizácia bola stiahnutá",
"notificationText": "Klepnutím nainštalujete aktualizáciu", "notificationText": "Klepnutím nainštalujete aktualizáciu",
"downloadingMessage": "Sťahovanie aktualizácie...", "downloadingMessage": "Sťahovanie aktualizácie...",
@ -54,8 +55,7 @@
"widgetSubtitle": "Nie je vybraná žiadna aplikácia", "widgetSubtitle": "Nie je vybraná žiadna aplikácia",
"noAppsLabel": "Nebola nájdená žiadna aplikácia", "noAppsLabel": "Nebola nájdená žiadna aplikácia",
"currentVersion": "Aktuálne", "currentVersion": "Aktuálne",
"recommendedVersion": "Odporúčané", "recommendedVersion": "Odporúčané"
"anyVersion": "akákoľvek"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Vyberte záplaty", "widgetTitle": "Vyberte záplaty",
@ -81,13 +81,13 @@
"all": "Všetky", "all": "Všetky",
"none": "Žiadne", "none": "Žiadne",
"loadPatchesSelection": "Načítať výber záplat", "loadPatchesSelection": "Načítať výber záplat",
"noSavedPatches": "Žiadne uložené záplaty pre vybranú aplikáciu\nStlačením tlačidla Hotovo uložíte aktuálny výber", "noSavedPatches": "Žiadne uložené záplaty pre vybranú aplikáciu\nStlačením tlačidla Hotovo uložíte aktuálny výber.",
"noPatchesFound": "Neboli nájdené žiadne záplaty pre zvolenú aplikáciu", "noPatchesFound": "Neboli nájdené žiadne záplaty pre zvolenú aplikáciu",
"selectAllPatchesWarningContent": "Týmto vyberiete všetky záplaty, aj tie ktoré nie sú odporúčané. Toto môže viesť k nežiadúcim účinkom." "selectAllPatchesWarningContent": "Týmto vyberiete všetky záplaty, aj tie ktoré nie sú odporúčané. Toto môže viesť k nežiadúcim účinkom."
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "Výber tejto záplaty môže spôsobiť chyby.\n\nVerzia aplikácie: {packageVersion}\nPodporované verzie:\n{supportedVersions}", "unsupportedDialogText": "Výber tejto záplaty môže spôsobiť chyby.\n\nVerzia aplikácie: {packageVersion}\nPodporované verzie:\n{supportedVersions}",
"unsupportedPatchVersion": "Záplata nie je pre túto verziu aplikácie podporovaná. Ak chcete pokračovať, povoľte v nastaveniach prepínač experimental." "unsupportedPatchVersion": "Záplata nie je pre túto verziu aplikácie podporovaná. Ak chcete pokračovať, povoľte v nastaveniach experimentálny prepínač."
}, },
"installerView": { "installerView": {
"widgetTitle": "Inštalátor", "widgetTitle": "Inštalátor",
@ -121,6 +121,7 @@
"englishOption": "Anglicky", "englishOption": "Anglicky",
"sourcesLabel": "Zdroje", "sourcesLabel": "Zdroje",
"sourcesLabelHint": "Nastavte vlastné zdroje", "sourcesLabelHint": "Nastavte vlastné zdroje",
"hostRepositoryLabel": "API repozitára",
"orgPatchesLabel": "Autor záplaty", "orgPatchesLabel": "Autor záplaty",
"sourcesPatchesLabel": "Zdroj záplaty", "sourcesPatchesLabel": "Zdroj záplaty",
"orgIntegrationsLabel": "Autor integrácie", "orgIntegrationsLabel": "Autor integrácie",
@ -135,6 +136,8 @@
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"apiURLHint": "Nastaviť vlastnú API URL", "apiURLHint": "Nastaviť vlastnú API URL",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"experimentalUniversalPatchesLabel": "Experimentálna podpora univerzálnych záplat",
"experimentalUniversalPatchesHint": "Zobrazenie všetkých aplikácií na použitie s univerzálnymi záplatami, načítanie zoznamu aplikácií môže byť pomalšie",
"experimentalPatchesLabel": "Podpora experimentálnych záplat", "experimentalPatchesLabel": "Podpora experimentálnych záplat",
"experimentalPatchesHint": "Povoliť používanie nepodporovaných záplat v akejkoľvek verzii aplikácie", "experimentalPatchesHint": "Povoliť používanie nepodporovaných záplat v akejkoľvek verzii aplikácie",
"enabledExperimentalPatches": "Podpora experimentálnych záplat povolená", "enabledExperimentalPatches": "Podpora experimentálnych záplat povolená",

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "Nijedna aplikacija nije izabrana", "widgetSubtitle": "Nijedna aplikacija nije izabrana",
"noAppsLabel": "Nijedna aplikacija nije pronađena", "noAppsLabel": "Nijedna aplikacija nije pronađena",
"currentVersion": "Trenutna", "currentVersion": "Trenutna",
"recommendedVersion": "Preporučena", "recommendedVersion": "Preporučena"
"anyVersion": "bilo koja"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Izaberite pečeve", "widgetTitle": "Izaberite pečeve",

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "Ниједна апликација није изабрана", "widgetSubtitle": "Ниједна апликација није изабрана",
"noAppsLabel": "Ниједна апликација није пронађена", "noAppsLabel": "Ниједна апликација није пронађена",
"currentVersion": "Тренутна", "currentVersion": "Тренутна",
"recommendedVersion": "Препоручена", "recommendedVersion": "Препоручена"
"anyVersion": "било која"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Изаберите печеве", "widgetTitle": "Изаберите печеве",

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "Ingen app vald", "widgetSubtitle": "Ingen app vald",
"noAppsLabel": "Inga applikationer hittades", "noAppsLabel": "Inga applikationer hittades",
"currentVersion": "Nuvarande", "currentVersion": "Nuvarande",
"recommendedVersion": "Rekommenderad", "recommendedVersion": "Rekommenderad"
"anyVersion": "alla"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Välj patchar", "widgetTitle": "Välj patchar",

199
assets/i18n/sw_KE.json Normal file
View File

@ -0,0 +1,199 @@
{
"okButton": "Sawa",
"cancelButton": "Ghairi",
"updateButton": "Sasisho",
"enabledLabel": "Imewashwa",
"disabledLabel": "Imezimwa",
"yesButton": "Ndiyo",
"noButton": "Hapana",
"warning": "Onyo",
"navigationView": {
"dashboardTab": "Dashibodi",
"patcherTab": "Kirekebishaji",
"settingsTab": "Mpangilio"
},
"homeView": {
"widgetTitle": "Dashibodi",
"updatesSubtitle": "Sasisho",
"patchedSubtitle": "Programu zilizo na viraka",
"updatesAvailable": "Sasisho Zinapatikana",
"noUpdates": "Masasisho Hayapatikani",
"WIP": "Kazi inaendelea...",
"noInstallations": "Hakuna programu zilizo na viraka zilizosakinishwa",
"installed": "Imesakinishwa",
"updateDialogTitle": "Kidhibiti cha Usasishaji",
"updateChangelogTitle": "Changelog",
"notificationTitle": "Sasisho limepakuliwa",
"notificationText": "Gusa ili kusakinisha sasisho",
"downloadingMessage": "Inapakua sasisho...",
"installingMessage": "Inasakinisha sasisho...",
"errorDownloadMessage": "Imeshindwa kupakua sasisho",
"errorInstallMessage": "Imeshindwa kusakinisha sasisho",
"noConnection": "Hakuna muunganisho wa mtandao",
"updatesDisabled": "Kusasisha programu iliyobanwa kumezimwa kwa sasa. Rekebisha programu tena."
},
"applicationItem": {
"patchButton": "Rekebisha",
"infoButton": "Taarifa",
"changelogLabel": "Changelog"
},
"latestCommitCard": {
"loadingLabel": "Inapakia...",
"timeagoLabel": "{time} iliyopita",
"patcherLabel": "Kirekebishaji: ",
"managerLabel": "Meneja: ",
"updateButton": "Kidhibiti cha Usasishaji"
},
"patcherView": {
"widgetTitle": "Kirekebishaji",
"patchButton": "Rekebisha",
"patchDialogText": "Umechagua kiraka cha rasilimali na usakinishaji umegunduliwa ya split APK, kwa hivyo makosa ya kuweka viraka yanaweza kutokea.\nJe, una uhakika unataka kuendelea?"
},
"appSelectorCard": {
"widgetTitle": "Chagua programu",
"widgetTitleSelected": "Programu imechaguliwa",
"widgetSubtitle": "Hakuna programu iliyochaguliwa",
"noAppsLabel": "Hakuna programu zilizopatikana",
"currentVersion": "Sasa",
"recommendedVersion": "Imependekezwa"
},
"patchSelectorCard": {
"widgetTitle": "Chagua viraka",
"widgetTitleSelected": "Viraka vilivyochaguliwa",
"widgetSubtitle": "Chagua programu kwanza",
"widgetEmptySubtitle": "Hakuna viraka vilivyochaguliwa"
},
"socialMediaCard": {
"widgetTitle": "Mtandao wa kijamii",
"widgetSubtitle": "Tuko mtandaoni!"
},
"appSelectorView": {
"viewTitle": "Chagua programu",
"searchBarHint": "Tafuta programu",
"storageButton": "Hifadhi",
"errorMessage": "Haiwezi kutumia programu iliyochaguliwa"
},
"patchesSelectorView": {
"viewTitle": "Chagua viraka",
"searchBarHint": "Tafuta viraka",
"doneButton": "Imekamilika",
"recommended": "Imependekezwa",
"all": "Yote",
"none": "Hakuna",
"loadPatchesSelection": "Ingiza Uteuzi wa viraka",
"noSavedPatches": "Hakuna viraka vilivyohifadhiwa kwa programu iliyochaguliwa.\nBonyeza Nimemaliza ili kuhifadhi chaguo la sasa.",
"noPatchesFound": "Hakuna viraka vilivyopatikana kwa programu iliyochaguliwa",
"selectAllPatchesWarningContent": "Unakaribia kuchagua viraka vyote, vinavyojumuisha viraka visivyopendekezwa na vinaweza kusababisha tabia isiyotakikana."
},
"patchItem": {
"unsupportedDialogText": "Toleo la programu: {packageVersion}\nMatoleo yanayotumika:{supportedVersions}",
"unsupportedPatchVersion": "Kiraka hakitumiki kwa toleo hili la programu. Washa ugeuzaji wa majaribio katika mipangilio ili kuendelea."
},
"installerView": {
"widgetTitle": "Kisakinishi",
"installButton": "Sakinisha",
"installRootButton": "Sakinisha kama mtumiaji mkuu",
"openButton": "Fungua",
"shareButton": "Gawana faili",
"notificationTitle": "Revanced Manager inatia viraka",
"notificationText": "Gusa ili urudi kwa kisakinishi",
"shareApkMenuOption": "Gawa APK",
"exportApkMenuOption": "Hamisha APK",
"shareLogMenuOption": "Gawa jarida",
"installErrorDialogTitle": "Hitilafu",
"installErrorDialogText1": "Usakinishaji kama mtumiaji mkuu hauwezekani kwa uteuzi wa viraka vya sasa.",
"installErrorDialogText2": "Usakinishaji usio wa msimamizi hauwezekani kwa uteuzi wa sasa wa viraka.",
"installErrorDialogText3": "Usakinishaji kama mtumiaji mkuu hauwezekani kwansababu APK ule wa asili ilichaguliwa kutoka kwa hifadhi.\nChagua programu iliyosakinishwa au chagua usakinishaji usio wa msimamizi.",
"noExit": "Kisakinishi bado kinafanya kazi, hakiwezi kutoka..."
},
"settingsView": {
"widgetTitle": "Mipangilio",
"appearanceSectionTitle": "Mwonekano",
"teamSectionTitle": "Timu",
"infoSectionTitle": "Taarifa",
"advancedSectionTitle": "Ziada",
"logsSectionTitle": "Kumbukumbu",
"darkThemeLabel": "Hali ya giza",
"darkThemeHint": "Karibu katika upande wa giza",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Furahia matumizi karibu na kifaa chako",
"languageLabel": "Lugha",
"englishOption": "Kiingereza",
"sourcesLabel": "Vyanzo",
"sourcesLabelHint": "Sanidi vyanzo vyako maalum",
"hostRepositoryLabel": "HIfadhi ya API",
"orgPatchesLabel": "Shirika la viraka",
"sourcesPatchesLabel": "Chanzo cha viraka",
"orgIntegrationsLabel": "Shirika la ujumuishaji",
"sourcesIntegrationsLabel": "Chanzo cha ujumuishaji",
"sourcesResetDialogTitle": "Anzisha",
"sourcesResetDialogText": "Je, una uhakika unataka kuweka upya vyanzo maalum kwa thamani zao chaguomsingi?",
"apiURLResetDialogText": "Je, una uhakika unataka kuweka upya URL ya API hadi thamani yake chaguomsingi?",
"contributorsLabel": "Wachangiaji",
"contributorsHint": "Orodha ya wachangiaji wa Revanced",
"logsLabel": "Kumbukumbu",
"logsHint": "Gawa kumbukumbu za meneja",
"apiURLLabel": "API URL",
"apiURLHint": "Sanidi URL yako ya API maalum",
"selectApiURL": "API URL",
"experimentalUniversalPatchesLabel": "Usaidizi wa viraka vya majaribio kwa wote",
"experimentalUniversalPatchesHint": "Onyesha programu zote za kutumia na viraka vya ulimwengu wote, orodha ya upakiaji inaweza kuwa polepole",
"experimentalPatchesLabel": "Usaidizi wa viraka vya majaribio",
"experimentalPatchesHint": "Washa matumizi ya viraka visivyotumika katika toleo lolote la programu",
"enabledExperimentalPatches": "Usaidizi wa viraka vya majaribio umewashwa",
"exportSectionTitle": "Kuagiza na kuuza nje",
"aboutLabel": "Kuhusu",
"snackbarMessage": "Imenakiliwa kwenye ubao wa kunakili",
"sentryLabel": "Sentry logging",
"sentryHint": "Tuma kumbukumbu bila majina ili utusaidie kuboresha Revanced Manager",
"restartAppForChanges": "Anzisha tena programu ili kutekeleza mabadiliko",
"deleteKeystoreLabel": "Futa Duka la Ufunguo",
"deleteKeystoreHint": "Futa Duka la Ufunguo iliyotumika kusaini programu",
"deletedKeystore": "Duka la ufunguo imefutwa",
"deleteTempDirLabel": "Futa faili za muda",
"deleteTempDirHint": "Futa faili za muda ambazo hazijatumiwa",
"deletedTempDir": "Faili za muda zimefutwa",
"exportPatchesLabel": "Hamisha uteuzi wa viraka",
"exportPatchesHint": "Hamisha uteuzi wa viraka kwenye faili ya JSON",
"exportedPatches": "Uteuzi wa viraka umehamishwa",
"noExportFileFound": "Hakuna viraka vilivyochaguliwa kuhamishwa",
"importPatchesLabel": "Ingiza uteuzi wa viraka",
"importPatchesHint": "Ingiza uteuzi wa viraka kutoka kwa faili ya JSON",
"importedPatches": "Uteuzi wa viraka umeingizwa",
"resetStoredPatchesLabel": "Weka upya viraka",
"resetStoredPatchesHint": "Weka upya uteuzi wa viraka vilivyohifadhiwa",
"resetStoredPatches": "Uteuzi wa viraka umewekwa upya",
"jsonSelectorErrorMessage": "Imeshindwa kutumia faili ya JSON iliyochaguliwa",
"deleteLogsLabel": "Futa kumbukumbu",
"deleteLogsHint": "Futa kumbukumbu za wasimamizi zilizokusanywa",
"deletedLogs": "Kumbukumbu zimefutwa"
},
"appInfoView": {
"widgetTitle": "Maelezo ya programu",
"openButton": "Fungua",
"uninstallButton": "Sanidua",
"patchButton": "Rekebisha",
"unpatchButton": "Ondoa kibandiko",
"unpatchDialogText": "Je, una uhakika unataka kubandua programu hii?",
"rootDialogTitle": "Hitilafu",
"rootDialogText": "Programu ilisakinishwa kwa ruhusa za mtumiaji mkuu, lakini kwa sasa ReVanced Manager haina ruhusa..\nTafadhali toa ruhusa za mtumiaji mkuu kwanza.",
"packageNameLabel": "Jina la kifurushi",
"originalPackageNameLabel": "Jina halisi la kifurushi",
"installTypeLabel": "Aina ya usakinishaji",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Sio mtumiaji mkuu",
"patchedDateLabel": "Tarehe iliyowekwa viraka",
"patchedDateHint": "{date} katika {time}",
"appliedPatchesLabel": "Viraka vilivyotumika",
"appliedPatchesHint": "{quantity} viraka vilivyotumika",
"updateNotImplemented": "Kipengele hiki bado hakijatekelezwa"
},
"contributorsView": {
"widgetTitle": "Wachangiaji",
"patcherContributors": "Wachangiaji wa Kirekebishaji",
"patchesContributors": "Wachangiaji wa Viraka",
"integrationsContributors": "Wachangiaji wa ujumuishaji",
"cliContributors": "Wachangiaji wa CLI",
"managerContributors": "Wachangiaji wa meneja"
}
}

View File

@ -1,6 +1,7 @@
{ {
"okButton": "Tamam", "okButton": "Tamam",
"cancelButton": "İptal", "cancelButton": "İptal",
"updateButton": "Güncelleme",
"enabledLabel": "Etkinleştirildi", "enabledLabel": "Etkinleştirildi",
"disabledLabel": "Devre dışı", "disabledLabel": "Devre dışı",
"yesButton": "Evet", "yesButton": "Evet",
@ -21,7 +22,7 @@
"noInstallations": "Yamalanmış uygulama bulunmamaktadır", "noInstallations": "Yamalanmış uygulama bulunmamaktadır",
"installed": "Yüklendi", "installed": "Yüklendi",
"updateDialogTitle": "Manager'ı güncelle", "updateDialogTitle": "Manager'ı güncelle",
"updateDialogText": "ReVanced Manager'ın güncellemesini indirmek ve yüklemek istediğinize emin misiniz?", "updateChangelogTitle": "Değişiklik Notları",
"notificationTitle": "Güncelleme indirildi", "notificationTitle": "Güncelleme indirildi",
"notificationText": "Güncellemeyi yüklemek için dokunun", "notificationText": "Güncellemeyi yüklemek için dokunun",
"downloadingMessage": "Güncelleme indiriliyor...", "downloadingMessage": "Güncelleme indiriliyor...",
@ -40,7 +41,7 @@
"loadingLabel": "Yükleniyor...", "loadingLabel": "Yükleniyor...",
"timeagoLabel": "{time} önce", "timeagoLabel": "{time} önce",
"patcherLabel": "Yamalayıcı: ", "patcherLabel": "Yamalayıcı: ",
"managerLabel": "Manager: ", "managerLabel": "Yönetici: ",
"updateButton": "Manager'ı güncelle" "updateButton": "Manager'ı güncelle"
}, },
"patcherView": { "patcherView": {
@ -54,8 +55,7 @@
"widgetSubtitle": "Hiçbir uygulama seçilmedi", "widgetSubtitle": "Hiçbir uygulama seçilmedi",
"noAppsLabel": "Hiçbir uygulama bulunamadı", "noAppsLabel": "Hiçbir uygulama bulunamadı",
"currentVersion": "Şu anki", "currentVersion": "Şu anki",
"recommendedVersion": "Önerilen", "recommendedVersion": "Önerilen"
"anyVersion": "herhangi"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Yamaları Seçin", "widgetTitle": "Yamaları Seçin",
@ -81,7 +81,7 @@
"all": "Hepsi", "all": "Hepsi",
"none": "Hiçbiri", "none": "Hiçbiri",
"loadPatchesSelection": "Yama seçimlerini yükle", "loadPatchesSelection": "Yama seçimlerini yükle",
"noSavedPatches": "Seçilen uygulama için kaydedilmiş yama yok\nMevcut seçimi kaydetmek için Tamam'a tıklayın", "noSavedPatches": "Seçilen uygulama için kaydedilmiş yama yok.\nMevcut seçimi kaydetmek için Tamam'a tıklayın.",
"noPatchesFound": "Seçili uygulama için yama bulunamadı", "noPatchesFound": "Seçili uygulama için yama bulunamadı",
"selectAllPatchesWarningContent": "Tavsiye edilmeyenler de dahil bütün yamaları seçmek üzeresiniz, bu istenmeyen davranışlara sebep olabilir." "selectAllPatchesWarningContent": "Tavsiye edilmeyenler de dahil bütün yamaları seçmek üzeresiniz, bu istenmeyen davranışlara sebep olabilir."
}, },
@ -121,6 +121,7 @@
"englishOption": "İngilizce", "englishOption": "İngilizce",
"sourcesLabel": "Kaynaklar", "sourcesLabel": "Kaynaklar",
"sourcesLabelHint": "Özel kaynaklarınızı yapılandırın", "sourcesLabelHint": "Özel kaynaklarınızı yapılandırın",
"hostRepositoryLabel": "Depo API",
"orgPatchesLabel": "Yama organizasyonu", "orgPatchesLabel": "Yama organizasyonu",
"sourcesPatchesLabel": "Yama kaynağı", "sourcesPatchesLabel": "Yama kaynağı",
"orgIntegrationsLabel": "Entegrasyon organizasyonu", "orgIntegrationsLabel": "Entegrasyon organizasyonu",
@ -135,6 +136,8 @@
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"apiURLHint": "Özel API URL'inizi yapılandırın", "apiURLHint": "Özel API URL'inizi yapılandırın",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"experimentalUniversalPatchesLabel": "Deneysel evrensel yama desteği",
"experimentalUniversalPatchesHint": "Evrensel yamalarla kullanılacak tüm uygulamaları görüntüleyin, uygulamaların yüklenmesi daha yavaş olabilir",
"experimentalPatchesLabel": "Deneysel yama desteği", "experimentalPatchesLabel": "Deneysel yama desteği",
"experimentalPatchesHint": "Herhangi bir uygulama sürümünde desteklenmeyen yamaları kullanmayı etkinleştir", "experimentalPatchesHint": "Herhangi bir uygulama sürümünde desteklenmeyen yamaları kullanmayı etkinleştir",
"enabledExperimentalPatches": "Deneysel yama desteği etkin", "enabledExperimentalPatches": "Deneysel yama desteği etkin",

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "کوئی ایپلیکیشن منتخب نہیں", "widgetSubtitle": "کوئی ایپلیکیشن منتخب نہیں",
"noAppsLabel": "کوئی ایپلیکیشن نہیں ملی", "noAppsLabel": "کوئی ایپلیکیشن نہیں ملی",
"currentVersion": "موجودہ", "currentVersion": "موجودہ",
"recommendedVersion": "تجویز کردہ", "recommendedVersion": "تجویز کردہ"
"anyVersion": "کوئی بھی"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "پیچز منتخب کریں", "widgetTitle": "پیچز منتخب کریں",

View File

@ -1,6 +1,7 @@
{ {
"okButton": "Đồng ý", "okButton": "Đồng ý",
"cancelButton": "Hủy", "cancelButton": "Hủy",
"updateButton": "Cập nhật",
"enabledLabel": "Đã bật", "enabledLabel": "Đã bật",
"disabledLabel": "Đã tắt", "disabledLabel": "Đã tắt",
"yesButton": "Có", "yesButton": "Có",
@ -21,7 +22,7 @@
"noInstallations": "Không có ứng dụng đã vá nào được cài đặt", "noInstallations": "Không có ứng dụng đã vá nào được cài đặt",
"installed": "Đã cài đặt", "installed": "Đã cài đặt",
"updateDialogTitle": "Update Manager", "updateDialogTitle": "Update Manager",
"updateDialogText": "Bạn có muốn tải về và cập nhật ReVanced Manager?", "updateChangelogTitle": "Nhật ký thay đổi",
"notificationTitle": "Cập nhật đã được tải xong", "notificationTitle": "Cập nhật đã được tải xong",
"notificationText": "Nhấn để cài đặt bản cập nhật", "notificationText": "Nhấn để cài đặt bản cập nhật",
"downloadingMessage": "Đang tải xuống bản cập nhật...", "downloadingMessage": "Đang tải xuống bản cập nhật...",
@ -54,8 +55,7 @@
"widgetSubtitle": "Chưa chọn ứng dụng nào", "widgetSubtitle": "Chưa chọn ứng dụng nào",
"noAppsLabel": "Không tìm thấy ứng dụng nào", "noAppsLabel": "Không tìm thấy ứng dụng nào",
"currentVersion": "Hiện tại", "currentVersion": "Hiện tại",
"recommendedVersion": "Đề xuất", "recommendedVersion": "Đề xuất"
"anyVersion": "bất kỳ"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Chọn bản vá", "widgetTitle": "Chọn bản vá",
@ -81,7 +81,7 @@
"all": "Tất cả", "all": "Tất cả",
"none": "Không có", "none": "Không có",
"loadPatchesSelection": "Nạp các bản vá được chọn", "loadPatchesSelection": "Nạp các bản vá được chọn",
"noSavedPatches": "Không có bản vá cho ứng dụng được chọn\nNhấn Hoàn tất để lưu lựa chọn hiện tại", "noSavedPatches": "Không có bản vá cho ứng dụng được chọn\nNhấn Hoàn tất để lưu lựa chọn hiện tại.",
"noPatchesFound": "Không tìm thấy bản vá cho ứng dụng đã chọn", "noPatchesFound": "Không tìm thấy bản vá cho ứng dụng đã chọn",
"selectAllPatchesWarningContent": "Bạn sắp lựa chọn tất cả bản vá, bao gồm những bản vá không được khuyến nghị và có thể gây ra những hành vi không mong muốn." "selectAllPatchesWarningContent": "Bạn sắp lựa chọn tất cả bản vá, bao gồm những bản vá không được khuyến nghị và có thể gây ra những hành vi không mong muốn."
}, },
@ -121,6 +121,7 @@
"englishOption": "Tiếng Anh", "englishOption": "Tiếng Anh",
"sourcesLabel": "Nguồn", "sourcesLabel": "Nguồn",
"sourcesLabelHint": "Cấu hình nguồn tùy chỉnh của bạn", "sourcesLabelHint": "Cấu hình nguồn tùy chỉnh của bạn",
"hostRepositoryLabel": "API Kho lưu trữ",
"orgPatchesLabel": "Tác giả bản vá", "orgPatchesLabel": "Tác giả bản vá",
"sourcesPatchesLabel": "Nguồn bản vá", "sourcesPatchesLabel": "Nguồn bản vá",
"orgIntegrationsLabel": "Tác giá bản tích hợp", "orgIntegrationsLabel": "Tác giá bản tích hợp",
@ -135,6 +136,8 @@
"apiURLLabel": "Địa chỉ URL của API", "apiURLLabel": "Địa chỉ URL của API",
"apiURLHint": "Cấu hình API URL tùy chỉnh của bạn", "apiURLHint": "Cấu hình API URL tùy chỉnh của bạn",
"selectApiURL": "Địa chỉ URL của API", "selectApiURL": "Địa chỉ URL của API",
"experimentalUniversalPatchesLabel": "Hỗ trợ các bản vá thử nghiệm phổ biến",
"experimentalUniversalPatchesHint": "Hiển thị tất cả các ứng dụng dùng với các bản vá phổ biến, việc tải các danh sách ứng dụng có thể chậm hơn",
"experimentalPatchesLabel": "Hỗ trợ các bản vá thử nghiệm", "experimentalPatchesLabel": "Hỗ trợ các bản vá thử nghiệm",
"experimentalPatchesHint": "Bật sử dụng các bản vá không được hỗ trợ trong bất kỳ phiên bản nào của ứng dụng", "experimentalPatchesHint": "Bật sử dụng các bản vá không được hỗ trợ trong bất kỳ phiên bản nào của ứng dụng",
"enabledExperimentalPatches": "Đã bật hỗ trợ các bản vá thử nghiệm", "enabledExperimentalPatches": "Đã bật hỗ trợ các bản vá thử nghiệm",

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "未选择应用程序", "widgetSubtitle": "未选择应用程序",
"noAppsLabel": "未发现应用程序。", "noAppsLabel": "未发现应用程序。",
"currentVersion": "当前", "currentVersion": "当前",
"recommendedVersion": "推荐", "recommendedVersion": "推荐"
"anyVersion": "任意"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "选择补丁", "widgetTitle": "选择补丁",

View File

@ -54,8 +54,7 @@
"widgetSubtitle": "沒有選擇應用程式", "widgetSubtitle": "沒有選擇應用程式",
"noAppsLabel": "找不到應用程式", "noAppsLabel": "找不到應用程式",
"currentVersion": "目前版本", "currentVersion": "目前版本",
"recommendedVersion": "推薦版本", "recommendedVersion": "推薦版本"
"anyVersion": "任何版本"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "選擇補丁", "widgetTitle": "選擇補丁",

View File

@ -1,6 +1,7 @@
{ {
"okButton": "確定", "okButton": "確定",
"cancelButton": "取消", "cancelButton": "取消",
"updateButton": "更新",
"enabledLabel": "已啟用", "enabledLabel": "已啟用",
"disabledLabel": "已停用", "disabledLabel": "已停用",
"yesButton": "是", "yesButton": "是",
@ -21,7 +22,7 @@
"noInstallations": "沒有安裝已修補的應用程式", "noInstallations": "沒有安裝已修補的應用程式",
"installed": "已安裝", "installed": "已安裝",
"updateDialogTitle": "更新 Manager", "updateDialogTitle": "更新 Manager",
"updateDialogText": "確定要下載並更新 ReVanced Manager 嗎?", "updateChangelogTitle": "更新日誌",
"notificationTitle": "已下載更新", "notificationTitle": "已下載更新",
"notificationText": "輕觸以安裝更新", "notificationText": "輕觸以安裝更新",
"downloadingMessage": "正在下載更新...", "downloadingMessage": "正在下載更新...",
@ -54,8 +55,7 @@
"widgetSubtitle": "未選取應用程式", "widgetSubtitle": "未選取應用程式",
"noAppsLabel": "找不到應用程式", "noAppsLabel": "找不到應用程式",
"currentVersion": "目前", "currentVersion": "目前",
"recommendedVersion": "建議", "recommendedVersion": "建議"
"anyVersion": "任何"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "選取修補檔", "widgetTitle": "選取修補檔",
@ -81,13 +81,13 @@
"all": "全部", "all": "全部",
"none": "無", "none": "無",
"loadPatchesSelection": "載入修補檔選取", "loadPatchesSelection": "載入修補檔選取",
"noSavedPatches": "選取的應用程式尚無已儲存的修補檔\n按下 [完成] 以儲存目前選取", "noSavedPatches": "選取的應用程式尚無已儲存的修補檔\n按下 [完成] 以儲存目前選取",
"noPatchesFound": "找不到適合所選應用程式的修補檔", "noPatchesFound": "找不到適合所選應用程式的修補檔",
"selectAllPatchesWarningContent": "即將選取所有修補檔——之中包含不推薦的修補檔,且可能造成非預期的結果。" "selectAllPatchesWarningContent": "即將選取所有修補檔——之中包含不推薦的修補檔,且可能造成非預期的結果。"
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "選取此修補檔可能導致修補錯誤。\n應用程式版本 {packageVersion}\n支援的版本 {supportedVersions}", "unsupportedDialogText": "選取此修補檔可能導致修補錯誤。\n應用程式版本 {packageVersion}\n支援的版本 {supportedVersions}",
"unsupportedPatchVersion": "不支援此應用程式的版本的修補作業。請在設定中啟用實驗性選項以繼續進行。" "unsupportedPatchVersion": "修補檔不支援這個版本的應用程式。需啟用設定中實驗性選項才可繼續下一步。"
}, },
"installerView": { "installerView": {
"widgetTitle": "安裝程式", "widgetTitle": "安裝程式",
@ -121,6 +121,7 @@
"englishOption": "English", "englishOption": "English",
"sourcesLabel": "來源", "sourcesLabel": "來源",
"sourcesLabelHint": "設定自訂來源", "sourcesLabelHint": "設定自訂來源",
"hostRepositoryLabel": "儲存庫 API",
"orgPatchesLabel": "修補檔組織", "orgPatchesLabel": "修補檔組織",
"sourcesPatchesLabel": "修補檔來源", "sourcesPatchesLabel": "修補檔來源",
"orgIntegrationsLabel": "整合組織", "orgIntegrationsLabel": "整合組織",
@ -135,6 +136,8 @@
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"apiURLHint": "設定自訂 API URL", "apiURLHint": "設定自訂 API URL",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"experimentalUniversalPatchesLabel": "支援實驗性通用型修補檔",
"experimentalUniversalPatchesHint": "顯示所有可使用通用型修補檔的應用程式,載入應用程式清單的時長可能會變得更慢",
"experimentalPatchesLabel": "支援實驗性修補檔", "experimentalPatchesLabel": "支援實驗性修補檔",
"experimentalPatchesHint": "啟用以在任何應用程式版本中使用不支援的修補檔", "experimentalPatchesHint": "啟用以在任何應用程式版本中使用不支援的修補檔",
"enabledExperimentalPatches": "已啟用支援實驗性修補檔", "enabledExperimentalPatches": "已啟用支援實驗性修補檔",
@ -183,7 +186,7 @@
"patchedDateHint": "{date} {time}", "patchedDateHint": "{date} {time}",
"appliedPatchesLabel": "已套用修補檔", "appliedPatchesLabel": "已套用修補檔",
"appliedPatchesHint": "已套用 {quantity} 個修補檔", "appliedPatchesHint": "已套用 {quantity} 個修補檔",
"updateNotImplemented": "這項功能還沒有實現" "updateNotImplemented": "這項功能尚未實作"
}, },
"contributorsView": { "contributorsView": {
"widgetTitle": "貢獻者", "widgetTitle": "貢獻者",

16
docs/0_prerequisites.md Normal file
View File

@ -0,0 +1,16 @@
# 💼 Prerequisites
In order to use ReVanced Manager, certain requirements must be met.
## 🤝 Requirements
- An Android device running Android 8 or higher
- Any device architecture except ARMv7[^1]
[^1]: This constraint only applies to patches, that require patching APK resources which is why some patches may or may not work on ARMv7 architecture. You can find out, which architectures your device supports here: [⚙️ Configuring ReVanced Manager](2_4_settings.md#%E2%84%B9%EF%B8%8F-about).
## ⏭️ What's next
The next page will guide you through patching an app.
Continue: [⬇️ Installation](1_installation.md)

14
docs/1_installation.md Normal file
View File

@ -0,0 +1,14 @@
# ⬇️ Installation
In order to use ReVanced on your Android device, ReVanced Manager must be installed.
## 🪜 Installation steps
1. Download the latest version of ReVanced Manager from [here](https://github.com/revanced/revanced-manager/releases/latest)
2. Install ReVanced Manager
## ⏭️ What's next
The next page will guide you through using ReVanced Manager.
Continue: [🪛 Usage](2_usage.md)

27
docs/2_1_patching.md Normal file
View File

@ -0,0 +1,27 @@
# 🧩 Patching apps
The following pages will guide you through using ReVanced Manager to patch apps.
## 🪜 Steps to patch apps
1. Navigate to the **Patcher** tab from the bottom navigation bar
2. Tap on the **Select an app** card
3. Choose an app to patch[^1]
> **Note**: The suggested version is visible in each app's card.
4. Tap on the **Select patches** card and select the patches you want to apply[^2]
> **Warning**: If you see a warning you can click on it for more information.
5. Tap on the **Done** then **Patch** button
> **Warning**: The patching process may take ~5 minutes. Exiting the app may increase the time it takes to patch.
6. Tap on the **Install** button
> **Note**: If you are rooted, you can mount the patched app on top of the original app.[^3]
> Optionally, you may export the patched app to storage using the options in the top right corner.
[^1]: Non-root users may be prompted to select an APK from storage, in which case you have to source the APK file yourself. ReVanced does not provide any APK files.
[^2]: It is suggested to use the default set of patches by tapping on the **Default** button above the list of patches.
[^3]: Mounting the patched app on top of the original app will only work if the installed app version matches the version of the app selected in step 3. above.
## ⏭️ What's next
The next page will bring you back to the usage page.
Continue: [🛠️ Usage](2_usage.md)

16
docs/2_2_managing.md Normal file
View File

@ -0,0 +1,16 @@
# 🧰 Managing patched apps
After patching an app, you may want to manage it. This page will guide you through managing patched apps.
## 🪜 Steps to manage patched apps
1. Tap on the **Dashboard** tab in the bottom navigation bar
2. Select the **Installed** chip
3. Tap on the **Info** button for the app you want to manage
4. Choose one of the options from the menu
## ⏭️ What's next
The next page will bring you back to the usage page.
Continue: [🛠️ Usage](2_usage.md)

14
docs/2_3_updating.md Normal file
View File

@ -0,0 +1,14 @@
# 🔄 Updating ReVanced Manager
In order to keep up with the latest features and bug fixes, it is recommended to keep ReVanced Manager up to date.
## 🪜 Updating steps
1. Navigate to the **Dashboard** tab from the bottom navigation bar
2. Tap on the **Update** button in the **Updates** section
## ⏭️ What's next
The next page will bring you back to the usage page.
Continue: [🛠️ Usage](2_usage.md)

39
docs/2_4_settings.md Normal file
View File

@ -0,0 +1,39 @@
# ⚙️ Configuring ReVanced Manager
ReVanced Manager has settings that can be configured to your liking.
## 🪛 Essential settings
- ### 🔗 API URL
Specify the URL of the API to use. This is used to fetch ReVanced Patches and update ReVanced Manager.
- ### 🧬 Sources
Override the API and change the source of ReVanced Patches.
- ### 🧪 Experimental ReVanced Patches support
Lift app version constraints from ReVanced Patches. This allows you to patch any version of an app, even if the patch is not explicitly compatible with it.
- ### 🧑‍🔬 Experimental universal support
This will show or hide ReVanced Patches, which are not meant for any app in particular but rather for all apps but may not work on all apps.
- ### 🔑 Export, import or delete keystore
Manage the keystore used to sign patched apps.
- ### 📄 Export, import or reset ReVanced Patches selection
Manage the ReVanced Patches selection. This is useful if you want to share your ReVanced Patches selection with others or reset it to the default selection.
- ### About
View information about your device and ReVanced Manager. This includes the version of ReVanced Manager and supported architectures of your device.
## ⏭️ What's next
The next page will bring you back to the usage page.
Continue: [🛠️ Usage](2_usage.md)

16
docs/2_usage.md Normal file
View File

@ -0,0 +1,16 @@
# 🛠️ Usage
The following pages will guide you through using ReVanced Manager to patch apps, manage patched apps, and update ReVanced Manager.
## 📖 Table of contents
1. [🧩 Patching apps](2_1_patching.md)
2. [🧰 Managing patched apps](2_2_managing.md)
3. [🔄 Updating ReVanced Manager](2_3_updating.md)
4. [⚙️ Configuring ReVanced Manager](2_4_settings.md)
## ⏭️ What's next
The next page will guide you through troubleshooting ReVanced Manager.
Continue: [🛟 Troubleshooting](3_troubleshooting.md)

31
docs/3_troubleshooting.md Normal file
View File

@ -0,0 +1,31 @@
# 🛟 Troubleshooting
In case you encounter any issues while using ReVanced Manager, please refer to this page for possible solutions.
- 💉 Patching fails with an error
Make sure ReVanced Manager is up to date by following [🔄 Updating ReVanced Manager](2_3_updating.md) and select the **Default** button when choosing patches.
- 💥 App not installed as package conflicts with an existing package
An existing installation of the app you're trying to patch is conflicting with the patched app. Uninstall the existing app before installing the patched app.
- ❗️ Error code `135`, `139` or `1` when patching the app
Your device is not supported. Refer to the [Prerequisites](0_prerequisites.md) page for supported devices.
Alternatively, you can use [ReVanced CLI](https://github.com/revanced/revanced-cli) to patch the app.
- 🚫 Non-root install is not possible with the current patches selection
Select the **Default** button when choosing patches.
- 🚨 Patched app crashes on launch
Select the **Default** button when choosing patches.
## ⏭️ What's next
The next page will teach you how to build ReVanced Manager from source.
Continue: [🛠️ Building from source](4_building.md)

40
docs/4_building.md Normal file
View File

@ -0,0 +1,40 @@
# 🛠️ Building from source
This page will guide you through building ReVanced Manager from source.
1. Setup the Flutter environment for your [platform](https://docs.flutter.dev/get-started/install)
2. Clone the repository
```sh
git clone https://github.com/revanced/revanced-manager.git && cd revanced-manager
```
3. Create a GitHub personal access token with the `read:packages` scope [here](https://github.com/settings/tokens/new?scopes=read:packages&description=ReVanced)
4. Add your GitHub username and the token to `~/.gradle/gradle.properties`
```properties
gpr.user = YourUsername
gpr.key = ghp_longrandomkey
```
5. Get dependencies
```sh
flutter pub get
```
6. Delete conflicting outputs
```sh
flutter packages pub run build_runner build --delete-conflicting-outputs
```
> **Note**: Must be run every time you sync your local repository with the remote repository.
7. Build the APK
```sh
flutter build apk
```

21
docs/README.md Normal file
View File

@ -0,0 +1,21 @@
# 💊 ReVanced Manager
This documentation explains how to use [ReVanced Manager](https://github.com/revanced/revanced-manager).
## 📖 Table of contents
0. [💼 Prerequisites](0_prerequisites.md)
1. [⬇️ Installation](1_installation.md)
2. [🛠️ Usage](2_usage.md)
1. [🧩 Patching apps](2_1_patching.md)
2. [🧰 Managing patched apps](2_2_managing.md)
3. [🔄 Updating ReVanced Manager](2_3_updating.md)
4. [⚙️ Configuring ReVanced Manager](2_4_settings.md)
3. [🛟 Troubleshooting](3_troubleshooting.md)
4. [🛠 Building from source](4_building.md)
## ⏭️ Start here
The next page will tell you about the prerequisites for using ReVanced Manager.
Continue: [💼 Prerequisites](0_prerequisites.md)

2
fastlane/Appfile Normal file
View File

@ -0,0 +1,2 @@
json_key_file("") # Path to the json secret file - Follow https://docs.fastlane.tools/actions/supply/#setup to get one
package_name("app.revanced.manager.flutter") # e.g. com.krausefx.app

38
fastlane/Fastfile Normal file
View File

@ -0,0 +1,38 @@
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane
default_platform(:android)
platform :android do
desc "Runs all the tests"
lane :test do
gradle(task: "test")
end
desc "Submit a new Beta Build to Crashlytics Beta"
lane :beta do
gradle(task: "clean assembleRelease")
crashlytics
# sh "your_script.sh"
# You can also use other beta testing services here
end
desc "Deploy a new version to the Google Play"
lane :deploy do
gradle(task: "clean assembleRelease")
upload_to_play_store
end
end

48
fastlane/README.md Normal file
View File

@ -0,0 +1,48 @@
fastlane documentation
----
# Installation
Make sure you have the latest version of the Xcode command line tools installed:
```sh
xcode-select --install
```
For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane)
# Available Actions
## Android
### android test
```sh
[bundle exec] fastlane android test
```
Runs all the tests
### android beta
```sh
[bundle exec] fastlane android beta
```
Submit a new Beta Build to Crashlytics Beta
### android deploy
```sh
[bundle exec] fastlane android deploy
```
Deploy a new version to the Google Play
----
This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools).
The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools).

View File

@ -0,0 +1 @@
ReVanced Manager is an Android application that uses ReVanced Patcher to add, remove, and modify existing functionalities in Android applications

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 694 KiB

View File

@ -0,0 +1 @@
Patch your favorite apps, right on your device.

View File

@ -0,0 +1 @@
ReVanced Manager

20
fastlane/report.xml Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,3 @@
import 'package:revanced_manager/services/crowdin_api.dart';
import 'package:revanced_manager/services/github_api.dart'; import 'package:revanced_manager/services/github_api.dart';
import 'package:revanced_manager/services/manager_api.dart'; import 'package:revanced_manager/services/manager_api.dart';
import 'package:revanced_manager/services/patcher_api.dart'; import 'package:revanced_manager/services/patcher_api.dart';
@ -38,7 +37,6 @@ import 'package:stacked_services/stacked_services.dart';
LazySingleton(classType: PatcherAPI), LazySingleton(classType: PatcherAPI),
LazySingleton(classType: RevancedAPI), LazySingleton(classType: RevancedAPI),
LazySingleton(classType: GithubAPI), LazySingleton(classType: GithubAPI),
LazySingleton(classType: CrowdinAPI),
LazySingleton(classType: Toast), LazySingleton(classType: Toast),
], ],
) )

View File

@ -1,18 +1,17 @@
import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_i18n/flutter_i18n.dart'; import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:revanced_manager/app/app.locator.dart'; import 'package:revanced_manager/app/app.locator.dart';
import 'package:revanced_manager/services/crowdin_api.dart';
import 'package:revanced_manager/services/github_api.dart'; import 'package:revanced_manager/services/github_api.dart';
import 'package:revanced_manager/services/manager_api.dart'; import 'package:revanced_manager/services/manager_api.dart';
import 'package:revanced_manager/services/patcher_api.dart'; import 'package:revanced_manager/services/patcher_api.dart';
import 'package:revanced_manager/services/revanced_api.dart'; import 'package:revanced_manager/services/revanced_api.dart';
import 'package:revanced_manager/ui/theme/dynamic_theme_builder.dart'; import 'package:revanced_manager/ui/theme/dynamic_theme_builder.dart';
import 'package:revanced_manager/ui/views/navigation/navigation_view.dart'; import 'package:revanced_manager/ui/views/navigation/navigation_view.dart';
import 'package:revanced_manager/utils/environment.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:stacked_themes/stacked_themes.dart'; import 'package:stacked_themes/stacked_themes.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
import 'package:timezone/data/latest.dart' as tz; import 'package:timezone/data/latest.dart' as tz;
late SharedPreferences prefs; late SharedPreferences prefs;
@ -21,37 +20,14 @@ Future main() async {
await setupLocator(); await setupLocator();
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await locator<ManagerAPI>().initialize(); await locator<ManagerAPI>().initialize();
String apiUrl = locator<ManagerAPI>().getApiUrl(); final String apiUrl = locator<ManagerAPI>().getApiUrl();
await locator<RevancedAPI>().initialize(apiUrl); await locator<RevancedAPI>().initialize(apiUrl);
await locator<CrowdinAPI>().initialize(); final String repoUrl = locator<ManagerAPI>().getRepoUrl();
bool isSentryEnabled = locator<ManagerAPI>().isSentryEnabled(); locator<GithubAPI>().initialize(repoUrl);
locator<GithubAPI>().initialize();
await locator<PatcherAPI>().initialize(); await locator<PatcherAPI>().initialize();
tz.initializeTimeZones(); tz.initializeTimeZones();
prefs = await SharedPreferences.getInstance(); prefs = await SharedPreferences.getInstance();
await SentryFlutter.init(
(options) {
options
..dsn = isSentryEnabled ? Environment.sentryDSN : ''
..environment = 'alpha'
..release = '0.1'
..tracesSampleRate = 1.0
..anrEnabled = true
..enableOutOfMemoryTracking = true
..sampleRate = isSentryEnabled ? 1.0 : 0.0
..beforeSend = (event, hint) {
if (isSentryEnabled) {
return event;
} else {
return null;
}
} as BeforeSendCallback?;
},
appRunner: () {
runApp(const MyApp());
},
);
runApp(const MyApp()); runApp(const MyApp());
} }
@ -64,7 +40,7 @@ class MyApp extends StatelessWidget {
// String replaceLocale = rawLocale.replaceAll('_', '-'); // String replaceLocale = rawLocale.replaceAll('_', '-');
// List<String> localeList = replaceLocale.split('-'); // List<String> localeList = replaceLocale.split('-');
// Locale locale = Locale(localeList[0], localeList[1]); // Locale locale = Locale(localeList[0], localeList[1]);
Locale locale = const Locale('en', 'US'); const Locale locale = Locale('en', 'US');
return DynamicThemeBuilder( return DynamicThemeBuilder(
title: 'ReVanced Manager', title: 'ReVanced Manager',
@ -78,8 +54,9 @@ class MyApp extends StatelessWidget {
useCountryCode: true, useCountryCode: true,
), ),
missingTranslationHandler: (key, locale) { missingTranslationHandler: (key, locale) {
print( log(
'--> Missing translation: key: $key, languageCode: ${locale?.languageCode}'); '--> Missing translation: key: $key, languageCode: ${locale?.languageCode}',
);
}, },
), ),
GlobalMaterialLocalizations.delegate, GlobalMaterialLocalizations.delegate,

View File

@ -5,13 +5,6 @@ part 'patch.g.dart';
@JsonSerializable() @JsonSerializable()
class Patch { class Patch {
final String name;
final String description;
final String version;
final bool excluded;
final List<String> dependencies;
final List<Package> compatiblePackages;
Patch({ Patch({
required this.name, required this.name,
required this.description, required this.description,
@ -22,6 +15,12 @@ class Patch {
}); });
factory Patch.fromJson(Map<String, dynamic> json) => _$PatchFromJson(json); factory Patch.fromJson(Map<String, dynamic> json) => _$PatchFromJson(json);
final String name;
final String description;
final String version;
final bool excluded;
final List<String> dependencies;
final List<Package> compatiblePackages;
Map<String, dynamic> toJson() => _$PatchToJson(this); Map<String, dynamic> toJson() => _$PatchToJson(this);
@ -37,9 +36,6 @@ class Patch {
@JsonSerializable() @JsonSerializable()
class Package { class Package {
final String name;
final List<String> versions;
Package({ Package({
required this.name, required this.name,
required this.versions, required this.versions,
@ -47,6 +43,8 @@ class Package {
factory Package.fromJson(Map<String, dynamic> json) => factory Package.fromJson(Map<String, dynamic> json) =>
_$PackageFromJson(json); _$PackageFromJson(json);
final String name;
final List<String> versions;
Map toJson() => _$PackageToJson(this); Map toJson() => _$PackageToJson(this);
} }

View File

@ -6,23 +6,6 @@ part 'patched_application.g.dart';
@JsonSerializable() @JsonSerializable()
class PatchedApplication { class PatchedApplication {
String name;
String packageName;
String originalPackageName;
String version;
final String apkFilePath;
@JsonKey(
fromJson: decodeBase64,
toJson: encodeBase64,
)
Uint8List icon;
DateTime patchDate;
bool isRooted;
bool isFromStorage;
bool hasUpdates;
List<String> appliedPatches;
List<String> changelog;
PatchedApplication({ PatchedApplication({
required this.name, required this.name,
required this.packageName, required this.packageName,
@ -40,6 +23,22 @@ class PatchedApplication {
factory PatchedApplication.fromJson(Map<String, dynamic> json) => factory PatchedApplication.fromJson(Map<String, dynamic> json) =>
_$PatchedApplicationFromJson(json); _$PatchedApplicationFromJson(json);
String name;
String packageName;
String originalPackageName;
String version;
final String apkFilePath;
@JsonKey(
fromJson: decodeBase64,
toJson: encodeBase64,
)
Uint8List icon;
DateTime patchDate;
bool isRooted;
bool isFromStorage;
bool hasUpdates;
List<String> appliedPatches;
List<String> changelog;
Map<String, dynamic> toJson() => _$PatchedApplicationToJson(this); Map<String, dynamic> toJson() => _$PatchedApplicationToJson(this);

View File

@ -1,61 +0,0 @@
import 'package:dio/dio.dart';
import 'package:dio_http_cache_lts/dio_http_cache_lts.dart';
import 'package:injectable/injectable.dart' hide Environment;
import 'package:revanced_manager/utils/environment.dart';
import 'package:sentry_dio/sentry_dio.dart';
import 'package:sentry_flutter/sentry_flutter.dart';
@lazySingleton
class CrowdinAPI {
late Dio _dio = Dio();
final DioCacheManager _dioCacheManager = DioCacheManager(CacheConfig());
final apiKey = Environment.crowdinKEY;
Future<void> initialize() async {
try {
_dio = Dio(BaseOptions(
baseUrl: 'https://api.crowdin.com/api/v2',
));
_dio.interceptors.add(_dioCacheManager.interceptor);
_dio.addSentry(
captureFailedRequests: true,
);
} on Exception catch (e, s) {
await Sentry.captureException(e, stackTrace: s);
}
}
Future<void> clearAllCache() async {
try {
await _dioCacheManager.clearAll();
} on Exception catch (e, s) {
await Sentry.captureException(e, stackTrace: s);
}
}
Future<List> getLanguages() async {
try {
var response = await _dio.get(
'/projects',
options: buildCacheOptions(
const Duration(hours: 6),
maxStale: const Duration(days: 1),
options: Options(
headers: {
'Authorization': 'Bearer $apiKey',
},
contentType: 'application/json',
),
),
);
List targetLanguages =
await response.data['data'][0]['data']['targetLanguages'];
return targetLanguages;
} on Exception catch (e, s) {
await Sentry.captureException(e, stackTrace: s);
return [];
}
}
}

View File

@ -2,21 +2,23 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:dio_http_cache_lts/dio_http_cache_lts.dart'; import 'package:dio_cache_interceptor/dio_cache_interceptor.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:flutter_cache_manager/flutter_cache_manager.dart';
import 'package:injectable/injectable.dart'; import 'package:injectable/injectable.dart';
import 'package:revanced_manager/models/patch.dart'; import 'package:revanced_manager/models/patch.dart';
import 'package:sentry_flutter/sentry_flutter.dart'; import 'package:revanced_manager/services/manager_api.dart';
import 'package:sentry_dio/sentry_dio.dart';
@lazySingleton @lazySingleton
class GithubAPI { class GithubAPI {
late Dio _dio = Dio(); late Dio _dio = Dio();
final DioCacheManager _dioCacheManager = DioCacheManager(CacheConfig());
final Options _cacheOptions = buildCacheOptions( final _cacheOptions = CacheOptions(
const Duration(hours: 6), store: MemCacheStore(),
maxStale: const Duration(days: 1), maxStale: const Duration(days: 1),
priority: CachePriority.high,
); );
final Map<String, String> repoAppPath = { final Map<String, String> repoAppPath = {
'com.google.android.youtube': 'youtube', 'com.google.android.youtube': 'youtube',
'com.google.android.apps.youtube.music': 'music', 'com.google.android.apps.youtube.music': 'music',
@ -28,38 +30,79 @@ class GithubAPI {
'com.spotify.music': 'spotify', 'com.spotify.music': 'spotify',
}; };
void initialize() async { Future<void> initialize(String repoUrl) async {
try { try {
_dio = Dio(BaseOptions( _dio = Dio(
baseUrl: 'https://api.github.com', BaseOptions(
)); baseUrl: repoUrl,
),
_dio.interceptors.add(_dioCacheManager.interceptor);
_dio.addSentry(
captureFailedRequests: true,
); );
} on Exception catch (e, s) {
await Sentry.captureException(e, stackTrace: s); _dio.interceptors.add(DioCacheInterceptor(options: _cacheOptions));
} on Exception catch (e) {
if (kDebugMode) {
print(e);
}
} }
} }
Future<void> clearAllCache() async { Future<void> clearAllCache() async {
try { try {
await _dioCacheManager.clearAll(); await _cacheOptions.store!.clean();
} on Exception catch (e, s) { } on Exception catch (e) {
await Sentry.captureException(e, stackTrace: s); if (kDebugMode) {
print(e);
}
} }
} }
Future<Map<String, dynamic>?> getLatestRelease(String repoName) async { Future<Map<String, dynamic>?> getLatestRelease(
String repoName,
) async {
try { try {
var response = await _dio.get( final response = await _dio.get(
'/repos/$repoName/releases/latest', '/repos/$repoName/releases',
options: _cacheOptions,
); );
return response.data; return response.data[0];
} on Exception catch (e, s) { } on Exception catch (e) {
await Sentry.captureException(e, stackTrace: s); if (kDebugMode) {
print(e);
}
return null;
}
}
Future<Map<String, dynamic>?> getLatestManagerRelease(
String repoName,
) async {
try {
final response = await _dio.get(
'/repos/$repoName/releases',
);
final Map<String, dynamic> releases = response.data[0];
int updates = 0;
final String currentVersion =
await ManagerAPI().getCurrentManagerVersion();
while (response.data[updates]['tag_name'] != 'v$currentVersion') {
updates++;
}
for (int i = 1; i < updates; i++) {
releases.update(
'body',
(value) =>
value +
'\n' +
'# ' +
response.data[i]['tag_name'] +
'\n' +
response.data[i]['body'],
);
}
return releases;
} on Exception catch (e) {
if (kDebugMode) {
print(e);
}
return null; return null;
} }
} }
@ -69,37 +112,41 @@ class GithubAPI {
String repoName, String repoName,
DateTime since, DateTime since,
) async { ) async {
String path = final String path =
'src/main/kotlin/app/revanced/patches/${repoAppPath[packageName]}'; 'src/main/kotlin/app/revanced/patches/${repoAppPath[packageName]}';
try { try {
var response = await _dio.get( final response = await _dio.get(
'/repos/$repoName/commits', '/repos/$repoName/commits',
queryParameters: { queryParameters: {
'path': path, 'path': path,
'since': since.toIso8601String(), 'since': since.toIso8601String(),
}, },
options: _cacheOptions,
); );
List<dynamic> commits = response.data; final List<dynamic> commits = response.data;
return commits return commits
.map( .map(
(commit) => (commit['commit']['message']).split('\n')[0] + (commit) => commit['commit']['message'].split('\n')[0] +
' - ' + ' - ' +
commit['commit']['author']['name'] + commit['commit']['author']['name'] +
'\n' as String, '\n' as String,
) )
.toList(); .toList();
} on Exception catch (e, s) { } on Exception catch (e) {
await Sentry.captureException(e, stackTrace: s); if (kDebugMode) {
return List.empty(); print(e);
}
} }
return [];
} }
Future<File?> getLatestReleaseFile(String extension, String repoName) async { Future<File?> getLatestReleaseFile(
String extension,
String repoName,
) async {
try { try {
Map<String, dynamic>? release = await getLatestRelease(repoName); final Map<String, dynamic>? release = await getLatestRelease(repoName);
if (release != null) { if (release != null) {
Map<String, dynamic>? asset = final Map<String, dynamic>? asset =
(release['assets'] as List<dynamic>).firstWhereOrNull( (release['assets'] as List<dynamic>).firstWhereOrNull(
(asset) => (asset['name'] as String).endsWith(extension), (asset) => (asset['name'] as String).endsWith(extension),
); );
@ -109,9 +156,10 @@ class GithubAPI {
); );
} }
} }
} on Exception catch (e, s) { } on Exception catch (e) {
await Sentry.captureException(e, stackTrace: s); if (kDebugMode) {
return null; print(e);
}
} }
return null; return null;
} }
@ -119,29 +167,34 @@ class GithubAPI {
Future<List<Patch>> getPatches(String repoName) async { Future<List<Patch>> getPatches(String repoName) async {
List<Patch> patches = []; List<Patch> patches = [];
try { try {
File? f = await getLatestReleaseFile('.json', repoName); final File? f = await getLatestReleaseFile('.json', repoName);
if (f != null) { if (f != null) {
List<dynamic> list = jsonDecode(f.readAsStringSync()); final List<dynamic> list = jsonDecode(f.readAsStringSync());
patches = list.map((patch) => Patch.fromJson(patch)).toList(); patches = list.map((patch) => Patch.fromJson(patch)).toList();
} }
} on Exception catch (e, s) { } on Exception catch (e) {
await Sentry.captureException(e, stackTrace: s); if (kDebugMode) {
return List.empty(); print(e);
}
} }
return patches; return patches;
} }
Future<String> getLastestReleaseVersion(String repoName) async { Future<String> getLastestReleaseVersion(String repoName) async {
try { try {
Map<String, dynamic>? release = await getLatestRelease(repoName); final Map<String, dynamic>? release = await getLatestRelease(repoName);
if (release != null) { if (release != null) {
return release['tag_name']; return release['tag_name'];
} else { } else {
return 'Unknown'; return 'Unknown';
} }
} on Exception catch (e, s) { } on Exception catch (e) {
await Sentry.captureException(e, stackTrace: s); if (kDebugMode) {
return ''; print(e);
}
return 'Unknown';
} }
} }
} }

Some files were not shown because too many files have changed in this diff Show More