Compare commits

...

60 Commits

Author SHA1 Message Date
semantic-release-bot
a71a930125 chore(release): 1.19.4-dev.2 [skip ci]
## [1.19.4-dev.2](https://github.com/ReVanced/revanced-manager/compare/v1.19.4-dev.1...v1.19.4-dev.2) (2024-03-23)

### Bug Fixes

* Ensure safe area usage in Changelogs Modal Bottom Sheet ([#1772](https://github.com/ReVanced/revanced-manager/issues/1772)) ([c981cb4](c981cb4a41))
2024-03-23 11:03:27 +00:00
github-actions[bot]
af7e39b7f0 chore(i18n): Sync translations (#1719)
Co-authored-by: revanced-bot <github@revanced.app>
2024-03-23 17:55:11 +07:00
DMzS
c981cb4a41 fix: Ensure safe area usage in Changelogs Modal Bottom Sheet (#1772) 2024-03-23 17:51:17 +07:00
Pun Butrach
3ea6ef0bbf ci(Dependabot): Add Gradle ecosystem to RVM Flutter 2024-03-22 04:54:57 +00:00
Pun Butrach
2772a96727 docs(Build): Shorten build_runner args 2024-03-22 04:41:34 +00:00
oSumAtrIX
50b4a5f1d8 ci: Fix PR build success message 2024-03-18 11:51:07 +01:00
semantic-release-bot
e52a6ce734 chore(release): 1.19.4-dev.1 [skip ci]
## [1.19.4-dev.1](https://github.com/ReVanced/revanced-manager/compare/v1.19.3...v1.19.4-dev.1) (2024-03-17)

### Bug Fixes

* Pre-releases changelog being shown ([#1767](https://github.com/ReVanced/revanced-manager/issues/1767)) ([add49e1](add49e14fb))
2024-03-17 17:22:14 +00:00
aAbed
add49e14fb fix: Pre-releases changelog being shown (#1767) 2024-03-17 10:14:22 -07:00
Pun Butrach
ab13895196 docs(Security): Improve badges' accessibility
Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
2024-03-11 15:05:40 +07:00
Pun Butrach
846afb420b ci(PR Sync): Use revanced-bot acount
Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
2024-03-11 14:59:29 +07:00
Pun Butrach
dca8a1dab6 ci(Crowdin): Add workflow change to trigger event
Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
2024-03-11 14:49:46 +07:00
Pun Butrach
d1c36c1bcc ci(Crowdin): Improve configuration of the workflow
Signed-off-by: Pun Butrach <pun.butrach@gmail.com>
2024-03-11 14:49:13 +07:00
semantic-release-bot
c209c32613 chore(release): 1.19.3 [skip ci]
## [1.19.3](https://github.com/ReVanced/revanced-manager/compare/v1.19.2...v1.19.3) (2024-03-09)

### Bug Fixes

* Copy APK to working directory before trying to write to it ([5cd1cba](5cd1cba668))
2024-03-09 09:16:08 +00:00
oSumAtrIX
9e5e89ac95 chore: Merge branch dev to main (#1756) 2024-03-09 10:09:13 +01:00
semantic-release-bot
7cc6b88e4e chore(release): 1.19.3-dev.1 [skip ci]
## [1.19.3-dev.1](https://github.com/ReVanced/revanced-manager/compare/v1.19.2...v1.19.3-dev.1) (2024-03-09)

### Bug Fixes

* Copy APK to working directory before trying to write to it ([5cd1cba](5cd1cba668))
2024-03-09 09:09:02 +00:00
oSumAtrIX
5cd1cba668 fix: Copy APK to working directory before trying to write to it 2024-03-09 10:01:36 +01:00
oSumAtrIX
ca365bac6e build: Bump dependencies to fix generating keystore 2024-03-09 09:58:41 +01:00
semantic-release-bot
f1fc48ce5a chore(release): 1.19.2 [skip ci]
## [1.19.2](https://github.com/ReVanced/revanced-manager/compare/v1.19.1...v1.19.2) (2024-03-09)

### Bug Fixes

* App list is empty if all apps are installed ([#1750](https://github.com/ReVanced/revanced-manager/issues/1750)) ([1f5461f](1f5461fbe5))
* Fix white-screen when trying to install conflicting apps ([4acd738](4acd738353))
2024-03-09 03:55:35 +00:00
oSumAtrIX
316e440d0d chore: Merge branch dev to main (#1739) 2024-03-09 04:48:12 +01:00
oSumAtrIX
95018814a7 ci: Bump dependencies to fix release workflow 2024-03-09 04:44:38 +01:00
oSumAtrIX
b52e49d90a build: Bump dependencies to fix signing issues 2024-03-09 04:39:58 +01:00
oSumAtrIX
4acd738353 fix: Fix white-screen when trying to install conflicting apps
When you tried to install a patched app, but it conflicted with an existing installation, the screen would go blank. This was caused by trying to use an argument on a translation with no arguments.
2024-03-09 04:39:58 +01:00
semantic-release-bot
982249f974 chore(release): 1.19.2-dev.1 [skip ci]
## [1.19.2-dev.1](https://github.com/ReVanced/revanced-manager/compare/v1.19.1...v1.19.2-dev.1) (2024-03-08)

### Bug Fixes

* App list is empty if all apps are installed ([#1750](https://github.com/ReVanced/revanced-manager/issues/1750)) ([1f5461f](1f5461fbe5))
2024-03-08 14:49:35 +00:00
Nikita
1f5461fbe5 fix: App list is empty if all apps are installed (#1750)
Co-authored-by: Nikita <n.petrjakov@niitp.in>
2024-03-08 21:41:16 +07:00
oSumAtrIX
adb7e5663a docs: Fix small mistakes [skip ci] 2024-03-05 14:58:11 +01:00
Benjamin
ffc14f2146 chore: Upgrade dependencies (#1734) 2024-03-05 14:09:02 +07:00
semantic-release-bot
0c57322051 chore(release): 1.19.1 [skip ci]
## [1.19.1](https://github.com/ReVanced/revanced-manager/compare/v1.19.0...v1.19.1) (2024-03-05)

### Bug Fixes

* Keep names for needed classes to fix crash at launch ([eef7016](eef701615b))
2024-03-05 02:29:37 +00:00
oSumAtrIX
a8b7debf8d chore: Merge branch dev to main (#1729) 2024-03-05 03:22:11 +01:00
oSumAtrIX
7ed9787b58 ci: Add workflow to open a PR to main 2024-03-05 03:21:07 +01:00
oSumAtrIX
eef701615b fix: Keep names for needed classes to fix crash at launch 2024-03-05 03:19:20 +01:00
semantic-release-bot
97d8519b8b chore(release): 1.19.0 [skip ci]
# [1.19.0](https://github.com/ReVanced/revanced-manager/compare/v1.18.0...v1.19.0) (2024-03-05)

### Bug Fixes

* added a trailing comma ([975180b](975180b075))
* adjust padding ([3559477](3559477247))
* Allow mounting without Magisk ([3f96608](3f96608398))
* Bump dependencies to support BCS keystore ([6ec6546](6ec6546cc5))
* Do not delete files from post-fs-data.d ([70a1086](70a1086edf))
* Fix patched APKs exports after installation ([1200360](1200360588))
* fix redundant buttons on dialog ([079c0de](079c0defaf))
* Incorrect strings and logics ([#1619](https://github.com/ReVanced/revanced-manager/issues/1619)) ([4f22e88](4f22e88e42))
* **Keystore Password:** textfield title display ([8e52abd](8e52abda9a))
* Mount script causes build to fail ([#1613](https://github.com/ReVanced/revanced-manager/issues/1613)) ([f3c78c2](f3c78c2c24))
* **Patch Option:** Set text colour on dropdown menu ([acb1e24](acb1e2434b))
* **PopScope:** User able to exit patch screen when the installer is still running ([#1663](https://github.com/ReVanced/revanced-manager/issues/1663)) ([eb6d3cd](eb6d3cd64e))
* **Release CI:** truncate the "v" from version ([8595099](85950991ab))
* Show version label correctly ([c72d10a](c72d10ac85))
* Specify that dark theme is dark ([#1699](https://github.com/ReVanced/revanced-manager/issues/1699)) ([d4b15ae](d4b15aee4d))
* Stop patch when signing fails ([#1553](https://github.com/ReVanced/revanced-manager/issues/1553)) ([5b2c551](5b2c55142e))
* **Update Confirmation Sheet:** Add top padding ([9aeb156](9aeb156d92))
* Use correct title size for bottom sheet ([#1687](https://github.com/ReVanced/revanced-manager/issues/1687)) ([3436523](34365239c1))
* Use correct version code & name ([#1647](https://github.com/ReVanced/revanced-manager/issues/1647)) ([d933997](d933997c89))
* use lowercase repo names ([#1626](https://github.com/ReVanced/revanced-manager/issues/1626)) ([edd8602](edd86024b9))

### Features

* Add a toggle for alternative sources ([#1686](https://github.com/ReVanced/revanced-manager/issues/1686)) ([f89c742](f89c742c90))
* Add API migration code ([#1615](https://github.com/ReVanced/revanced-manager/issues/1615)) ([28ae276](28ae2766f0))
* add haptic feedback ([#1459](https://github.com/ReVanced/revanced-manager/issues/1459)) ([7911459](7911459817))
* Allow changing languages ([#1488](https://github.com/ReVanced/revanced-manager/issues/1488)) ([f82c439](f82c439b26))
* Display current app language at the top of the list ([aa0575a](aa0575a637))
* Hide the Install button during installation ([#1633](https://github.com/ReVanced/revanced-manager/issues/1633)) ([3e696d6](3e696d6847))
* Improve app selector and patcher UI ([#1616](https://github.com/ReVanced/revanced-manager/issues/1616)) ([efb2d5e](efb2d5ef32))
* Improve consistency on language selector ([b2119ce](b2119ce60e))
* Improve language distinguishness and resolve language-specific issues ([#1706](https://github.com/ReVanced/revanced-manager/issues/1706)) ([6d866d4](6d866d4424))
* Improve Split APK warning readability ([#1625](https://github.com/ReVanced/revanced-manager/issues/1625)) ([6fd740f](6fd740f8c0))
* Show a dialog when an update is available ([#1654](https://github.com/ReVanced/revanced-manager/issues/1654)) ([c7d975e](c7d975e612))
* Simplify settings strings ([#1618](https://github.com/ReVanced/revanced-manager/issues/1618)) ([0d45fe4](0d45fe4a97))
* Use more appropriate progress values ([2d7026a](2d7026ac7a))
* use native TextField ([9ed43ef](9ed43efe5d))

### Performance Improvements

* Load patched apps as soon as possible ([c94eb7a](c94eb7a48e))

### Reverts

* WillPopScope migration ([3b0fed5](3b0fed55e4))
2024-03-05 01:57:21 +00:00
oSumAtrIX
00210f7f0e chore: Workaround CI bug by setting the expected version 2024-03-05 02:49:42 +01:00
Pun Butrach
cea4c6c27a chore: Merge dev to main (#1611)
100 commits 
2024-03-05 07:48:42 +07:00
semantic-release-bot
bc83a39b0f chore(release): 1.19.0-dev.21 [skip ci]
# [1.19.0-dev.21](https://github.com/ReVanced/revanced-manager/compare/v1.19.0-dev.20...v1.19.0-dev.21) (2024-03-05)

### Features

* Display current app language at the top of the list ([aa0575a](aa0575a637))
2024-03-05 00:12:19 +00:00
Ushie
aa0575a637 feat: Display current app language at the top of the list 2024-03-05 03:04:01 +03:00
semantic-release-bot
4ca7b8a7c1 chore(release): 1.19.0-dev.20 [skip ci]
# [1.19.0-dev.20](https://github.com/ReVanced/revanced-manager/compare/v1.19.0-dev.19...v1.19.0-dev.20) (2024-03-04)

### Bug Fixes

* Bump dependencies to support BCS keystore ([6ec6546](6ec6546cc5))
2024-03-04 14:56:19 +00:00
oSumAtrIX
6ec6546cc5 fix: Bump dependencies to support BCS keystore 2024-03-04 15:48:13 +01:00
oSumAtrIX
c5e04cc824 build: Bump dependencies 2024-03-04 13:53:33 +01:00
semantic-release-bot
4fc913eae1 chore(release): 1.19.0-dev.19 [skip ci]
# [1.19.0-dev.19](https://github.com/ReVanced/revanced-manager/compare/v1.19.0-dev.18...v1.19.0-dev.19) (2024-03-04)

### Bug Fixes

* Fix patched APKs exports after installation ([1200360](1200360588))

### Features

* Use more appropriate progress values ([2d7026a](2d7026ac7a))
2024-03-04 12:51:06 +00:00
oSumAtrIX
2d7026ac7a feat: Use more appropriate progress values 2024-03-04 13:43:35 +01:00
oSumAtrIX
1200360588 fix: Fix patched APKs exports after installation 2024-03-04 13:43:34 +01:00
semantic-release-bot
02722fc0be chore(release): 1.19.0-dev.18 [skip ci]
# [1.19.0-dev.18](https://github.com/ReVanced/revanced-manager/compare/v1.19.0-dev.17...v1.19.0-dev.18) (2024-03-04)
2024-03-04 12:25:39 +00:00
oSumAtrIX
2e1de94623 chore: Fix builds 2024-03-04 13:14:30 +01:00
oSumAtrIX
10bae69db6 build(Needs bump): Bump dependencies (#1717) 2024-03-04 12:47:38 +01:00
oSumAtrIX
6dee3aa1b7 docs: Fix consistency issues with other repositories (#1707) 2024-03-04 12:42:46 +01:00
github-actions[bot]
e76418d48d chore: Sync translations (#1701) 2024-03-04 11:28:34 +01:00
Pun Butrach
52e1020a90 chore(Dependency): Switch language_code back to Upstream version 2024-03-04 13:31:51 +07:00
Pun Butrach
c170392123 ci(Release): Use ReVanced account instead of semantic-release 2024-03-04 11:51:54 +07:00
Benjamin
d414a91f40 ci: Match changelog format of other ReVanced repos (#1705) 2024-02-26 03:01:30 +01:00
semantic-release-bot
6d6fae1ecd chore(release): 1.19.0-dev.17 [skip ci]
## Features
* Improve language distinguishness and resolve language-specific issues (#1706) ([Ushie](6d866d4424))
2024-02-26 01:15:28 +00:00
Ushie
6d866d4424 feat: Improve language distinguishness and resolve language-specific issues (#1706) 2024-02-26 08:08:14 +07:00
semantic-release-bot
f4dea6e58c chore(release): 1.19.0-dev.16 [skip ci]
## Features
* Hide the Install button during installation (#1633) ([Eray Erdin (&mut self)](3e696d6847))
## Bug Fixes
* Show version label correctly ([oSumAtrIX](c72d10ac85))
2024-02-25 20:57:07 +00:00
oSumAtrIX
c72d10ac85 fix: Show version label correctly 2024-02-25 21:49:38 +01:00
Eray Erdin (&mut self)
3e696d6847 feat: Hide the Install button during installation (#1633)
Co-authored-by: Ushie <ushiekane@gmail.com>
2024-02-25 23:48:52 +03:00
semantic-release-bot
28d6ab692e chore(release): 1.19.0-dev.15 [skip ci]
## Bug Fixes
* Specify that dark theme is dark (#1699) ([Benjamin](d4b15aee4d))
## Documentation
* Switch order of note and tip [skip ci] ([oSumAtrIX](d0689555f1))
## Continuous Integration
* **Release:** Remove unnecessary upload (#1695) ([Benjamin](82d6e3f105))
## Chores
* **i18n:** Sync translations (#1694) ([github-actions[bot]](f7747809f2))
2024-02-25 02:50:24 +00:00
github-actions[bot]
f7747809f2 chore(i18n): Sync translations (#1694)
Co-authored-by: Crowdin Bot <support+bot@crowdin.com>
Co-authored-by: revanced-bot <github@revanced.app>
2024-02-25 09:42:15 +07:00
Benjamin
d4b15aee4d fix: Specify that dark theme is dark (#1699) 2024-02-25 09:37:55 +07:00
oSumAtrIX
d0689555f1 docs: Switch order of note and tip [skip ci] 2024-02-25 01:01:00 +01:00
Benjamin
82d6e3f105 ci(Release): Remove unnecessary upload (#1695) 2024-02-20 06:41:03 +07:00
oSumAtrIX
bb1b0da749 chore: merge dev to main (#1573) 2023-12-23 22:43:10 +01:00
99 changed files with 1834 additions and 1809 deletions

View File

@@ -1,61 +0,0 @@
name: 🐞 Bug report
description: Create a new bug report.
title: 'bug: <title>'
labels: [bug]
body:
- type: markdown
attributes:
value: |
# ReVanced Manager bug report
Please check for existing issues [here](https://github.com/revanced/revanced-manager/labels/bug) before creating a new one.
- type: textarea
attributes:
label: Bug description
description: |
- Describe your bug in detail
- Add steps to reproduce the bug if possible (Step 1. Download some files. Step 2. ...)
- Add images and videos if possible
- List selected patches if applicable
validations:
required: true
- type: textarea
attributes:
label: Version of ReVanced Manager and version & name of application you tried to patch
validations:
required: true
- type: dropdown
attributes:
label: Installation type
options:
- Non-root
- Root
validations:
required: false
- type: textarea
attributes:
label: Device logs
description: Export logs in ReVanced Manager settings.
render: shell
validations:
required: true
- type: textarea
attributes:
label: Patcher logs
description: Export logs in "Patcher" screen.
render: shell
validations:
required: false
- type: checkboxes
attributes:
label: Acknowledgements
description: Your issue will be closed if you don't follow the checklist below!
options:
- label: This request is not a duplicate of an existing issue.
required: true
- label: I have chosen an appropriate title.
required: true
- label: All requested information has been provided properly.
required: true
- label: The issue is solely related to the ReVanced Manager
required: true

126
.github/ISSUE_TEMPLATE/bug_report.yml vendored Normal file
View File

@@ -0,0 +1,126 @@
name: 🐞 Bug report
description: Report a bug or an issue.
title: "bug: "
labels: ["Bug report"]
body:
- type: markdown
attributes:
value: |
<p align="center">
<picture>
<source
width="256px"
media="(prefers-color-scheme: dark)"
srcset="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-dark.svg"
>
<img
width="256px"
src="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-light.svg"
>
</picture>
<br>
<a href="https://revanced.app/">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg" />
<img height="24px" src="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://github.com/ReVanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
<img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="http://revanced.app/discord">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://reddit.com/r/revancedapp">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://t.me/app_revanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://x.com/revancedapp">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
<img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://www.youtube.com/@ReVanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
</picture>
</a>
<br>
<br>
Continuing the legacy of Vanced
</p>
# ReVanced Manager bug report
Before creating a new bug report, please keep the following in mind:
- **Do not submit a duplicate bug report**: You can review existing bug reports [here](https://github.com/ReVanced/revanced-manager/labels/Bug%20report).
- **Review the contribution guidelines**: Make sure your bug report adheres to it. You can find the guidelines [here](https://github.com/ReVanced/revanced-manager/blob/main/CONTRIBUTING.md).
- **Do not use the issue page for support**: If you need help or have questions, check out other platforms on [revanced.app](https://revanced.app).
- type: textarea
attributes:
label: Bug description
description: |
- Describe your bug in detail
- Add steps to reproduce the bug if possible (Step 1. ... Step 2. ...)
- Add images and videos if possible
- List used patches if applicable
validations:
required: true
- type: textarea
attributes:
label: Version of ReVanced Manager and version & name of app you are patching
validations:
required: true
- type: dropdown
attributes:
label: Installation method
options:
- Regular
- Mount
validations:
required: false
- type: textarea
attributes:
label: ReVanced Manager logs
description: Export logs in ReVanced Manager settings.
render: shell
validations:
required: true
- type: textarea
attributes:
label: Patch logs
description: Export logs in "Patcher" screen.
render: shell
validations:
required: false
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Your bug report will be closed if you don't follow the checklist below.
options:
- label: This issue is not a duplicate of an existing bug report.
required: true
- label: I have chosen an appropriate title.
required: true
- label: All requested information has been provided properly.
required: true
- label: The bug is only related to ReVanced Manager
required: true

View File

@@ -1 +1,5 @@
blank_issues_enabled: false blank_issues_enabled: false
contact_links:
- name: 🗨 Discussions
url: https://github.com/revanced/revanced-suggestions/discussions
about: Have something unspecific to ReVanced Manager in mind? Search for or start a new discussion!

View File

@@ -1,42 +0,0 @@
name: ⭐ Feature request
description: Create a new feature request.
title: 'feat: <title>'
labels: 'feature request'
body:
- type: markdown
attributes:
value: |
# ReVanced Manager feature request
Please check for existing feature requests [here](https://github.com/revanced/revanced-manager/labels/bug) before creating a new one.
- type: textarea
attributes:
label: Feature description
description: Describe your feature in detail.
validations:
required: true
- type: textarea
attributes:
label: Motivation
description: Explain why the lack of it is a problem.
validations:
required: true
- type: textarea
attributes:
label: Additional context
description: In case there is something else you want to add.
validations:
required: false
- type: checkboxes
attributes:
label: Acknowledgements
description: Your issue will be closed if you don't follow the checklist below!
options:
- label: This request is not a duplicate of an existing issue.
required: true
- label: I have chosen an appropriate title.
required: true
- label: All requested information has been provided properly.
required: true
- label: The issue is solely related to the ReVanced Manager
required: true

View File

@@ -0,0 +1,106 @@
name: ⭐ Feature request
description: Create a detailed request for a new feature.
title: "feat: "
labels: ["Feature request"]
body:
- type: markdown
attributes:
value: |
<p align="center">
<picture>
<source
width="256px"
media="(prefers-color-scheme: dark)"
srcset="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-dark.svg"
>
<img
width="256px"
src="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-light.svg"
>
</picture>
<br>
<a href="https://revanced.app/">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg" />
<img height="24px" src="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://github.com/ReVanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
<img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="http://revanced.app/discord">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://reddit.com/r/revancedapp">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://t.me/app_revanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://x.com/revancedapp">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
<img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://www.youtube.com/@ReVanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
</picture>
</a>
<br>
<br>
Continuing the legacy of Vanced
</p>
# ReVanced Manager feature request
Before creating a new feature request, please keep the following in mind:
- **Do not submit a duplicate feature request**: You can review existing feature requests [here](https://github.com/ReVanced/revanced-manager//labels/Feature%20request).
- **Review the contribution guidelines**: Make sure your feature request adheres to it. You can find the guidelines [here](https://github.com/ReVanced/revanced-manager/blob/main/CONTRIBUTING.md).
- **Do not use the issue page for support**: If you need help or have questions, check out other platforms on [revanced.app](https://revanced.app).
- type: textarea
attributes:
label: Feature description
description: |
- Describe your feature in detail
- Add images, videos, links, examples, references, etc. if possible
- Add the target application name in case you request a new patch
- type: textarea
attributes:
label: Motivation
description: |
A strong motivation is necessary for a feature request to be considered.
- Why should this feature be implemented?
- What is the explicit use case?
- What are the benefits?
- What makes this feature important?
validations:
required: true
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Your feature request will be closed if you don't follow the checklist below.
options:
- label: This issue is not a duplicate of an existing feature request.
required: true
- label: I have chosen an appropriate title.
required: true
- label: The feature request is only related to ReVanced Manager
required: true

2
.github/config.yaml vendored
View File

@@ -1,2 +1,2 @@
firstPRMergeComment: > firstPRMergeComment: >
Thank you for contributing to ReVanced. Join us on [Discord](https://revanced.app/discord) if you want to receive a contributor role. Thank you for contributing to ReVanced. Join us on [Discord](https://revanced.app/discord) to receive a role for your contribution.

View File

@@ -14,6 +14,7 @@ updates:
schedule: schedule:
interval: monthly interval: monthly
# ReVanced Manager Flutter
- package-ecosystem: pub - package-ecosystem: pub
labels: [] labels: []
directory: / directory: /
@@ -21,6 +22,14 @@ updates:
schedule: schedule:
interval: monthly interval: monthly
- package-ecosystem: gradle
labels: []
directory: /
target-branch: dev
schedule:
interval: monthly
# ReVanced Manager Compose
- package-ecosystem: gradle - package-ecosystem: gradle
labels: [ "ReVanced Manager Compose" ] labels: [ "ReVanced Manager Compose" ]
directory: / directory: /

View File

@@ -1,23 +1,15 @@
name: PR Build name: Build pull request
on: on:
workflow_dispatch: workflow_dispatch:
inputs: inputs:
# Flutter # Enable or disable cache
flutter-branch:
description: Flutter branch
type: choice
default: 'stable'
options:
- stable
- beta
- dev
- master
flutter-cache: flutter-cache:
description: Cache description: Cache
type: boolean type: boolean
default: true default: true
# Application configuration
# Select app flavour
app-flavour: app-flavour:
description: App flavour description: App flavour
default: 'release' default: 'release'
@@ -26,22 +18,23 @@ on:
- release - release
- debug - debug
- profile - profile
# Pull Request
# Select pull request
pr-number: pr-number:
description: PR number (No hashtag) description: PR number (Without hashtag)
required: true required: true
run-name: "Build PR ${{ inputs.pr-number }}" run-name: "Build pull request ${{ inputs.pr-number }}"
jobs: jobs:
build: build:
name: Build the application name: Build
runs-on: ubuntu-latest runs-on: ubuntu-latest
permissions: permissions:
contents: read contents: read
pull-requests: write pull-requests: write
steps: steps:
- name: Setup - name: Setup pull request
env: env:
GH_TOKEN: ${{ github.token }} GH_TOKEN: ${{ github.token }}
run: | run: |
@@ -50,73 +43,74 @@ jobs:
gh repo set-default "${{ github.repository }}" gh repo set-default "${{ github.repository }}"
gh pr checkout "${{ inputs.pr-number }}" gh pr checkout "${{ inputs.pr-number }}"
echo "DATETIME=$( TZ='UTC+0' date --rfc-email )" >> $GITHUB_ENV
echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
with: with:
persist-credentials: false persist-credentials: false
fetch-depth: 0
- name: Setup JDK
uses: actions/setup-java@v4 - name: Cache Gradle
with: uses: burrunan/gradle-cache-action@v1
java-version: '17'
distribution: 'zulu' - name: Setup Java
cache: gradle run: echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
- name: Setup Flutter - name: Set up Flutter
uses: subosito/flutter-action@v2 uses: subosito/flutter-action@v2
with: with:
channel: ${{ inputs.flutter-branch }} channel: "stable"
cache: ${{ inputs.flutter-cache }} cache: ${{ inputs.flutter-cache }}
- name: Install Flutter dependencies - name: Get dependencies
run: flutter pub get run: flutter pub get
- name: Generate translation with Slang
- name: Generate translations
run: dart run slang run: dart run slang
- name: Generate files with Builder
run: dart run build_runner build --delete-conflicting-outputs - name: Generate code files
run: dart run build_runner build --delete-conflicting-outputs
- name: Build with Flutter
- name: Build
continue-on-error: true continue-on-error: true
id: flutter-build id: flutter-build
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: | run: |
flutter build apk --"${{ inputs.app-flavour }}"; flutter build apk --"${{ inputs.app-flavour }}";
- name: Prepare to comment - name: Prepare comment
run: | run: |
if [[ "${{ steps.flutter-build.outcome }}" == "success" ]]; then if [[ "${{ steps.flutter-build.outcome }}" == "success" ]]; then
echo "MESSAGE=✅ ReVanced Manager ${{ env.COMMIT_HASH }} build succeeded." >> $GITHUB_ENV echo "MESSAGE=✅ Succeeded build on ${{ env.COMMIT_HASH }}." >> $GITHUB_ENV
else else
echo "MESSAGE=🚫 ReVanced Manager ${{ env.COMMIT_HASH }} build failed." >> $GITHUB_ENV echo "MESSAGE=🚫 Failed build on ${{ env.COMMIT_HASH }}." >> $GITHUB_ENV
fi fi
- name: "Comment to Pull Request #${{ inputs.pr-number }}" - name: "Comment on pull request #${{ inputs.pr-number }}"
uses: thollander/actions-comment-pull-request@v2 uses: thollander/actions-comment-pull-request@v2
with: with:
GITHUB_TOKEN: ${{ github.token }} GITHUB_TOKEN: ${{ github.token }}
pr_number: ${{ inputs.pr-number }} pr_number: ${{ inputs.pr-number }}
mode: recreate mode: recreate
message: | message: |
## ⚒️ ReVanced PR Build workflow ## ⚒️ Build status
${{ env.MESSAGE }} ${{ env.MESSAGE }}
You can see more details in run [${{ github.run_id }}](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})! Details: [${{ github.run_id }}](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})!
### ⚙️ Overview ### ⚙️ Workflow run configuration
- Flutter cache: ${{ inputs.flutter-cache }}
- App flavor: ${{ inputs.app-flavour }} - App flavor: ${{ inputs.app-flavour }}
- Branch: ${{ inputs.flutter-branch }}
- Start time: ${{ env.DATETIME }}
- name: Upload build - name: Upload
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v4
with: with:
if-no-files-found: error if-no-files-found: error
name: revanced-manager-(${{ env.COMMIT_HASH }}-${{ inputs.pr-number }}-${{ inputs.app-flavour }})-${{ inputs.flutter-branch }} name: revanced-manager-(${{ env.COMMIT_HASH }}-${{ inputs.pr-number }}-${{ inputs.app-flavour }})
path: | path: |
build/app/outputs/flutter-apk/app-${{ inputs.app-flavour }}.apk build/app/outputs/flutter-apk/app-${{ inputs.app-flavour }}.apk
build/app/outputs/flutter-apk/app-${{ inputs.app-flavour }}.apk.sha1 build/app/outputs/flutter-apk/app-${{ inputs.app-flavour }}.apk.sha1

28
.github/workflows/open_pull_request.yml vendored Normal file
View File

@@ -0,0 +1,28 @@
name: Open a PR to main
on:
push:
branches:
- dev
workflow_dispatch:
env:
MESSAGE: Merge branch `${{ github.head_ref || github.ref_name }}` to `main`
jobs:
pull-request:
name: Open pull request
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Open pull request
uses: repo-sync/pull-request@v2
with:
destination_branch: 'main'
pr_title: 'chore: ${{ env.MESSAGE }}'
pr_body: |
This pull request will ${{ env.MESSAGE }}.
pr_draft: true
github_token: ${{ secrets.REPOSITORY_PUSH_ACCESS }}

View File

@@ -1,69 +0,0 @@
name: "Release Build"
on:
workflow_dispatch:
push:
branches:
- main
- dev
paths:
- ".github/workflows/release-build.yml"
- "android/**"
- "assets/**"
- "lib/**"
- ".releaserc.js"
- "pubspec.yaml"
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: "17"
distribution: "zulu"
- name: Set up Node.js 20
uses: actions/setup-node@v4
with:
node-version: '20'
- uses: subosito/flutter-action@v2
with:
channel: "stable"
- name: Cache Node modules
uses: actions/cache@v4
with:
path: |
node_modules
key: npm-${{ hashFiles('package-lock.json') }}
- name: Setup semantic-release
run: npm install
- name: Set up Flutter
run: flutter pub get
- name: Generate translation with Slang
run: dart run slang
- name: Generate files with Builder
run: dart run build_runner build --delete-conflicting-outputs
- name: Build with Flutter
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
signingKey: "keystore.jks"
keyStorePassword: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
keyAlias: ${{ secrets.SIGNING_KEY_ALIAS }}
keyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }}
run: |
echo "${{ secrets.SIGNING_KEYSTORE }}" | base64 --decode > android/app/keystore.jks
npx semantic-release
- name: Upload a Build Artifact
uses: actions/upload-artifact@v4
with:
name: Artifact
path: build/app/outputs/apk/release/revanced-manager*.apk

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

@@ -0,0 +1,61 @@
name: Release
on:
workflow_dispatch:
push:
branches:
- main
- dev
paths:
- ".github/workflows/release.yml"
- "android/**"
- "assets/**"
- "lib/**"
- "pubspec.yaml"
jobs:
release:
name: Release
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Java
run: echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "lts/*"
cache: 'npm'
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: "stable"
- name: Install dependencies
run: npm install
- name: Get dependencies
run: flutter pub get
- name: Generate translations
run: dart run slang
- name: Generate code files
run: dart run build_runner build --delete-conflicting-outputs
- name: Release
env:
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
signingKey: "keystore.jks"
keyStorePassword: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
keyAlias: ${{ secrets.SIGNING_KEY_ALIAS }}
keyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }}
run: |
echo "${{ secrets.SIGNING_KEYSTORE }}" | base64 --decode > android/app/keystore.jks
npx semantic-release

View File

@@ -1,12 +1,18 @@
name: Crowdin Action name: Sync Crowdin
on: on:
workflow_dispatch: workflow_dispatch:
schedule:
- cron: 00 12 * * 1
push: push:
branches: [dev] paths:
- assets/i18n/*.json
- assets/i18n/*.dart
- .github/workflows/sync_crowdin.yml
jobs: jobs:
synchronize-with-crowdin: sync:
name: Sync
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
@@ -14,10 +20,10 @@ jobs:
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Set up Dart - name: Setup Dart
uses: dart-lang/setup-dart@v1 uses: dart-lang/setup-dart@v1
- name: Sync translation from Crowdin - name: Sync translations from Crowdin
uses: crowdin/github-action@v1 uses: crowdin/github-action@v1
with: with:
config: crowdin.yml config: crowdin.yml
@@ -26,28 +32,28 @@ jobs:
download_translations: true download_translations: true
localization_branch_name: feat/translations localization_branch_name: feat/translations
create_pull_request: true create_pull_request: true
pull_request_title: "chore(i18n): Sync translations" pull_request_title: "chore: Sync translations"
pull_request_body: "Sync translations from [Crowdin/ReVanced](https://crowdin.com/project/revanced)" pull_request_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)"
pull_request_base_branch_name: "dev" pull_request_base_branch_name: "dev"
commit_message: "chore(i18n): Sync translations" commit_message: "chore: Sync translations"
github_user_name: revanced-bot
github_user_email: github@revanced.app
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
- name: Remove empty values from JSON - name: Remove empty values from JSON
run: | run: |
cd assets/i18n cd assets/i18n
sudo chmod 777 * sudo chmod 777 *.json
dart nuke.dart >> $GITHUB_STEP_SUMMARY dart nuke.dart >> $GITHUB_STEP_SUMMARY
- name: Push out changes to i10n - name: Commit translations
run: | run: |
git config user.name revanced-bot git config user.name revanced-bot
git config user.email github@revanced.app git config user.email github@revanced.app
sudo chown -R $USER:$USER .git sudo chown -R $USER:$USER .git
git add assets/i18n/*.json git add assets/i18n/*.json
git commit -m "chore(Translation): Remove empty values from JSON" assets/i18n/*.json git commit -m "chore: Remove empty values from JSON" assets/i18n/*.json
git push origin HEAD:feat/translations git push origin HEAD:feat/translations
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -11,7 +11,7 @@ jobs:
name: Dispatch event to documentation repository name: Dispatch event to documentation repository
if: github.ref == 'refs/heads/main' if: github.ref == 'refs/heads/main'
steps: steps:
- uses: peter-evans/repository-dispatch@v2 - uses: peter-evans/repository-dispatch@v3
with: with:
token: ${{ secrets.DOCUMENTATION_REPO_ACCESS_TOKEN }} token: ${{ secrets.DOCUMENTATION_REPO_ACCESS_TOKEN }}
repository: revanced/revanced-documentation repository: revanced/revanced-documentation

64
.releaserc Normal file
View File

@@ -0,0 +1,64 @@
{
"branches": [
"main",
{
"name": "dev",
"prerelease": true
}
],
"plugins": [
[
"@semantic-release/commit-analyzer", {
"releaseRules": [
{ "type": "build", "scope": "Needs bump", "release": "patch" }
]
}
],
"@semantic-release/changelog",
"@semantic-release/release-notes-generator",
[
"@droidsolutions-oss/semantic-release-update-file",
{
"files": [
{
"path": ["pubspec.yaml"],
"type": "flutter",
"branches": ["main", "dev"]
}
]
}
],
[
"@semantic-release/exec",
{
"prepareCmd": "flutter build apk"
}
],
[
"@semantic-release/git",
{
"assets": [
"pubspec.yaml"
]
}
],
[
"@semantic-release/github",
{
"assets": [
{
"path": "build/app/outputs/apk/release/revanced-manager*.apk"
}
],
"successComment": false
}
],
[
"@saithodev/semantic-release-backmerge",
{
"backmergeBranches": [{"from": "main", "to": "dev"}],
"clearWorkspace": true
}
]
]
}

View File

@@ -1,123 +0,0 @@
module.exports = {
"branches": [
"main",
{
"name": "dev",
"prerelease": true
}
],
"plugins": [
[
"@semantic-release/commit-analyzer", {
"preset": "conventionalcommits",
"releaseRules": [
{ type: "style", release: "patch" },
{ type: "refactor", release: "patch" },
{ type: "perf", release: "patch" },
{ type: "build", release: "patch" },
{ type: "chore", release: "patch" },
{ type: "revert", release: "patch" }
]
}
],
"@semantic-release/changelog",
[
"@semantic-release/release-notes-generator",
{
preset: "conventionalcommits",
presetConfig: {
types: [
{ type: "feat", section: "Features" },
{ type: "fix", section: "Bug Fixes" },
{ type: "docs", section: "Documentation" },
{ type: "style", section: "Styles" },
{ type: "refactor", section: "Code Refactoring" },
{ type: "perf", section: "Performance Improvements" },
{ type: "test", section: "Tests" },
{ type: "build", section: "Build System" },
{ type: "ci", section: "Continuous Integration" },
{ type: "chore", section: "Chores" },
{ type: "revert", section: "Reverts" },
]
},
writerOpts: {
transform: (commit, context) => {
if (commit.author.name === "semantic-release-bot") return;
const types = {
feat: "Features",
fix: "Bug Fixes",
docs: "Documentation",
style: "Styles",
refactor: "Code Refactoring",
perf: "Performance Improvements",
test: "Tests",
build: "Build System",
ci: "Continuous Integration",
chore: "Chores",
revert: "Reverts",
}
commit.type = types[commit.type];
return commit;
},
commitPartial: "* {{#if scope}}**{{scope}}:** {{/if}}{{subject}} ([{{author.name}}]({{~@root.host}}/{{~@root.owner}}/{{~@root.repository}}/commit/{{hash}}))\n",
mainTemplate: `
{{#each commitGroups}}
{{#if title}}
## {{title}}
{{/if}}
{{#each commits}}
{{> commit root=@root}}
{{/each}}
{{/each}}
`
}
}
],
[
"@droidsolutions-oss/semantic-release-update-file",
{
"files": [
{
"path": ["pubspec.yaml"],
"type": "flutter",
"branches": ["main", "dev"]
}
]
}
],
[
"@semantic-release/exec",
{
"prepareCmd": "flutter build apk"
}
],
[
"@semantic-release/git",
{
"assets": [
"pubspec.yaml"
]
}
],
[
"@semantic-release/github",
{
"assets": [
{
"path": "build/app/outputs/apk/release/revanced-manager*.apk"
}
],
"successComment": false
}
],
[
"@saithodev/semantic-release-backmerge",
{
"backmergeBranches": [{"from": "main", "to": "dev"}],
"clearWorkspace": true
}
]
],
};

View File

@@ -71,33 +71,33 @@ This document describes how to contribute to ReVanced Manager.
## 🙏 Submitting a feature request ## 🙏 Submitting a feature request
Features can be requested by opening an issue using the Features can be requested by opening an issue using the
[feature request issue template](https://github.com/ReVanced/revanced-manager/issues/new?assignees=&labels=feature-request&projects=&template=feature-issue.yml&title=feat%3A+%3Ctitle%3E). [Feature request issue template](https://github.com/ReVanced/revanced-manager/issues/new?assignees=&labels=Feature+request&projects=&template=feature_request.yml&title=feat%3A+).
> [!NOTE] > **Note**
> We may reject your request at the discretion of ReVanced Manager's maintainers, > Requests can be accepted or rejected at the discretion of maintainers of ReVanced Manager.
> please provide good motivation for a request to be accepted. > Good motivation has to be provided for a request to be accepted.
## 🐞 Submitting a bug report ## 🐞 Submitting a bug report
If you encounter a bug while using the ReVanced Manager app, open an issue using the If you encounter a bug while using ReVanced Manager, open an issue using the
[bug report issue template](https://github.com/ReVanced/revanced-manager/issues/new?assignees=&labels=bug&projects=&template=bug-issue.yml&title=bug%3A+%3Ctitle%3E). [Bug report issue template](https://github.com/ReVanced/revanced-manager/issues/new?assignees=&labels=Bug+report&projects=&template=bug_report.yml&title=bug%3A+).
## 📝 How to contribute ## 📝 How to contribute
> [!TIP] 1. Before contributing, it is recommended to open an issue to discuss your change
> We recommend that you discuss your changes with with the maintainers of ReVanced Manager. This will help you determine whether your change is acceptable
> the maintainers of ReVanced Manager before contributing. and whether it is worth your time to implement it
> This will help you determine whether your change is acceptable. 2. Development happens on the `dev` branch. Fork the repository and create your branch from `dev`
3. Commit your changes
1. Fork the repository and create a new branch based off the `dev` branch 4. Submit a pull request to the `dev` branch of the repository and reference issues
2. Commit your changes that your pull request closes in the description of your pull request
3. Open a pull request to the `dev` branch and reference issues that your pull request closes 5. Our team will review your pull request and provide feedback. Once your pull request is approved,
4. The maintainers of ReVanced Manager will review and provide suggestions. it will be merged into the `dev` branch and will be included in the next release of ReVanced Manager
Once your pull request is approved and merged, it will be included in the next release of ReVanced Manager
## 🤚 I want to contribute but don't know how to code ## 🤚 I want to contribute but don't know how to code
Even if you don't know how to code, you can still contribute by Even if you don't know how to code, you can still contribute by
translating ReVanced Manager on [Crowdin](https://translate.revanced.app/). translating ReVanced Manager on [Crowdin](https://translate.revanced.app/).
❤️ Thank you for considering contributing to ReVanced Manager. ❤️ Thank you for considering contributing to ReVanced Manager,
ReVanced

View File

@@ -60,38 +60,50 @@
# 💊 ReVanced Manager # 💊 ReVanced Manager
[![GitHub last commit](https://img.shields.io/github/last-commit/ReVanced/revanced-manager)](https://github.com/ReVanced/revanced-manager/commits "") ![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/ReVanced/revanced-manager/release.yml)
[![GitHub commit activity](https://img.shields.io/github/commit-activity/w/ReVanced/revanced-manager)](https://github.com/ReVanced/revanced-manager/commits "") ![GPLv3 License](https://img.shields.io/badge/License-GPL%20v3-yellow.svg)
ReVanced Manager is an Android application that uses ReVanced Patcher to add, remove, and modify existing functionalities in Android applications. Application to use ReVanced on Android
## ❓ About
ReVanced Manager is an application that uses [ReVanced Patcher](https://github.com/revanced/revanced-patcher) to patch Android apps.
## 💪 Features ## 💪 Features
Some of the features we provide are: Some of the features ReVanced Manager provides are:
* 📱 **Portable**: ReVanced Patcher that fit in your pocket; - 💉 **Patch apps**: Apply any patch of your choice to Android apps
* 🤗 **Intuitive UI**: Help you manage your patched applications with easy-to-use interface; - 📱 **Portable**: ReVanced Patcher that fits in your pocket
* 🛠️ **Customization**: Patch with third-party sources; - 🤗 **Simple UI**: Quickly understand the ins and outs of ReVanced Manager
* ✨ And a **lot more!** - 🛠️ **Customization**: Configurable API, custom sources, language, signing keystore, theme and more
## 🔽 Download ## 🔽 Download
You can get ReVanced Manager by downloading from [ReVanced site](https://revanced.app/download) or [GitHub releases](https://github.com/ReVanced/revanced-manager/releases). You can download the most recent version of ReVanced Manager at [revanced.app/download](https://revanced.app/download) or from [GitHub releases](https://github.com/ReVanced/revanced-manager/releases).
Learn how to use ReVanced Manager by following the [documentation](/docs).
## 📚 Everything else ## 📚 Everything else
### 📙 Contributing
Thank you for considering contributing to ReVanced Manager.
You can find the contribution guidelines [here](CONTRIBUTING.md).
### 🛠️ Building
To build a ReVanced Manager, you can follow the [documentation](/docs).
### 📄 Documentation ### 📄 Documentation
Documentation on how to use the application is available [here](/docs/README.md). You can find the documentation for ReVanced Manager [here](/docs).
### 👋 Contributing ### 👋 Contributing
Thank you for considering contributing to ReVanced Manager, you can find the contribution guidelines [here](/CONTRIBUTING.md). Thank you for considering contributing to ReVanced Manager. You can find the contribution guidelines [here](/CONTRIBUTING.md).
### 🔴 Issues
For suggestions and bug reports, open an issue [here](https://github.com/ReVanced/revanced-manager/issues/choose).
## ⚖️ License ## ⚖️ License
ReVanced Manager adopts the [GNU General Public License 3.0](/LICENSE), [tl;dr](https://www.tldrlegal.com/license/gnu-general-public-license-v3-gpl-3): You may copy, distribute and modify the software as long as you track changes/dates in source files. Any modifications to or software including (via compiler) GPL-licensed code must also be made available under the GPL along with build & install instructions. ReVanced Manager is licensed under the GPLv3 license. Please see the [license file](LICENSE) for more information.
[tl;dr](https://www.tldrlegal.com/license/gnu-general-public-license-v3-gpl-3) you may copy, distribute and modify ReVanced Manager as long as you track changes/dates in source files.
Any modifications to ReVanced Manager must also be made available under the GPL, along with build & install instructions.

View File

@@ -70,8 +70,8 @@ If a vulnerability is confirmed and accepted, you can join our [Discord](https:/
### ⏳ Supported Versions ### ⏳ Supported Versions
| Version | Branch | Supported | | Version | Branch | Supported |
| -------------------------------------------------------------------------------------------------------- | ----------- | ------------------ | | --------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------ |
| ![GitHub Release](https://img.shields.io/github/v/release/ReVanced/revanced-manager?style=for-the-badge) | main | :white_check_mark: | | ![Latest stable release](https://img.shields.io/github/v/release/ReVanced/revanced-manager?style=for-the-badge "Latest stable release") | main | :white_check_mark: |
| ![Static Badge](https://img.shields.io/badge/version-latest-brightgreen?style=for-the-badge) | dev | :white_check_mark: | | ![Latest version](https://img.shields.io/badge/version-latest-brightgreen?style=for-the-badge "Latest version") | dev | :white_check_mark: |
| ![Static Badge](https://img.shields.io/badge/version-latest-brightgreen?style=for-the-badge) | compose-dev | :white_check_mark: | | ![Latest version](https://img.shields.io/badge/version-latest-brightgreen?style=for-the-badge "Latest version") | compose-dev | :white_check_mark: |

View File

@@ -113,12 +113,8 @@ flutter {
} }
dependencies { dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10" implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.22")
// ReVanced implementation("app.revanced:revanced-patcher:19.3.1")
implementation "app.revanced:revanced-patcher:19.1.0" implementation("app.revanced:revanced-library:2.2.1")
// Signing & aligning
implementation("org.bouncycastle:bcpkix-jdk15on:1.70")
implementation("com.android.tools.build:apksig:7.2.2")
} }

View File

@@ -5,19 +5,15 @@
# For more details, see # For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html # http://developer.android.com/guide/developing/tools/proguard.html
# These packages are referenced by ReVanced Patches -keep class app.revanced.** { *; }
-keep class app.revanced.patcher.** { *; }
-keep class com.android.tools.smali.** { *; } -keep class com.android.tools.smali.** { *; }
-keep class kotlin.** { *; } -keep class kotlin.** { *; }
-keepnames class com.google.common.collect.** -keep class com.google.auto.value.** { *; }
# This package uses reflection internally, so do not remove and rename
-keep class com.android.apksig.internal.** { *; } -keep class com.android.apksig.internal.** { *; }
-keepnames class com.google.common.collect.**
# Fix crash
-keepnames class org.xmlpull.** { *; } -keepnames class org.xmlpull.** { *; }
# Fix build errors -dontwarn com.google.auto.value.**
-dontwarn com.google.j2objc.annotations.*
-dontwarn java.awt.** -dontwarn java.awt.**
-dontwarn javax.** -dontwarn javax.**
-dontwarn com.google.j2objc.annotations.*

View File

@@ -1,4 +1,5 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.VIBRATE" />
@@ -17,7 +18,9 @@
<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" /> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
<application <application
android:label="@string/app_name" android:label="@string/app_name"
android:name="${applicationName}" android:name="${applicationName}"

View File

@@ -7,23 +7,19 @@ import android.content.pm.PackageInstaller
import android.os.Build import android.os.Build
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import app.revanced.library.ApkUtils
import app.revanced.library.ApkUtils.applyTo
import app.revanced.manager.flutter.utils.Aapt import app.revanced.manager.flutter.utils.Aapt
import app.revanced.manager.flutter.utils.aligning.ZipAligner
import app.revanced.manager.flutter.utils.packageInstaller.InstallerReceiver import app.revanced.manager.flutter.utils.packageInstaller.InstallerReceiver
import app.revanced.manager.flutter.utils.packageInstaller.UninstallerReceiver import app.revanced.manager.flutter.utils.packageInstaller.UninstallerReceiver
import app.revanced.manager.flutter.utils.signing.Signer
import app.revanced.manager.flutter.utils.zip.ZipFile
import app.revanced.manager.flutter.utils.zip.structures.ZipEntry
import app.revanced.patcher.PatchBundleLoader import app.revanced.patcher.PatchBundleLoader
import app.revanced.patcher.PatchSet import app.revanced.patcher.PatchSet
import app.revanced.patcher.Patcher import app.revanced.patcher.Patcher
import app.revanced.patcher.PatcherOptions import app.revanced.patcher.PatcherConfig
import app.revanced.patcher.patch.PatchResult import app.revanced.patcher.patch.PatchResult
import io.flutter.embedding.android.FlutterActivity import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel import io.flutter.plugin.common.MethodChannel
import kotlinx.coroutines.InternalCoroutinesApi
import kotlinx.coroutines.cancel
import kotlinx.coroutines.flow.FlowCollector import kotlinx.coroutines.flow.FlowCollector
import kotlinx.coroutines.runBlocking import kotlinx.coroutines.runBlocking
import org.json.JSONArray import org.json.JSONArray
@@ -50,7 +46,10 @@ class MainActivity : FlutterActivity() {
val installerChannel = "app.revanced.manager.flutter/installer" val installerChannel = "app.revanced.manager.flutter/installer"
val openBrowserChannel = "app.revanced.manager.flutter/browser" val openBrowserChannel = "app.revanced.manager.flutter/browser"
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, openBrowserChannel).setMethodCallHandler { call, result -> MethodChannel(
flutterEngine.dartExecutor.binaryMessenger,
openBrowserChannel
).setMethodCallHandler { call, result ->
if (call.method == "openBrowser") { if (call.method == "openBrowser") {
val searchQuery = call.argument<String>("query") val searchQuery = call.argument<String>("query")
openBrowser(searchQuery) openBrowser(searchQuery)
@@ -69,40 +68,34 @@ class MainActivity : FlutterActivity() {
mainChannel.setMethodCallHandler { call, result -> mainChannel.setMethodCallHandler { call, result ->
when (call.method) { when (call.method) {
"runPatcher" -> { "runPatcher" -> {
val originalFilePath = call.argument<String>("originalFilePath") val inFilePath = call.argument<String>("inFilePath")
val inputFilePath = call.argument<String>("inputFilePath")
val patchedFilePath = call.argument<String>("patchedFilePath")
val outFilePath = call.argument<String>("outFilePath") val outFilePath = call.argument<String>("outFilePath")
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 options = call.argument<Map<String, Map<String, Any>>>("options") val options = call.argument<Map<String, Map<String, Any>>>("options")
val cacheDirPath = call.argument<String>("cacheDirPath") val tmpDirPath = call.argument<String>("tmpDirPath")
val keyStoreFilePath = call.argument<String>("keyStoreFilePath") val keyStoreFilePath = call.argument<String>("keyStoreFilePath")
val keystorePassword = call.argument<String>("keystorePassword") val keystorePassword = call.argument<String>("keystorePassword")
if ( if (
originalFilePath != null && inFilePath != null &&
inputFilePath != null &&
patchedFilePath != null &&
outFilePath != null && outFilePath != null &&
integrationsPath != null && integrationsPath != null &&
selectedPatches != null && selectedPatches != null &&
options != null && options != null &&
cacheDirPath != null && tmpDirPath != null &&
keyStoreFilePath != null && keyStoreFilePath != null &&
keystorePassword != null keystorePassword != null
) { ) {
cancel = false cancel = false
runPatcher( runPatcher(
result, result,
originalFilePath, inFilePath,
inputFilePath,
patchedFilePath,
outFilePath, outFilePath,
integrationsPath, integrationsPath,
selectedPatches, selectedPatches,
options, options,
cacheDirPath, tmpDirPath,
keyStoreFilePath, keyStoreFilePath,
keystorePassword keystorePassword
) )
@@ -214,28 +207,23 @@ class MainActivity : FlutterActivity() {
startActivity(intent) startActivity(intent)
} }
} }
@OptIn(InternalCoroutinesApi::class)
private fun runPatcher( private fun runPatcher(
result: MethodChannel.Result, result: MethodChannel.Result,
originalFilePath: String, inFilePath: String,
inputFilePath: String,
patchedFilePath: String,
outFilePath: String, outFilePath: String,
integrationsPath: String, integrationsPath: String,
selectedPatches: List<String>, selectedPatches: List<String>,
options: Map<String, Map<String, Any>>, options: Map<String, Map<String, Any>>,
cacheDirPath: String, tmpDirPath: String,
keyStoreFilePath: String, keyStoreFilePath: String,
keystorePassword: String keystorePassword: String
) { ) {
val originalFile = File(originalFilePath) val inFile = File(inFilePath)
val inputFile = File(inputFilePath)
val patchedFile = File(patchedFilePath)
val outFile = File(outFilePath) val outFile = File(outFilePath)
val integrations = File(integrationsPath) val integrations = File(integrationsPath)
val keyStoreFile = File(keyStoreFilePath) val keyStoreFile = File(keyStoreFilePath)
val cacheDir = File(cacheDirPath) val tmpDir = File(tmpDirPath)
Thread { Thread {
fun updateProgress(progress: Double, header: String, log: String) { fun updateProgress(progress: Double, header: String, log: String) {
@@ -253,6 +241,16 @@ class MainActivity : FlutterActivity() {
fun postStop() = handler.post { stopResult!!.success(null) } fun postStop() = handler.post { stopResult!!.success(null) }
fun cancel(block: () -> Unit = {}): Boolean {
if (cancel) {
block()
postStop()
}
return cancel
}
// Setup logger // Setup logger
Logger.getLogger("").apply { Logger.getLogger("").apply {
handlers.forEach { handlers.forEach {
@@ -273,38 +271,20 @@ class MainActivity : FlutterActivity() {
} }
try { try {
updateProgress(0.0, "", "Copying APK") updateProgress(0.0, "Reading APK...", "Reading APK")
if (cancel) {
postStop()
return@Thread
}
originalFile.copyTo(inputFile, true)
if (cancel) {
postStop()
return@Thread
}
updateProgress(0.05, "Reading APK...", "Reading APK")
val patcher = Patcher( val patcher = Patcher(
PatcherOptions( PatcherConfig(
inputFile, inFile,
cacheDir, tmpDir,
Aapt.binary(applicationContext).absolutePath, Aapt.binary(applicationContext).absolutePath,
cacheDir.path, tmpDir.path,
true // TODO: Add option to disable this true // TODO: Add option to disable this
) )
) )
if (cancel) { if (cancel(patcher::close)) return@Thread
postStop() updateProgress(0.02, "Loading patches...", "Loading patches")
return@Thread
}
updateProgress(0.1, "Loading patches...", "Loading patches")
val patches = patches.filter { patch -> val patches = patches.filter { patch ->
val isCompatible = patch.compatiblePackages?.any { val isCompatible = patch.compatiblePackages?.any {
@@ -319,32 +299,25 @@ class MainActivity : FlutterActivity() {
options[patch.name]?.forEach { (key, value) -> options[patch.name]?.forEach { (key, value) ->
patch.options[key] = value patch.options[key] = value
} }
} }.toSet()
if (cancel) { if (cancel(patcher::close)) return@Thread
postStop() updateProgress(0.05, "Executing...", "")
return@Thread
}
updateProgress(0.15, "Executing...", "") val patcherResult = patcher.use {
patcher.apply {
// Update the progress bar every time a patch is executed from 0.15 to 0.7 acceptIntegrations(setOf(integrations))
val totalPatchesCount = patches.size acceptPatches(patches)
val progressStep = 0.55 / totalPatchesCount }
var progress = 0.15
patcher.apply {
acceptIntegrations(listOf(integrations))
acceptPatches(patches)
runBlocking { runBlocking {
apply(false).collect(FlowCollector { patchResult: PatchResult -> // Update the progress bar every time a patch is executed from 0.15 to 0.7
if (cancel) { val totalPatchesCount = patches.size
handler.post { stopResult!!.success(null) } val progressStep = 0.55 / totalPatchesCount
this.cancel() var progress = 0.05
this@apply.close()
return@FlowCollector patcher.apply(false).collect(FlowCollector { patchResult: PatchResult ->
} if (cancel(patcher::close)) return@FlowCollector
val msg = patchResult.exception?.let { val msg = patchResult.exception?.let {
val writer = StringWriter() val writer = StringWriter()
@@ -358,50 +331,29 @@ class MainActivity : FlutterActivity() {
progress += progressStep progress += progressStep
}) })
} }
if (cancel(patcher::close)) return@Thread
updateProgress(0.75, "Building...", "")
patcher.get()
} }
if (cancel) { if (cancel(patcher::close)) return@Thread
postStop()
patcher.close()
return@Thread
}
updateProgress(0.75, "Building...", "") patcherResult.applyTo(inFile)
val res = patcher.get() if (cancel(patcher::close)) return@Thread
patcher.close()
ZipFile(patchedFile).use { file -> ApkUtils.sign(
res.dexFiles.forEach { inFile,
if (cancel) { outFile,
postStop() ApkUtils.SigningOptions(
return@Thread keyStoreFile,
} keystorePassword,
file.addEntryCompressData( "alias",
ZipEntry.createWithName(it.name), keystorePassword
it.stream.readBytes()
)
}
res.resourceFile?.let {
file.copyEntriesFromFileAligned(
ZipFile(it),
ZipAligner::getEntryAlignment
)
}
file.copyEntriesFromFileAligned(
ZipFile(inputFile),
ZipAligner::getEntryAlignment
) )
} )
if (cancel) {
postStop()
return@Thread
}
updateProgress(0.8, "Signing...", "Signing APK")
Signer("ReVanced", keystorePassword).signApk(patchedFile, outFile, keyStoreFile)
updateProgress(.85, "Patched", "Patched APK") updateProgress(.85, "Patched", "Patched APK")
} catch (ex: Throwable) { } catch (ex: Throwable) {
@@ -421,7 +373,8 @@ class MainActivity : FlutterActivity() {
private fun installApk(apkPath: String) { private fun installApk(apkPath: String) {
val packageInstaller: PackageInstaller = applicationContext.packageManager.packageInstaller val packageInstaller: PackageInstaller = applicationContext.packageManager.packageInstaller
val sessionParams = PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL) val sessionParams =
PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
val sessionId: Int = packageInstaller.createSession(sessionParams) val sessionId: Int = packageInstaller.createSession(sessionParams)
val session: PackageInstaller.Session = packageInstaller.openSession(sessionId) val session: PackageInstaller.Session = packageInstaller.openSession(sessionId)
session.use { activeSession -> session.use { activeSession ->
@@ -436,7 +389,12 @@ class MainActivity : FlutterActivity() {
val receiverIntent = Intent(applicationContext, InstallerReceiver::class.java).apply { val receiverIntent = Intent(applicationContext, InstallerReceiver::class.java).apply {
action = "APP_INSTALL_ACTION" action = "APP_INSTALL_ACTION"
} }
val receiverPendingIntent = PendingIntent.getBroadcast(context, sessionId, receiverIntent, PackageInstallerManager.flags) val receiverPendingIntent = PendingIntent.getBroadcast(
context,
sessionId,
receiverIntent,
PackageInstallerManager.flags
)
session.commit(receiverPendingIntent.intentSender) session.commit(receiverPendingIntent.intentSender)
session.close() session.close()
} }
@@ -446,7 +404,8 @@ class MainActivity : FlutterActivity() {
val receiverIntent = Intent(applicationContext, UninstallerReceiver::class.java).apply { val receiverIntent = Intent(applicationContext, UninstallerReceiver::class.java).apply {
action = "APP_UNINSTALL_ACTION" action = "APP_UNINSTALL_ACTION"
} }
val receiverPendingIntent = PendingIntent.getBroadcast(context, 0, receiverIntent, PackageInstallerManager.flags) val receiverPendingIntent =
PendingIntent.getBroadcast(context, 0, receiverIntent, PackageInstallerManager.flags)
packageInstaller.uninstall(packageName, receiverPendingIntent.intentSender) packageInstaller.uninstall(packageName, receiverPendingIntent.intentSender)
} }

View File

@@ -1,11 +0,0 @@
package app.revanced.manager.flutter.utils.aligning
import app.revanced.manager.flutter.utils.zip.structures.ZipEntry
internal object ZipAligner {
private const val DEFAULT_ALIGNMENT = 4
private const val LIBRARY_ALIGNMENT = 4096
fun getEntryAlignment(entry: ZipEntry): Int? =
if (entry.compression.toUInt() != 0u) null else if (entry.fileName.endsWith(".so")) LIBRARY_ALIGNMENT else DEFAULT_ALIGNMENT
}

View File

@@ -1,74 +0,0 @@
package app.revanced.manager.flutter.utils.signing
import com.android.apksig.ApkSigner
import org.bouncycastle.asn1.x500.X500Name
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo
import org.bouncycastle.cert.X509v3CertificateBuilder
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter
import org.bouncycastle.jce.provider.BouncyCastleProvider
import org.bouncycastle.operator.ContentSigner
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.math.BigInteger
import java.security.*
import java.security.cert.X509Certificate
import java.util.*
internal class Signer(
private val cn: String, password: String
) {
private val passwordCharArray = password.toCharArray()
private fun newKeystore(out: File) {
val (publicKey, privateKey) = createKey()
val privateKS = KeyStore.getInstance("BKS", "BC")
privateKS.load(null, passwordCharArray)
privateKS.setKeyEntry("alias", privateKey, passwordCharArray, arrayOf(publicKey))
privateKS.store(FileOutputStream(out), passwordCharArray)
}
private fun createKey(): Pair<X509Certificate, PrivateKey> {
val gen = KeyPairGenerator.getInstance("RSA")
gen.initialize(2048)
val pair = gen.generateKeyPair()
var serialNumber: BigInteger
do serialNumber =
BigInteger.valueOf(SecureRandom().nextLong()) while (serialNumber < BigInteger.ZERO)
val x500Name = X500Name("CN=$cn")
val builder = X509v3CertificateBuilder(
x500Name,
serialNumber,
Date(System.currentTimeMillis() - 1000L * 60L * 60L * 24L * 30L),
Date(System.currentTimeMillis() + 1000L * 60L * 60L * 24L * 366L * 30L),
Locale.ENGLISH,
x500Name,
SubjectPublicKeyInfo.getInstance(pair.public.encoded)
)
val signer: ContentSigner = JcaContentSignerBuilder("SHA256withRSA").build(pair.private)
return JcaX509CertificateConverter().getCertificate(builder.build(signer)) to pair.private
}
fun signApk(input: File, output: File, ks: File) {
Security.addProvider(BouncyCastleProvider())
if (!ks.exists()) newKeystore(ks)
val keyStore = KeyStore.getInstance("BKS", "BC")
FileInputStream(ks).use { fis -> keyStore.load(fis, null) }
val alias = keyStore.aliases().nextElement()
val config = ApkSigner.SignerConfig.Builder(
cn,
keyStore.getKey(alias, passwordCharArray) as PrivateKey,
listOf(keyStore.getCertificate(alias) as X509Certificate)
).build()
val signer = ApkSigner.Builder(listOf(config))
signer.setCreatedBy(cn)
signer.setInputApk(input)
signer.setOutputApk(output)
signer.build().sign()
}
}

View File

@@ -1,35 +0,0 @@
@file:Suppress("unused")
package app.revanced.manager.flutter.utils.zip
import java.io.DataInput
import java.io.DataOutput
import java.nio.ByteBuffer
fun UInt.toLittleEndian() =
(((this.toInt() and 0xff000000.toInt()) shr 24) or ((this.toInt() and 0x00ff0000) shr 8) or ((this.toInt() and 0x0000ff00) shl 8) or (this.toInt() shl 24)).toUInt()
fun UShort.toLittleEndian() = (this.toUInt() shl 16).toLittleEndian().toUShort()
fun UInt.toBigEndian() = (((this.toInt() and 0xff) shl 24) or ((this.toInt() and 0xff00) shl 8)
or ((this.toInt() and 0x00ff0000) ushr 8) or (this.toInt() ushr 24)).toUInt()
fun UShort.toBigEndian() = (this.toUInt() shl 16).toBigEndian().toUShort()
fun ByteBuffer.getUShort() = this.short.toUShort()
fun ByteBuffer.getUInt() = this.int.toUInt()
fun ByteBuffer.putUShort(ushort: UShort): ByteBuffer = this.putShort(ushort.toShort())
fun ByteBuffer.putUInt(uint: UInt): ByteBuffer = this.putInt(uint.toInt())
fun DataInput.readUShort() = this.readShort().toUShort()
fun DataInput.readUInt() = this.readInt().toUInt()
fun DataOutput.writeUShort(ushort: UShort) = this.writeShort(ushort.toInt())
fun DataOutput.writeUInt(uint: UInt) = this.writeInt(uint.toInt())
fun DataInput.readUShortLE() = this.readUShort().toBigEndian()
fun DataInput.readUIntLE() = this.readUInt().toBigEndian()
fun DataOutput.writeUShortLE(ushort: UShort) = this.writeUShort(ushort.toLittleEndian())
fun DataOutput.writeUIntLE(uint: UInt) = this.writeUInt(uint.toLittleEndian())

View File

@@ -1,176 +0,0 @@
package app.revanced.manager.flutter.utils.zip
import app.revanced.manager.flutter.utils.zip.structures.ZipEndRecord
import app.revanced.manager.flutter.utils.zip.structures.ZipEntry
import java.io.Closeable
import java.io.File
import java.io.RandomAccessFile
import java.nio.ByteBuffer
import java.nio.channels.FileChannel
import java.util.zip.CRC32
import java.util.zip.Deflater
class ZipFile(file: File) : Closeable {
var entries: MutableList<ZipEntry> = mutableListOf()
private val filePointer: RandomAccessFile = RandomAccessFile(file, "rw")
private var CDNeedsRewrite = false
private val compressionLevel = 5
init {
//if file isn't empty try to load entries
if (file.length() > 0) {
val endRecord = findEndRecord()
if (endRecord.diskNumber > 0u || endRecord.totalEntries != endRecord.diskEntries)
throw IllegalArgumentException("Multi-file archives are not supported")
entries = readEntries(endRecord).toMutableList()
}
//seek back to start for writing
filePointer.seek(0)
}
private fun findEndRecord(): ZipEndRecord {
//look from end to start since end record is at the end
for (i in filePointer.length() - 1 downTo 0) {
filePointer.seek(i)
//possible beginning of signature
if (filePointer.readByte() == 0x50.toByte()) {
//seek back to get the full int
filePointer.seek(i)
val possibleSignature = filePointer.readUIntLE()
if (possibleSignature == ZipEndRecord.ECD_SIGNATURE) {
filePointer.seek(i)
return ZipEndRecord.fromECD(filePointer)
}
}
}
throw Exception("Couldn't find end record")
}
private fun readEntries(endRecord: ZipEndRecord): List<ZipEntry> {
filePointer.seek(endRecord.centralDirectoryStartOffset.toLong())
val numberOfEntries = endRecord.diskEntries.toInt()
return buildList(numberOfEntries) {
for (i in 1..numberOfEntries) {
add(
ZipEntry.fromCDE(filePointer).also
{
//for some reason the local extra field can be different from the central one
it.readLocalExtra(
filePointer.channel.map(
FileChannel.MapMode.READ_ONLY,
it.localHeaderOffset.toLong() + 28,
2
)
)
})
}
}
}
private fun writeCD() {
val CDStart = filePointer.channel.position().toUInt()
entries.forEach {
filePointer.channel.write(it.toCDE())
}
val entriesCount = entries.size.toUShort()
val endRecord = ZipEndRecord(
0u,
0u,
entriesCount,
entriesCount,
filePointer.channel.position().toUInt() - CDStart,
CDStart,
""
)
filePointer.channel.write(endRecord.toECD())
}
private fun addEntry(entry: ZipEntry, data: ByteBuffer) {
CDNeedsRewrite = true
entry.localHeaderOffset = filePointer.channel.position().toUInt()
filePointer.channel.write(entry.toLFH())
filePointer.channel.write(data)
entries.add(entry)
}
fun addEntryCompressData(entry: ZipEntry, data: ByteArray) {
val compressor = Deflater(compressionLevel, true)
compressor.setInput(data)
compressor.finish()
val uncompressedSize = data.size
val compressedData =
ByteArray(uncompressedSize) //i'm guessing compression won't make the data bigger
val compressedDataLength = compressor.deflate(compressedData)
val compressedBuffer =
ByteBuffer.wrap(compressedData.take(compressedDataLength).toByteArray())
compressor.end()
val crc = CRC32()
crc.update(data)
entry.compression = 8u //deflate compression
entry.uncompressedSize = uncompressedSize.toUInt()
entry.compressedSize = compressedDataLength.toUInt()
entry.crc32 = crc.value.toUInt()
addEntry(entry, compressedBuffer)
}
private fun addEntryCopyData(entry: ZipEntry, data: ByteBuffer, alignment: Int? = null) {
alignment?.let {
//calculate where data would end up
val dataOffset = filePointer.filePointer + entry.LFHSize
val mod = dataOffset % alignment
//wrong alignment
if (mod != 0L) {
//add padding at end of extra field
entry.localExtraField =
entry.localExtraField.copyOf((entry.localExtraField.size + (alignment - mod)).toInt())
}
}
addEntry(entry, data)
}
fun getDataForEntry(entry: ZipEntry): ByteBuffer {
return filePointer.channel.map(
FileChannel.MapMode.READ_ONLY,
entry.dataOffset.toLong(),
entry.compressedSize.toLong()
)
}
fun copyEntriesFromFileAligned(file: ZipFile, entryAlignment: (entry: ZipEntry) -> Int?) {
for (entry in file.entries) {
if (entries.any { it.fileName == entry.fileName }) continue //don't add duplicates
val data = file.getDataForEntry(entry)
addEntryCopyData(entry, data, entryAlignment(entry))
}
}
override fun close() {
if (CDNeedsRewrite) writeCD()
filePointer.close()
}
}

View File

@@ -1,78 +0,0 @@
package app.revanced.manager.flutter.utils.zip.structures
import app.revanced.manager.flutter.utils.zip.putUInt
import app.revanced.manager.flutter.utils.zip.putUShort
import app.revanced.manager.flutter.utils.zip.readUIntLE
import app.revanced.manager.flutter.utils.zip.readUShortLE
import java.io.DataInput
import java.nio.ByteBuffer
import java.nio.ByteOrder
data class ZipEndRecord(
val diskNumber: UShort,
val startingDiskNumber: UShort,
val diskEntries: UShort,
val totalEntries: UShort,
val centralDirectorySize: UInt,
val centralDirectoryStartOffset: UInt,
val fileComment: String,
) {
companion object {
const val ECD_HEADER_SIZE = 22
const val ECD_SIGNATURE = 0x06054b50u
fun fromECD(input: DataInput): ZipEndRecord {
val signature = input.readUIntLE()
if (signature != ECD_SIGNATURE)
throw IllegalArgumentException("Input doesn't start with end record signature")
val diskNumber = input.readUShortLE()
val startingDiskNumber = input.readUShortLE()
val diskEntries = input.readUShortLE()
val totalEntries = input.readUShortLE()
val centralDirectorySize = input.readUIntLE()
val centralDirectoryStartOffset = input.readUIntLE()
val fileCommentLength = input.readUShortLE()
var fileComment = ""
if (fileCommentLength > 0u) {
val fileCommentBytes = ByteArray(fileCommentLength.toInt())
input.readFully(fileCommentBytes)
fileComment = fileCommentBytes.toString(Charsets.UTF_8)
}
return ZipEndRecord(
diskNumber,
startingDiskNumber,
diskEntries,
totalEntries,
centralDirectorySize,
centralDirectoryStartOffset,
fileComment
)
}
}
fun toECD(): ByteBuffer {
val commentBytes = fileComment.toByteArray(Charsets.UTF_8)
val buffer = ByteBuffer.allocate(ECD_HEADER_SIZE + commentBytes.size)
.also { it.order(ByteOrder.LITTLE_ENDIAN) }
buffer.putUInt(ECD_SIGNATURE)
buffer.putUShort(diskNumber)
buffer.putUShort(startingDiskNumber)
buffer.putUShort(diskEntries)
buffer.putUShort(totalEntries)
buffer.putUInt(centralDirectorySize)
buffer.putUInt(centralDirectoryStartOffset)
buffer.putUShort(commentBytes.size.toUShort())
buffer.put(commentBytes)
buffer.flip()
return buffer
}
}

View File

@@ -1,190 +0,0 @@
package app.revanced.manager.flutter.utils.zip.structures
import app.revanced.manager.flutter.utils.zip.*
import java.io.DataInput
import java.nio.ByteBuffer
import java.nio.ByteOrder
data class ZipEntry(
val version: UShort,
val versionNeeded: UShort,
val flags: UShort,
var compression: UShort,
val modificationTime: UShort,
val modificationDate: UShort,
var crc32: UInt,
var compressedSize: UInt,
var uncompressedSize: UInt,
val diskNumber: UShort,
val internalAttributes: UShort,
val externalAttributes: UInt,
var localHeaderOffset: UInt,
val fileName: String,
val extraField: ByteArray,
val fileComment: String,
var localExtraField: ByteArray = ByteArray(0), //separate for alignment
) {
val LFHSize: Int
get() = LFH_HEADER_SIZE + fileName.toByteArray(Charsets.UTF_8).size + localExtraField.size
val dataOffset: UInt
get() = localHeaderOffset + LFHSize.toUInt()
companion object {
const val CDE_HEADER_SIZE = 46
const val CDE_SIGNATURE = 0x02014b50u
const val LFH_HEADER_SIZE = 30
const val LFH_SIGNATURE = 0x04034b50u
fun createWithName(fileName: String): ZipEntry {
return ZipEntry(
0x1403u, //made by unix, version 20
0u,
0u,
0u,
0x0821u, //seems to be static time google uses, no idea
0x0221u, //same as above
0u,
0u,
0u,
0u,
0u,
0u,
0u,
fileName,
ByteArray(0),
""
)
}
fun fromCDE(input: DataInput): ZipEntry {
val signature = input.readUIntLE()
if (signature != CDE_SIGNATURE)
throw IllegalArgumentException("Input doesn't start with central directory entry signature")
val version = input.readUShortLE()
val versionNeeded = input.readUShortLE()
var flags = input.readUShortLE()
val compression = input.readUShortLE()
val modificationTime = input.readUShortLE()
val modificationDate = input.readUShortLE()
val crc32 = input.readUIntLE()
val compressedSize = input.readUIntLE()
val uncompressedSize = input.readUIntLE()
val fileNameLength = input.readUShortLE()
var fileName = ""
val extraFieldLength = input.readUShortLE()
val extraField = ByteArray(extraFieldLength.toInt())
val fileCommentLength = input.readUShortLE()
var fileComment = ""
val diskNumber = input.readUShortLE()
val internalAttributes = input.readUShortLE()
val externalAttributes = input.readUIntLE()
val localHeaderOffset = input.readUIntLE()
val variableFieldsLength =
fileNameLength.toInt() + extraFieldLength.toInt() + fileCommentLength.toInt()
if (variableFieldsLength > 0) {
val fileNameBytes = ByteArray(fileNameLength.toInt())
input.readFully(fileNameBytes)
fileName = fileNameBytes.toString(Charsets.UTF_8)
input.readFully(extraField)
val fileCommentBytes = ByteArray(fileCommentLength.toInt())
input.readFully(fileCommentBytes)
fileComment = fileCommentBytes.toString(Charsets.UTF_8)
}
flags = (flags and 0b1000u.inv()
.toUShort()) //disable data descriptor flag as they are not used
return ZipEntry(
version,
versionNeeded,
flags,
compression,
modificationTime,
modificationDate,
crc32,
compressedSize,
uncompressedSize,
diskNumber,
internalAttributes,
externalAttributes,
localHeaderOffset,
fileName,
extraField,
fileComment,
)
}
}
fun readLocalExtra(buffer: ByteBuffer) {
buffer.order(ByteOrder.LITTLE_ENDIAN)
localExtraField = ByteArray(buffer.getUShort().toInt())
}
fun toLFH(): ByteBuffer {
val nameBytes = fileName.toByteArray(Charsets.UTF_8)
val buffer = ByteBuffer.allocate(LFH_HEADER_SIZE + nameBytes.size + localExtraField.size)
.also { it.order(ByteOrder.LITTLE_ENDIAN) }
buffer.putUInt(LFH_SIGNATURE)
buffer.putUShort(versionNeeded)
buffer.putUShort(flags)
buffer.putUShort(compression)
buffer.putUShort(modificationTime)
buffer.putUShort(modificationDate)
buffer.putUInt(crc32)
buffer.putUInt(compressedSize)
buffer.putUInt(uncompressedSize)
buffer.putUShort(nameBytes.size.toUShort())
buffer.putUShort(localExtraField.size.toUShort())
buffer.put(nameBytes)
buffer.put(localExtraField)
buffer.flip()
return buffer
}
fun toCDE(): ByteBuffer {
val nameBytes = fileName.toByteArray(Charsets.UTF_8)
val commentBytes = fileComment.toByteArray(Charsets.UTF_8)
val buffer =
ByteBuffer.allocate(CDE_HEADER_SIZE + nameBytes.size + extraField.size + commentBytes.size)
.also { it.order(ByteOrder.LITTLE_ENDIAN) }
buffer.putUInt(CDE_SIGNATURE)
buffer.putUShort(version)
buffer.putUShort(versionNeeded)
buffer.putUShort(flags)
buffer.putUShort(compression)
buffer.putUShort(modificationTime)
buffer.putUShort(modificationDate)
buffer.putUInt(crc32)
buffer.putUInt(compressedSize)
buffer.putUInt(uncompressedSize)
buffer.putUShort(nameBytes.size.toUShort())
buffer.putUShort(extraField.size.toUShort())
buffer.putUShort(commentBytes.size.toUShort())
buffer.putUShort(diskNumber)
buffer.putUShort(internalAttributes)
buffer.putUInt(externalAttributes)
buffer.putUInt(localHeaderOffset)
buffer.put(nameBytes)
buffer.put(extraField)
buffer.put(commentBytes)
buffer.flip()
return buffer
}
}

View File

@@ -3,7 +3,12 @@ allprojects {
google() google()
mavenCentral() mavenCentral()
maven { maven {
url 'https://jitpack.io' // A repository must be speficied for some reason. "registry" is a dummy.
url = uri("https://maven.pkg.github.com/revanced/registry")
credentials {
username = project.findProperty("gpr.user") as String ?: System.getenv("GITHUB_ACTOR")
password = project.findProperty("gpr.key") as String ?: System.getenv("GITHUB_TOKEN")
}
} }
mavenLocal() mavenLocal()
} }

0
assets/i18n/en_US.json Normal file → Executable file
View File

View File

@@ -16,6 +16,8 @@
"noShowAgain": "لا تعرض هذا مرة أخرى", "noShowAgain": "لا تعرض هذا مرة أخرى",
"add": "إضافة", "add": "إضافة",
"remove": "إزالة", "remove": "إزالة",
"showChangelogButton": "إظهار سجل التغييرات",
"showUpdateButton": "عرض التحديث",
"navigationView": { "navigationView": {
"dashboardTab": "لوحة التحكم", "dashboardTab": "لوحة التحكم",
"patcherTab": "المعدّل", "patcherTab": "المعدّل",
@@ -26,11 +28,25 @@
"widgetTitle": "لوحة التحكم", "widgetTitle": "لوحة التحكم",
"updatesSubtitle": "تحديثات", "updatesSubtitle": "تحديثات",
"patchedSubtitle": "التطبيقات المعدلة", "patchedSubtitle": "التطبيقات المعدلة",
"changeLaterSubtitle": "يمكنك تغيير هذا في الإعدادات في وقت لاحق.",
"noUpdates": "لا توجد تحديثات متاحة", "noUpdates": "لا توجد تحديثات متاحة",
"WIP": "العمل قيد التقدم...",
"noInstallations": "لا توجد تطبيقات معدلة مثبتة", "noInstallations": "لا توجد تطبيقات معدلة مثبتة",
"installUpdate": "هل تريد الاستمرار في تثبيت التحديث؟", "installUpdate": "هل تريد الاستمرار في تثبيت التحديث؟",
"updateSheetTitle": "تحديث ReVanced Manager",
"updateDialogTitle": "تحديث جديد متوفر",
"updatePatchesSheetTitle": "تحديث تعديلات ReVanced",
"updateChangelogTitle": "سجل التغييرات", "updateChangelogTitle": "سجل التغييرات",
"updateDialogText": "يتوفر تحديث جديد لـ ${file}.\n\nالإصدار المثبت حاليًا هو ${version}.",
"downloadConsentDialogTitle": "تحميل الملفات المطلوبة؟",
"downloadConsentDialogText": "يحتاج مدير ReVanced إلى تنزيل الملفات الضرورية ليعمل بشكل صحيح.",
"downloadConsentDialogText2": "سيؤدي هذا إلى توصيلك بـ ${url}.",
"checkUpdateDialogTitle": "التحقق من وجود تحديثات؟",
"checkUpdateDialogText": "هل تريد أن يقوم مدير ReVanced بالتحقق من وجود تحديثات تلقائياً؟",
"notificationTitle": "تم تنزيل التحديث",
"notificationText": "انقر لتثبيت التحديث",
"downloadingMessage": "جارٍ تحميل التحديث...", "downloadingMessage": "جارٍ تحميل التحديث...",
"downloadedMessage": "تم تنزيل التحديث",
"installingMessage": "جارٍ تثبيت التحديث...", "installingMessage": "جارٍ تثبيت التحديث...",
"errorDownloadMessage": "تعذر تحميل التحديث", "errorDownloadMessage": "تعذر تحميل التحديث",
"errorInstallMessage": "تعذّر تثبيت التحديث", "errorInstallMessage": "تعذّر تثبيت التحديث",
@@ -42,17 +58,26 @@
}, },
"latestCommitCard": { "latestCommitCard": {
"loadingLabel": "جارٍ التحميل...", "loadingLabel": "جارٍ التحميل...",
"timeagoLabel": "منذ ${time}" "timeagoLabel": "منذ ${time}",
"patcherLabel": "المعدل: ",
"managerLabel": "المدير: ",
"updateButton": "تحديث المدير"
}, },
"patcherView": { "patcherView": {
"widgetTitle": "المُعَّدِّل", "widgetTitle": "المُعَّدِّل",
"patchButton": "تعديل", "patchButton": "تعديل",
"armv7WarningDialogText": "التعديل على أجهزة ARMv7 غير مدعوم حتى الآن وقد يفشل. هل تريد المتابعة على أي حال؟",
"removedPatchesWarningDialogText": "تم إزالة التعديلات التالية منذ آخر مرة استخدمتها فيها.\n\n${patches}\n\nتابع على أي حال؟",
"requiredOptionDialogText": "يجب ضبط بعض خيارات التعديل." "requiredOptionDialogText": "يجب ضبط بعض خيارات التعديل."
}, },
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "اختر تطبيق",
"widgetTitleSelected": "التطبيق المحدد",
"widgetSubtitle": "لم يتم تحديد أي تطبيق",
"noAppsLabel": "لم يتم العثور على تطبيقات", "noAppsLabel": "لم يتم العثور على تطبيقات",
"currentVersion": "الحالي", "currentVersion": "الحالي",
"suggestedVersion": "المقترحة" "suggestedVersion": "المقترحة",
"anyVersion": "أي إصدار"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "حدد التعديلات", "widgetTitle": "حدد التعديلات",
@@ -65,6 +90,8 @@
"widgetSubtitle": "تابعونا!" "widgetSubtitle": "تابعونا!"
}, },
"appSelectorView": { "appSelectorView": {
"viewTitle": "اختر تطبيق",
"searchBarHint": "البحث عن تطبيق",
"storageButton": "التخزين", "storageButton": "التخزين",
"selectFromStorageButton": "اختيار من التخزين", "selectFromStorageButton": "اختيار من التخزين",
"errorMessage": "لا يمكن استخدام التطبيق المحدد", "errorMessage": "لا يمكن استخدام التطبيق المحدد",
@@ -78,7 +105,9 @@
"newPatches": "تعديلات جديدة", "newPatches": "تعديلات جديدة",
"patches": "تعديلات", "patches": "تعديلات",
"doneButton": "تم", "doneButton": "تم",
"defaultChip": "إفتراضي",
"defaultTooltip": "تحديد كل التعديلات الافتراضية", "defaultTooltip": "تحديد كل التعديلات الافتراضية",
"noneChip": "لا شيء",
"noneTooltip": "إلغاء تحديد كل التعديلات", "noneTooltip": "إلغاء تحديد كل التعديلات",
"loadPatchesSelection": "تحميل التعديل المحدد", "loadPatchesSelection": "تحميل التعديل المحدد",
"noSavedPatches": "لا يوجد تحديد تعديل محفوظ للتطبيق المحدد.\nاضغط على تم لحفظ التحديد الحالي.", "noSavedPatches": "لا يوجد تحديد تعديل محفوظ للتطبيق المحدد.\nاضغط على تم لحفظ التحديد الحالي.",
@@ -95,21 +124,27 @@
"tooltip": "المزيد من خيارات الإدخال", "tooltip": "المزيد من خيارات الإدخال",
"selectFilePath": "تحديد مسار الملف", "selectFilePath": "تحديد مسار الملف",
"selectFolder": "تحديد مجلد", "selectFolder": "تحديد مجلد",
"selectOption": "تحديد خيار",
"requiredOption": "هذا الخيار مطلوب", "requiredOption": "هذا الخيار مطلوب",
"unsupportedOption": "هذا الخيار غير مدعوم", "unsupportedOption": "هذا الخيار غير مدعوم",
"requiredOptionNull": "يجب تعيين الخيارات التالية:\n\n${options}" "requiredOptionNull": "يجب تعيين الخيارات التالية:\n\n${options}"
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "قد يؤدي تحديد هذا التعديل إلى حدوث أخطاء في عملية التعديل.\n\nإصدار التطبيق: ${packageVersion}\nالإصدارات المدعومة حالياً:\n${supportedVersions}", "unsupportedDialogText": "قد يؤدي تحديد هذا التعديل إلى حدوث أخطاء في عملية التعديل.\n\nإصدار التطبيق: ${packageVersion}\nالإصدارات المدعومة حالياً:\n${supportedVersions}",
"unsupportedPatchVersion": "التعديل غير مدعوم لإصدار التطبيق هذا.",
"unsupportedRequiredOption": "يحتوي هذا التعديل على خيار مطلوب لا يدعمه هذا التطبيق", "unsupportedRequiredOption": "يحتوي هذا التعديل على خيار مطلوب لا يدعمه هذا التطبيق",
"patchesChangeWarningDialogButton": "استخدام التحديد الافتراضي" "patchesChangeWarningDialogButton": "استخدام التحديد الافتراضي"
}, },
"installerView": { "installerView": {
"widgetTitle": "المثبت",
"installType": "تحديد نوع التثبيت", "installType": "تحديد نوع التثبيت",
"installTypeDescription": "حدد نوع التثبيت للمتابعة.",
"installButton": "تثبيت", "installButton": "تثبيت",
"installRootType": "تحميل", "installRootType": "تحميل",
"installNonRootType": "عادي",
"pressBackAgain": "اضغط رجوع مرة اخرى للإلغاء", "pressBackAgain": "اضغط رجوع مرة اخرى للإلغاء",
"openButton": "فتح", "openButton": "فتح",
"shareButton": "شارك ملف",
"notificationTitle": "ReVanced Manager يقوم بعملية التعديل", "notificationTitle": "ReVanced Manager يقوم بعملية التعديل",
"notificationText": "انقر للعودة إلى المثبت", "notificationText": "انقر للعودة إلى المثبت",
"exportApkButtonTooltip": "تصدير APK المعدل", "exportApkButtonTooltip": "تصدير APK المعدل",
@@ -125,6 +160,7 @@
"debugSectionTitle": "تصحيح الأخطاء", "debugSectionTitle": "تصحيح الأخطاء",
"advancedSectionTitle": "إعدادات متقدمة", "advancedSectionTitle": "إعدادات متقدمة",
"exportSectionTitle": "استيراد و تصدير", "exportSectionTitle": "استيراد و تصدير",
"dataSectionTitle": "مصادر البيانات",
"themeModeLabel": "مظهر التطبيق", "themeModeLabel": "مظهر التطبيق",
"systemThemeLabel": "النظام", "systemThemeLabel": "النظام",
"lightThemeLabel": "فاتح (ابيض)", "lightThemeLabel": "فاتح (ابيض)",
@@ -132,15 +168,16 @@
"dynamicThemeLabel": "تصميم Material You", "dynamicThemeLabel": "تصميم Material You",
"dynamicThemeHint": "استمتع بتجربة أقرب إلى جهازك", "dynamicThemeHint": "استمتع بتجربة أقرب إلى جهازك",
"languageLabel": "اللغة", "languageLabel": "اللغة",
"sourcesLabel": "المصادر", "languageUpdated": "تم تحديث اللغة",
"englishOption": "الإنجليزية",
"sourcesLabel": "مصادر بديلة",
"sourcesIntegrationsLabel": "مصدر الـدمج", "sourcesIntegrationsLabel": "مصدر الـدمج",
"useAlternativeSources": "استخدام مصادر بديلة",
"sourcesResetDialogTitle": "إعادة التعيين", "sourcesResetDialogTitle": "إعادة التعيين",
"sourcesResetDialogText": "هل أنت متأكد من أنك تريد إعادة تعيين المصادر الخاصة بك إلى قيمها الافتراضية؟", "sourcesResetDialogText": "هل أنت متأكد من أنك تريد إعادة تعيين المصادر الخاصة بك إلى قيمها الافتراضية؟",
"apiURLResetDialogText": "هل أنت متأكد من أنك تريد إعادة تعيين رابط API الخاص بك إلى قيمته الافتراضية؟", "apiURLResetDialogText": "هل أنت متأكد من أنك تريد إعادة تعيين رابط API الخاص بك إلى قيمته الافتراضية؟",
"sourcesUpdateNote": "ملاحظة: سيتم تحديث التعديلات إلى الإصدار الأحدث تلقائيًا.\n\nسيكشف هذا عن عنوان IP الخاص بك للخادم.",
"apiURLLabel": "رابط API", "apiURLLabel": "رابط API",
"selectApiURL": "رابط API", "selectApiURL": "رابط API",
"hostRepositoryLabel": "مستودع API",
"orgPatchesLabel": "تنظيم التعديلات", "orgPatchesLabel": "تنظيم التعديلات",
"sourcesPatchesLabel": "مصدر التعديلات", "sourcesPatchesLabel": "مصدر التعديلات",
"orgIntegrationsLabel": "تنظيم الدمج", "orgIntegrationsLabel": "تنظيم الدمج",
@@ -153,6 +190,8 @@
"disablePatchesSelectionWarningText": "أنت على وشك تعطيل تغيير تحديد التعديلات.\nستتم استعادة التحديد الافتراضي للتعديلات.\n\nهل تريد التعطيل على أي حال؟", "disablePatchesSelectionWarningText": "أنت على وشك تعطيل تغيير تحديد التعديلات.\nستتم استعادة التحديد الافتراضي للتعديلات.\n\nهل تريد التعطيل على أي حال؟",
"autoUpdatePatchesLabel": "تحديث التعديلات تلقائيًا", "autoUpdatePatchesLabel": "تحديث التعديلات تلقائيًا",
"autoUpdatePatchesHint": "تحديث التعديلات تلقائيًا إلى الإصدار الأحدث", "autoUpdatePatchesHint": "تحديث التعديلات تلقائيًا إلى الإصدار الأحدث",
"showUpdateDialogLabel": "عرض مربع حوار التحديث",
"showUpdateDialogHint": "إظهار مربع حوار عندما يتوفر تحديث جديد",
"universalPatchesLabel": "عرض التعديلات العامة", "universalPatchesLabel": "عرض التعديلات العامة",
"universalPatchesHint": "عرض جميع التطبيقات والتعديلات العامة (قد تؤدي إلى إبطاء قائمة التطبيقات)", "universalPatchesHint": "عرض جميع التطبيقات والتعديلات العامة (قد تؤدي إلى إبطاء قائمة التطبيقات)",
"versionCompatibilityCheckLabel": "التحقق من توافق الإصدار", "versionCompatibilityCheckLabel": "التحقق من توافق الإصدار",
@@ -206,9 +245,11 @@
"openButton": "فتح", "openButton": "فتح",
"uninstallButton": "إلغاء التثبيت", "uninstallButton": "إلغاء التثبيت",
"rootDialogTitle": "خطأ", "rootDialogTitle": "خطأ",
"uninstallDialogText": "هل أنت متأكد من أنك تريد إلغاء تثبيت هذا التطبيق؟",
"rootDialogText": "تم تثبيت التطبيق بأذونات المستخدم المتميز، لكن ReVanced Manager ليس لديه أذونات حاليًا.\nالرجاء منح أذونات المستخدم المتميز أولاً.", "rootDialogText": "تم تثبيت التطبيق بأذونات المستخدم المتميز، لكن ReVanced Manager ليس لديه أذونات حاليًا.\nالرجاء منح أذونات المستخدم المتميز أولاً.",
"packageNameLabel": "اسم الحُزْمَة", "packageNameLabel": "اسم الحُزْمَة",
"installTypeLabel": "نوع التثبيت", "installTypeLabel": "نوع التثبيت",
"regularTypeLabel": "عادي",
"patchedDateLabel": "تاريخ التعديل", "patchedDateLabel": "تاريخ التعديل",
"appliedPatchesLabel": "التعديلات المطبقة", "appliedPatchesLabel": "التعديلات المطبقة",
"patchedDateHint": "${date} في ${time}", "patchedDateHint": "${date} في ${time}",
@@ -218,5 +259,13 @@
"contributorsView": { "contributorsView": {
"widgetTitle": "المساهمون" "widgetTitle": "المساهمون"
}, },
"installErrorDialog": {} "installErrorDialog": {
"mount_version_mismatch": "نسخة غير متطابقة",
"mount_no_root": "لا توجد صلاحيات روت",
"install_failed_verification_failure": "فشل التحقق",
"status_failure_invalid": "التثبيت غير صالح",
"status_failure_incompatible": "التثبيت غير متوافق",
"status_unknown": "فشل التثبيت",
"status_unknown_description": "فشل التثبيت لسبب غير معروف. الرجاء المحاولة مرة أخرى."
}
} }

View File

@@ -164,6 +164,7 @@
"debugSectionTitle": "Sazlama", "debugSectionTitle": "Sazlama",
"advancedSectionTitle": "Qabaqcıl", "advancedSectionTitle": "Qabaqcıl",
"exportSectionTitle": "Daxilə və xaricə köçür", "exportSectionTitle": "Daxilə və xaricə köçür",
"dataSectionTitle": "Data mənbələri",
"themeModeLabel": "Tətbiq teması", "themeModeLabel": "Tətbiq teması",
"systemThemeLabel": "Sistem", "systemThemeLabel": "Sistem",
"lightThemeLabel": "İşıqlı", "lightThemeLabel": "İşıqlı",
@@ -173,17 +174,18 @@
"languageLabel": "Dil", "languageLabel": "Dil",
"languageUpdated": "Dil güncəlləndi", "languageUpdated": "Dil güncəlləndi",
"englishOption": "İngiliscə", "englishOption": "İngiliscə",
"sourcesLabel": "Mənbələr", "sourcesLabel": "Alternativ mənbələr",
"sourcesLabelHint": "Yamaqlarıninteqrasiyaların mənbəyini konfiqurasiya et", "sourcesLabelHint": "ReVanced YamaqlarıReVanced İnteqrasiyaları üçün alternativ mənbələri konfiqurasiya edin",
"sourcesIntegrationsLabel": "İnteqrasiya mənbəyi", "sourcesIntegrationsLabel": "İnteqrasiya mənbəyi",
"useAlternativeSources": "Alternativ mənbələri istifadə et",
"useAlternativeSourcesHint": "ReVanced Yamaqları və ReVanced İnteqrasiyaları üçün API əvəzinə alternativ mənbələri istifadə et",
"sourcesResetDialogTitle": "Sıfırla", "sourcesResetDialogTitle": "Sıfırla",
"sourcesResetDialogText": "Mənbələrinizi ilkin dəyərlərinə sıfırlamaq istədiyinizə əminsiniz?", "sourcesResetDialogText": "Mənbələrinizi ilkin dəyərlərinə sıfırlamaq istədiyinizə əminsiniz?",
"apiURLResetDialogText": "API URL-nizi ilkin dəyərinə sıfırlamaq istədiyinizə əminsiz?", "apiURLResetDialogText": "API URL-nizi ilkin dəyərinə sıfırlamaq istədiyinizə əminsiz?",
"sourcesUpdateNote": "Qeyd: Yamaqlar son versiyaya avtomatik güncəllənəcək.\n\nBu, IP ünvanızı serverə göstərəcək.", "sourcesUpdateNote": "Qeyd: Bu, ReVanced Yamaqları və ReVanced İnteqrasiyalarını alternativ mənbələrdən avtomatik olaraq endirəcək.\n\nBu, sizi alternativ mənbəyə bağlayacaq.",
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"apiURLHint": "İstifadə ediləcək API-nin URL-sini konfiqurasiya et", "apiURLHint": "\"ReVacned Manager\"in API URL-sini konfiqurasiya et",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"hostRepositoryLabel": "Depo API",
"orgPatchesLabel": "Yamaq təşkilatı", "orgPatchesLabel": "Yamaq təşkilatı",
"sourcesPatchesLabel": "Yamaq mənbəyi", "sourcesPatchesLabel": "Yamaq mənbəyi",
"orgIntegrationsLabel": "İnteqrasiya təşkilatı", "orgIntegrationsLabel": "İnteqrasiya təşkilatı",
@@ -269,7 +271,12 @@
"updateNotImplemented": "Bu özəllik hələ tətbiq olunmayıb" "updateNotImplemented": "Bu özəllik hələ tətbiq olunmayıb"
}, },
"contributorsView": { "contributorsView": {
"widgetTitle": "Töhfə verənlər" "widgetTitle": "Töhfə verənlər",
"patcherContributors": "ReVanced Patcher",
"patchesContributors": "ReVanced Yamaqları",
"integrationsContributors": "ReVanced İnteqrasiyaları",
"cliContributors": "ReVanced CLI",
"managerContributors": "ReVanced Manager"
}, },
"installErrorDialog": { "installErrorDialog": {
"mount_version_mismatch": "Versiya uyuşmur", "mount_version_mismatch": "Versiya uyuşmur",

View File

@@ -12,63 +12,63 @@
"noButton": "Не", "noButton": "Не",
"warning": "Увага", "warning": "Увага",
"options": "Параметры", "options": "Параметры",
"notice": "Апавяшчэнне", "notice": "Заўвага",
"noShowAgain": "Больш не паказваць", "noShowAgain": "Больш не паказваць",
"add": "Дадаць", "add": "Дадаць",
"remove": "Выдаліць", "remove": "Выдаліць",
"showChangelogButton": "Паказаць журнал змен", "showChangelogButton": "Паказаць журнал змяненняў",
"showUpdateButton": "Паказаць абнаўленне", "showUpdateButton": "Паказаць абнаўленне",
"navigationView": { "navigationView": {
"dashboardTab": "Галоўная", "dashboardTab": "Галоўная",
"patcherTab": атчар", "patcherTab": раграма выпраўлення",
"settingsTab": "Налады" "settingsTab": "Налады"
}, },
"homeView": { "homeView": {
"refreshSuccess": "Паспяхова абноўлена", "refreshSuccess": "Паспяхова абноўлена",
"widgetTitle": "Галоўная", "widgetTitle": "Галоўная",
"updatesSubtitle": "Абнаўленні", "updatesSubtitle": "Абнаўленні",
"patchedSubtitle": "Прапатчаныя праграмы", "patchedSubtitle": "Выпраўленыя праграмы",
"changeLaterSubtitle": "Вы можаце змяніць гэта ў наладах пазней.", "changeLaterSubtitle": "Вы можаце змяніць гэта ў наладах пазней.",
"noUpdates": "Няма даступных абнаўленняў", "noUpdates": "Няма даступных абнаўленняў",
"WIP": "У працэсе...", "WIP": "У працэсе...",
"noInstallations": "Няма ўсталяваных прапатчаных праграм", "noInstallations": "Няма ўсталяваных праграм з выпраўленнямі",
"installUpdate": "Працягнуць устаноўку абнаўлення?", "installUpdate": "Працягнуць усталяванне абнаўлення?",
"updateSheetTitle": "Абнавіць ReVanced Manager", "updateSheetTitle": "Абнавіць ReVanced Manager",
"updateDialogTitle": "Даступна новае абнаўленне", "updateDialogTitle": "Даступна новае абнаўленне",
"updatePatchesSheetTitle": "Абнавіць патчы ReVanced", "updatePatchesSheetTitle": "Абнавіць выпраўленні ReVanced",
"updateChangelogTitle": "Спіс змяненняў", "updateChangelogTitle": "Спіс змяненняў",
"updateDialogText": "Даступна новае абнаўленне для ${file}\n\nЦяпер усталявана версія ${version}.", "updateDialogText": "Даступна новае абнаўленне для ${file}\n\nЦяпер усталявана версія ${version}.",
"downloadConsentDialogTitle": "Спампаваць неабходныя файлы?", "downloadConsentDialogTitle": "Спампаваць неабходныя файлы?",
"downloadConsentDialogText": "ReVanced Manager неабходна спампаваць неабходныя файлы для правільнай працы.", "downloadConsentDialogText": "ReVanced Manager неабходна спампаваць неабходныя файлы для правільнай працы.",
"downloadConsentDialogText2": "Гэта падключыць вас да ${url}.", "downloadConsentDialogText2": "Гэта падключыць вас да ${url}.",
"checkUpdateDialogTitle": "Праверыць абнаўленні?", "checkUpdateDialogTitle": "Праверыць наяўнасць абнаўленняў?",
"checkUpdateDialogText": "Вы сапраўды хочаце правяраць абнаўленні ReVanced Manager аўтаматычна?", "checkUpdateDialogText": "Вы сапраўды хочаце правяраць абнаўленні ReVanced Manager аўтаматычна?",
"notificationTitle": "Абнаўленне спампавана", "notificationTitle": "Абнаўленне спампавана",
"notificationText": "Націсніце, каб усталяваць абнаўленне", "notificationText": "Націсніце, каб усталяваць абнаўленне",
"downloadingMessage": "Загружаецца абнаўленне...", "downloadingMessage": "Спампоўваецца абнаўленне...",
"downloadedMessage": "Абнаўленне спампавана", "downloadedMessage": "Абнаўленне спампавана",
"installingMessage": "Усталяванне абнаўлення...", "installingMessage": "Усталяванне абнаўлення...",
"errorDownloadMessage": "Немагчыма спампаваць абнаўленне", "errorDownloadMessage": "Немагчыма спампаваць абнаўленне",
"errorInstallMessage": "Немагчыма ўсталяваць абнаўленне", "errorInstallMessage": "Немагчыма ўсталяваць абнаўленне",
"noConnection": "Няма злучэння з інтэрнэтам", "noConnection": "Няма злучэння з інтэрнэтам",
"updatesDisabled": "Абнаўленне праграмы з патчам зараз адключана. Паўторна прапатчыце праграму." "updatesDisabled": "Абнаўленне выпраўленай праграмы ў цяперашні час адключана. Неабходна паўторна ўжыць выпраўленне для праграмы."
}, },
"applicationItem": { "applicationItem": {
"infoButton": "Інфармацыя" "infoButton": "Звесткі"
}, },
"latestCommitCard": { "latestCommitCard": {
"loadingLabel": "Загрузка...", "loadingLabel": "Загрузка...",
"timeagoLabel": "${time} таму назад", "timeagoLabel": "${time} таму",
"patcherLabel": атчар: ", "patcherLabel": раграма выпраўлення: ",
"managerLabel": "Менеджар: ", "managerLabel": "Менеджар: ",
"updateButton": "Абнавіць ReVanced Manager" "updateButton": "Абнавіць ReVanced Manager"
}, },
"patcherView": { "patcherView": {
"widgetTitle": атчар", "widgetTitle": раграма выпраўлення",
"patchButton": "Прапатчыць", "patchButton": "Выправіць",
"armv7WarningDialogText": "Патчынг на працэсар з архітэктурай ARMv7 пакуль не падтрымлівае і можа прывесці да збою. Працягнуць?", "armv7WarningDialogText": "Выпраўленне для прылад на ARMv7 пакуль не падтрымліваецца і можа прывесці да збою. Працягнуць?",
"removedPatchesWarningDialogText": "Наступныя патчы былі выдалены з моманту іх апошняга выкарыстання.\n\n${patches}\n\nУсё роўна працягнуць?", "removedPatchesWarningDialogText": "Наступныя выпраўленні былі выдалены з моманту іх апошняга выкарыстання.\n\n${patches}\n\nУсё роўна працягнуць?",
"requiredOptionDialogText": "Некаторыя параметры павінны быць зададзены." "requiredOptionDialogText": "Неабходна задаць некаторыя параметры выпраўленняў."
}, },
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "Выбраць праграму", "widgetTitle": "Выбраць праграму",
@@ -80,10 +80,10 @@
"anyVersion": "Любая версія" "anyVersion": "Любая версія"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Выбраць патчы", "widgetTitle": "Выберыце выпраўленні",
"widgetTitleSelected": "Выбраныя патчы", "widgetTitleSelected": "Выбраныя выпраўленні",
"widgetSubtitle": "Спачатку выберыце праграму", "widgetSubtitle": "Спачатку выберыце праграму",
"widgetEmptySubtitle": "Патчы не выбраны" "widgetEmptySubtitle": "Выпраўленні не выбраны"
}, },
"socialMediaCard": { "socialMediaCard": {
"widgetTitle": "Сацсеткі", "widgetTitle": "Сацсеткі",
@@ -98,79 +98,210 @@
"downloadToast": "Функцыя спампоўвання пакуль недаступна", "downloadToast": "Функцыя спампоўвання пакуль недаступна",
"requireSuggestedAppVersionDialogText": "Версія праграмы, якую вы выбралі не супадае з прапанаванай версіяй і гэта можа прывесці да нечаканых праблем. Скарыстайцеся прапанаванай версіяй.\n\nВыбраная версія: ${selected}\nПрапанаваная версія: ${suggested}\n\nАдключыце \"Патрабаваць прапанаваную версію праграмы\" ў наладах, каб праігнараваць гэта паведамленне.", "requireSuggestedAppVersionDialogText": "Версія праграмы, якую вы выбралі не супадае з прапанаванай версіяй і гэта можа прывесці да нечаканых праблем. Скарыстайцеся прапанаванай версіяй.\n\nВыбраная версія: ${selected}\nПрапанаваная версія: ${suggested}\n\nАдключыце \"Патрабаваць прапанаваную версію праграмы\" ў наладах, каб праігнараваць гэта паведамленне.",
"featureNotAvailable": "Функцыя не рэалізавана", "featureNotAvailable": "Функцыя не рэалізавана",
"featureNotAvailableText": "Гэта праграма з'яўляецца раздзеленым файлам APK і яе можна надзейна прапатчыць і ўсталяваць толькі падключэннем з правамі суперкарыстальніка. Аднак вы можаце прапатчыць і ўсталяваць поўны файл APK выбраўшы яго са сховішча." "featureNotAvailableText": "Гэта праграма з'яўляецца раздзеленым файлам APK і яе можна надзейна выправіць і ўсталяваць толькі падключэннем з правамі суперкарыстальніка. Аднак вы можаце выправіць і ўсталяваць поўны файл APK выбраўшы яго са сховішча."
}, },
"patchesSelectorView": { "patchesSelectorView": {
"viewTitle": "Выбраць патчы", "viewTitle": "Выберыце выпраўленні",
"searchBarHint": "Пошук патчаў", "searchBarHint": "Пошук выпраўленняў",
"universalPatches": "Універсальныя патчы", "universalPatches": "Універсальныя выпраўленні",
"newPatches": "Новыя патчы", "newPatches": "Новыя выпраўленні",
"patches": "Патчы", "patches": "Выпраўленні",
"doneButton": "Гатова", "doneButton": "Гатова",
"defaultChip": "Прадвызначана", "defaultChip": "Прадвызначана",
"defaultTooltip": "Выбраць усе прадвызначаныя патчы", "defaultTooltip": "Выбраць усе прадвызначаныя выпраўленні",
"noneChip": "Няма", "noneChip": "Няма",
"noneTooltip": "Зняць выбар з усіх патчаў", "noneTooltip": "Зняць выбар з усіх выпраўленняў",
"loadPatchesSelection": "Загрузіць выбраныя патчы", "loadPatchesSelection": "Загрузіць выбраныя выпраўленні",
"noSavedPatches": "Адсутнічае захаваны выбар патчаў для выбранай праграмы.\nНацінсіце \"Гатова\", каб захаваць бягучы выбар.", "noSavedPatches": "Адсутнічае захаваны выбар выпраўленняў для выбранай праграмы.\nНацісніце \"Гатова\", каб захаваць бягучы выбар.",
"noPatchesFound": "Для выбранай праграмы патчы не знойдзены", "noPatchesFound": "Для выбранай праграмы выпраўленні не знойдзены",
"setRequiredOption": "Некаторыя патчы патрабуюць зададзеных параметраў:\n\n${patches}\n\nЗадайце іх перад працягам." "setRequiredOption": "Некаторыя выпраўленні патрабуюць зададзеных параметраў:\n\n${patches}\n\nЗадайце іх перад працягам."
}, },
"patchOptionsView": { "patchOptionsView": {
"customValue": "Карыстальніцкае значэнне", "customValue": "Уласнае значэнне",
"resetOptionsTooltip": "Скінуць параметры патча", "resetOptionsTooltip": "Скінуць параметры выпраўлення",
"viewTitle": "Параметры патча", "viewTitle": "Параметры выпраўлення",
"saveOptions": "Захаваць", "saveOptions": "Захаваць",
"addOptions": "Дадаць параметры", "addOptions": "Дадаць параметры",
"deselectPatch": "Зняць выбар патча", "deselectPatch": "Зняць выбар з выпраўлення",
"tooltip": "Больш уваходных параметраў", "tooltip": "Больш уваходных параметраў",
"selectFilePath": "Выберыце шлях файла", "selectFilePath": "Выбраць шлях да файла",
"selectFolder": "Выбраць папку", "selectFolder": "Выбраць папку",
"selectOption": "Выбраць параметр", "selectOption": "Выберыце параметр",
"requiredOption": "Абавязковы параметр", "requiredOption": "Абавязковы параметр",
"unsupportedOption": "Гэты параметр не падтрымліваецца", "unsupportedOption": "Гэты параметр не падтрымліваецца",
"requiredOptionNull": "Наступныя параметры павінны быць зададзены:\n\n${options}" "requiredOptionNull": "Наступныя параметры павінны быць зададзены:\n\n${options}"
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "Выбар гэтага патча можа прывесці да памылак падчас ужывання патчаў.\n\nВерсія праграмы: ${packageVersion}\nВерсіі, якія падтрымліваюцца:\n${supportedVersions}", "unsupportedDialogText": "Выбар гэтага выпраўлення можа прывесці да памылак падчас яго ўжывання.\n\nВерсія праграмы: ${packageVersion}\nВерсіі, якія падтрымліваюцца:\n${supportedVersions}",
"unsupportedPatchVersion": "Патч не падтрымліваецца гэтай версіяй праграмы.", "unsupportedPatchVersion": "Выпраўленне не падтрымліваецца гэтай версіяй праграмы.",
"unsupportedRequiredOption": "Гэты патч змяшчае неабходныя параметры, якія не падтрымліваюцца гэтай праграмай", "unsupportedRequiredOption": "Гэта выпраўленне змяшчае неабходныя параметры, якія не падтрымліваюцца гэтай праграмай",
"patchesChangeWarningDialogText": "Рэкамендуецца выкарыстоўваць прадвызначаны выбар патча і параметры. Іх змяненне можа прывесці да нечаканых праблем.\n\nПерад змяненнем выбару патчаў, вам неабходна ўключыць параметр \"Дазволіць змяненне выбару патча\" ў наладах.", "patchesChangeWarningDialogText": "Рэкамендуецца выкарыстоўваць прадвызначаны выбар выпраўлення і параметры. Іх змяненне можа прывесці да нечаканых праблем.\n\nПерад змяненнем выбару выпраўлення, вам неабходна ўключыць параметр \"Дазволіць змяненне выбару выпраўлення\" ў наладах.",
"patchesChangeWarningDialogButton": "Выкарыстоўваць прадвызначаны выбар" "patchesChangeWarningDialogButton": "Выкарыстоўваць прадвызначаны выбар"
}, },
"installerView": { "installerView": {
"widgetTitle": "Устаноўшчык праграм", "widgetTitle": "Устаноўшчык праграм",
"installType": "Выберыце тып усталявання", "installType": "Выберыце тып устаноўкі",
"installTypeDescription": "Выберыце тып усталявання для працягу.", "installTypeDescription": "Выберыце тып устаноўкі для працягу.",
"installButton": "Усталяваць", "installButton": "Усталяваць",
"installRootType": "Падключыць", "installRootType": "Падключыць",
"installNonRootType": "Звычайны", "installNonRootType": "Звычайны",
"warning": "Адключыць аўтаматычныя абнаўленні для прапатчаных праграм, каб пазбегнуць нечаканых праблем.", "warning": "Адключыць аўтаматычныя абнаўленні для выпраўленых праграм, каб пазбегнуць нечаканых праблем.",
"pressBackAgain": "Націсніце назад яшчэ раз, каб скасаваць", "pressBackAgain": "Націсніце назад яшчэ раз, каб скасаваць",
"openButton": "Адкрыць", "openButton": "Адкрыць",
"shareButton": "Абагуліць файл", "shareButton": "Абагуліць файл",
"notificationTitle": "ReVanced Manager патчыць праграму", "notificationTitle": "ReVanced Manager працуе над выпраўленнем",
"notificationText": "Націсніце для вяртання ва ўсталёўшчык праграм", "notificationText": "Націсніце для вяртання ва ўсталёўшчык праграм",
"exportApkButtonTooltip": "Экспартаваць прапатчаны APK", "exportApkButtonTooltip": "Экспартаваць выпраўленыя APK",
"exportLogButtonTooltip": "Экспартаваць журнал" "exportLogButtonTooltip": "Экспартаваць журнал",
"screenshotDetected": "Выяўлены здымак экрана. Калі вы хочаце абагуліць журнал, то замест гэтага адпраўце тэкставую копію\n\nСкапіраваць журнал у буфер абмену?",
"copiedToClipboard": "Журнал скапіяваны ў буфер абмену",
"noExit": "Усталёўшчык усё яшчэ працуе, нельга выйсці..."
}, },
"settingsView": { "settingsView": {
"widgetTitle": "Налады",
"appearanceSectionTitle": "Знешні выгляд",
"teamSectionTitle": "Каманда",
"debugSectionTitle": "Адладка",
"advancedSectionTitle": "Дадаткова",
"exportSectionTitle": "Імпарт і экспарт",
"dataSectionTitle": "Крыніцы даных",
"themeModeLabel": "Тэма праграмы", "themeModeLabel": "Тэма праграмы",
"systemThemeLabel": "Сістэма", "systemThemeLabel": "Сістэма",
"lightThemeLabel": "Светлая", "lightThemeLabel": "Светлая",
"darkThemeLabel": "Цёмная", "darkThemeLabel": "Цёмная",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Атрымлівайце асалоду ад тэмы сваёй прылады",
"languageLabel": "Мова", "languageLabel": "Мова",
"languageUpdated": "Мова абноўлена", "languageUpdated": "Мова абноўлена",
"englishOption": "Англійская", "englishOption": "Англійская",
"sourcesLabel": "Крыніцы", "sourcesLabel": "Альтэрнатыўныя крыніцы",
"sourcesLabelHint": "Сканфігурыраваць альтэрнатыўныя крыніцы для ReVanced Patches і ReVanced Integrations",
"sourcesIntegrationsLabel": "Крыніца інтэграцый", "sourcesIntegrationsLabel": "Крыніца інтэграцый",
"useAlternativeSources": "Выкарыстоўваць альтэрнатыўныя крыніцы",
"useAlternativeSourcesHint": "Выкарыстоўваць альтэрнатыўныя крыніцы для ReVanced Patches і ReVanced Integrations замест API",
"sourcesResetDialogTitle": "Скінуць", "sourcesResetDialogTitle": "Скінуць",
"sourcesResetDialogText": "Вы сапраўды хочаце скінуць свае крыніцы да іх прадвызначаных значэнняў?",
"apiURLResetDialogText": "Вы сапраўды хочаце скінуць свае API URL да іх прадвызначаных значэнняў?",
"sourcesUpdateNote": "Нататка: Гэта аўтаматычна спампуе ReVanced Patches і ReVanced Integrations з альтэрнатыўных крыніц.\n\nГэта падключыць вас да альтэрнатыўнай крыніцы.",
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"apiURLHint": "Сканфігуруйце URL API, каб скарыстацца", "apiURLHint": "Сканфігурыруйце URL API для ReVanced Manager",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"hostRepositoryLabel": "Рэпазіторый API" "orgPatchesLabel": "Арганізацыя выпраўленняў",
"sourcesPatchesLabel": "Крыніца выпраўленняў",
"orgIntegrationsLabel": "Арганізацыя інтэграцый",
"contributorsLabel": "Удзельнікі",
"contributorsHint": "Спіс усіх удзельнікаў праекта ReVanced",
"logsLabel": "Абагуліць журнал",
"logsHint": "Абагуліць журнал ReVanced Manager",
"enablePatchesSelectionLabel": "Дазволіць змяненне выбару выпраўлення",
"enablePatchesSelectionHint": "Не прадухіляць выбар або скасаванне выбару выпраўленняў",
"enablePatchesSelectionWarningText": "Змяненне выбару выпраўленняў можа стаць прычынай нечаканых праблем.\n\nУключыць усё роўна?",
"disablePatchesSelectionWarningText": "Вы збіраецеся адключыць змяненне выбару выпраўленняў.\nБудзе адноўлены прадвызначаны выбар выпраўленняў.\n\nАдключыць усё роўна?",
"autoUpdatePatchesLabel": "Аўтаматычнае абнаўленне выпраўленняў",
"autoUpdatePatchesHint": "Аўтаматычна абнаўляць выпраўленні да апошняй версіі",
"showUpdateDialogLabel": "Паказваць акно абнаўлення",
"showUpdateDialogHint": "Паказваць акно, калі даступна новае абнаўленне",
"universalPatchesLabel": "Паказваць універсальныя выпраўленні",
"universalPatchesHint": "Адлюстраваць усе праграмы і ўніверсальныя выпраўленні (можа запаволіць спіс праграм)",
"versionCompatibilityCheckLabel": "Праверка сумяшчальнасці версіі",
"versionCompatibilityCheckHint": "Прадухіляць выбар выпраўленняў, якія несумяшчальныя з выбранай версіяй праграмы",
"requireSuggestedAppVersionLabel": "Запыт прапанаванай версіі праграмы",
"requireSuggestedAppVersionHint": "Прадухіляць выбар праграмы з не прапанаванай версіяй",
"requireSuggestedAppVersionDialogText": "Выбар праграмы не прапанаванай версіі можа стаць прычынай нечаканых праблем.\n\nВы ўсё роўна хочаце працягнуць?",
"aboutLabel": "Пра праграму",
"snackbarMessage": "Скапіявана ў буфер абмену",
"restartAppForChanges": "Перазапусціце праграму, каб ужыць змены",
"deleteTempDirLabel": "Выдаліць часовыя файлы",
"deleteTempDirHint": "Выдаліць нявыкарыстаныя часовыя файлы",
"deletedTempDir": "Часовыя файлы выдалены",
"exportPatchesLabel": "Экспартаваць выбар выпраўленняў",
"exportPatchesHint": "Экспартаваць выбар выпраўленняў у файл JSON",
"exportedPatches": "Выбар выпраўленняў экспартаваны",
"noExportFileFound": "Адсутнічае выбар выпраўленняў для экспартавання",
"importPatchesLabel": "Імпартаваць выбар выпраўленняў",
"importPatchesHint": "Імпартаваць выбар выпраўленняў у файл JSON",
"importedPatches": "Выбар выпраўленняў імпартаваны",
"resetStoredPatchesLabel": "Скінуць выбар выпраўлення",
"resetStoredPatchesHint": "Скінуць захаванне выбару выпраўлення",
"resetStoredPatchesDialogTitle": "Скінуць выбар выпраўленняў?",
"resetStoredPatchesDialogText": "Прадвызначаны выбар выпраўленняў будзе адноўлены.",
"resetStoredPatches": "Выбар выпраўленняў будзе скінуты",
"resetStoredOptionsLabel": "Скінуць параметры выпраўлення",
"resetStoredOptionsHint": "Скінуць усе параметры выпраўлення",
"resetStoredOptionsDialogTitle": "Скінуць параметры выпраўлення?",
"resetStoredOptionsDialogText": "Скіданне параметраў выпраўлення выдаліць усе захаваныя параметры.",
"resetStoredOptions": "Параметры былі скінуты",
"deleteLogsLabel": "Ачысціць журнал",
"deleteLogsHint": "Выдаліць сабраны журнал ReVanced Manager",
"deletedLogs": "Журнал выдалены",
"regenerateKeystoreLabel": "Перагенерыраваць сховішча ключоў",
"regenerateKeystoreHint": "Паўторна генерыраваць сховішча ключоў, якое выкарыстоўваецца для падпісання праграм",
"regenerateKeystoreDialogTitle": "Паўторна генерыраваць сховішча ключоў?",
"regenerateKeystoreDialogText": "Выпраўленыя праграмы, якія падпісаны старым сховішчам ключоў, больш немагчыма будзе абнавіць.",
"regeneratedKeystore": "Сховішча ключоў генерыравана паўторна",
"exportKeystoreLabel": "Экспартаваць сховішча ключоў",
"exportKeystoreHint": "Экспартаваць сховішча ключоў, якое выкарыстоўваецца для падпісання праграм",
"exportedKeystore": "Сховішча ключоў экспартавана",
"noKeystoreExportFileFound": "Адсутнічае сховішча ключоў для экспартавання",
"importKeystoreLabel": "Імпартаваць сховішча ключоў",
"importKeystoreHint": "Імпартаваць сховішча ключоў, якое выкарыстоўваецца для падпісання праграм",
"importedKeystore": "Сховішча ключоў імпартавана",
"selectKeystorePassword": "Пароль сховішча ключоў",
"selectKeystorePasswordHint": "Выбраць пароль сховішча ключоў, які выкарыстоўваецца для падпісання праграм",
"jsonSelectorErrorMessage": "Немагчыма выкарыстоўваць выбраны файл JSON",
"keystoreSelectorErrorMessage": "Немагчыма выкарыстоўваць выбраны файл сховішча ключоў"
}, },
"appInfoView": {}, "appInfoView": {
"contributorsView": {}, "widgetTitle": "Пра праграму",
"installErrorDialog": {} "openButton": "Адкрыць",
"uninstallButton": "Выдаліць",
"unmountButton": "Адключыць",
"rootDialogTitle": "Памылка",
"unmountDialogText": "Вы сапраўды хочаце адключыць гэту праграму?",
"uninstallDialogText": "Вы сапраўды хочаце выдаліць гэту праграму?",
"rootDialogText": "Праграма ўсталявана з правамі суперкарыстальніка, але ў цяперашні час у ReVanced Manager адсутнічаюць такія правы.\nСпачатку дайце праграме правы суперкарыстальніка.",
"packageNameLabel": "Назва пакета",
"installTypeLabel": "Тып усталявання",
"mountTypeLabel": "Падключыць",
"regularTypeLabel": "Звычайны",
"patchedDateLabel": "Дата выпраўлення",
"appliedPatchesLabel": "Ужытыя выпраўленні",
"patchedDateHint": "${date} у ${time}",
"appliedPatchesHint": "Ужыта выпраўленняў: ${quantity}",
"updateNotImplemented": "Пакуль яшчэ гэта функцыя не рэалізавана"
},
"contributorsView": {
"widgetTitle": "Удзельнікі",
"patcherContributors": "ReVanced Patcher",
"patchesContributors": "Выпраўленні ReVanced",
"integrationsContributors": "Інтэграцыі ReVanced",
"cliContributors": "ReVanced CLI",
"managerContributors": "ReVanced Manager"
},
"installErrorDialog": {
"mount_version_mismatch": "Неадпаведнасць версій",
"mount_no_root": "Няма праў суперкарыстальніка",
"mount_missing_installation": "Усталяванне не знойдзена",
"status_failure_blocked": "Усталяванне заблакіравана",
"install_failed_verification_failure": "Збой праверкі",
"status_failure_invalid": "Памылковае ўсталяванне",
"install_failed_version_downgrade": "Немагчыма панізіць",
"status_failure_conflict": "Канфлікт усталявання",
"status_failure_storage": "Праблема са сховішчам усталявання",
"status_failure_incompatible": "Несумяшчальнае ўсталяванне",
"status_failure_timeout": "Час чакання ўсталявання",
"status_unknown": "Збой усталявання",
"mount_version_mismatch_description": "Збой усталявання, бо версія ўсталяванай праграмы адрозніваецца ад версіі выпраўленай праграмы.",
"mount_no_root_description": "Збой усталявання, бо не атрыманы правы суперкарыстальніка.\n\nДайце правы суперкарыстальніка ReVanced Manager і паспрабуйце яшчэ раз.",
"mount_missing_installation_description": "Збой усталявання, бо спачатку неабходна ўсталяваць не выпраўленую праграму на гэту прыладу для падключэння паверх яе.\n\nУсталюйце не выпраўленую праграму перад падключэннем і паспрабуйце яшчэ раз.",
"status_failure_timeout_description": "Працэс усталявання адбываўся занадта доўга.\n\nВы сапраўды хочаце паспрабаваць яшчэ раз?",
"status_failure_storage_description": "Збой усталявання, бо на прыладзе недастаткова памяці.\n\nВызваліце крыху месца і паўтарыце спробу яшчэ раз.",
"status_failure_invalid_description": "Збой усталявання, бо выпраўленая праграма пашкоджана.\n\nВыдаліць праграму і паспрабаваць яшчэ раз?",
"status_failure_incompatible_description": "Праграма з'яўляцца несумяшчальнай з гэтай прыладай.\n\nЗвяжыцеся з пастаўшчыком праграмы, каб атрымаць дадатковыя звесткі.",
"status_failure_conflict_description": "Усталяванне прадухілена іншай праграмай, якая цяпер усталёўваецца.\n\nВыдаліць усталяваную праграму і паспрабаваць яшчэ раз?",
"status_failure_blocked_description": "Усталяванне было заблакіравана ${packageName}.\n\nНаладзьце свае параметры бяспекі і паспрабуйце яшчэ раз.",
"install_failed_verification_failure_description": "Збой усталявання, бо адбылася праблема праверкі.\n\nНаладзьце свае параметры бяспекі і паспрабуйце яшчэ раз.",
"install_failed_version_downgrade_description": "Збой усталявання, бо выпраўленая праграма мае больш новую версію, чым усталяваная праграма.\n\nВыдаліць праграму і паспрабаваць яшчэ раз?",
"status_unknown_description": "Збой усталявання, бо адбылася невядомая памылка. Паўтарыце спробу яшчэ раз."
}
} }

View File

@@ -125,14 +125,11 @@
"dynamicThemeHint": "Насладете се на преживяване по-близо до устройството си", "dynamicThemeHint": "Насладете се на преживяване по-близо до устройството си",
"languageLabel": "Език", "languageLabel": "Език",
"englishOption": "Английски", "englishOption": "Английски",
"sourcesLabel": "Източници",
"sourcesIntegrationsLabel": "Източник на интеграциите", "sourcesIntegrationsLabel": "Източник на интеграциите",
"sourcesResetDialogTitle": "Нулиране", "sourcesResetDialogTitle": "Нулиране",
"sourcesResetDialogText": "Искате ли да възстановите източниците до стойностите им по подразбиране?", "sourcesResetDialogText": "Искате ли да възстановите източниците до стойностите им по подразбиране?",
"apiURLLabel": "API линк", "apiURLLabel": "API линк",
"apiURLHint": "Конфигуриране на URL адреса на API за използване",
"selectApiURL": "API линк", "selectApiURL": "API линк",
"hostRepositoryLabel": "API на хранилището",
"orgPatchesLabel": "Организация на модификациите", "orgPatchesLabel": "Организация на модификациите",
"sourcesPatchesLabel": "Източник на модификациите", "sourcesPatchesLabel": "Източник на модификациите",
"orgIntegrationsLabel": "Организация на интеграциите", "orgIntegrationsLabel": "Организация на интеграциите",

View File

@@ -16,6 +16,8 @@
"noShowAgain": "পুনরায় দেখাবেন না", "noShowAgain": "পুনরায় দেখাবেন না",
"add": "যুক্ত করুন", "add": "যুক্ত করুন",
"remove": "অপসারণ করুন", "remove": "অপসারণ করুন",
"showChangelogButton": "চেঞ্জলগ দেখান",
"showUpdateButton": "আপডেট দেখান",
"navigationView": { "navigationView": {
"dashboardTab": "ড্যাশবোর্ড", "dashboardTab": "ড্যাশবোর্ড",
"patcherTab": "প্যাচার", "patcherTab": "প্যাচার",
@@ -26,14 +28,25 @@
"widgetTitle": "ড্যাশবোর্ড", "widgetTitle": "ড্যাশবোর্ড",
"updatesSubtitle": "আপডেটসমূহ", "updatesSubtitle": "আপডেটসমূহ",
"patchedSubtitle": "প্যাচড অ্যাপ্লিকেশনগুলো", "patchedSubtitle": "প্যাচড অ্যাপ্লিকেশনগুলো",
"changeLaterSubtitle": "পরবর্তীতে আপনি এটি সেটিং থেকে পরিবর্তন করতে পারবেন।",
"noUpdates": "কোন আপডেট নেই", "noUpdates": "কোন আপডেট নেই",
"WIP": "কাজ হচ্ছে...", "WIP": "কাজ হচ্ছে...",
"noInstallations": "কোন প্যাচড অ্যাপ্লিকেশন ইনস্টল করা হয়নি", "noInstallations": "কোন প্যাচড অ্যাপ্লিকেশন ইনস্টল করা হয়নি",
"installUpdate": "আপডেট ইনস্টল করতে এগিয়ে যেতে চান?", "installUpdate": "আপডেট ইনস্টল করতে এগিয়ে যেতে চান?",
"updateSheetTitle": "ReVanced Manager আপডেট করুন",
"updateDialogTitle": "নতুন আপডেট পাওয়া যাচ্ছে",
"updatePatchesSheetTitle": "ReVanced প্যাচসমূহ আপডেট করুন",
"updateChangelogTitle": "পরিবর্তনসমূহ", "updateChangelogTitle": "পরিবর্তনসমূহ",
"updateDialogText": "${file} এর জন্য নতুন আপডেট পাওয়া যাচ্ছে।\n\nবর্তমানে ইনস্টল করা সংস্করণ ${version}।",
"downloadConsentDialogTitle": "প্রয়োজনীয় ফাইল ডাউনলোড করবেন?",
"downloadConsentDialogText": "ReVanced Manager সঠিকভাবে কাজ করার জন্য কিছু প্রয়োজনীয় ফাইল ডাউনলোড করতে হবে।",
"downloadConsentDialogText2": "এটি আপনাকে যুক্ত করবে ${url}.",
"checkUpdateDialogTitle": "আপডেটএর জন্য পরীক্ষা করবেন?",
"checkUpdateDialogText": "আপনি কি চান ReVanced Manager আপডেটের জন্য স্বয়ংক্রিয়ভাবে যাচাই করুক?",
"notificationTitle": "আপডেট ডাউনলোড হয়েছে", "notificationTitle": "আপডেট ডাউনলোড হয়েছে",
"notificationText": "আপডেট ইনস্টল করতে চাপ দিন", "notificationText": "আপডেট ইনস্টল করতে চাপ দিন",
"downloadingMessage": "আপডেট ডাউনলোড হচ্ছে...", "downloadingMessage": "আপডেট ডাউনলোড হচ্ছে...",
"downloadedMessage": "আপডেট ডাউনলোড করা হয়েছে",
"installingMessage": "আপডেট ইনস্টল করা হচ্ছে...", "installingMessage": "আপডেট ইনস্টল করা হচ্ছে...",
"errorDownloadMessage": "আপডেট ডাউনলোড করতে সফল হয় নি", "errorDownloadMessage": "আপডেট ডাউনলোড করতে সফল হয় নি",
"errorInstallMessage": "আপডেট ইনস্টল করতে সফল হয় নি", "errorInstallMessage": "আপডেট ইনস্টল করতে সফল হয় নি",
@@ -53,12 +66,18 @@
"patcherView": { "patcherView": {
"widgetTitle": "প্যাচার", "widgetTitle": "প্যাচার",
"patchButton": "প্যাচ", "patchButton": "প্যাচ",
"armv7WarningDialogText": "ARMv7 ডিভাইসগুলোতে প্যাচিং এখনো সমর্থিত নয় এবং সফল নাও হতে পারে। যেকোন ভাবে এগিয়ে যেতে চান?",
"removedPatchesWarningDialogText": "আপনি এর আগে যখন ব্যবহার করেছিলেন তারপর এই প্যাচগুলো অপসারণ করা হয়।\n\n${patches}\n\nযেকোন ভাবে এগিয়ে যেতে চান?",
"requiredOptionDialogText": "কিছু প্যাচ অপশন সেট করতে হবে।" "requiredOptionDialogText": "কিছু প্যাচ অপশন সেট করতে হবে।"
}, },
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "একটি অ্যাপ নির্বাচন করুন",
"widgetTitleSelected": "নির্বাচিত অ্যাপ",
"widgetSubtitle": "কোন অ্যাপ নির্বাচন করা হয়নি",
"noAppsLabel": "কোন অ্যাপ্লিকেশন পাওয়া যায়নি", "noAppsLabel": "কোন অ্যাপ্লিকেশন পাওয়া যায়নি",
"currentVersion": "বর্তমান", "currentVersion": "বর্তমান",
"suggestedVersion": "প্রস্তাবিত" "suggestedVersion": "প্রস্তাবিত",
"anyVersion": "যেকোন সংস্করণ"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "প্যাচসমূহ নির্বাচন করুন", "widgetTitle": "প্যাচসমূহ নির্বাচন করুন",
@@ -71,11 +90,15 @@
"widgetSubtitle": "আমরা অনলাইনে!" "widgetSubtitle": "আমরা অনলাইনে!"
}, },
"appSelectorView": { "appSelectorView": {
"viewTitle": "একটি অ্যাপ নির্বাচন করুন",
"searchBarHint": "অ্যাপ খুঁজুন",
"storageButton": "স্টোরেজ", "storageButton": "স্টোরেজ",
"selectFromStorageButton": "স্টোরেজ থেকে নির্বাচন করুন", "selectFromStorageButton": "স্টোরেজ থেকে নির্বাচন করুন",
"errorMessage": "নির্বাচিত অ্যাপ্লিকেশনটি ব্যবহার করা সম্ভব নয়", "errorMessage": "নির্বাচিত অ্যাপ্লিকেশনটি ব্যবহার করা সম্ভব নয়",
"downloadToast": "ডাউনলোড ফাংশন এখনো উপলব্ধ হয়নি", "downloadToast": "ডাউনলোড ফাংশন এখনো উপলব্ধ হয়নি",
"featureNotAvailable": "ফিচার সম্পাদন করা হয়নি" "requireSuggestedAppVersionDialogText": "আপনার নির্বাচিত অ্যাপ সংস্করণটি প্রস্তাবিত অ্যাপ সংস্করণের সাথে মিলছে না এতে অনাকাঙ্খিত ত্রুটি ঘটতে পারে। অনুগ্রহপূর্বক প্রস্তাবিত অ্যাপ সংস্করণ ব্যবহার করুন।\n\nনির্বাচিত সংস্করণ: ${selected}\nপ্রস্তাবিত সংসকরণ: ${suggested}\n\nযেকোন ভাবে এগিয়ে যেতে চাইলে, সেটিং থেকে \"প্রস্তাবিত অ্যঅপ সংস্করণ প্রয়োজন\" সেটিংটি নিষ্ক্রিয় করুন।",
"featureNotAvailable": "ফিচার সম্পাদন করা হয়নি",
"featureNotAvailableText": "এই অ্যাপটি একটি খন্ডিত APK এবং শুধুমাত্র রুট পারমিশন এর উপর ভিত্তি করে এটি প্যাচ ও ইনস্টল করা যেতে পারে। যাইহোক, আপনি স্টোরেজ থেকে সম্পূর্ণ APK নির্বাচন করে অ্যাপ প্যাচ ও ইনস্টল করতে পারেন।"
}, },
"patchesSelectorView": { "patchesSelectorView": {
"viewTitle": "প্যাচ নির্বাচন করুন", "viewTitle": "প্যাচ নির্বাচন করুন",
@@ -84,7 +107,9 @@
"newPatches": "নতুন প্যাচসমূহ", "newPatches": "নতুন প্যাচসমূহ",
"patches": "প্যাচসমূহ", "patches": "প্যাচসমূহ",
"doneButton": "সম্পন্ন হয়েছে", "doneButton": "সম্পন্ন হয়েছে",
"defaultChip": "পূর্ব-নির্ধারিত",
"defaultTooltip": "সকল পূর্ব-নির্ধারিত প্যাচ নির্বাচন করুন", "defaultTooltip": "সকল পূর্ব-নির্ধারিত প্যাচ নির্বাচন করুন",
"noneChip": "কোনটি নয়",
"noneTooltip": "সকল প্যাচ অনির্বাচন করুন", "noneTooltip": "সকল প্যাচ অনির্বাচন করুন",
"loadPatchesSelection": "নির্বাচিত প্যাচ লোড করুন", "loadPatchesSelection": "নির্বাচিত প্যাচ লোড করুন",
"noSavedPatches": "নির্বাচিত অ্যাপের জন্য কোন সংরক্ষিত প্যাচ নেই।\nবর্তমানে নির্বাচিত প্যাচ সংরক্ষণ করতে সম্পন্ন হয়েছে চাপুন।", "noSavedPatches": "নির্বাচিত অ্যাপের জন্য কোন সংরক্ষিত প্যাচ নেই।\nবর্তমানে নির্বাচিত প্যাচ সংরক্ষণ করতে সম্পন্ন হয়েছে চাপুন।",
@@ -110,11 +135,13 @@
"unsupportedDialogText": "এই প্যাচটি নির্বাচন করলে প্যাচিং ত্রুটিপূর্ণ হতে পারে।\n\nঅ্যাপ সংস্করণ: ${packageVersion}\nসমর্থিত সংস্করণ:\n${supportedVersions}", "unsupportedDialogText": "এই প্যাচটি নির্বাচন করলে প্যাচিং ত্রুটিপূর্ণ হতে পারে।\n\nঅ্যাপ সংস্করণ: ${packageVersion}\nসমর্থিত সংস্করণ:\n${supportedVersions}",
"unsupportedPatchVersion": "এই অ্যাপ সংস্করণের জন্য প্যাচ সমর্থিত নয়।", "unsupportedPatchVersion": "এই অ্যাপ সংস্করণের জন্য প্যাচ সমর্থিত নয়।",
"unsupportedRequiredOption": "এই প্যাচটিতে একটি প্রয়োজনীয় অপশন রয়েছে যা এই অ্যাপটি সমর্থন করে না", "unsupportedRequiredOption": "এই প্যাচটিতে একটি প্রয়োজনীয় অপশন রয়েছে যা এই অ্যাপটি সমর্থন করে না",
"patchesChangeWarningDialogText": "পূর্ব নির্ধারিত নির্বাচিত প্যাচ এবং অপশন ব্যবহার করার প্রস্তাব রাখে। এগুলো পরিবর্তন করার মাধ্যমে অনাকাঙ্খিত ইস্যু হতে পারে।\n\nপ্যাচ নির্বাচন পরিবর্তন করার পূর্বে আপনাকে অবশ্যই সেটিং থেকে \"প্যাচ নির্বাচন পরিবর্তন করার অনুমতি\" সচল করতে হবে।",
"patchesChangeWarningDialogButton": "পূর্বনির্ধারিত নির্বাচন ব্যবহার করুন" "patchesChangeWarningDialogButton": "পূর্বনির্ধারিত নির্বাচন ব্যবহার করুন"
}, },
"installerView": { "installerView": {
"widgetTitle": "ইনস্টলার", "widgetTitle": "ইনস্টলার",
"installType": "ইনস্টল করার ধরণ নির্বাচন করুন", "installType": "ইনস্টল করার ধরণ নির্বাচন করুন",
"installTypeDescription": "যে প্রক্রিয়ায় ইনস্টল করা এগিয়ে নিতে চান তা নির্বাচন করুন।",
"installButton": "ইনস্টল করুন", "installButton": "ইনস্টল করুন",
"installRootType": "মাউন্ট", "installRootType": "মাউন্ট",
"installNonRootType": "সাধারণ", "installNonRootType": "সাধারণ",
@@ -137,6 +164,7 @@
"debugSectionTitle": "ডিবাগিং", "debugSectionTitle": "ডিবাগিং",
"advancedSectionTitle": "উন্নত", "advancedSectionTitle": "উন্নত",
"exportSectionTitle": "আমদানি ও রপ্তানি", "exportSectionTitle": "আমদানি ও রপ্তানি",
"dataSectionTitle": "তথ্যের উৎস",
"themeModeLabel": "অ্যাপের থীম", "themeModeLabel": "অ্যাপের থীম",
"systemThemeLabel": "সিস্টেম", "systemThemeLabel": "সিস্টেম",
"lightThemeLabel": "উজ্জ্বল", "lightThemeLabel": "উজ্জ্বল",
@@ -144,18 +172,20 @@
"dynamicThemeLabel": "ম্যাটেরিয়াল ইউ", "dynamicThemeLabel": "ম্যাটেরিয়াল ইউ",
"dynamicThemeHint": "আপনার ডিভাইসের লুকের কাছাকাছি অভিজ্ঞতা নিন", "dynamicThemeHint": "আপনার ডিভাইসের লুকের কাছাকাছি অভিজ্ঞতা নিন",
"languageLabel": "ভাষা", "languageLabel": "ভাষা",
"languageUpdated": "ভাষা হালনাগাদ করা হয়েছে",
"englishOption": "ইংরেজি", "englishOption": "ইংরেজি",
"sourcesLabel": "উৎস", "sourcesLabel": "বিকল্প উৎস",
"sourcesLabelHint": "প্যাচ ও ইন্ট্রিগেশন এর সোর্স কনফিগার করুন", "sourcesLabelHint": "ReVanced প্যাচ ও ReVanced ইন্ট্রিগ্রেশনের জন্য বিকল্প উৎস কনফিগার করুন",
"sourcesIntegrationsLabel": "ইন্ট্রিগেশনের উৎস", "sourcesIntegrationsLabel": "ইন্ট্রিগেশনের উৎস",
"useAlternativeSources": "বিকল্প উৎস ব্যবহার করুন",
"useAlternativeSourcesHint": "ReVanced প্যাচ ও ReVanced ইন্ট্রিগ্রেশনের জন্য API এর পরিবর্তে বিকল্প উৎস ব্যবহার করুন",
"sourcesResetDialogTitle": "পুনরায় সেট করুন", "sourcesResetDialogTitle": "পুনরায় সেট করুন",
"sourcesResetDialogText": "আপনি কি নিশ্চিতভাবে আপনার উৎসগুলোকে পূর্বনির্ধারিত উৎসে ফিরিয়ে নিতে চান?", "sourcesResetDialogText": "আপনি কি নিশ্চিতভাবে আপনার উৎসগুলোকে পূর্বনির্ধারিত উৎসে ফিরিয়ে নিতে চান?",
"apiURLResetDialogText": "আপনি কি নিশ্চিতভাবে আপনার API URL কে তার মূল ভ্যালুতে পুনরায় সেট করতে চান?", "apiURLResetDialogText": "আপনি কি নিশ্চিতভাবে আপনার API URL কে তার মূল ভ্যালুতে পুনরায় সেট করতে চান?",
"sourcesUpdateNote": "বি:দ্র: প্যাচগুলো তার সর্বশেষ সংস্করণে স্বয়ংক্রিয়ভাবে আপডেট হবে।\n\nএর ফলে আপনার IP অ্যাড্রেস সার্ভারে প্রকাশ করা হবে।", "sourcesUpdateNote": "বি:দ্র: এটি স্বয়ংক্রিয়ভাবে বিকল্প উৎস থেকে ReVanced প্যাচ ও ReVanced ইন্ট্রিগ্রেশন ডাউনলোড করবে।\n\nএটি আপনাকে বিকল্প উৎসের সাথে সংযুক্ত করবে।",
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"apiURLHint": "API ব্যাবহারের URL কনফিগার করুন", "apiURLHint": "ReVanced Manager এর API URL কনফিগার করুন",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"hostRepositoryLabel": "রিপজিটরি API",
"orgPatchesLabel": "প্যাচ এর উদ্ভাবক", "orgPatchesLabel": "প্যাচ এর উদ্ভাবক",
"sourcesPatchesLabel": "প্যাচ এর উৎস", "sourcesPatchesLabel": "প্যাচ এর উৎস",
"orgIntegrationsLabel": "ইন্ট্রিগেশনের উদ্ভাবক", "orgIntegrationsLabel": "ইন্ট্রিগেশনের উদ্ভাবক",
@@ -169,6 +199,8 @@
"disablePatchesSelectionWarningText": "আপনি নির্বাচিত প্যাচ পরিবর্তনকে নিষ্ক্রিয় করতে যাচ্ছেন।\nপূর্বনির্ধারিত নির্বাচিত প্যাচসমূহ ফিরিয়ে আনা হবে।\n\nযেকোন ভাবে নিষ্ক্রিয় করতে চান?", "disablePatchesSelectionWarningText": "আপনি নির্বাচিত প্যাচ পরিবর্তনকে নিষ্ক্রিয় করতে যাচ্ছেন।\nপূর্বনির্ধারিত নির্বাচিত প্যাচসমূহ ফিরিয়ে আনা হবে।\n\nযেকোন ভাবে নিষ্ক্রিয় করতে চান?",
"autoUpdatePatchesLabel": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে আপডেট করুন", "autoUpdatePatchesLabel": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে আপডেট করুন",
"autoUpdatePatchesHint": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে সর্বশেষ সংস্করণে আপডেট হবে", "autoUpdatePatchesHint": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে সর্বশেষ সংস্করণে আপডেট হবে",
"showUpdateDialogLabel": "হালনাগাদ ডায়ালগ দেখান",
"showUpdateDialogHint": "যখন হালনাগাদ উপলব্ধ থাকবে তখন একটি ডায়ালগ দেখান",
"universalPatchesLabel": "বৈশ্বিক প্যাচসমূহ দেখান", "universalPatchesLabel": "বৈশ্বিক প্যাচসমূহ দেখান",
"universalPatchesHint": "সকল অ্যাপ এবং বৈশ্বিক প্যাচসমূহ দেখায় (অ্যাপ লিস্ট দেখানো একটু ধীর হতে পারে)", "universalPatchesHint": "সকল অ্যাপ এবং বৈশ্বিক প্যাচসমূহ দেখায় (অ্যাপ লিস্ট দেখানো একটু ধীর হতে পারে)",
"versionCompatibilityCheckLabel": "সংস্করণ সামঞ্জস্যতা পরীক্ষা করা", "versionCompatibilityCheckLabel": "সংস্করণ সামঞ্জস্যতা পরীক্ষা করা",
@@ -239,7 +271,12 @@
"updateNotImplemented": "এই ফিচারটি এখনো কার্যকর করা হয়নি" "updateNotImplemented": "এই ফিচারটি এখনো কার্যকর করা হয়নি"
}, },
"contributorsView": { "contributorsView": {
"widgetTitle": "অবদানকারীগণ" "widgetTitle": "অবদানকারীগণ",
"patcherContributors": "ReVanced প্যাচার",
"patchesContributors": "ReVanced প্যাচসমূহ",
"integrationsContributors": "ReVanced ইন্ট্রিগ্রেশন",
"cliContributors": "ReVanced CLI",
"managerContributors": "ReVanced Manager"
}, },
"installErrorDialog": { "installErrorDialog": {
"mount_version_mismatch": "সংস্করণ মেলেনি", "mount_version_mismatch": "সংস্করণ মেলেনি",
@@ -249,6 +286,12 @@
"install_failed_verification_failure": "যাচাইকরণ ব্যর্থ হয়েছে", "install_failed_verification_failure": "যাচাইকরণ ব্যর্থ হয়েছে",
"status_failure_invalid": "ইনস্টল সঠিক নয়", "status_failure_invalid": "ইনস্টল সঠিক নয়",
"install_failed_version_downgrade": "ডাউনগ্রেড সম্ভব নয়", "install_failed_version_downgrade": "ডাউনগ্রেড সম্ভব নয়",
"status_failure_conflict": "ইনস্টল কনফ্লিক্ট হচ্ছে" "status_failure_conflict": "ইনস্টল কনফ্লিক্ট হচ্ছে",
"status_failure_storage": "ইনস্টলেশন স্টোরেজ সমস্যা",
"status_failure_incompatible": "ইনস্টলেশন অনুপযুক্ত",
"status_failure_timeout": "ইনস্টলেশন সময় পার হয়েছে",
"status_unknown": "ইনস্টলেশন ব্যর্থ হয়েছে",
"mount_version_mismatch_description": "প্যাচ অ্যাপ ও ইনস্টলকৃত অ্যাপের সংস্করণ ভিন্ন হওয়ার কারণে ইনস্টলেশন ব্যর্থ হয়েছে।\n\nআপনি যে সংস্করণটি মাউন্ট করতে চাচ্ছেন তা আগে ইনস্টল করুন অতঃপর আবার চেষ্টা করুন।",
"mount_no_root_description": "রুট প্রবেশাধিকারের অনুমতি না দেয়ার কারণে ইনস্টলেশন ব্যর্থ হয়েছে।\n\nReVanced Manager এর রুট প্রবেশাধিকার অনুমতি দিন এবং আবার চেষ্টা করুন।"
} }
} }

View File

@@ -159,10 +159,8 @@
"languageLabel": "Jazyk", "languageLabel": "Jazyk",
"languageUpdated": "Jazyk aktualizován", "languageUpdated": "Jazyk aktualizován",
"englishOption": "Angličtina", "englishOption": "Angličtina",
"sourcesLabel": "Zdroje",
"sourcesIntegrationsLabel": "Zdroj integrace", "sourcesIntegrationsLabel": "Zdroj integrace",
"sourcesResetDialogTitle": "Obnovit", "sourcesResetDialogTitle": "Obnovit",
"hostRepositoryLabel": "API Repozitář",
"orgPatchesLabel": "Organizace patchů", "orgPatchesLabel": "Organizace patchů",
"sourcesPatchesLabel": "Zdroj patchů", "sourcesPatchesLabel": "Zdroj patchů",
"orgIntegrationsLabel": "Autor integrace", "orgIntegrationsLabel": "Autor integrace",

View File

@@ -122,12 +122,10 @@
"dynamicThemeLabel": "Materiale Dig", "dynamicThemeLabel": "Materiale Dig",
"dynamicThemeHint": "Nyd en oplevelse tættere på din enhed", "dynamicThemeHint": "Nyd en oplevelse tættere på din enhed",
"languageLabel": "Sprog", "languageLabel": "Sprog",
"sourcesLabel": "Kilder",
"sourcesIntegrationsLabel": "Kilde til Integrationer", "sourcesIntegrationsLabel": "Kilde til Integrationer",
"sourcesResetDialogTitle": "Nulstil", "sourcesResetDialogTitle": "Nulstil",
"sourcesResetDialogText": "Er du sikker på, at du vil nulstille dine kilder til deres standardværdier?", "sourcesResetDialogText": "Er du sikker på, at du vil nulstille dine kilder til deres standardværdier?",
"apiURLResetDialogText": "Er du sikker på, at du vil nulstille API URL til dens standardværdi?", "apiURLResetDialogText": "Er du sikker på, at du vil nulstille API URL til dens standardværdi?",
"sourcesUpdateNote": "Bemærk: Patches vil blive opdateret til den nyeste version automatisk.\n\nDette vil vise din IP-adresse til serveren.",
"orgPatchesLabel": "Organisation for Patches", "orgPatchesLabel": "Organisation for Patches",
"sourcesPatchesLabel": "Kilde til Patches", "sourcesPatchesLabel": "Kilde til Patches",
"orgIntegrationsLabel": "Organisation for Integrationer", "orgIntegrationsLabel": "Organisation for Integrationer",

View File

@@ -164,6 +164,7 @@
"debugSectionTitle": "Debuggen", "debugSectionTitle": "Debuggen",
"advancedSectionTitle": "Erweitert", "advancedSectionTitle": "Erweitert",
"exportSectionTitle": "Import & Export", "exportSectionTitle": "Import & Export",
"dataSectionTitle": "Datenquellen",
"themeModeLabel": "Erscheinungsbild", "themeModeLabel": "Erscheinungsbild",
"systemThemeLabel": "System", "systemThemeLabel": "System",
"lightThemeLabel": "Hell", "lightThemeLabel": "Hell",
@@ -173,17 +174,18 @@
"languageLabel": "Sprache", "languageLabel": "Sprache",
"languageUpdated": "Sprache aktualisiert", "languageUpdated": "Sprache aktualisiert",
"englishOption": "Englisch", "englishOption": "Englisch",
"sourcesLabel": "Quellen", "sourcesLabel": "Alternative Quellen",
"sourcesLabelHint": "Konfiguriere die Quelle von Patches und Integrationen", "sourcesLabelHint": "Konfiguriere die alternativen Quellen für ReVanced Patches und ReVanced Integrations",
"sourcesIntegrationsLabel": "Quelle für Integrationen", "sourcesIntegrationsLabel": "Quelle für Integrationen",
"useAlternativeSources": "Benutze alternative Quellen",
"useAlternativeSourcesHint": "Verwenden alternative Quellen für ReVanced Patches und ReVanced Integrationen anstelle der API",
"sourcesResetDialogTitle": "Zurücksetzen", "sourcesResetDialogTitle": "Zurücksetzen",
"sourcesResetDialogText": "Bist du dir sicher, dass du die benutzerdefinierten Quellen auf ihre Standardwerte zurücksetzen möchtest?", "sourcesResetDialogText": "Bist du dir sicher, dass du die benutzerdefinierten Quellen auf ihre Standardwerte zurücksetzen möchtest?",
"apiURLResetDialogText": "Bist du dir sicher, dass du die API-URL auf ihren Standardwert zurücksetzen möchtest?", "apiURLResetDialogText": "Bist du dir sicher, dass du die API-URL auf ihren Standardwert zurücksetzen möchtest?",
"sourcesUpdateNote": "Hinweis: ReVanced Patches werden automatisch auf die neueste Version aktualisiert.\n\nDies wird Ihre IP-Adresse dem Server offenlegen.", "sourcesUpdateNote": "Hinweis: Dadurch werden ReVanced Patches und ReVanced Integrationen automatisch von der alternativen Quelle heruntergeladen.\n\nDies wird dich mit der alternativen Quelle verbinden.",
"apiURLLabel": "API-URL", "apiURLLabel": "API-URL",
"apiURLHint": "Konfiguriere die URL der zu verwendenden API", "apiURLHint": "Konfigurieren die API URL von ReVanced Manager",
"selectApiURL": "API-URL", "selectApiURL": "API-URL",
"hostRepositoryLabel": "Repository-API",
"orgPatchesLabel": "Patches Organisation", "orgPatchesLabel": "Patches Organisation",
"sourcesPatchesLabel": "Patches Quelle", "sourcesPatchesLabel": "Patches Quelle",
"orgIntegrationsLabel": "Integrationen Organisation", "orgIntegrationsLabel": "Integrationen Organisation",

View File

@@ -16,7 +16,7 @@
"noShowAgain": "Να μην ξαναεμφανιστεί", "noShowAgain": "Να μην ξαναεμφανιστεί",
"add": "Προσθήκη", "add": "Προσθήκη",
"remove": "Αφαίρεση", "remove": "Αφαίρεση",
"showChangelogButton": "Εμφάνιση αρχείου καταγραφής αλλαγών", "showChangelogButton": "Εμφάνιση αλλαγών",
"showUpdateButton": "Εμφάνιση ενημέρωσης", "showUpdateButton": "Εμφάνιση ενημέρωσης",
"navigationView": { "navigationView": {
"dashboardTab": "Πίνακας Ελέγχου", "dashboardTab": "Πίνακας Ελέγχου",
@@ -164,6 +164,7 @@
"debugSectionTitle": "Εντοπισμός σφαλμάτων", "debugSectionTitle": "Εντοπισμός σφαλμάτων",
"advancedSectionTitle": "Για προχωρημένους", "advancedSectionTitle": "Για προχωρημένους",
"exportSectionTitle": "Εισαγωγή & εξαγωγή", "exportSectionTitle": "Εισαγωγή & εξαγωγή",
"dataSectionTitle": "Πηγές δεδομένων",
"themeModeLabel": "Θέμα εφαρμογής", "themeModeLabel": "Θέμα εφαρμογής",
"systemThemeLabel": "Σύστημα", "systemThemeLabel": "Σύστημα",
"lightThemeLabel": "Ανοιχτόχρωμο", "lightThemeLabel": "Ανοιχτόχρωμο",
@@ -173,17 +174,18 @@
"languageLabel": "Γλώσσα", "languageLabel": "Γλώσσα",
"languageUpdated": "Η γλώσσα ενημερώθηκε", "languageUpdated": "Η γλώσσα ενημερώθηκε",
"englishOption": "Αγγλικά", "englishOption": "Αγγλικά",
"sourcesLabel": "Πηγές", "sourcesLabel": "Εναλλακτικές πηγές",
"sourcesLabelHint": "Ρυθμίστε την πηγή τροποποιήσεων και ενσωματώσεων", "sourcesLabelHint": "Ρυθμίστε τις εναλλακτικές πηγές για τις τροποποιήσεις ReVanced και τις ενσωματώσεις ReVanced",
"sourcesIntegrationsLabel": "Πηγή ενσωματώσεων", "sourcesIntegrationsLabel": "Πηγή ενσωματώσεων",
"useAlternativeSources": "Χρήση εναλλακτικών πηγών",
"useAlternativeSourcesHint": "Χρήση εναλλακτικών πηγών για τις τροποποιήσεις και τις ενσωματώσεις ReVanced αντί του API",
"sourcesResetDialogTitle": "Επαναφορά", "sourcesResetDialogTitle": "Επαναφορά",
"sourcesResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τις πηγές σας στις προεπιλεγμένες τιμές τους;", "sourcesResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τις πηγές σας στις προεπιλεγμένες τιμές τους;",
"apiURLResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε την API URL σας στην προεπιλεγμένη τιμή της;", "apiURLResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε την API URL σας στην προεπιλεγμένη τιμή της;",
"sourcesUpdateNote": "Σημείωση: Οι τροποποιήσεις θα ενημερώνονται στην τελευταία έκδοση αυτόματα.\n\nΑυτό θα αποκαλύπτει την διεύθυνση IP σας στον διακομιστή.", "sourcesUpdateNote": "Σημείωση: Θα γίνεται αυτόματη λήψη των τροποποιήσεων και των ενσωματώσεων ReVanced από τις εναλλακτικές πηγές.\n\nΟπότε θα συνδέεστε με τις εναλλακτικές πηγές.",
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"apiURLHint": "Ρυθμίστε την διεύθυνση που θα χρησιμοποιεί το API", "apiURLHint": "Ρύθμιση διεύθυνσης URL του API του ReVanced Manager",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"hostRepositoryLabel": "Αποθετήριο API",
"orgPatchesLabel": "Οργάνωση τροποποιήσεων", "orgPatchesLabel": "Οργάνωση τροποποιήσεων",
"sourcesPatchesLabel": "Πηγή τροποποιήσεων", "sourcesPatchesLabel": "Πηγή τροποποιήσεων",
"orgIntegrationsLabel": "Οργάνωση ενσωματώσεων", "orgIntegrationsLabel": "Οργάνωση ενσωματώσεων",

View File

@@ -1,5 +1,5 @@
{ {
"okButton": "Está bien", "okButton": "Aceptar",
"cancelButton": "Cancelar", "cancelButton": "Cancelar",
"dismissButton": "Descartar", "dismissButton": "Descartar",
"quitButton": "Salir", "quitButton": "Salir",
@@ -8,35 +8,35 @@
"disabledLabel": "Desactivado", "disabledLabel": "Desactivado",
"installed": "Instalada: ${version}", "installed": "Instalada: ${version}",
"suggested": "Sugerida: ${version}", "suggested": "Sugerida: ${version}",
"yesButton": "Si", "yesButton": "Sí",
"noButton": "No", "noButton": "No",
"warning": "Atención", "warning": "Advertencia",
"options": "Opciones", "options": "Opciones",
"notice": "Aviso", "notice": "Aviso",
"noShowAgain": "No mostrar de nuevo", "noShowAgain": "No volver a mostrar",
"add": "Agregar", "add": "Agregar",
"remove": "Eliminar", "remove": "Eliminar",
"showChangelogButton": "Mostrar historial de cambios", "showChangelogButton": "Notas de la versión",
"showUpdateButton": "Mostrar actualización", "showUpdateButton": "Actualizar",
"navigationView": { "navigationView": {
"dashboardTab": "Panel", "dashboardTab": "Panel de control",
"patcherTab": "Parcheador", "patcherTab": "Parcheador",
"settingsTab": "Configuración" "settingsTab": "Configuración"
}, },
"homeView": { "homeView": {
"refreshSuccess": "Se ha refrescado satisfactoriamente", "refreshSuccess": "Refrescado satisfactoriamente",
"widgetTitle": "Panel", "widgetTitle": "Panel de control",
"updatesSubtitle": "Actualizaciones", "updatesSubtitle": "Actualizaciones",
"patchedSubtitle": "Aplicaciones parcheadas", "patchedSubtitle": "Aplicaciones parcheadas",
"changeLaterSubtitle": "Podés cambiar esto en los ajustes más tarde.", "changeLaterSubtitle": "Podés cambiar esto en los ajustes más tarde.",
"noUpdates": "No hay actualizaciones disponibles", "noUpdates": "No hay actualizaciones disponibles",
"WIP": "En progreso...", "WIP": "En progreso...",
"noInstallations": "No hay aplicaciones parcheadas instaladas", "noInstallations": "Aún no parcheaste ninguna aplicación",
"installUpdate": "¿Continuar instalando la actualización?", "installUpdate": "¿Instalar actualización?",
"updateSheetTitle": "Actualizar ReVanced Manager", "updateSheetTitle": "Actualizar ReVanced Manager",
"updateDialogTitle": "Nueva actualización disponible", "updateDialogTitle": "Nueva actualización disponible",
"updatePatchesSheetTitle": "Actualizar ReVanced Patches", "updatePatchesSheetTitle": "Actualizar ReVanced Patches",
"updateChangelogTitle": "Registro de cambios", "updateChangelogTitle": "Notas de la versión",
"updateDialogText": "Hay una nueva actualización disponible para ${file}.\n\nLa versión instalada actualmente es la ${version}.", "updateDialogText": "Hay una nueva actualización disponible para ${file}.\n\nLa versión instalada actualmente es la ${version}.",
"downloadConsentDialogTitle": "¿Descargar archivos necesarios?", "downloadConsentDialogTitle": "¿Descargar archivos necesarios?",
"downloadConsentDialogText": "ReVanced Manager necesita descargar los archivos necesarios para funcionar correctamente.", "downloadConsentDialogText": "ReVanced Manager necesita descargar los archivos necesarios para funcionar correctamente.",
@@ -50,11 +50,11 @@
"installingMessage": "Instalando actualización...", "installingMessage": "Instalando actualización...",
"errorDownloadMessage": "No se pudo descargar la actualización", "errorDownloadMessage": "No se pudo descargar la actualización",
"errorInstallMessage": "No se pudo instalar la actualización", "errorInstallMessage": "No se pudo instalar la actualización",
"noConnection": "No hay conexión a Internet", "noConnection": "No tenés conexión a Internet",
"updatesDisabled": "Por ahora no podés actualizar una app parcheada. Parcheala de nuevo." "updatesDisabled": "Por ahora no podés actualizar una app parcheada. Parcheala de nuevo."
}, },
"applicationItem": { "applicationItem": {
"infoButton": "Información" "infoButton": "Info. aplicación"
}, },
"latestCommitCard": { "latestCommitCard": {
"loadingLabel": "Cargando...", "loadingLabel": "Cargando...",
@@ -66,14 +66,14 @@
"patcherView": { "patcherView": {
"widgetTitle": "Parcheador", "widgetTitle": "Parcheador",
"patchButton": "Parchear", "patchButton": "Parchear",
"armv7WarningDialogText": "El parcheo en dispositivos ARMv7 aún no está soportado y podría fallar. ¿Querés continuar igual?", "armv7WarningDialogText": "El parcheo en dispositivos ARMv7 aún no está soportado de forma oficial y podría fallar. ¿Querés continuar igual?",
"removedPatchesWarningDialogText": "Los siguientes parches fueron eliminados desde la última vez que los usaste.\n\n${patches}\n\n¿Continuar de todas formas?", "removedPatchesWarningDialogText": "Los siguientes parches fueron eliminados desde la última vez que los usaste.\n\n${patches}\n\n¿Continuar de todas formas?",
"requiredOptionDialogText": "Algunas opciones de parche tienen que ser establecidas." "requiredOptionDialogText": "Algunas opciones de parche tienen que ser establecidas."
}, },
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "Seleccionar una app", "widgetTitle": "Seleccionar una aplicación",
"widgetTitleSelected": "App seleccionada", "widgetTitleSelected": "Aplicación seleccionada",
"widgetSubtitle": "Ninguna app seleccionada", "widgetSubtitle": "Ninguna aplicación seleccionada",
"noAppsLabel": "No se encontró ninguna aplicación", "noAppsLabel": "No se encontró ninguna aplicación",
"currentVersion": "Actual", "currentVersion": "Actual",
"suggestedVersion": "Sugerida", "suggestedVersion": "Sugerida",
@@ -82,68 +82,69 @@
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Seleccionar parches", "widgetTitle": "Seleccionar parches",
"widgetTitleSelected": "Parches seleccionados", "widgetTitleSelected": "Parches seleccionados",
"widgetSubtitle": "Seleccioná una aplicación primero", "widgetSubtitle": "Ninguna aplicación seleccionada",
"widgetEmptySubtitle": "No hay ningún parche seleccionado" "widgetEmptySubtitle": "Ningún parche seleccionado"
}, },
"socialMediaCard": { "socialMediaCard": {
"widgetTitle": "Redes sociales", "widgetTitle": "Nuestras redes sociales",
"widgetSubtitle": "¡Estamos en línea!" "widgetSubtitle": "¡Estamos en línea!"
}, },
"appSelectorView": { "appSelectorView": {
"viewTitle": "Seleccionar una app", "viewTitle": "Seleccionar una aplicación",
"searchBarHint": "Buscar app", "searchBarHint": "Buscar...",
"storageButton": "Almacenamiento", "storageButton": "Seleccionar desde\\nel almacenamiento",
"selectFromStorageButton": "Seleccionar desde el almacenamiento", "selectFromStorageButton": "Seleccionar desde\\nel almacenamiento",
"errorMessage": "No se puede usar la aplicación seleccionada", "errorMessage": "El archivo que seleccionaste no es una aplicación o está dañado",
"downloadToast": "La función de descarga aún no está disponible", "downloadToast": "La descarga de aplicaciones aún no está disponible",
"requireSuggestedAppVersionDialogText": "La versión de la app que seleccionaste no coincide con la versión sugerida, lo que puede causar errores inesperados. Por favor, usá la versión sugerida.\n\nVersión seleccionada: ${selected}\nVersión sugerida: ${suggested}\n\nPara continuar de todas formas, desactivá \"Requerir versión sugerida de la app\" en los ajustes.", "requireSuggestedAppVersionDialogText": "La versión de la app que seleccionaste no coincide con la versión sugerida, lo que puede causar errores inesperados. Por favor, usá la versión sugerida.\n\nVersión seleccionada: ${selected}\nVersión sugerida: ${suggested}\n\nPara continuar de todas formas, desactivá \"Requerir versión sugerida de la app\" en los ajustes.",
"featureNotAvailable": "Función no implementada" "featureNotAvailable": "Función no implementada",
"featureNotAvailableText": "Esta aplicación está instalada en formato AAB (Android App Bundle) y solo se puede parchear e instalar de forma fiable mediante el montaje con acceso root. Sin embargo, podés parchear e instalar una aplicación en formato APK seleccionándola desde el almacenamiento."
}, },
"patchesSelectorView": { "patchesSelectorView": {
"viewTitle": "Seleccionar parches", "viewTitle": "Seleccionar parches",
"searchBarHint": "Buscar parches", "searchBarHint": "Buscar...",
"universalPatches": "Parches universales", "universalPatches": "Parches universales",
"newPatches": "Nuevos parches", "newPatches": "Parches nuevos",
"patches": "Parches", "patches": "Parches",
"doneButton": "Listo", "doneButton": "Guardar selección",
"defaultChip": "Por defecto", "defaultChip": "Por defecto",
"defaultTooltip": "Seleccioná todos los parches por defecto", "defaultTooltip": "Selecciona los parches por defecto",
"noneChip": "Ninguno", "noneChip": "Ninguno",
"noneTooltip": "Deseleccionar todos los parches", "noneTooltip": "Deselecciona todos los parches",
"loadPatchesSelection": "Cargar selección de parches", "loadPatchesSelection": "Cargar selección de parches",
"noSavedPatches": "No se guardó ninguna selección de parches para la aplicación seleccionada.\nApretá Listo para guardar la selección actual.", "noSavedPatches": "No se guardó ninguna selección de parches para la aplicación seleccionada.\nApretá 'Guardar selección' para guardar la selección actual.",
"noPatchesFound": "No se encontraron parches para la app seleccionada", "noPatchesFound": "No se encontraron parches para la aplicación seleccionada",
"setRequiredOption": "Algunos parches requieren establecer algunas opciones:\n\n${patches}\n\nPor favor, configúrelas antes de continuar." "setRequiredOption": "Los siguientes parches requieren su propia configuración:\\n\\n${patches}\\n\\nPor favor, configuralos antes de continuar."
}, },
"patchOptionsView": { "patchOptionsView": {
"customValue": "Valor personalizado", "customValue": "Valor personalizado",
"resetOptionsTooltip": "Restablecer las opciones de parche", "resetOptionsTooltip": "Restablecer a los valores por defecto",
"viewTitle": "Opciones de parche", "viewTitle": "Configuración\\ndel parche",
"saveOptions": "Guardar", "saveOptions": "Guardar configuración",
"addOptions": "Agregar opciones", "addOptions": "Agregar configuración",
"deselectPatch": "Deseleccionar parche", "deselectPatch": "Deseleccionar parche",
"tooltip": "Más opciones de entrada", "tooltip": "Más opciones de entrada",
"selectFilePath": "Selecciona la ruta del archivo", "selectFilePath": "Seleccionar ruta del archivo",
"selectFolder": "Selecciona la carpeta", "selectFolder": "Seleccionar carpeta",
"selectOption": "Seleccionar opción", "selectOption": "Seleccionar opción",
"requiredOption": "Esta opción es requerida", "requiredOption": "Esta opción es requerida",
"unsupportedOption": "Esta opción no es compatible", "unsupportedOption": "Esta opción no es compatible",
"requiredOptionNull": "Hay que configurar las siguientes opciones:\n\n${options}" "requiredOptionNull": "Tenés que configurar las siguientes opciones:\\n\\n${options}"
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "Seleccionar este parche puede provocar errores en el parcheo.\n\nVersión de la app: ${packageVersion}\nVersiones soportadas:\n${supportedVersions}", "unsupportedDialogText": "Seleccionar este parche puede provocar errores en el parcheo.\n\nVersión de la app: ${packageVersion}\nVersiones soportadas:\n${supportedVersions}",
"unsupportedPatchVersion": "El parche no es compatible con esta versión de la app.", "unsupportedPatchVersion": "El parche no es compatible con esta versión de la aplicación.",
"unsupportedRequiredOption": "Este parche contiene una opción necesaria que no es compatible con esta aplicación", "unsupportedRequiredOption": "El parche contiene una opción necesaria que no es compatible con esta aplicación",
"patchesChangeWarningDialogText": "Se recomienda utilizar la selección y opciones de parches por defecto. Cambiarlas puede causar problemas inesperados.\n\nTendrás que activar \"Permitir cambiar la selección de parches\" en los ajustes antes de cambiar cualquier selección de parche.", "patchesChangeWarningDialogText": "Te recomendamos que utilices la selección y opciones de parches por defecto; cambiarlas puede causar problemas inesperados.\\n\\nTendrás que activar \\\"Permitir cambiar la selección de parches\\\" en la configuración antes de poder hacerlo.",
"patchesChangeWarningDialogButton": "Utilizar la opción por defecto" "patchesChangeWarningDialogButton": "Utilizar la opción por defecto"
}, },
"installerView": { "installerView": {
"widgetTitle": "Instalador", "widgetTitle": "Instalador",
"installType": "Seleccione el tipo de instalación", "installType": "Tipo de instalación",
"installTypeDescription": "Seleccioná el tipo de instalación para continuar.", "installTypeDescription": "Seleccioná el tipo de instalación para continuar.",
"installButton": "Instalar", "installButton": "Instalar",
"installRootType": "Montar", "installRootType": "Instalación por montaje (requiere root)",
"installNonRootType": "Normal", "installNonRootType": "Instalación normal",
"warning": "Recordá desactivar las actualizaciones automáticas de la app parcheada para evitar problemas inesperados.", "warning": "Recordá desactivar las actualizaciones automáticas de la app parcheada para evitar problemas inesperados.",
"pressBackAgain": "Vuelve a presionar atrás para cancelar", "pressBackAgain": "Vuelve a presionar atrás para cancelar",
"openButton": "Abrir", "openButton": "Abrir",
@@ -152,8 +153,8 @@
"notificationText": "Apretá para volver al instalador", "notificationText": "Apretá para volver al instalador",
"exportApkButtonTooltip": "Exportar APK parcheado", "exportApkButtonTooltip": "Exportar APK parcheado",
"exportLogButtonTooltip": "Exportar registro", "exportLogButtonTooltip": "Exportar registro",
"screenshotDetected": "Se ha detectado una captura de pantalla. Si está intentando compartir el registro, por favor comparta una copia de texto en su lugar.\n\n¿Copiar registro al portapapeles?", "screenshotDetected": "Detectamos que hiciste una captura de pantalla. Si estás intentando compartir el registro, por favor compartilo en formato de texto.\\n\\n¿Copiar registro al portapapeles?",
"copiedToClipboard": "Registro copiado en el portapapeles", "copiedToClipboard": "Registro copiado al portapapeles",
"noExit": "El instalador aún se está ejecutando, no te podés salir..." "noExit": "El instalador aún se está ejecutando, no te podés salir..."
}, },
"settingsView": { "settingsView": {
@@ -163,6 +164,7 @@
"debugSectionTitle": "Depurando", "debugSectionTitle": "Depurando",
"advancedSectionTitle": "Avanzado", "advancedSectionTitle": "Avanzado",
"exportSectionTitle": "Importación y exportación", "exportSectionTitle": "Importación y exportación",
"dataSectionTitle": "Fuentes de datos",
"themeModeLabel": "Tema de la app", "themeModeLabel": "Tema de la app",
"systemThemeLabel": "Sistema", "systemThemeLabel": "Sistema",
"lightThemeLabel": "Luz", "lightThemeLabel": "Luz",
@@ -172,15 +174,18 @@
"languageLabel": "Idioma", "languageLabel": "Idioma",
"languageUpdated": "Idioma actualizado", "languageUpdated": "Idioma actualizado",
"englishOption": "Inglés", "englishOption": "Inglés",
"sourcesLabel": "Fuentes", "sourcesLabel": "Fuentes alternativas",
"sourcesLabelHint": "Configurá las fuentes alternativas para ReVanced Patches y ReVanced Integrations",
"sourcesIntegrationsLabel": "Fuente de las integraciones", "sourcesIntegrationsLabel": "Fuente de las integraciones",
"useAlternativeSources": "Usar fuentes alternativas",
"useAlternativeSourcesHint": "Usá fuentes alternativas para ReVanced Patches y ReVanced Integrations en lugar de la API",
"sourcesResetDialogTitle": "Resetear", "sourcesResetDialogTitle": "Resetear",
"sourcesResetDialogText": "¿Estás seguro de que quieres restablecer las fuentes a sus valores por defecto?", "sourcesResetDialogText": "¿Estás seguro de que quieres restablecer las fuentes a sus valores por defecto?",
"apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de tu API a su valor por defecto?", "apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de tu API a su valor por defecto?",
"sourcesUpdateNote": "Nota: Los parches se actualizarán automáticamente a la última versión.\n\nEsto revelará su dirección IP al servidor.", "sourcesUpdateNote": "Nota: Esto descargará de forma automática ReVanced Patches y ReVanced Integrations desde las fuentes alternativas.\n\nEsto te va a conectar a la fuente alternativa.",
"apiURLLabel": "URL de la API", "apiURLLabel": "URL de la API",
"apiURLHint": "Configurá la URL de la API del ReVanced Manager",
"selectApiURL": "URL de la API", "selectApiURL": "URL de la API",
"hostRepositoryLabel": "API del repositorio",
"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 las integraciones", "orgIntegrationsLabel": "Organización de las integraciones",
@@ -189,14 +194,19 @@
"logsLabel": "Compartir registros", "logsLabel": "Compartir registros",
"logsHint": "Compartir los registros de ReVanced Manager", "logsHint": "Compartir los registros de ReVanced Manager",
"enablePatchesSelectionLabel": "Permitir cambiar la selección de parches", "enablePatchesSelectionLabel": "Permitir cambiar la selección de parches",
"enablePatchesSelectionHint": "No impedir la selección o deselección de parches",
"enablePatchesSelectionWarningText": "Cambiar la selección de parches puede causar problemas inesperados.\n\n¿Habilitar de todos modos?", "enablePatchesSelectionWarningText": "Cambiar la selección de parches puede causar problemas inesperados.\n\n¿Habilitar de todos modos?",
"disablePatchesSelectionWarningText": "Está a punto de desactivar el cambio de la selección de parches.\nSe restablecerá la selección de parches por defecto.\n\n¿Desactivar de todos modos?", "disablePatchesSelectionWarningText": "Está a punto de desactivar el cambio de la selección de parches.\nSe restablecerá la selección de parches por defecto.\n\n¿Desactivar de todos modos?",
"autoUpdatePatchesLabel": "Actualizar parches automáticamente", "autoUpdatePatchesLabel": "Actualizar parches automáticamente",
"autoUpdatePatchesHint": "Actualice automáticamente los parches a la última versión", "autoUpdatePatchesHint": "Actualice automáticamente los parches a la última versión",
"showUpdateDialogLabel": "Mostrar diálogo de actualización",
"showUpdateDialogHint": "Muestra un diálogo cuando haya una nueva actualización disponible",
"universalPatchesLabel": "Mostrar parches universales", "universalPatchesLabel": "Mostrar parches universales",
"universalPatchesHint": "Mostrar todas las aplicaciones y parches universales (puede ralentizar la lista de aplicaciones)", "universalPatchesHint": "Mostrar todas las aplicaciones y parches universales (puede ralentizar la lista de aplicaciones)",
"versionCompatibilityCheckLabel": "Comprobación de compatibilidad de versiones", "versionCompatibilityCheckLabel": "Comprobación de compatibilidad de versiones",
"versionCompatibilityCheckHint": "Impedir la selección de parches que no sean compatibles con la versión de la aplicación seleccionada",
"requireSuggestedAppVersionLabel": "Requiere la versión de aplicación sugerida", "requireSuggestedAppVersionLabel": "Requiere la versión de aplicación sugerida",
"requireSuggestedAppVersionHint": "Impedir seleccionar una aplicación cuya versión no sea la sugerida",
"requireSuggestedAppVersionDialogText": "Seleccionar una aplicación que no es la versión sugerida puede causar problemas inesperados.\n\n¿Desea continuar de todos modos?", "requireSuggestedAppVersionDialogText": "Seleccionar una aplicación que no es la versión sugerida puede causar problemas inesperados.\n\n¿Desea continuar de todos modos?",
"aboutLabel": "Acerca de", "aboutLabel": "Acerca de",
"snackbarMessage": "Copiado al portapapeles", "snackbarMessage": "Copiado al portapapeles",
@@ -245,10 +255,15 @@
"widgetTitle": "Información de la app", "widgetTitle": "Información de la app",
"openButton": "Abrir", "openButton": "Abrir",
"uninstallButton": "Desinstalar", "uninstallButton": "Desinstalar",
"unmountButton": "Desmontar",
"rootDialogTitle": "Error", "rootDialogTitle": "Error",
"unmountDialogText": "¿Seguro que querés desmontar esta aplicación?",
"uninstallDialogText": "¿Seguro que querés desinstalar esta aplicación?",
"rootDialogText": "La app se instaló con permisos de superusuario, pero ReVanced Manager no los tiene.\nPor favor, concedele permisos de superusuario.", "rootDialogText": "La app se instaló con permisos de superusuario, pero ReVanced Manager no los tiene.\nPor favor, concedele permisos de superusuario.",
"packageNameLabel": "Nombre del paquete", "packageNameLabel": "Nombre del paquete",
"installTypeLabel": "Tipo de instalación", "installTypeLabel": "Tipo de instalación",
"mountTypeLabel": "Instalación por montaje (requiere root)",
"regularTypeLabel": "Instalación normal",
"patchedDateLabel": "Fecha de parcheo", "patchedDateLabel": "Fecha de parcheo",
"appliedPatchesLabel": "Parches aplicados", "appliedPatchesLabel": "Parches aplicados",
"patchedDateHint": "${date} a las ${time}", "patchedDateHint": "${date} a las ${time}",
@@ -256,7 +271,37 @@
"updateNotImplemented": "Esta función no se implementó aún" "updateNotImplemented": "Esta función no se implementó aún"
}, },
"contributorsView": { "contributorsView": {
"widgetTitle": "Contribuidores" "widgetTitle": "Contribuidores",
"patcherContributors": "ReVanced Patcher",
"patchesContributors": "ReVanced Patches",
"integrationsContributors": "ReVanced Integrations",
"cliContributors": "ReVanced CLI",
"managerContributors": "ReVanced Manager"
}, },
"installErrorDialog": {} "installErrorDialog": {
"mount_version_mismatch": "La versión no coincide",
"mount_no_root": "Sin acceso root",
"mount_missing_installation": "Instalación no encontrada",
"status_failure_blocked": "Instalación bloqueada",
"install_failed_verification_failure": "Verificación fallida",
"status_failure_invalid": "Instalación inválida",
"install_failed_version_downgrade": "No se puede degradar",
"status_failure_conflict": "Conflicto de instalación",
"status_failure_storage": "Problema de almacenamiento en la instalación",
"status_failure_incompatible": "Instalación incompatible",
"status_failure_timeout": "Tiempo de instalación agotado",
"status_unknown": "Instalación fallida",
"mount_version_mismatch_description": "La instalación fallo debido a que la aplicación instalada es una versión diferente a la parcheada.\n\nInstalá la versión de la aplicación que intentás montar y volvé a intentarlo.",
"mount_no_root_description": "La instalación falló debido a que no concediste acceso root.\n\nConcedele acceso root a ReVanced Manager y volvé a intentarlo.",
"mount_missing_installation_description": "La instalación falló debido a que no instalaste la aplicación original en el dispositivo para poder montar la aplicación modificada sobre ella.\n\nInstalá la aplicación original antes de montar y volvé a intentarlo.",
"status_failure_timeout_description": "La instalación tardó demasiado tiempo en terminar.\n\n¿Querés volver a intentarlo?",
"status_failure_storage_description": "La instalación falló debido a falta de almacenamiento.\n\nLiberá algo de espacio y volvé a intentarlo.",
"status_failure_invalid_description": "La instalación falló debido a que la aplicación parcheada es inválida.\n\n¿Querés desinstalar la aplicación y volver a intentarlo?",
"status_failure_incompatible_description": "La aplicación es incompatible con este dispositivo.\n\nContactá con el desarrollador de la aplicación y solicitá asistencia.",
"status_failure_conflict_description": "Una instalación existente de la aplicación impidió la instalación.\n\n¿Querés desinstalar la aplicación instalada y volver a intentarlo?",
"status_failure_blocked_description": "${packageName} bloqueó la instalación.\n\nAjustá la configuración de seguridad y volvé a intentarlo.",
"install_failed_verification_failure_description": "La instalación falló debido a un problema de verificación.\n\nAjustá la configuración de seguridad y volvé a intentarlo.",
"install_failed_version_downgrade_description": "La instalación falló debido a que la aplicación parcheada es una versión inferior a la instalada.\n\n¿Querés desinstalar la aplicación y volver a intentarlo?",
"status_unknown_description": "La instalación falló debido a una razón desconocida. Por favor, volvé a intentarlo."
}
} }

View File

@@ -164,6 +164,7 @@
"debugSectionTitle": "Depuración", "debugSectionTitle": "Depuración",
"advancedSectionTitle": "Avanzado", "advancedSectionTitle": "Avanzado",
"exportSectionTitle": "Importar y exportar", "exportSectionTitle": "Importar y exportar",
"dataSectionTitle": "Fuentes de datos",
"themeModeLabel": "Tema de la app", "themeModeLabel": "Tema de la app",
"systemThemeLabel": "Sistema", "systemThemeLabel": "Sistema",
"lightThemeLabel": "Claro", "lightThemeLabel": "Claro",
@@ -173,17 +174,18 @@
"languageLabel": "Idioma", "languageLabel": "Idioma",
"languageUpdated": "Idioma actualizado", "languageUpdated": "Idioma actualizado",
"englishOption": "Inglés", "englishOption": "Inglés",
"sourcesLabel": "Fuentes", "sourcesLabel": "Fuentes alternativas",
"sourcesLabelHint": "Configurar la fuente de parches e integraciones", "sourcesLabelHint": "Configurar las fuentes alternativas para Parches de ReVanced e Integraciones ReVanced",
"sourcesIntegrationsLabel": "Fuente de las integraciones", "sourcesIntegrationsLabel": "Fuente de las integraciones",
"useAlternativeSources": "Usar fuentes alternativas",
"useAlternativeSourcesHint": "Usar fuentes alternativas para Parches de ReVanced e Integraciones ReVanced en lugar de la API",
"sourcesResetDialogTitle": "Restablecer", "sourcesResetDialogTitle": "Restablecer",
"sourcesResetDialogText": "¿Estás seguro de que quieres restablecer tus fuentes a sus valores predeterminados?", "sourcesResetDialogText": "¿Estás seguro de que quieres restablecer tus fuentes a sus valores predeterminados?",
"apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de tu API a su valor predeterminado?", "apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de tu API a su valor predeterminado?",
"sourcesUpdateNote": "Nota: Los parches se actualizarán a la última versión automáticamente.\n\nEsto revelará tu dirección IP al servidor.", "sourcesUpdateNote": "Nota: Esto automáticamente descargará Parches ReVanced e Integraciones ReVanced desde las fuentes alternativas.\n\nEsto lo conectará a la fuente alternativa.",
"apiURLLabel": "URL de la API", "apiURLLabel": "URL de la API",
"apiURLHint": "Configurar la URL de la API a usar", "apiURLHint": "Configurar la URL de API del ReVanced Manager",
"selectApiURL": "URL de la API", "selectApiURL": "URL de la API",
"hostRepositoryLabel": "Repositorio de la 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",

View File

@@ -1,31 +1,51 @@
{ {
"okButton": "ACEPTAR", "okButton": "Aceptar",
"cancelButton": "Cancelar", "cancelButton": "Cancelar",
"quitButton": "Quit", "dismissButton": "Descartar",
"quitButton": "Salir",
"updateButton": "Actualizar", "updateButton": "Actualizar",
"installed": "Instalado: ${version}", "enabledLabel": "Activado",
"suggested": "Sugerido: ${version}", "disabledLabel": "Desactivado",
"installed": "Instalada: ${version}",
"suggested": "Sugerida: ${version}",
"yesButton": "Sí", "yesButton": "Sí",
"noButton": "No", "noButton": "No",
"warning": "Advertencia", "warning": "Advertencia",
"options": "Opciones", "options": "Opciones",
"notice": "Notice", "notice": "Aviso",
"noShowAgain": "No volver a mostrar", "noShowAgain": "No volver a mostrar",
"add": "Añadir", "add": "Añadir",
"remove": "Quitar",
"showChangelogButton": "Registro de cambios",
"showUpdateButton": "Actualizar",
"navigationView": { "navigationView": {
"dashboardTab": "Panel de control", "dashboardTab": "Panel de control",
"patcherTab": "Aplicador de parches", "patcherTab": "Parcheador",
"settingsTab": "Ajustes" "settingsTab": "Configuración"
}, },
"homeView": { "homeView": {
"refreshSuccess": "Actualizado con éxito", "refreshSuccess": "Refrescado satisfactoriamente",
"widgetTitle": "Panel de control", "widgetTitle": "Panel de control",
"updatesSubtitle": "Actualizaciones", "updatesSubtitle": "Actualizaciones",
"patchedSubtitle": "Aplicaciones parcheadas", "patchedSubtitle": "Aplicaciones parcheadas",
"changeLaterSubtitle": "Puedes cambiar esto en la configuración más tarde.",
"noUpdates": "No hay actualizaciones disponibles",
"WIP": "Desarrollo en progreso...",
"noInstallations": "No hay aplicaciones parcheadas instaladas", "noInstallations": "No hay aplicaciones parcheadas instaladas",
"installUpdate": "¿Continuar actualizando la aplicación?", "installUpdate": "¿Continuar actualizando la aplicación?",
"updateSheetTitle": "Actualizar ReVanced Manager",
"updateDialogTitle": "Nueva actualización disponible",
"updatePatchesSheetTitle": "Actualizar ReVanced Patches",
"updateChangelogTitle": "Registro de cambios", "updateChangelogTitle": "Registro de cambios",
"downloadConsentDialogTitle": "¿Descargar archivos necesarios?",
"downloadConsentDialogText": "ReVanced Manager necesita descargar los archivos necesarios para funcionar correctamente.",
"downloadConsentDialogText2": "Esto te conectará a ${url}.",
"checkUpdateDialogTitle": "Comprobar actualizaciones",
"checkUpdateDialogText": "¿Quieres que ReVanced Manager compruebe si hay actualizaciones automáticamente?",
"notificationTitle": "Actualización descargada",
"notificationText": "Toca para instalar la actualización",
"downloadingMessage": "Descargando actualización...", "downloadingMessage": "Descargando actualización...",
"downloadedMessage": "Actualización descargada",
"installingMessage": "Instalando actualización...", "installingMessage": "Instalando actualización...",
"errorDownloadMessage": "No se pudo descargar la actualización", "errorDownloadMessage": "No se pudo descargar la actualización",
"errorInstallMessage": "Error al instalar la actualización", "errorInstallMessage": "Error al instalar la actualización",
@@ -37,7 +57,8 @@
}, },
"latestCommitCard": { "latestCommitCard": {
"loadingLabel": "Cargando...", "loadingLabel": "Cargando...",
"timeagoLabel": "Hace ${time}" "timeagoLabel": "Hace ${time}",
"patcherLabel": "Parcheador: "
}, },
"patcherView": { "patcherView": {
"widgetTitle": "Parcheador", "widgetTitle": "Parcheador",
@@ -127,15 +148,12 @@
"dynamicThemeLabel": "Material para ti", "dynamicThemeLabel": "Material para ti",
"dynamicThemeHint": "Disfruta de una experiencia más cercana a tu dispositivo", "dynamicThemeHint": "Disfruta de una experiencia más cercana a tu dispositivo",
"languageLabel": "Idioma", "languageLabel": "Idioma",
"sourcesLabel": "Fuentes",
"sourcesIntegrationsLabel": "Fuente de integraciones", "sourcesIntegrationsLabel": "Fuente de integraciones",
"sourcesResetDialogTitle": "Reiniciar", "sourcesResetDialogTitle": "Reiniciar",
"sourcesResetDialogText": "¿Estás seguro de que quieres restablecer las fuentes a sus valores por defecto?", "sourcesResetDialogText": "¿Estás seguro de que quieres restablecer las fuentes a sus valores por defecto?",
"apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de tu API a su valor por defecto?", "apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de tu API a su valor por defecto?",
"sourcesUpdateNote": "Nota: Los parches se actualizarán a la última versión automáticamente.\n\nEsto revelará tu dirección IP al servidor.",
"apiURLLabel": "URL API", "apiURLLabel": "URL API",
"selectApiURL": "URL de la API", "selectApiURL": "URL de la API",
"hostRepositoryLabel": "Repositorio de la API",
"orgPatchesLabel": "Organización de parches", "orgPatchesLabel": "Organización de parches",
"sourcesPatchesLabel": "Fuente de los parches", "sourcesPatchesLabel": "Fuente de los parches",
"orgIntegrationsLabel": "Organización de integraciones", "orgIntegrationsLabel": "Organización de integraciones",

View File

@@ -173,17 +173,12 @@
"languageLabel": "Kieli", "languageLabel": "Kieli",
"languageUpdated": "Kieli on vaihdettu", "languageUpdated": "Kieli on vaihdettu",
"englishOption": "Englanti", "englishOption": "Englanti",
"sourcesLabel": "Lähteet",
"sourcesLabelHint": "Määritä paikkausten ja integrointien lähde",
"sourcesIntegrationsLabel": "Integraatioiden lähde", "sourcesIntegrationsLabel": "Integraatioiden lähde",
"sourcesResetDialogTitle": "Palauta", "sourcesResetDialogTitle": "Palauta",
"sourcesResetDialogText": "Haluatko varmasti palauttaa oletuslähteet?", "sourcesResetDialogText": "Haluatko varmasti palauttaa oletuslähteet?",
"apiURLResetDialogText": "Haluatko varmasti palauttaa oletusarvoisen API:n URL-osoitteen?", "apiURLResetDialogText": "Haluatko varmasti palauttaa oletusarvoisen API:n URL-osoitteen?",
"sourcesUpdateNote": "Huomoi: Paikkaukset päivitetään uusimpiin versioihin automaattisesti.\n\nTämä paljastaa IP-osoitteesi palvelimelle.",
"apiURLLabel": "API:n URL-osoite", "apiURLLabel": "API:n URL-osoite",
"apiURLHint": "Määritä käytettävän API:n URL-osoite",
"selectApiURL": "API:n URL-osoite", "selectApiURL": "API:n URL-osoite",
"hostRepositoryLabel": "Tietovarasto-API",
"orgPatchesLabel": "Paikkauksien organisaatio", "orgPatchesLabel": "Paikkauksien organisaatio",
"sourcesPatchesLabel": "Paikkauksien lähde", "sourcesPatchesLabel": "Paikkauksien lähde",
"orgIntegrationsLabel": "Integraatioiden organisaatio", "orgIntegrationsLabel": "Integraatioiden organisaatio",

View File

@@ -164,6 +164,7 @@
"debugSectionTitle": "Débogage", "debugSectionTitle": "Débogage",
"advancedSectionTitle": "Avancé", "advancedSectionTitle": "Avancé",
"exportSectionTitle": "Import & export", "exportSectionTitle": "Import & export",
"dataSectionTitle": "Sources de données",
"themeModeLabel": "Thème de l'application", "themeModeLabel": "Thème de l'application",
"systemThemeLabel": "Système", "systemThemeLabel": "Système",
"lightThemeLabel": "Clair", "lightThemeLabel": "Clair",
@@ -173,17 +174,18 @@
"languageLabel": "Langue", "languageLabel": "Langue",
"languageUpdated": "Langue mise à jour", "languageUpdated": "Langue mise à jour",
"englishOption": "Anglais", "englishOption": "Anglais",
"sourcesLabel": "Sources", "sourcesLabel": "Sources alternatives",
"sourcesLabelHint": "Configurer la source des patchs et des intégrations", "sourcesLabelHint": "Configure les sources alternatives pour les patchs et les intégrations ReVanced",
"sourcesIntegrationsLabel": "Source des intégrations", "sourcesIntegrationsLabel": "Source des intégrations",
"useAlternativeSources": "Utiliser les sources alternatives",
"useAlternativeSourcesHint": "Utilise les sources alternatives pour les patchs et les intégrations ReVanced à la place de l'API",
"sourcesResetDialogTitle": "Réinitialiser", "sourcesResetDialogTitle": "Réinitialiser",
"sourcesResetDialogText": "Êtes-vous sûr de vouloir réinitialiser vos sources à leurs valeurs par défaut ?", "sourcesResetDialogText": "Êtes-vous sûr de vouloir réinitialiser vos sources à leurs valeurs par défaut ?",
"apiURLResetDialogText": "Êtes-vous sûr de vouloir réinitialiser l'URL d'API à sa valeur par défaut ?", "apiURLResetDialogText": "Êtes-vous sûr de vouloir réinitialiser l'URL d'API à sa valeur par défaut ?",
"sourcesUpdateNote": "Remarque : Les patchs ReVanced seront automatiquement mis à jour vers la dernière version.\n\nCela révélera votre adresse IP au serveur.", "sourcesUpdateNote": "Note : Cela téléchargera automatiquement les patchs et les intégrations ReVanced depuis les sources alternatives.\n\nCela vous connectera à la source alternative.",
"apiURLLabel": "URL de l'API", "apiURLLabel": "URL de l'API",
"apiURLHint": "Configurer l'URL de l'API à utiliser", "apiURLHint": "Configurer l'URL de l'API de ReVanced Manager",
"selectApiURL": "URL de l'API", "selectApiURL": "URL de l'API",
"hostRepositoryLabel": "Dépôt de l'API",
"orgPatchesLabel": "Organisation des patchs", "orgPatchesLabel": "Organisation des patchs",
"sourcesPatchesLabel": "Source des patchs", "sourcesPatchesLabel": "Source des patchs",
"orgIntegrationsLabel": "Organisation des intégrations", "orgIntegrationsLabel": "Organisation des intégrations",

View File

@@ -143,16 +143,12 @@
"dynamicThemeHint": "תהנה/י מחוויה קרובה יותר למכשיר שלך", "dynamicThemeHint": "תהנה/י מחוויה קרובה יותר למכשיר שלך",
"languageLabel": "שפה", "languageLabel": "שפה",
"englishOption": "אנגלית", "englishOption": "אנגלית",
"sourcesLabel": "מקורות",
"sourcesLabelHint": "הגדר את מקור התיקונים והאינטרקציות",
"sourcesIntegrationsLabel": "מקור אינטגרציות", "sourcesIntegrationsLabel": "מקור אינטגרציות",
"sourcesResetDialogTitle": "איפוס", "sourcesResetDialogTitle": "איפוס",
"sourcesResetDialogText": "האם אתה בטוח שברצונך לאפס את המקורות לערכי ברירת המחדל שלהם?", "sourcesResetDialogText": "האם אתה בטוח שברצונך לאפס את המקורות לערכי ברירת המחדל שלהם?",
"apiURLResetDialogText": "האם אתה בטוח שברצונך לאפס את כתובת הAPI לערך ברירת המחדל?", "apiURLResetDialogText": "האם אתה בטוח שברצונך לאפס את כתובת הAPI לערך ברירת המחדל?",
"sourcesUpdateNote": "שים לב: טלאי ReVanced יעודכנו לגרסה העדכנית באופן אוטומטי.\n\nזה יחשוף את כתובת ה־IP שלך לשרת.",
"apiURLLabel": "כתובת API", "apiURLLabel": "כתובת API",
"selectApiURL": "כתובת API", "selectApiURL": "כתובת API",
"hostRepositoryLabel": "מאגר API",
"orgPatchesLabel": "ארגון תיקונים", "orgPatchesLabel": "ארגון תיקונים",
"sourcesPatchesLabel": "מקור התיקונים", "sourcesPatchesLabel": "מקור התיקונים",
"orgIntegrationsLabel": "ארגון אינטגרציות", "orgIntegrationsLabel": "ארגון אינטגרציות",

View File

@@ -1,8 +1,10 @@
{ {
"okButton": "ठीक है", "okButton": "ठीक है",
"cancelButton": "रद्द करें", "cancelButton": "रद्द करें",
"dismissButton": "बंद करें",
"quitButton": "छोड़ें", "quitButton": "छोड़ें",
"updateButton": "अपडेट करें", "updateButton": "अपडेट करें",
"enabledLabel": "सक्रिय",
"installed": "इंस्टॉल्ड: ${version}", "installed": "इंस्टॉल्ड: ${version}",
"suggested": "सुझाया गया: ${version}", "suggested": "सुझाया गया: ${version}",
"yesButton": "हाँ", "yesButton": "हाँ",
@@ -13,6 +15,7 @@
"noShowAgain": "इसे पुनः न दिखाएँ", "noShowAgain": "इसे पुनः न दिखाएँ",
"add": "ऐड करें", "add": "ऐड करें",
"remove": "हटाएं", "remove": "हटाएं",
"showChangelogButton": "बदलाव दिखाएं",
"navigationView": { "navigationView": {
"dashboardTab": "नियंत्रण-पट्ट", "dashboardTab": "नियंत्रण-पट्ट",
"patcherTab": "पैचर", "patcherTab": "पैचर",
@@ -99,10 +102,8 @@
"dynamicThemeLabel": "मेटीरियल यू", "dynamicThemeLabel": "मेटीरियल यू",
"dynamicThemeHint": "अपने डिवाइस के करीब एक अनुभव का आनंद लें", "dynamicThemeHint": "अपने डिवाइस के करीब एक अनुभव का आनंद लें",
"languageLabel": "भाषा", "languageLabel": "भाषा",
"sourcesLabel": "स्रोत",
"sourcesIntegrationsLabel": "एकीकरण स्रोत", "sourcesIntegrationsLabel": "एकीकरण स्रोत",
"sourcesResetDialogTitle": "रीसेट करें", "sourcesResetDialogTitle": "रीसेट करें",
"hostRepositoryLabel": "रिपोजिटरी एपीआई",
"orgPatchesLabel": "पैच संगठन", "orgPatchesLabel": "पैच संगठन",
"sourcesPatchesLabel": "पैच स्रोत", "sourcesPatchesLabel": "पैच स्रोत",
"orgIntegrationsLabel": "एकीकरण संगठन", "orgIntegrationsLabel": "एकीकरण संगठन",

View File

@@ -88,11 +88,9 @@
"darkThemeLabel": "Tamni način", "darkThemeLabel": "Tamni način",
"dynamicThemeHint": "Uživajte u iskustvu prilagođenom vašem uređaju", "dynamicThemeHint": "Uživajte u iskustvu prilagođenom vašem uređaju",
"languageLabel": "Jezik", "languageLabel": "Jezik",
"sourcesLabel": "Izvori",
"sourcesIntegrationsLabel": "Izvori ugradnje", "sourcesIntegrationsLabel": "Izvori ugradnje",
"sourcesResetDialogTitle": "Ponovno postavljanje", "sourcesResetDialogTitle": "Ponovno postavljanje",
"apiURLLabel": "API URL (Automatic Copy)", "apiURLLabel": "API URL (Automatic Copy)",
"hostRepositoryLabel": "Spremište API",
"orgPatchesLabel": "Autori zakrpa", "orgPatchesLabel": "Autori zakrpa",
"sourcesPatchesLabel": "Izvor zakrpa", "sourcesPatchesLabel": "Izvor zakrpa",
"orgIntegrationsLabel": "Organizacije za ugradnju", "orgIntegrationsLabel": "Organizacije za ugradnju",

View File

@@ -66,7 +66,7 @@
"patcherView": { "patcherView": {
"widgetTitle": "Patchelő", "widgetTitle": "Patchelő",
"patchButton": "Patch", "patchButton": "Patch",
"armv7WarningDialogText": "A javítás az ARMv7 eszközökön még nem támogatott, és sikertelen lehet. Folytatja?", "armv7WarningDialogText": "A patchelés az ARMv7 eszközökön még nem támogatott, és sikertelen lehet. Folytatja?",
"removedPatchesWarningDialogText": "A következő patcheket a legutóbbi használatuk óta eltávolították.\n\n${patches}\n\nMindenképpen folytatja?", "removedPatchesWarningDialogText": "A következő patcheket a legutóbbi használatuk óta eltávolították.\n\n${patches}\n\nMindenképpen folytatja?",
"requiredOptionDialogText": "Néhány patch lehetőséget be kell állítani." "requiredOptionDialogText": "Néhány patch lehetőséget be kell állítani."
}, },
@@ -98,7 +98,7 @@
"downloadToast": "A letöltés funkció még nem érhető el", "downloadToast": "A letöltés funkció még nem érhető el",
"requireSuggestedAppVersionDialogText": "Az alkalmazás kiválasztott verziója nem egyezik a javasolt verzióval. Kérjük, válassza ki a javasolt verziónak megfelelő alkalmazást.\n\nKiválasztott verzió: ${selected}\nJavasolt verzió: ${suggested}\n\nA folytatáshoz kapcsolja ki a „Javasolt alkalmazásverzió megkövetelése” lehetőséget a beállításokban.", "requireSuggestedAppVersionDialogText": "Az alkalmazás kiválasztott verziója nem egyezik a javasolt verzióval. Kérjük, válassza ki a javasolt verziónak megfelelő alkalmazást.\n\nKiválasztott verzió: ${selected}\nJavasolt verzió: ${suggested}\n\nA folytatáshoz kapcsolja ki a „Javasolt alkalmazásverzió megkövetelése” lehetőséget a beállításokban.",
"featureNotAvailable": "A funkció nincs megvalósítva", "featureNotAvailable": "A funkció nincs megvalósítva",
"featureNotAvailableText": "Ez az alkalmazás egy osztott APK, és csak root jogosultságokkal javítható és telepíthető megbízhatóan. A teljes APK-t azonban javíthatja és telepítheti, ha kiválasztja azt a tárhelyről." "featureNotAvailableText": "Ez az alkalmazás egy osztott APK, és csak root jogosultságokkal patchelhető és telepíthető megbízhatóan. A teljes APK-t azonban patchelheti és telepítheti, ha kiválasztja azt a tárhelyről."
}, },
"patchesSelectorView": { "patchesSelectorView": {
"viewTitle": "Patchek kiválasztása", "viewTitle": "Patchek kiválasztása",
@@ -110,7 +110,7 @@
"defaultChip": "Alapértelmezett", "defaultChip": "Alapértelmezett",
"defaultTooltip": "Összes alapértelmezett patch kiválasztása", "defaultTooltip": "Összes alapértelmezett patch kiválasztása",
"noneChip": "Semmi", "noneChip": "Semmi",
"noneTooltip": "Összes javítás kijelölésének törlése", "noneTooltip": "Összes patch kijelölésének törlése",
"loadPatchesSelection": "Patch kiválasztás betöltése", "loadPatchesSelection": "Patch kiválasztás betöltése",
"noSavedPatches": "Nincs mentett patch a kiválasztott alkalmazáshoz.\nNyomja meg a Kész gombot az aktuális kijelölés mentéséhez.", "noSavedPatches": "Nincs mentett patch a kiválasztott alkalmazáshoz.\nNyomja meg a Kész gombot az aktuális kijelölés mentéséhez.",
"noPatchesFound": "A kiválasztott alkalmazáshoz nem találhatóak patchek", "noPatchesFound": "A kiválasztott alkalmazáshoz nem találhatóak patchek",
@@ -145,7 +145,7 @@
"installButton": "Telepítés", "installButton": "Telepítés",
"installRootType": "Felcsatolás", "installRootType": "Felcsatolás",
"installNonRootType": "Hagyományos", "installNonRootType": "Hagyományos",
"warning": "A váratlan problémák elkerülése érdekében tiltsa le a javított alkalmazás automatikus frissítéseit.", "warning": "A váratlan problémák elkerülése érdekében tiltsa le a patchelt alkalmazás automatikus frissítéseit.",
"pressBackAgain": "A visszavonáshoz nyomja meg ismét a vissza gombot", "pressBackAgain": "A visszavonáshoz nyomja meg ismét a vissza gombot",
"openButton": "Megnyitás", "openButton": "Megnyitás",
"shareButton": "Fájl megosztása", "shareButton": "Fájl megosztása",
@@ -164,6 +164,7 @@
"debugSectionTitle": "Hibakeresés", "debugSectionTitle": "Hibakeresés",
"advancedSectionTitle": "Haladó", "advancedSectionTitle": "Haladó",
"exportSectionTitle": "Importálás és exportálás", "exportSectionTitle": "Importálás és exportálás",
"dataSectionTitle": "Adatforrások",
"themeModeLabel": "Alkalmazás témája", "themeModeLabel": "Alkalmazás témája",
"systemThemeLabel": "Rendszer", "systemThemeLabel": "Rendszer",
"lightThemeLabel": "Világos", "lightThemeLabel": "Világos",
@@ -173,17 +174,18 @@
"languageLabel": "Nyelv", "languageLabel": "Nyelv",
"languageUpdated": "Nyelv frissítve", "languageUpdated": "Nyelv frissítve",
"englishOption": "Angol", "englishOption": "Angol",
"sourcesLabel": "Források", "sourcesLabel": "Alternatív források",
"sourcesLabelHint": "Konfigurálja a javítások és integrációk forrását", "sourcesLabelHint": "Állítsa be a ReVanced Patchek és ReVanced Integrációk alternatív forrásait",
"sourcesIntegrationsLabel": "Integrációk - forrás", "sourcesIntegrationsLabel": "Integrációk - forrás",
"useAlternativeSources": "Alternatív források használata",
"useAlternativeSourcesHint": "Használjon alternatív forrásokat a ReVanced Patchekhez és a ReVanced Integrációhoz az API helyett",
"sourcesResetDialogTitle": "Visszaállítás", "sourcesResetDialogTitle": "Visszaállítás",
"sourcesResetDialogText": "Biztosan vissza szeretné állítani a forrásokat az alapértelmezett értékekre?", "sourcesResetDialogText": "Biztosan vissza szeretné állítani a forrásokat az alapértelmezett értékekre?",
"apiURLResetDialogText": "Biztosan vissza szeretné állítani az API URL-jét az alapértelmezett értékre?", "apiURLResetDialogText": "Biztosan vissza szeretné állítani az API URL-jét az alapértelmezett értékre?",
"sourcesUpdateNote": "Megjegyzés: A patchek automatikusan frissülnek a legújabb verzióra.\n\nEz felfedi az IP-címét a szerver számára.", "sourcesUpdateNote": "Megjegyzés: Ez automatikusan letölti a ReVanced Patch-eket és a ReVanced Integrációkat az alternatív forrásokból.\n\nEzzel csatlakozik az alternatív forráshoz.",
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"apiURLHint": "Konfigurálja a használni kívánt API URL-jét", "apiURLHint": "Konfigurálja a ReVanced Manager API URL-jét",
"selectApiURL": "API címe", "selectApiURL": "API címe",
"hostRepositoryLabel": "Adattároló API",
"orgPatchesLabel": "Patchek - szervezet", "orgPatchesLabel": "Patchek - szervezet",
"sourcesPatchesLabel": "Patchek - forrás", "sourcesPatchesLabel": "Patchek - forrás",
"orgIntegrationsLabel": "Integrációk - szervezet", "orgIntegrationsLabel": "Integrációk - szervezet",
@@ -192,9 +194,9 @@
"logsLabel": "Naplók megosztása", "logsLabel": "Naplók megosztása",
"logsHint": "ReVanced Manager naplók megosztása", "logsHint": "ReVanced Manager naplók megosztása",
"enablePatchesSelectionLabel": "Engedélyezze a patch kiválasztásának módosítását", "enablePatchesSelectionLabel": "Engedélyezze a patch kiválasztásának módosítását",
"enablePatchesSelectionHint": "Ne akadályozza meg a javítások kiválasztását vagy megszüntetését", "enablePatchesSelectionHint": "Ne akadályozza meg a patchek kiválasztását vagy megszüntetését",
"enablePatchesSelectionWarningText": "A patchek kiválasztásának megváltoztatása váratlan problémákat okozhat.\n\nMindenképpen engedélyezi?", "enablePatchesSelectionWarningText": "A patchek kiválasztásának megváltoztatása váratlan problémákat okozhat.\n\nMindenképpen engedélyezi?",
"disablePatchesSelectionWarningText": "Arra készül, hogy letiltja a patchek kiválasztásának módosítását.\nA javítások alapértelmezett kiválasztása visszaáll.\n\nMindenképpen letiltja?", "disablePatchesSelectionWarningText": "Arra készül, hogy letiltja a patchek kiválasztásának módosítását.\nA patchek alapértelmezett kiválasztása visszaáll.\n\nMindenképpen letiltja?",
"autoUpdatePatchesLabel": "Patchek automatikus frissítése", "autoUpdatePatchesLabel": "Patchek automatikus frissítése",
"autoUpdatePatchesHint": "A patchek automatikus frissítése a legújabb verzióra", "autoUpdatePatchesHint": "A patchek automatikus frissítése a legújabb verzióra",
"showUpdateDialogLabel": "Frissítési panel megjelenítése", "showUpdateDialogLabel": "Frissítési panel megjelenítése",
@@ -202,7 +204,7 @@
"universalPatchesLabel": "Univerzális patchek megjelenítése", "universalPatchesLabel": "Univerzális patchek megjelenítése",
"universalPatchesHint": "Az összes alkalmazás és univerzális patch megjelenítése (lassíthatja az alkalmazáslistát)", "universalPatchesHint": "Az összes alkalmazás és univerzális patch megjelenítése (lassíthatja az alkalmazáslistát)",
"versionCompatibilityCheckLabel": "Verziókompatibilitás ellenőrzése", "versionCompatibilityCheckLabel": "Verziókompatibilitás ellenőrzése",
"versionCompatibilityCheckHint": "Akadályozza meg a kiválasztott alkalmazásverzióval nem kompatibilis javítások kiválasztását", "versionCompatibilityCheckHint": "Akadályozza meg a kiválasztott alkalmazásverzióval nem kompatibilis patchek kiválasztását",
"requireSuggestedAppVersionLabel": "Javasolt alkalmazás verzió kötelező", "requireSuggestedAppVersionLabel": "Javasolt alkalmazás verzió kötelező",
"requireSuggestedAppVersionHint": "Akadályozza meg, hogy olyan alkalmazást válasszon ki, amelynek verziója nem a javasolt", "requireSuggestedAppVersionHint": "Akadályozza meg, hogy olyan alkalmazást válasszon ki, amelynek verziója nem a javasolt",
"requireSuggestedAppVersionDialogText": "Egy nem a javasolt verziótól eltérő alkalmazás kiválasztása váratlan problémákat okozhat.\n\nMindenképpen folytatni szeretné?", "requireSuggestedAppVersionDialogText": "Egy nem a javasolt verziótól eltérő alkalmazás kiválasztása váratlan problémákat okozhat.\n\nMindenképpen folytatni szeretné?",
@@ -235,7 +237,7 @@
"regenerateKeystoreLabel": "Kulcstár újragenerálása", "regenerateKeystoreLabel": "Kulcstár újragenerálása",
"regenerateKeystoreHint": "Újragenerálja az alkalmazások aláírásához használt kulcstárolót", "regenerateKeystoreHint": "Újragenerálja az alkalmazások aláírásához használt kulcstárolót",
"regenerateKeystoreDialogTitle": "Kulcstár újragenerálása?", "regenerateKeystoreDialogTitle": "Kulcstár újragenerálása?",
"regenerateKeystoreDialogText": "A régi kulcstárolóval aláírt javított alkalmazásokat a továbbiakban nem lehet majd frissíteni.", "regenerateKeystoreDialogText": "A régi kulcstárolóval aláírt patchelt alkalmazásokat a továbbiakban nem lehet majd frissíteni.",
"regeneratedKeystore": "A kulcstár újra létrehozva", "regeneratedKeystore": "A kulcstár újra létrehozva",
"exportKeystoreLabel": "Kulcstároló exportálása", "exportKeystoreLabel": "Kulcstároló exportálása",
"exportKeystoreHint": "Exportálja az alkalmazások aláírásához használt kulcstárolót", "exportKeystoreHint": "Exportálja az alkalmazások aláírásához használt kulcstárolót",
@@ -289,9 +291,9 @@
"status_failure_incompatible": "A telepítés nem kompatibilis", "status_failure_incompatible": "A telepítés nem kompatibilis",
"status_failure_timeout": "Telepítési időtúllépés", "status_failure_timeout": "Telepítési időtúllépés",
"status_unknown": "A telepítés sikertelen", "status_unknown": "A telepítés sikertelen",
"mount_version_mismatch_description": "A telepítés meghiúsult, mert a telepített alkalmazás verziója eltér a javított alkalmazástól.\n\nTelepítse a csatlakoztatott alkalmazás verzióját, és próbálja újra.", "mount_version_mismatch_description": "A telepítés meghiúsult, mert a telepített alkalmazás verziója eltér a patchelt alkalmazástól.\n\nTelepítse a csatlakoztatott alkalmazás verzióját, és próbálja újra.",
"mount_no_root_description": "A telepítés meghiúsult, mert nem biztosított a root hozzáférés.\n\nAdjon root hozzáférést a ReVanced Manager számára, és próbálja újra.", "mount_no_root_description": "A telepítés meghiúsult, mert nem biztosított a root hozzáférés.\n\nAdjon root hozzáférést a ReVanced Manager számára, és próbálja újra.",
"mount_missing_installation_description": "A telepítés meghiúsult, mert a kijavítatlan alkalmazás nincs telepítve erre az eszközre ahhoz, hogy csatlakozhasson.\n\nFelszerelés előtt telepítse a nem javított alkalmazást, és próbálkozzon újra.", "mount_missing_installation_description": "A telepítés sikertelen volt, mivel a nem patchelt alkalmazás nem volt telepítve az eszközre, hogy csatlakoztatni lehessen.\n\nTelepítse a nem patchelt alkalmazást a csatlakoztatás előtt, és próbálja meg újra.",
"status_failure_timeout_description": "A telepítés túl sokáig tartott.\n\nSzeretné újra megpróbálni?", "status_failure_timeout_description": "A telepítés túl sokáig tartott.\n\nSzeretné újra megpróbálni?",
"status_failure_storage_description": "A telepítés meghiúsult a nem elegendő tárhely miatt.\n\nSzabadítson fel helyet, és próbálja újra.", "status_failure_storage_description": "A telepítés meghiúsult a nem elegendő tárhely miatt.\n\nSzabadítson fel helyet, és próbálja újra.",
"status_failure_invalid_description": "A telepítés meghiúsult, mert a patchelt alkalmazás érvénytelen.\n\nTávolítsa el az alkalmazást, és próbálja újra?", "status_failure_invalid_description": "A telepítés meghiúsult, mert a patchelt alkalmazás érvénytelen.\n\nTávolítsa el az alkalmazást, és próbálja újra?",

View File

@@ -1,4 +1,5 @@
{ {
"okButton": "Այո",
"navigationView": {}, "navigationView": {},
"homeView": {}, "homeView": {},
"applicationItem": {}, "applicationItem": {},

View File

@@ -3,12 +3,12 @@
"cancelButton": "Batal", "cancelButton": "Batal",
"dismissButton": "Abaikan", "dismissButton": "Abaikan",
"quitButton": "Keluar", "quitButton": "Keluar",
"updateButton": "Pembaruan", "updateButton": "Memperbarui",
"enabledLabel": "Aktif", "enabledLabel": "Aktif",
"disabledLabel": "Tidak Aktif", "disabledLabel": "Tidak Aktif",
"installed": "Terpasang: ${version}", "installed": "Terpasang: ${version}",
"suggested": "Disarankan: ${version}", "suggested": "Disarankan: ${version}",
"yesButton": "Ya", "yesButton": "Iya",
"noButton": "Tidak", "noButton": "Tidak",
"warning": "Peringatan", "warning": "Peringatan",
"options": "Pengaturan", "options": "Pengaturan",
@@ -27,7 +27,7 @@
"refreshSuccess": "Berhasil Memuat Ulang", "refreshSuccess": "Berhasil Memuat Ulang",
"widgetTitle": "Dasbor", "widgetTitle": "Dasbor",
"updatesSubtitle": "Pembaruan", "updatesSubtitle": "Pembaruan",
"patchedSubtitle": "Aplikasi tertambal", "patchedSubtitle": "Aplikasi yang dimodifikasi",
"changeLaterSubtitle": "Anda dapat mengubahnya di pengaturan nanti.", "changeLaterSubtitle": "Anda dapat mengubahnya di pengaturan nanti.",
"noUpdates": "Tidak ada pembaruan", "noUpdates": "Tidak ada pembaruan",
"WIP": "Sedang dikerjakan...", "WIP": "Sedang dikerjakan...",
@@ -60,19 +60,24 @@
"loadingLabel": "Memuat...", "loadingLabel": "Memuat...",
"timeagoLabel": "${time} yang lalu", "timeagoLabel": "${time} yang lalu",
"patcherLabel": "Penambal: ", "patcherLabel": "Penambal: ",
"managerLabel": "Manager: ", "managerLabel": "Pengelola: ",
"updateButton": "Perbarui Manager" "updateButton": "Perbarui Manager"
}, },
"patcherView": { "patcherView": {
"widgetTitle": "Penambal", "widgetTitle": "Penambal",
"patchButton": "Tambalan", "patchButton": "Tambalan",
"armv7WarningDialogText": "Menambal pada perangkat ARMv7 belum didukung dan mungkin gagal. Lanjutkan saja?", "armv7WarningDialogText": "Menambal pada perangkat ARMv7 belum didukung dan mungkin gagal. Lanjutkan saja?",
"removedPatchesWarningDialogText": "Patch berikut ini telah dihapus sejak terakhir kali Anda menggunakannya.\n\n${patches}\n\nTetap lanjutkan?",
"requiredOptionDialogText": "Beberapa opsi patch harus diatur." "requiredOptionDialogText": "Beberapa opsi patch harus diatur."
}, },
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "Pilih aplikasi",
"widgetTitleSelected": "Aplikasi yang dipilih",
"widgetSubtitle": "Tidak ada aplikasi yang dipilih",
"noAppsLabel": "Aplikasi tidak ditemukan", "noAppsLabel": "Aplikasi tidak ditemukan",
"currentVersion": "Saat ini", "currentVersion": "Saat ini",
"suggestedVersion": "Disarankan" "suggestedVersion": "Disarankan",
"anyVersion": "Versi apa saja"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Pilih tambalan", "widgetTitle": "Pilih tambalan",
@@ -85,11 +90,15 @@
"widgetSubtitle": "Ikuti kami!" "widgetSubtitle": "Ikuti kami!"
}, },
"appSelectorView": { "appSelectorView": {
"viewTitle": "Pilih aplikasi",
"searchBarHint": "Cari aplikasi",
"storageButton": "Penyimpanan", "storageButton": "Penyimpanan",
"selectFromStorageButton": "Pilih dari penyimpanan", "selectFromStorageButton": "Pilih dari penyimpanan",
"errorMessage": "Tidak dapat menggunakan aplikasi yang dipilih", "errorMessage": "Tidak dapat menggunakan aplikasi yang dipilih",
"downloadToast": "Fungsi mengunduh belum tersedia", "downloadToast": "Fungsi mengunduh belum tersedia",
"featureNotAvailable": "Fitur tidak diterapkan" "requireSuggestedAppVersionDialogText": "Versi aplikasi yang Anda pilih tidak sesuai dengan versi yang disarankan yang dapat menyebabkan masalah yang tidak diharapkan. Silakan gunakan versi yang disarankan.\n\nVersi yang dipilih: ${selected}\nVersi yang disarankan: ${suggested}\n\nUntuk melanjutkan, nonaktifkan \"Memerlukan versi aplikasi yang disarankan\" di pengaturan.",
"featureNotAvailable": "Fitur tidak diterapkan",
"featureNotAvailableText": "Aplikasi ini adalah APK terpisah dan hanya dapat ditambal dan dipasang dengan andal dengan memasang dengan izin root. Namun, Anda bisa menambal dan memasang APK lengkap dengan memilihnya dari penyimpanan."
}, },
"patchesSelectorView": { "patchesSelectorView": {
"viewTitle": "Pilih tambalan", "viewTitle": "Pilih tambalan",
@@ -98,16 +107,23 @@
"newPatches": "Patch baru", "newPatches": "Patch baru",
"patches": "Patch", "patches": "Patch",
"doneButton": "Selesai", "doneButton": "Selesai",
"defaultChip": "Bawaan",
"defaultTooltip": "Pilih semua tambalan bawaan", "defaultTooltip": "Pilih semua tambalan bawaan",
"noneChip": "Tidak ada",
"noneTooltip": "Batalkan semua tambalan", "noneTooltip": "Batalkan semua tambalan",
"loadPatchesSelection": "Muat patch terpilih", "loadPatchesSelection": "Muat patch terpilih",
"noPatchesFound": "Tidak ada tambalan untuk aplikasi" "noSavedPatches": "Tidak ada pilihan tambalan yang disimpan untuk aplikasi yang dipilih.\nTekan Selesai untuk menyimpan pilihan saat ini.",
"noPatchesFound": "Tidak ada tambalan untuk aplikasi",
"setRequiredOption": "Beberapa patch memerlukan opsi untuk diatur:\n\n${patches}\n\nAturlah sebelum melanjutkan."
}, },
"patchOptionsView": { "patchOptionsView": {
"customValue": "Nilai kustom", "customValue": "Nilai kustom",
"resetOptionsTooltip": "Mengatur ulang opsi tambalan",
"viewTitle": "Opsi tambalan",
"saveOptions": "Simpan", "saveOptions": "Simpan",
"addOptions": "Tambahkan opsi", "addOptions": "Tambahkan opsi",
"deselectPatch": "Lepas tambalan", "deselectPatch": "Lepas tambalan",
"tooltip": "Opsi masukan lainnya",
"selectFilePath": "Pilih lokasi berkas", "selectFilePath": "Pilih lokasi berkas",
"selectFolder": "Pilih folder", "selectFolder": "Pilih folder",
"selectOption": "Pilih opsi", "selectOption": "Pilih opsi",
@@ -118,11 +134,14 @@
"patchItem": { "patchItem": {
"unsupportedDialogText": "Memilih tambalan ini akan menyebabkan galat tambal.\n\nVersi apli: ${packageVersion}\nVersi anjuran:\n${supportedVersions}", "unsupportedDialogText": "Memilih tambalan ini akan menyebabkan galat tambal.\n\nVersi apli: ${packageVersion}\nVersi anjuran:\n${supportedVersions}",
"unsupportedPatchVersion": "Tambalan ini tidak mendukung versi aplikasi ini.", "unsupportedPatchVersion": "Tambalan ini tidak mendukung versi aplikasi ini.",
"unsupportedRequiredOption": "Patch ini berisi opsi wajib yang tidak didukung oleh aplikasi ini",
"patchesChangeWarningDialogText": "Direkomendasikan untuk menggunakan pilihan dan opsi tambalan default. Mengubahnya dapat mengakibatkan masalah yang tidak diharapkan.\n\nAnda harus mengaktifkan \"Izinkan perubahan pilihan tambalan\" dalam pengaturan sebelum mengubah pilihan tambalan.",
"patchesChangeWarningDialogButton": "Gunakan pemilihan bawaan" "patchesChangeWarningDialogButton": "Gunakan pemilihan bawaan"
}, },
"installerView": { "installerView": {
"widgetTitle": "Pemasang", "widgetTitle": "Pemasang",
"installType": "Pilih tipe pemasang", "installType": "Pilih tipe pemasang",
"installTypeDescription": "Pilih jenis instalasi untuk melanjutkan.",
"installButton": "Pasang", "installButton": "Pasang",
"installRootType": "Mount", "installRootType": "Mount",
"installNonRootType": "Reguler", "installNonRootType": "Reguler",
@@ -132,14 +151,20 @@
"shareButton": "Bagikan berkas", "shareButton": "Bagikan berkas",
"notificationTitle": "ReVanced Manager sedang menambal", "notificationTitle": "ReVanced Manager sedang menambal",
"notificationText": "Ketuk untuk kembali ke pemasang", "notificationText": "Ketuk untuk kembali ke pemasang",
"exportApkButtonTooltip": "Ekspor APK yang ditambal",
"exportLogButtonTooltip": "Log ekspor",
"screenshotDetected": "Tangkapan layar telah terdeteksi. Jika Anda mencoba membagikan log, silakan bagikan salinan teks.\n\nMenyalin log ke papan klip?",
"copiedToClipboard": "Menyalin log ke papan klip",
"noExit": "Pemasangan masih berjalan, tidak bisa keluar..." "noExit": "Pemasangan masih berjalan, tidak bisa keluar..."
}, },
"settingsView": { "settingsView": {
"widgetTitle": "Pengaturan", "widgetTitle": "Pengaturan",
"appearanceSectionTitle": "Tampilan", "appearanceSectionTitle": "Tampilan",
"teamSectionTitle": "Tim", "teamSectionTitle": "Tim",
"debugSectionTitle": "Debugging",
"advancedSectionTitle": "Lanjutan", "advancedSectionTitle": "Lanjutan",
"exportSectionTitle": "Impor & Ekspor", "exportSectionTitle": "Impor & Ekspor",
"dataSectionTitle": "Sumber data",
"themeModeLabel": "Tema aplikasi", "themeModeLabel": "Tema aplikasi",
"systemThemeLabel": "Sistem", "systemThemeLabel": "Sistem",
"lightThemeLabel": "Cahaya", "lightThemeLabel": "Cahaya",
@@ -147,44 +172,79 @@
"dynamicThemeLabel": "Material You", "dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Nikmati pengalaman lebih dekat ke perangkat Anda", "dynamicThemeHint": "Nikmati pengalaman lebih dekat ke perangkat Anda",
"languageLabel": "Bahasa", "languageLabel": "Bahasa",
"languageUpdated": "Bahasa diperbaharui",
"englishOption": "Bahasa Inggris", "englishOption": "Bahasa Inggris",
"sourcesLabel": "Sumber", "sourcesLabel": "Sumber-sumber alternatif",
"sourcesLabelHint": "Setel sumber dari tambalan dan pemaduan", "sourcesLabelHint": "Mengonfigurasi sumber alternatif untuk ReVanced Patches dan ReVanced Integrations",
"sourcesIntegrationsLabel": "Sumber Integrasi", "sourcesIntegrationsLabel": "Sumber Integrasi",
"useAlternativeSources": "Gunakan sumber-sumber alternatif",
"useAlternativeSourcesHint": "Gunakan sumber alternatif untuk ReVanced Patches dan ReVanced Integrations alih-alih API",
"sourcesResetDialogTitle": "Atur ulang", "sourcesResetDialogTitle": "Atur ulang",
"sourcesResetDialogText": "Apakah Anda yakin ingin mengatur ulang sumber kustom ke bawaannya?", "sourcesResetDialogText": "Apakah Anda yakin ingin mengatur ulang sumber kustom ke bawaannya?",
"apiURLResetDialogText": "Apakah Anda yakin ingin mengatur ulang URL API ke bawaan?", "apiURLResetDialogText": "Apakah Anda yakin ingin mengatur ulang URL API ke bawaan?",
"sourcesUpdateNote": "Catatan: Tambalan ini akan diperbarui otomatis ke versi terkini.\n\nIni akan menampilkan alamat IP Anda ke server.", "sourcesUpdateNote": "Catatan: Ini akan secara otomatis mengunduh ReVanced Patches dan ReVanced Integrations dari sumber alternatif.\n\nIni akan menghubungkan Anda ke sumber alternatif.",
"apiURLLabel": "URL API", "apiURLLabel": "URL API",
"apiURLHint": "Setel URL dari API yang digunakan", "apiURLHint": "Konfigurasikan URL API dari ReVanced Manager",
"selectApiURL": "URL API", "selectApiURL": "URL API",
"hostRepositoryLabel": "API Repositori",
"orgPatchesLabel": "Perapihan tambalan", "orgPatchesLabel": "Perapihan tambalan",
"sourcesPatchesLabel": "Sumber tambalan", "sourcesPatchesLabel": "Sumber tambalan",
"orgIntegrationsLabel": "Organisasi Intergrasi", "orgIntegrationsLabel": "Organisasi Intergrasi",
"contributorsLabel": "Kontributor", "contributorsLabel": "Kontributor",
"contributorsHint": "Daftar kontributor ReVanced", "contributorsHint": "Daftar kontributor ReVanced",
"logsLabel": "Bagikan log",
"logsHint": "Bagikan log ReVanced Manager", "logsHint": "Bagikan log ReVanced Manager",
"enablePatchesSelectionLabel": "Izinkan mengubah pemilihan tambalan",
"enablePatchesSelectionHint": "Jangan mencegah pemilihan atau pembatalan pemilihan tambalan",
"enablePatchesSelectionWarningText": "Mengubah pilihan dari tambalan akan menyebabkan isu tak terduga.\n\nAktifkan saja?", "enablePatchesSelectionWarningText": "Mengubah pilihan dari tambalan akan menyebabkan isu tak terduga.\n\nAktifkan saja?",
"disablePatchesSelectionWarningText": "Anda akan menonaktifkan pengubahan pilihan tambalan.\nPilihan tambalan default akan dikembalikan.\n\nMenonaktifkan?",
"autoUpdatePatchesLabel": "Otomatis perbarui tambalan", "autoUpdatePatchesLabel": "Otomatis perbarui tambalan",
"autoUpdatePatchesHint": "Otomatis perbarui tambalan ke versi terkini", "autoUpdatePatchesHint": "Otomatis perbarui tambalan ke versi terkini",
"showUpdateDialogLabel": "Tampilkan dialog pembaruan",
"showUpdateDialogHint": "Tampilkan dialog ketika pembaruan tersedia",
"universalPatchesLabel": "Tampilkan tambalan universal", "universalPatchesLabel": "Tampilkan tambalan universal",
"universalPatchesHint": "Menampilkan semua aplikasi dan tambalan universal (dapat memperlambat daftar aplikasi)",
"versionCompatibilityCheckLabel": "Periksa versi kompatibilitas", "versionCompatibilityCheckLabel": "Periksa versi kompatibilitas",
"versionCompatibilityCheckHint": "Cegah pemilihan tambalan yang tidak kompatibel dengan versi aplikasi yang dipilih",
"requireSuggestedAppVersionLabel": "Memerlukan versi aplikasi yang disarankan",
"requireSuggestedAppVersionHint": "Cegah memilih versi aplikasi yang tidak disarankan",
"requireSuggestedAppVersionDialogText": "Memilih versi aplikasi yang tidak disarankan dapat menyebabkan masalah yang tidak terduga.\n\nApakah anda ingin melanjutkan?",
"aboutLabel": "Tentang", "aboutLabel": "Tentang",
"snackbarMessage": "Disalin ke papan klip", "snackbarMessage": "Disalin ke papan klip",
"restartAppForChanges": "Mulai ulang aplikasi untuk menerapkan perubahan", "restartAppForChanges": "Mulai ulang aplikasi untuk menerapkan perubahan",
"deleteTempDirLabel": "Hapus berkas sementara", "deleteTempDirLabel": "Hapus berkas sementara",
"deleteTempDirHint": "Hapus berkas sementara yang tidak dipakai", "deleteTempDirHint": "Hapus berkas sementara yang tidak dipakai",
"deletedTempDir": "Berkas sementara dihapus", "deletedTempDir": "Berkas sementara dihapus",
"exportPatchesLabel": "Ekspor tambalan pilihan",
"exportPatchesHint": "Ekspor tambalan terpilih ke berkas JSON", "exportPatchesHint": "Ekspor tambalan terpilih ke berkas JSON",
"exportedPatches": "Tambalan pilihan diekspor",
"noExportFileFound": "Belum pilih tambalan untuk diekspor", "noExportFileFound": "Belum pilih tambalan untuk diekspor",
"importPatchesLabel": "Impor modifikasi terpilih",
"importPatchesHint": "Impor tembalan terpilih dari berkas JSON", "importPatchesHint": "Impor tembalan terpilih dari berkas JSON",
"importedPatches": "Tambalan pilihan diimpor",
"resetStoredPatchesLabel": "Setel ulang tambalan pilihan",
"resetStoredPatchesHint": "Mulai ulang tambalan pilihan yang disimpan",
"resetStoredPatchesDialogTitle": "Mulai ulang tambalan pilihan?",
"resetStoredPatchesDialogText": "Tambalan pilihan bawaan akan dikembalikan.",
"resetStoredPatches": "Tambalan pilihan telah diatur ulang",
"resetStoredOptionsLabel": "Setel ulang opsi tambalan",
"resetStoredOptionsHint": "Setel ulang semua opsi tambalan",
"resetStoredOptionsDialogTitle": "Setel ulang opsi tambalan?",
"resetStoredOptionsDialogText": "Menyetel ulang opsi tambalan akan menghapus semua opsi yang disimpan.",
"resetStoredOptions": "Opsi telah diatur ulang",
"deleteLogsLabel": "Hapus riwayat",
"deleteLogsHint": "Hapus log ReVanced Manager terkumpul", "deleteLogsHint": "Hapus log ReVanced Manager terkumpul",
"deletedLogs": "Log dihapus", "deletedLogs": "Log dihapus",
"regenerateKeystoreLabel": "Menghasilkan penyimpanan kunci",
"regenerateKeystoreHint": "Buat ulang penyimpanan kunci yang digunakan untuk menandatangani aplikasi",
"regenerateKeystoreDialogTitle": "Membuat ulang kunci penyimpanan?",
"regenerateKeystoreDialogText": "Aplikasi tambalan yang ditandatangani dengan kunci penyimpanan lama tidak dapat diperbarui lagi.",
"regeneratedKeystore": "Kunci penyimpanan dibuat ulang",
"exportKeystoreLabel": "Ekspor keystore", "exportKeystoreLabel": "Ekspor keystore",
"exportKeystoreHint": "Ekspor kunci penyimpanan yang digunakan untuk menandatangani aplikasi",
"exportedKeystore": "Keystore diekspor", "exportedKeystore": "Keystore diekspor",
"noKeystoreExportFileFound": "Tidak ada keystore untuk diekspor", "noKeystoreExportFileFound": "Tidak ada keystore untuk diekspor",
"importKeystoreLabel": "Impor keystore", "importKeystoreLabel": "Impor keystore",
"importKeystoreHint": "Impor kunci penyimpanan yang digunakan untuk menandatangani aplikasi",
"importedKeystore": "Keystore diimpor", "importedKeystore": "Keystore diimpor",
"selectKeystorePassword": "Kata Sandi Keystore", "selectKeystorePassword": "Kata Sandi Keystore",
"selectKeystorePasswordHint": "Pilih kata sandi keystore yang digunakan untuk menandatangani aplikasi", "selectKeystorePasswordHint": "Pilih kata sandi keystore yang digunakan untuk menandatangani aplikasi",
@@ -231,6 +291,17 @@
"status_failure_incompatible": "Pemasangan tidak kompatibel", "status_failure_incompatible": "Pemasangan tidak kompatibel",
"status_failure_timeout": "Pemasangan kelamaan", "status_failure_timeout": "Pemasangan kelamaan",
"status_unknown": "Pemasangan gagal", "status_unknown": "Pemasangan gagal",
"mount_no_root_description": "Pemasangan ini gagal karena akses root belum dizinkan.\n\nIzinkan akses root ke ReVanced Manager dan coba lagi." "mount_version_mismatch_description": "Penginstalan gagal karena aplikasi yang diinstal merupakan versi yang berbeda dari aplikasi yang ditambal.\n\nInstal versi aplikasi yang anda pasang dan coba lagi.",
"mount_no_root_description": "Pemasangan ini gagal karena akses root belum dizinkan.\n\nIzinkan akses root ke ReVanced Manager dan coba lagi.",
"mount_missing_installation_description": "Penginstalan gagal karena aplikasi yang belum ditambal tidak diinstal pada perangkat ini untuk dipasang di atasnya.\n\nInstal aplikasi yang belum ditambal sebelum memasang dan coba lagi.",
"status_failure_timeout_description": "Instalasi memakan waktu terlalu lama untuk diselesaikan.\n\nApakah anda ingin mencoba lagi?",
"status_failure_storage_description": "Instalasi gagal karena penyimpanan tidak mencukupi.\n\nKosongkan sebagian ruang dan coba kembali.",
"status_failure_invalid_description": "Instalasi gagal karena aplikasi yang ditambal tidak valid.\n\nCopot pemasangan aplikasi dan coba lagi?",
"status_failure_incompatible_description": "Aplikasi ini tidak kompatibel dengan perangkat anda.\n\nHubungi pengembang aplikasi dan minta dukungan.",
"status_failure_conflict_description": "Penginstalan dicegah oleh aplikasi yang sudah ada.\n\nCopot pemasangan aplikasi yang terpasang dan coba kembali?",
"status_failure_blocked_description": "Instalasi diblokir oleh ${packageName}.\n\nSesuaikan pengaturan keamanan anda dan coba kembali.",
"install_failed_verification_failure_description": "Instalasi gagal karena masalah verifikasi.\n\nSesuaikan pengaturan keamanan anda dan coba kembali.",
"install_failed_version_downgrade_description": "Instalasi gagal karena aplikasi tambalan memiliki versi yang lebih rendah daripada aplikasi yang sudah ada.\n\nCopot pemasangan aplikasi dan coba kembali?",
"status_unknown_description": "Instalasi gagal karena alasan yang tidak diketahui. Silakan coba kembali."
} }
} }

View File

@@ -164,6 +164,7 @@
"debugSectionTitle": "Debugging", "debugSectionTitle": "Debugging",
"advancedSectionTitle": "Avanzate", "advancedSectionTitle": "Avanzate",
"exportSectionTitle": "Importa / Esporta", "exportSectionTitle": "Importa / Esporta",
"dataSectionTitle": "Sorgenti dati",
"themeModeLabel": "Tema dell'app", "themeModeLabel": "Tema dell'app",
"systemThemeLabel": "Sistema", "systemThemeLabel": "Sistema",
"lightThemeLabel": "Chiaro", "lightThemeLabel": "Chiaro",
@@ -173,17 +174,18 @@
"languageLabel": "Lingua", "languageLabel": "Lingua",
"languageUpdated": "Lingua aggiornata", "languageUpdated": "Lingua aggiornata",
"englishOption": "Inglese", "englishOption": "Inglese",
"sourcesLabel": "Sorgenti", "sourcesLabel": "Sorgenti alternative",
"sourcesLabelHint": "Configura la sorgente delle patch e integrazioni", "sourcesLabelHint": "Configura fonti alternative per ReVanced Patches e ReVanced Integrations",
"sourcesIntegrationsLabel": "Sorgente Integrazioni", "sourcesIntegrationsLabel": "Sorgente Integrazioni",
"useAlternativeSources": "Usa sorgenti alternative",
"useAlternativeSourcesHint": "Usa sorgenti alternative per ReVanced Patches e ReVanced Integrations invece delle API",
"sourcesResetDialogTitle": "Reimposta", "sourcesResetDialogTitle": "Reimposta",
"sourcesResetDialogText": "Sei sicuro di voler reimpostare le sorgenti ai valori predefiniti?", "sourcesResetDialogText": "Sei sicuro di voler reimpostare le sorgenti ai valori predefiniti?",
"apiURLResetDialogText": "Sicuro di voler ripristinare l'URL API al valore predefinito?", "apiURLResetDialogText": "Sicuro di voler ripristinare l'URL API al valore predefinito?",
"sourcesUpdateNote": "Nota: le patch saranno aggiornate automaticamente all'ultima versione.\n\nQuesto rivelerà il tuo indirizzo IP al server.", "sourcesUpdateNote": "Nota: Questo scaricherà automaticamente ReVanced Patches e ReVanced Integrations dalle sorgenti alternative.\n\nQuesto ti collegherà alla sorgente alternativa.",
"apiURLLabel": "URL API", "apiURLLabel": "URL API",
"apiURLHint": "Configura l'URL dell'API da usare", "apiURLHint": "Configura l'URL API di ReVanced Manager",
"selectApiURL": "URL API", "selectApiURL": "URL API",
"hostRepositoryLabel": "API del repository",
"orgPatchesLabel": "Organizzazione Patch", "orgPatchesLabel": "Organizzazione Patch",
"sourcesPatchesLabel": "Sorgente Patch", "sourcesPatchesLabel": "Sorgente Patch",
"orgIntegrationsLabel": "Organizzazione Integrazioni", "orgIntegrationsLabel": "Organizzazione Integrazioni",

View File

@@ -1,8 +1,11 @@
{ {
"okButton": "OK", "okButton": "OK",
"cancelButton": "キャンセル", "cancelButton": "キャンセル",
"dismissButton": "取り消し",
"quitButton": "中止", "quitButton": "中止",
"updateButton": "更新", "updateButton": "更新",
"enabledLabel": "有効",
"disabledLabel": "無効",
"installed": "インストール済み: ${version}", "installed": "インストール済み: ${version}",
"suggested": "推奨: ${version}", "suggested": "推奨: ${version}",
"yesButton": "はい", "yesButton": "はい",
@@ -13,6 +16,8 @@
"noShowAgain": "今後は表示しない", "noShowAgain": "今後は表示しない",
"add": "追加", "add": "追加",
"remove": "削除", "remove": "削除",
"showChangelogButton": "更新履歴を確認",
"showUpdateButton": "アップデート内容を見せる",
"navigationView": { "navigationView": {
"dashboardTab": "一覧", "dashboardTab": "一覧",
"patcherTab": "パッチャー", "patcherTab": "パッチャー",
@@ -23,11 +28,25 @@
"widgetTitle": "一覧", "widgetTitle": "一覧",
"updatesSubtitle": "更新", "updatesSubtitle": "更新",
"patchedSubtitle": "パッチ適用済みのアプリ", "patchedSubtitle": "パッチ適用済みのアプリ",
"changeLaterSubtitle": "この設定はあとでも変更できます",
"noUpdates": "利用可能なアップデートはありません", "noUpdates": "利用可能なアップデートはありません",
"WIP": "制作中",
"noInstallations": "パッチ済みのアプリはインストールされていません", "noInstallations": "パッチ済みのアプリはインストールされていません",
"installUpdate": "更新を適用しますか?", "installUpdate": "更新を適用しますか?",
"updateSheetTitle": "ReVanced Managerをアップデート",
"updateDialogTitle": "新しいアップデートが利用可能",
"updatePatchesSheetTitle": "ReVancedパッチを更新",
"updateChangelogTitle": "変更履歴", "updateChangelogTitle": "変更履歴",
"updateDialogText": "新しいアップデートが${file} 向けにあります。\n現在のインストールされているバージョンは${version} です。",
"downloadConsentDialogTitle": "必要なファイルをダウンロードしますか?",
"downloadConsentDialogText": "ReVanced Managerは正常に動作するために必要なファイルをダウンロードする必要があります。",
"downloadConsentDialogText2": "これにより${url} に接続します",
"checkUpdateDialogTitle": "アップデートを確認しますか?",
"checkUpdateDialogText": "ReVanced Managerのアップデートを自動チェックしますか?",
"notificationTitle": "アップデートをダウンロードしました",
"notificationText": "タップしてアップデートをインストール",
"downloadingMessage": "更新データをダウンロードしています...", "downloadingMessage": "更新データをダウンロードしています...",
"downloadedMessage": "アップデートのダウンロードが完了しました",
"installingMessage": "更新を適用しています...", "installingMessage": "更新を適用しています...",
"errorDownloadMessage": "更新データをダウンロードできません", "errorDownloadMessage": "更新データをダウンロードできません",
"errorInstallMessage": "更新を適用できませんでした", "errorInstallMessage": "更新を適用できませんでした",
@@ -39,17 +58,26 @@
}, },
"latestCommitCard": { "latestCommitCard": {
"loadingLabel": "読み込み中...", "loadingLabel": "読み込み中...",
"timeagoLabel": "${time} 前" "timeagoLabel": "${time} 前",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "アップデートマネージャー"
}, },
"patcherView": { "patcherView": {
"widgetTitle": "パッチャー", "widgetTitle": "パッチャー",
"patchButton": "パッチ", "patchButton": "パッチ",
"armv7WarningDialogText": "ARMv7デバイスではパッチがサポートされていません。失敗する可能性がありますが、続行しますか?",
"removedPatchesWarningDialogText": "以下のパッチはもう使用できません。\n\n${patches}\n\n続行しますか?",
"requiredOptionDialogText": "一部のパッチオプションを設定する必要があります。" "requiredOptionDialogText": "一部のパッチオプションを設定する必要があります。"
}, },
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "アプリを選択",
"widgetTitleSelected": "選択済のアプリ",
"widgetSubtitle": "アプリが選択されていません",
"noAppsLabel": "アプリが見つかりません", "noAppsLabel": "アプリが見つかりません",
"currentVersion": "選択", "currentVersion": "選択",
"suggestedVersion": "推奨" "suggestedVersion": "推奨",
"anyVersion": "任意のバージョン"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "パッチを選択", "widgetTitle": "パッチを選択",
@@ -62,11 +90,15 @@
"widgetSubtitle": "私たちは活動しています!" "widgetSubtitle": "私たちは活動しています!"
}, },
"appSelectorView": { "appSelectorView": {
"viewTitle": "アプリを選択",
"searchBarHint": "アプリを検索",
"storageButton": "APKを選択", "storageButton": "APKを選択",
"selectFromStorageButton": "ストレージから選択", "selectFromStorageButton": "ストレージから選択",
"errorMessage": "選択されたアプリは使用できません", "errorMessage": "選択されたアプリは使用できません",
"downloadToast": "現在、ダウンロード機能は利用できません", "downloadToast": "現在、ダウンロード機能は利用できません",
"featureNotAvailable": "この機能は未実装です" "requireSuggestedAppVersionDialogText": "選択されたアプリのバージョンは推奨バージョン外です。\n推奨バージョンのアプリを選択してください。\n選択されたバージョン ${selected}\n推奨バージョン ${suggested}\n\n選択されたバージョンを使用する場合、設定から「推奨バージョンの使用を強制」を無効にしてください。",
"featureNotAvailable": "この機能は未実装です",
"featureNotAvailableText": "このアプリは分割された APK であり、root 権限でマウントすることによってのみ確実にパッチを適用してインストールできます。 ただし、ストレージから選択することで完全な APK をパッチしてインストールすることができます。"
}, },
"patchesSelectorView": { "patchesSelectorView": {
"viewTitle": "パッチを選択", "viewTitle": "パッチを選択",
@@ -75,7 +107,9 @@
"newPatches": "新しいパッチ", "newPatches": "新しいパッチ",
"patches": "パッチ", "patches": "パッチ",
"doneButton": "完了", "doneButton": "完了",
"defaultChip": "既定",
"defaultTooltip": "すべてのデフォルトのパッチを選択", "defaultTooltip": "すべてのデフォルトのパッチを選択",
"noneChip": "なし",
"noneTooltip": "すべてのパッチの選択を解除", "noneTooltip": "すべてのパッチの選択を解除",
"loadPatchesSelection": "パッチの選択を読み込む", "loadPatchesSelection": "パッチの選択を読み込む",
"noSavedPatches": "選択したアプリに保存されたパッチはありません。\n「完了」を押して現在の選択を保存します。", "noSavedPatches": "選択したアプリに保存されたパッチはありません。\n「完了」を押して現在の選択を保存します。",
@@ -99,13 +133,19 @@
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "このパッチを選択するとエラーが発生する可能性があります。\n\n現在のバージョン: ${packageVersion}\nサポートされているバージョン: ${supportedVersions}", "unsupportedDialogText": "このパッチを選択するとエラーが発生する可能性があります。\n\n現在のバージョン: ${packageVersion}\nサポートされているバージョン: ${supportedVersions}",
"unsupportedPatchVersion": "このアプリのバージョンではパッチはサポートされていません.",
"unsupportedRequiredOption": "このパッチには、このアプリではサポートされていない必須オプションが含まれています", "unsupportedRequiredOption": "このパッチには、このアプリではサポートされていない必須オプションが含まれています",
"patchesChangeWarningDialogText": "デフォルトのパッチの選択とオプションを使用することを推奨します。変更すると予期せぬ問題が発生する可能性があります。\n\nパッチの選択を続ける場合、設定で「パッチの選択の変更を許可」をオンにする必要があります。",
"patchesChangeWarningDialogButton": "デフォルトの選択を使用" "patchesChangeWarningDialogButton": "デフォルトの選択を使用"
}, },
"installerView": { "installerView": {
"widgetTitle": "インストーラー",
"installType": "インストールの種類を選択", "installType": "インストールの種類を選択",
"installTypeDescription": "インストールの種類を選択して続行します。",
"installButton": "インストール", "installButton": "インストール",
"installRootType": "マウント", "installRootType": "マウント",
"installNonRootType": "標準",
"warning": "予期しない問題を避けるため、パッチを適用したアプリの自動更新を無効にします。",
"pressBackAgain": "キャンセルするには、もう一度戻るを押してください", "pressBackAgain": "キャンセルするには、もう一度戻るを押してください",
"openButton": "開く", "openButton": "開く",
"shareButton": "ファイルを共有", "shareButton": "ファイルを共有",
@@ -124,6 +164,7 @@
"debugSectionTitle": "デバッグ", "debugSectionTitle": "デバッグ",
"advancedSectionTitle": "高度な設定", "advancedSectionTitle": "高度な設定",
"exportSectionTitle": "インポート&エクスポート", "exportSectionTitle": "インポート&エクスポート",
"dataSectionTitle": "データソース",
"themeModeLabel": "アプリのテーマ", "themeModeLabel": "アプリのテーマ",
"systemThemeLabel": "システム", "systemThemeLabel": "システム",
"lightThemeLabel": "ライト", "lightThemeLabel": "ライト",
@@ -131,16 +172,20 @@
"dynamicThemeLabel": "Material You", "dynamicThemeLabel": "Material You",
"dynamicThemeHint": "よりデバイスに近い体験が楽しめます", "dynamicThemeHint": "よりデバイスに近い体験が楽しめます",
"languageLabel": "言語", "languageLabel": "言語",
"languageUpdated": "言語が更新されました",
"englishOption": "英語", "englishOption": "英語",
"sourcesLabel": "ソース", "sourcesLabel": "他のソース",
"sourcesLabelHint": "ReVanded PatchesとReVanced Integrationsの代替ソースを設定",
"sourcesIntegrationsLabel": "Integrations のソース", "sourcesIntegrationsLabel": "Integrations のソース",
"useAlternativeSources": "他のソースを使用",
"useAlternativeSourcesHint": "APIの代わりにReVanced PatchesとReVanced Integrationsの他のソースを使用する",
"sourcesResetDialogTitle": "リセット", "sourcesResetDialogTitle": "リセット",
"sourcesResetDialogText": "ソースをデフォルト値にリセットしてもよろしいですか?", "sourcesResetDialogText": "ソースをデフォルト値にリセットしてもよろしいですか?",
"apiURLResetDialogText": "API の URL をデフォルト値にリセットしてもよろしいですか?", "apiURLResetDialogText": "API の URL をデフォルト値にリセットしてもよろしいですか?",
"sourcesUpdateNote": "注: パッチは自動的に最新バージョンにアップデートされます。\n\nこれにより、あなたの IP アドレスがサーバーに公開されます。", "sourcesUpdateNote": "注: ReVeded PatchesとReVanced Integrationsを別のソースから自動的にダウンロードします。\n\nこれにより、他のソースに接続されます。",
"apiURLLabel": "API の URL", "apiURLLabel": "API の URL",
"apiURLHint": "ReVanced ManagerのAPIのURLを設定する",
"selectApiURL": "API の URL", "selectApiURL": "API の URL",
"hostRepositoryLabel": "リポジトリ API",
"orgPatchesLabel": "パッチの組織", "orgPatchesLabel": "パッチの組織",
"sourcesPatchesLabel": "パッチのソース", "sourcesPatchesLabel": "パッチのソース",
"orgIntegrationsLabel": "Integrations の組織", "orgIntegrationsLabel": "Integrations の組織",
@@ -149,10 +194,13 @@
"logsLabel": "ログを共有", "logsLabel": "ログを共有",
"logsHint": "ReVanced Manager のログを共有します", "logsHint": "ReVanced Manager のログを共有します",
"enablePatchesSelectionLabel": "パッチの選択の変更を許可", "enablePatchesSelectionLabel": "パッチの選択の変更を許可",
"enablePatchesSelectionHint": "パッチの選択と解除を防止しない",
"enablePatchesSelectionWarningText": "パッチの選択を変更すると、予期せぬ問題が起こる可能性があります。\n\n有効にしますか", "enablePatchesSelectionWarningText": "パッチの選択を変更すると、予期せぬ問題が起こる可能性があります。\n\n有効にしますか",
"disablePatchesSelectionWarningText": "パッチの選択の変更を無効にしようとしています。\nデフォルトのパッチの選択が復元されます。\n\n無効にしますか", "disablePatchesSelectionWarningText": "パッチの選択の変更を無効にしようとしています。\nデフォルトのパッチの選択が復元されます。\n\n無効にしますか",
"autoUpdatePatchesLabel": "パッチの自動アップデート", "autoUpdatePatchesLabel": "パッチの自動アップデート",
"autoUpdatePatchesHint": "パッチを自動的に最新バージョンに更新します", "autoUpdatePatchesHint": "パッチを自動的に最新バージョンに更新します",
"showUpdateDialogLabel": "更新ダイアログを表示",
"showUpdateDialogHint": "新しいアップデートが利用可能な場合にダイアログを表示する",
"universalPatchesLabel": "共通パッチの表示", "universalPatchesLabel": "共通パッチの表示",
"universalPatchesHint": "すべてのアプリと共通パッチを表示します (アプリのリストの読み込みが遅くなる可能性があります)", "universalPatchesHint": "すべてのアプリと共通パッチを表示します (アプリのリストの読み込みが遅くなる可能性があります)",
"versionCompatibilityCheckLabel": "バージョンの互換性チェック", "versionCompatibilityCheckLabel": "バージョンの互換性チェック",

View File

@@ -8,7 +8,7 @@
"disabledLabel": "비활성화됨", "disabledLabel": "비활성화됨",
"installed": "설치된 앱 버전: ${version}", "installed": "설치된 앱 버전: ${version}",
"suggested": "권장 앱 버전: ${version}", "suggested": "권장 앱 버전: ${version}",
"yesButton": "", "yesButton": "",
"noButton": "아니요", "noButton": "아니요",
"warning": "경고", "warning": "경고",
"options": "옵션", "options": "옵션",
@@ -16,7 +16,7 @@
"noShowAgain": "다시 보지 않기", "noShowAgain": "다시 보지 않기",
"add": "추가", "add": "추가",
"remove": "제거", "remove": "제거",
"showChangelogButton": "변경 내역 보기", "showChangelogButton": "변경 사항 보기",
"showUpdateButton": "업데이트 보기", "showUpdateButton": "업데이트 보기",
"navigationView": { "navigationView": {
"dashboardTab": "대시보드", "dashboardTab": "대시보드",
@@ -27,14 +27,14 @@
"refreshSuccess": "새로고침을 성공했습니다.", "refreshSuccess": "새로고침을 성공했습니다.",
"widgetTitle": "대시보드", "widgetTitle": "대시보드",
"updatesSubtitle": "업데이트", "updatesSubtitle": "업데이트",
"patchedSubtitle": "패치한 앱", "patchedSubtitle": "설치된 앱",
"changeLaterSubtitle": "나중에 설정에서 바꿀 수 있습니다.", "changeLaterSubtitle": "나중에 설정에서 바꿀 수 있습니다.",
"noUpdates": "새 업데이트가 없습니다", "noUpdates": "새 업데이트가 없습니다.",
"WIP": "개발 중 입니다...", "WIP": "개발 중 입니다...",
"noInstallations": "패치된 앱이 설치되지 않았습니다.", "noInstallations": "아직 설치된 ReVanced 앱이 없습니다.",
"installUpdate": "업데이트를 계속 설치하겠습니까?", "installUpdate": "업데이트를 계속 설치하겠습니까?",
"updateSheetTitle": "ReVanced Manager 업데이트", "updateSheetTitle": "ReVanced Manager 업데이트",
"updateDialogTitle": "새 업데이트가 있습니다", "updateDialogTitle": "새 업데이트가 있습니다.",
"updatePatchesSheetTitle": "ReVanced 패치 업데이트", "updatePatchesSheetTitle": "ReVanced 패치 업데이트",
"updateChangelogTitle": "변경 사항", "updateChangelogTitle": "변경 사항",
"updateDialogText": "'${file}'에 대한 새 업데이트를 할 수 있습니다.\n\n현재 설치된 버전은 '${version}'입니다.", "updateDialogText": "'${file}'에 대한 새 업데이트를 할 수 있습니다.\n\n현재 설치된 버전은 '${version}'입니다.",
@@ -46,7 +46,7 @@
"notificationTitle": "업데이트를 다운로드했습니다.", "notificationTitle": "업데이트를 다운로드했습니다.",
"notificationText": "업데이트를 설치하려면 탭하세요.", "notificationText": "업데이트를 설치하려면 탭하세요.",
"downloadingMessage": "업데이트 다운로드 중...", "downloadingMessage": "업데이트 다운로드 중...",
"downloadedMessage": "업데이트 다운로드 완료", "downloadedMessage": "업데이트 다운로드 완료했습니다.",
"installingMessage": "업데이트 설치 중...", "installingMessage": "업데이트 설치 중...",
"errorDownloadMessage": "업데이트를 다운로드할 수 없습니다.", "errorDownloadMessage": "업데이트를 다운로드할 수 없습니다.",
"errorInstallMessage": "업데이트를 설치할 수 없습니다.", "errorInstallMessage": "업데이트를 설치할 수 없습니다.",
@@ -75,14 +75,14 @@
"widgetTitleSelected": "선택한 앱", "widgetTitleSelected": "선택한 앱",
"widgetSubtitle": "선택한 앱이 없습니다.", "widgetSubtitle": "선택한 앱이 없습니다.",
"noAppsLabel": "앱이 발견되지 않음", "noAppsLabel": "앱이 발견되지 않음",
"currentVersion": "현재 버전", "currentVersion": "현재 버전",
"suggestedVersion": "권장", "suggestedVersion": "권장 앱 버전",
"anyVersion": "모든 버전" "anyVersion": "모든 버전"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "패치 선택하기", "widgetTitle": "패치 선택하기",
"widgetTitleSelected": "선택한 패치", "widgetTitleSelected": "선택한 패치",
"widgetSubtitle": "앱을 먼저 선택하세요.", "widgetSubtitle": "먼저 앱을 선택하세요.",
"widgetEmptySubtitle": "선택한 패치가 없습니다." "widgetEmptySubtitle": "선택한 패치가 없습니다."
}, },
"socialMediaCard": { "socialMediaCard": {
@@ -94,17 +94,17 @@
"searchBarHint": "앱 검색하기", "searchBarHint": "앱 검색하기",
"storageButton": "기기 저장소", "storageButton": "기기 저장소",
"selectFromStorageButton": "기기 저장소에서 선택", "selectFromStorageButton": "기기 저장소에서 선택",
"errorMessage": "선택한 앱을 사용할 수 없", "errorMessage": "선택한 앱을 사용할 수 없습니다.",
"downloadToast": "다운로드 기능은 아직 사용할 수 없습니다", "downloadToast": "다운로드 기능은 아직 사용할 수 없습니다.",
"requireSuggestedAppVersionDialogText": "선택한 앱 버전이 권장 버전과 일치하지 않아 예기치 않은 문제가 발생할 수 있습니다. 권장 앱 버전을 사용하세요.\n\n선택한 앱 버전: ${selected}\n권장 앱 버전: ${suggested}\n\n계속하려면 설정에서 '권장 앱 버전 요구'를 비활성화하세요.", "requireSuggestedAppVersionDialogText": "선택한 앱 버전이 권장 버전과 일치하지 않아 예기치 않은 문제가 발생할 수 있습니다. 권장 앱 버전을 사용하세요.\n\n선택한 앱 버전: ${selected}\n권장 앱 버전: ${suggested}\n\n계속하려면 설정에서 '권장 앱 버전 요구'를 비활성화하세요.",
"featureNotAvailable": "기능이 구현되지 않음", "featureNotAvailable": "기능이 구현되지 않음",
"featureNotAvailableText": "이 앱은 분할 APK이며 Root 권한으로 마운트해야만 안정적으로 패치 및 설치할 수 있습니다. 그러나 저장소에서 완전한 APK를 선택하여 패치 및 설치할 수 있습니다." "featureNotAvailableText": "이 앱은 분할 APK이며 Root 권한으로 마운트해야만 안정적으로 패치 및 설치할 수 있습니다. 그러나 저장소에서 완전한 APK를 선택하여 패치 및 설치할 수 있습니다."
}, },
"patchesSelectorView": { "patchesSelectorView": {
"viewTitle": "패치 선택하기", "viewTitle": "패치 선택하기",
"searchBarHint": "패치 검색하기", "searchBarHint": "패치 검색하기",
"universalPatches": "공 패치", "universalPatches": "공 패치",
"newPatches": "새로운 패치", "newPatches": "새 패치",
"patches": "패치", "patches": "패치",
"doneButton": "완료", "doneButton": "완료",
"defaultChip": "기본값", "defaultChip": "기본값",
@@ -112,7 +112,7 @@
"noneChip": "없음", "noneChip": "없음",
"noneTooltip": "모든 패치 선택 해제", "noneTooltip": "모든 패치 선택 해제",
"loadPatchesSelection": "패치 선택목록 가져오기", "loadPatchesSelection": "패치 선택목록 가져오기",
"noSavedPatches": "선택한 앱에 적용할 패치가 저장되지 않았습니다.\n완료를 눌러서 현재 선택사항을 저장하세요.", "noSavedPatches": "선택한 앱에 적용할 패치가 저장되지 않았습니다.\n완료를 눌러서 현재 선택목록을 저장하세요.",
"noPatchesFound": "선택한 앱에 대한 패치를 찾을 수 없습니다.", "noPatchesFound": "선택한 앱에 대한 패치를 찾을 수 없습니다.",
"setRequiredOption": "옵션을 설정해야 하는 패치가 있습니다:\n\n${patches}\n\n진행하기 전 설정을 마쳐주세요." "setRequiredOption": "옵션을 설정해야 하는 패치가 있습니다:\n\n${patches}\n\n진행하기 전 설정을 마쳐주세요."
}, },
@@ -127,35 +127,35 @@
"selectFilePath": "파일 경로 선택", "selectFilePath": "파일 경로 선택",
"selectFolder": "폴더 선택", "selectFolder": "폴더 선택",
"selectOption": "옵션 선택", "selectOption": "옵션 선택",
"requiredOption": "필수 옵션입니다", "requiredOption": "필수 옵션입니다.",
"unsupportedOption": "지원하지 않는 옵션입니다", "unsupportedOption": "지원하지 않는 옵션입니다.",
"requiredOptionNull": "아래 옵션들 설정되어 있어야 합니다:\n\n${options}" "requiredOptionNull": "다음 옵션들 설정되어 있어야 합니다:\n\n${options}"
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "이 패치는 오류를 발생시킬 수 있습니다.\n\n앱 버전: ${packageVersion}\n지원되는 버전:\n${supportedVersions}", "unsupportedDialogText": "이 패치는 오류를 발생시킬 수 있습니다.\n\n앱 버전: ${packageVersion}\n지원되는 버전:\n${supportedVersions}",
"unsupportedPatchVersion": "패치가 이 앱 버전을 지원하지 않습니다.", "unsupportedPatchVersion": "패치가 이 앱 버전을 지원하지 않습니다.",
"unsupportedRequiredOption": "패치에 이 앱에서 지원하지 않는 필수 옵션이 포함되어 있습니다", "unsupportedRequiredOption": "패치에 이 앱 지원하지 않는 필수 옵션이 포함되어 있습니다.",
"patchesChangeWarningDialogText": "기본 패치 선택을 사용하는 것을 권장합니다. 설정을 변경할 경우 오류의 원인이 될 수 있습니다.\n패치 선택을 변경하기 위해서는 설정에서 \"패치 선택 변경 허용\"을 야 합니다.", "patchesChangeWarningDialogText": "기본 패치 선택을 사용하는 것을 권장합니다. 설정을 변경할 경우 오류의 원인이 될 수 있습니다.\n패치 선택을 변경하기 위해서는 설정에서 \"패치 선택 변경 허용\"을 활성화해야 합니다.",
"patchesChangeWarningDialogButton": "기본 선택사항 사용" "patchesChangeWarningDialogButton": "기본 선택목록 사용"
}, },
"installerView": { "installerView": {
"widgetTitle": "설치", "widgetTitle": "설치 관리자",
"installType": "설치 유형 선택", "installType": "설치 유형 선택",
"installTypeDescription": "설치를 진행할 유형을 선택해주세요.", "installTypeDescription": "설치를 진행할 유형을 선택해주세요.",
"installButton": "설치", "installButton": "설치하기",
"installRootType": "마운트", "installRootType": "마운트",
"installNonRootType": "일반", "installNonRootType": "일반",
"warning": "패치 앱의 자동 업데이트를 꺼서 예기치 못한 오류를 예방하세요.", "warning": "패치 앱의 자동 업데이트를 꺼서 예기치 못한 오류를 예방하세요.",
"pressBackAgain": "취소하려면 뒤로가기 버튼을 다시 누르세요.", "pressBackAgain": "취소하려면 뒤로가기 버튼을 다시 누르세요.",
"openButton": "열기", "openButton": "열기",
"shareButton": "파일 공유", "shareButton": "파일 공유",
"notificationTitle": "ReVanced Manager가 패치 중입니다", "notificationTitle": "ReVanced Manager가 패치 중입니다.",
"notificationText": "설치 관리자로 돌아가려면 탭하세요.", "notificationText": "설치 관리자로 돌아가려면 탭하세요.",
"exportApkButtonTooltip": "패치한 APK 내보내기", "exportApkButtonTooltip": "패치한 APK 내보내기",
"exportLogButtonTooltip": "로그 내보내기", "exportLogButtonTooltip": "로그 내보내기",
"screenshotDetected": "스크린샷이 감지되었습니다. 로그를 공유할 목적이라면, 대신 텍스트 사본으로 공유해주세요.\n\n로그를 클립보드에 복사하시겠습니까?", "screenshotDetected": "스크린샷이 감지되었습니다. 로그를 공유할 목적이라면, 대신 텍스트 사본으로 공유해주세요.\n\n로그를 클립보드에 복사하시겠습니까?",
"copiedToClipboard": "로그를 클립보드에 복사했습니다", "copiedToClipboard": "로그를 클립보드에 복사했습니다.",
"noExit": "인스톨러가 실행 중이므로 중단할 수 없습니다..." "noExit": "설치 관리자가 실행 중이므로 중단할 수 없습니다..."
}, },
"settingsView": { "settingsView": {
"widgetTitle": "설정", "widgetTitle": "설정",
@@ -164,54 +164,56 @@
"debugSectionTitle": "디버깅", "debugSectionTitle": "디버깅",
"advancedSectionTitle": "고급 설정", "advancedSectionTitle": "고급 설정",
"exportSectionTitle": "가져오기 & 내보내기", "exportSectionTitle": "가져오기 & 내보내기",
"dataSectionTitle": "데이터 소스",
"themeModeLabel": "앱 테마", "themeModeLabel": "앱 테마",
"systemThemeLabel": "기기 테마 사용", "systemThemeLabel": "기기 테마 사용",
"lightThemeLabel": "밝은 모드", "lightThemeLabel": "밝은 테마",
"darkThemeLabel": "어두운 모드", "darkThemeLabel": "어두운 테마",
"dynamicThemeLabel": "Material You", "dynamicThemeLabel": "Material You",
"dynamicThemeHint": "당신의 기기에 더 맞는 경험을 즐겨보세요.", "dynamicThemeHint": "당신의 기기에 더 맞는 경험을 즐겨보세요.",
"languageLabel": "앱 언어", "languageLabel": "앱 언어",
"languageUpdated": "언어 업데이트 완료", "languageUpdated": "앱 언어를 변경했습니다.",
"englishOption": "영어", "englishOption": "영어",
"sourcesLabel": "소스", "sourcesLabel": "대체 소스",
"sourcesLabelHint": "패치 및 연동 항목의 소스를 설정할 수 있습니다.", "sourcesLabelHint": "ReVanced Patches 및 ReVanced Integrations 대체 소스를 설정할 수 있습니다.",
"sourcesIntegrationsLabel": "통합 기능 소스", "sourcesIntegrationsLabel": "Integrations 소스",
"useAlternativeSources": "대체 소스 사용",
"useAlternativeSourcesHint": "공식 소스가 아닌 ReVanced Patches 및 ReVanced Integrations 대체 소스를 사용합니다.",
"sourcesResetDialogTitle": "초기화", "sourcesResetDialogTitle": "초기화",
"sourcesResetDialogText": "정말 커스텀 소스를 기본값으로 되돌릴까요?", "sourcesResetDialogText": "정말 커스텀 소스를 기본값으로 되돌릴까요?",
"apiURLResetDialogText": "정말 API URL을 기본값으로 되돌릴까요?", "apiURLResetDialogText": "정말 API URL을 기본값으로 되돌릴까요?",
"sourcesUpdateNote": "안내: ReVanced 패치가 최신 버전으로 자동 업데이트됩니다.\n\nIP 주소가 서버에 노출될 수 있습니다.", "sourcesUpdateNote": "알림: 변경하면 대체 소스에서 ReVanced Patches 및 ReVanced Integrations이 자동으로 다운로드됩니다. \n\n그 이후에는 대체 소스로 연결됩니다.",
"apiURLLabel": "API 링크", "apiURLLabel": "API URL",
"apiURLHint": "사용할 API URL 설정할 수 있습니다.", "apiURLHint": "ReVanced Manager의 API URL 설정할 수 있습니다.",
"selectApiURL": "API 링크", "selectApiURL": "API URL",
"hostRepositoryLabel": "저장소 API", "orgPatchesLabel": "Patches 구성",
"orgPatchesLabel": "패치 구성", "sourcesPatchesLabel": "Patches 소스",
"sourcesPatchesLabel": "패치 소스", "orgIntegrationsLabel": "Integrations 구성",
"orgIntegrationsLabel": "통합 기능 구성",
"contributorsLabel": "도움을 주신 분들", "contributorsLabel": "도움을 주신 분들",
"contributorsHint": "ReVanced에 도움을 주신 분들", "contributorsHint": "ReVanced 개발에 도움을 주신 분들",
"logsLabel": "로그 공유하기", "logsLabel": "로그 공유하기",
"logsHint": "ReVanced Manager 로그를 공유합니다.", "logsHint": "수집된 ReVanced Manager 로그를 공유합니다.",
"enablePatchesSelectionLabel": "패치 선택 변경 허용", "enablePatchesSelectionLabel": "패치 선택 변경 허용",
"enablePatchesSelectionHint": "패치를 선택하거나 선택 해제할 수 있습니다.", "enablePatchesSelectionHint": "패치를 선택하거나 선택 해제할 수 있습니다.",
"enablePatchesSelectionWarningText": "패치의 기본 선택을 바꾸는 경우 예상치 못한 문제가 발생할 수 있습니다.\n\n그래도 활성화하시겠습니까?", "enablePatchesSelectionWarningText": "패치의 기본 선택을 바꾸는 경우 예상치 못한 문제가 발생할 수 있습니다.\n\n그래도 활성화하시겠습니까?",
"disablePatchesSelectionWarningText": "패치 선택 변경을 비활성화하려 합니다.\n패치의 기본 선택사항이 복원될 것입니다.\n\n그래도 비활성화하시겠습니까?", "disablePatchesSelectionWarningText": "패치 선택 변경을 비활성화하려 합니다.\n패치의 기본 선택목록이 복원될 것입니다.\n\n그래도 비활성화하시겠습니까?",
"autoUpdatePatchesLabel": "패치 자동 업데이트", "autoUpdatePatchesLabel": "패치 자동 업데이트",
"autoUpdatePatchesHint": "자동으로 패치를 최신 버전으로 업데이트합니다.", "autoUpdatePatchesHint": "자동으로 패치를 최신 버전으로 업데이트합니다.",
"showUpdateDialogLabel": "업데이트 창 보기", "showUpdateDialogLabel": "업데이트 팝업창 보기",
"showUpdateDialogHint": "새 업데이트가 있으면 창으로 표시합니다", "showUpdateDialogHint": "새 업데이트가 있으면 팝업창을 표시합니다.",
"universalPatchesLabel": "공 패치 표시", "universalPatchesLabel": "공 패치 보기",
"universalPatchesHint": "모든 앱과 공 패치를 표시합니다. (앱 목록이 느려질 수 있음)", "universalPatchesHint": "기기에 설치된 모든 앱과 공 패치를 표시합니다. (앱 목록이 느려질 수 있음)",
"versionCompatibilityCheckLabel": "버전 호환성 체크", "versionCompatibilityCheckLabel": "버전 호환성 체크",
"versionCompatibilityCheckHint": "선택한 앱 버전과 호환되지 않는 패치를 선택할 수 없습니다.", "versionCompatibilityCheckHint": "선택한 앱 버전과 호환되지 않는 패치를 선택할 수 없습니다.",
"requireSuggestedAppVersionLabel": "권장 앱 버전 요구", "requireSuggestedAppVersionLabel": "권장 앱 버전 요구",
"requireSuggestedAppVersionHint": "권장되지 않은 버전의 앱을 선택할 수 없습니다.", "requireSuggestedAppVersionHint": "권장되지 않은 앱 버전은 선택할 수 없습니다.",
"requireSuggestedAppVersionDialogText": "권장 버전이 아닌 앱을 선택하는 경우 예상치 못한 문제가 발생할 수 있습니다.\n\n그래도 계속 진행하시겠습니까?", "requireSuggestedAppVersionDialogText": "권장 버전이 아닌 앱을 선택하는 경우 예상치 못한 문제가 발생할 수 있습니다.\n\n그래도 계속 진행하시겠습니까?",
"aboutLabel": "정보", "aboutLabel": "정보",
"snackbarMessage": "클립보드에 복사", "snackbarMessage": "클립보드에 복사했습니다.",
"restartAppForChanges": "변경 사항을 적용하려면 앱을 다시 시작하세요", "restartAppForChanges": "변경 사항을 적용하려면 앱을 다시 시작하세요.",
"deleteTempDirLabel": "임시 파일 제거", "deleteTempDirLabel": "임시 파일 제거",
"deleteTempDirHint": "사용하지 않는 임시 파일을 제거합니다", "deleteTempDirHint": "사용하지 않는 임시 파일을 제거합니다.",
"deletedTempDir": "임시 파일을 제거", "deletedTempDir": "임시 파일을 제거했습니다.",
"exportPatchesLabel": "패치 선택목록 내보내기", "exportPatchesLabel": "패치 선택목록 내보내기",
"exportPatchesHint": "패치 선택목록을 JSON 파일로 내보냅니다.", "exportPatchesHint": "패치 선택목록을 JSON 파일로 내보냅니다.",
"exportedPatches": "패치 선택목록을 내보냄", "exportedPatches": "패치 선택목록을 내보냄",
@@ -221,38 +223,38 @@
"importedPatches": "패치 선택목록을 불러옴", "importedPatches": "패치 선택목록을 불러옴",
"resetStoredPatchesLabel": "패치 선택목록 초기화", "resetStoredPatchesLabel": "패치 선택목록 초기화",
"resetStoredPatchesHint": "저장된 패치 선택목록을 초기화합니다.", "resetStoredPatchesHint": "저장된 패치 선택목록을 초기화합니다.",
"resetStoredPatchesDialogTitle": "패치 선택 사항을 초기화하시겠습니까?", "resetStoredPatchesDialogTitle": "패치 선택목록을 초기화하시겠습니까?",
"resetStoredPatchesDialogText": "패치 기본 선택 사항으로 복원니다.", "resetStoredPatchesDialogText": "패치 기본 선택목록으로 복원니다.",
"resetStoredPatches": "패치 선택 사항이 초기화되었습니다", "resetStoredPatches": "패치 선택목록을 초기화습니다.",
"resetStoredOptionsLabel": "패치 옵션 초기화", "resetStoredOptionsLabel": "패치 옵션 초기화",
"resetStoredOptionsHint": "모든 패치 옵션을 초기화합니다.", "resetStoredOptionsHint": "모든 패치 옵션을 초기화합니다.",
"resetStoredOptionsDialogTitle": "패치 옵션을 초기화하시겠습니까?", "resetStoredOptionsDialogTitle": "패치 옵션을 초기화하시겠습니까?",
"resetStoredOptionsDialogText": "패치 옵션을 초기화하면 저장한 모든 옵션이 제거됩니다.", "resetStoredOptionsDialogText": "패치 옵션을 초기화하면 저장한 모든 옵션이 제거됩니다.",
"resetStoredOptions": "설정을 초기화했습니다", "resetStoredOptions": "설정을 초기화했습니다.",
"deleteLogsLabel": "로그 제거", "deleteLogsLabel": "로그 제거하기",
"deleteLogsHint": "수집된 ReVanced Manager 로그를 제거합니다.", "deleteLogsHint": "수집된 ReVanced Manager 로그를 제거합니다.",
"deletedLogs": "제거된 로그", "deletedLogs": "로그를 제거했습니다.",
"regenerateKeystoreLabel": "키스토어 재생성", "regenerateKeystoreLabel": "키스토어 재생성",
"regenerateKeystoreHint": "앱을 서명할 때 사용 키스토어를 재생성합니다.", "regenerateKeystoreHint": "앱을 서명할 때 사용 키스토어를 재생성합니다.",
"regenerateKeystoreDialogTitle": "키스토어를 재생성하시겠습니까?", "regenerateKeystoreDialogTitle": "키스토어를 재생성하시겠습니까?",
"regenerateKeystoreDialogText": "기존 키스토어로 서명한 패치된 앱을 더 이상 업데이트할 수 없게 됩니다.", "regenerateKeystoreDialogText": "기존 키스토어로 서명한 패치된 앱을 더 이상 업데이트할 수 없게 됩니다.",
"regeneratedKeystore": "키스토어 재생성 완료", "regeneratedKeystore": "키스토어 재생성 완료",
"exportKeystoreLabel": "키스토어 내보내기", "exportKeystoreLabel": "키스토어 내보내기",
"exportKeystoreHint": "앱을 서명할 때 키스토어를 내보냅니다.", "exportKeystoreHint": "앱을 서명할 때 사용한 키스토어를 내보냅니다.",
"exportedKeystore": "키스토어 내보냄", "exportedKeystore": "키스토어 내보냄",
"noKeystoreExportFileFound": "내보낼 키스토어가 없", "noKeystoreExportFileFound": "내보낼 키스토어가 없습니다.",
"importKeystoreLabel": "키스토어 가져오기", "importKeystoreLabel": "키스토어 가져오기",
"importKeystoreHint": "앱을 서명할 때 키스토어를 가져옵니다.", "importKeystoreHint": "앱을 서명할 때 사용한 키스토어를 가져옵니다.",
"importedKeystore": "키스토어 가져옴", "importedKeystore": "키스토어 가져옴",
"selectKeystorePassword": "키스토어 비밀번호", "selectKeystorePassword": "키스토어 비밀번호",
"selectKeystorePasswordHint": "앱 서명 사용한 키스토어 비밀번호를 선택하세요", "selectKeystorePasswordHint": "앱 서명할 때 사용한 키스토어 비밀번호를 선택하세요.",
"jsonSelectorErrorMessage": "선택한 JSON 파일을 사용할 수 없", "jsonSelectorErrorMessage": "선택한 JSON 파일을 사용할 수 없습니다.",
"keystoreSelectorErrorMessage": "선택한 키스토어 파일을 사용할 수 없습니다" "keystoreSelectorErrorMessage": "선택한 키스토어 파일을 사용할 수 없습니다."
}, },
"appInfoView": { "appInfoView": {
"widgetTitle": "앱 정보", "widgetTitle": "앱 정보",
"openButton": "열기", "openButton": "열기",
"uninstallButton": "제거", "uninstallButton": "제거하기",
"unmountButton": "마운트 해제", "unmountButton": "마운트 해제",
"rootDialogTitle": "오류", "rootDialogTitle": "오류",
"unmountDialogText": "이 앱의 마운트를 해제할까요?", "unmountDialogText": "이 앱의 마운트를 해제할까요?",
@@ -266,40 +268,40 @@
"appliedPatchesLabel": "적용한 패치", "appliedPatchesLabel": "적용한 패치",
"patchedDateHint": "${date} ${time}", "patchedDateHint": "${date} ${time}",
"appliedPatchesHint": "적용한 패치 ${quantity}개", "appliedPatchesHint": "적용한 패치 ${quantity}개",
"updateNotImplemented": "이 기능은 아직 구현되지 않았습니다" "updateNotImplemented": "이 기능은 아직 구현되지 않았습니다."
}, },
"contributorsView": { "contributorsView": {
"widgetTitle": "도움을 주신 분들", "widgetTitle": "도움을 주신 분들",
"patcherContributors": "ReVanced 패처", "patcherContributors": "ReVanced Patcher",
"patchesContributors": "ReVanced 패치", "patchesContributors": "ReVanced Patches",
"integrationsContributors": "ReVanced 연동 기능", "integrationsContributors": "ReVanced Integrations",
"cliContributors": "ReVanced CLI", "cliContributors": "ReVanced CLI",
"managerContributors": "ReVanced Manager" "managerContributors": "ReVanced Manager"
}, },
"installErrorDialog": { "installErrorDialog": {
"mount_version_mismatch": "버전 불일치", "mount_version_mismatch": "버전 불일치",
"mount_no_root": "루트 권한 없", "mount_no_root": "Root 권한습니다.",
"mount_missing_installation": "설치 대상을 찾을 수 없", "mount_missing_installation": "설치 대상을 찾을 수 없습니다.",
"status_failure_blocked": "설치 차단됨", "status_failure_blocked": "설치 차단됨",
"install_failed_verification_failure": "인증 실패", "install_failed_verification_failure": "인증 실패",
"status_failure_invalid": "설치가 유효하지 않", "status_failure_invalid": "설치가 유효하지 않습니다.",
"install_failed_version_downgrade": "다운그레이드 불가능", "install_failed_version_downgrade": "다운그레이드 불가능",
"status_failure_conflict": "설치 충돌됨", "status_failure_conflict": "설치 충돌됨",
"status_failure_storage": "설치 저장공간 문제", "status_failure_storage": "설치 저장공간 문제",
"status_failure_incompatible": "설치 미호환", "status_failure_incompatible": "설치 미호환",
"status_failure_timeout": "설치 시간 초과", "status_failure_timeout": "설치 시간 초과",
"status_unknown": "설치 실패", "status_unknown": "설치 실패",
"mount_version_mismatch_description": "패치 앱과 설치된 앱의 버전이 달라 설치에 실패했습니다.\n\n마운트하고 있는 앱의 버전으로 설치한 뒤 다시 시도하세요.", "mount_version_mismatch_description": "패치 앱과 설치된 앱의 버전이 달라 설치에 실패했습니다.\n\n마운트하고 있는 앱의 버전으로 설치한 뒤 다시 시도하세요.",
"mount_no_root_description": "루트 권한이 주어지지 않아 설치에 실패했습니다.\n\nReVanced Manager에 루트 권한을 부여한 뒤 다시 시도하세요.", "mount_no_root_description": "Root 권한이 주어지지 않아 설치에 실패했습니다.\n\nReVanced Manager에 Root 권한을 부여한 뒤 다시 시도하세요.",
"mount_missing_installation_description": "패치되지 않은 앱이 이 기기에 설치되지 않아서 마운트를 진행할 수 없어 설치에 실패했습니다.\n\n마운트하기 전 패치되지 않은 앱을 설치한 뒤 다시 시도하세요.", "mount_missing_installation_description": "패치되지 않은 앱이 이 기기에 설치되지 않아서 마운트를 진행할 수 없어 설치에 실패했습니다.\n\n마운트하기 전 패치되지 않은 앱을 설치한 뒤 다시 시도하세요.",
"status_failure_timeout_description": "설치하는 데 시간이 너무 오래 걸립니다.\n\n다시 시도할까요?", "status_failure_timeout_description": "설치하는 데 시간이 너무 오래 걸립니다.\n\n다시 시도할까요?",
"status_failure_storage_description": "저장공간이 충분하지 않아 설치에 실패했습니다.\n\n저장공간을 확보한 뒤 다시 시도하세요.", "status_failure_storage_description": "저장공간이 충분하지 않아 설치에 실패했습니다.\n\n저장공간을 확보한 뒤 다시 시도하세요.",
"status_failure_invalid_description": "패치된 앱이 유효하지 않아 설치에 실패했습니다.\n\n앱을 제거하고 다시 시도할까요?", "status_failure_invalid_description": "패치된 앱이 유효하지 않아 설치에 실패했습니다.\n\n앱을 제거하고 다시 시도할까요?",
"status_failure_incompatible_description": "앱이 기기와 호환되지 않습니다.\n\n앱 개발자에게 문의하여 도움을 요청해 보세요.", "status_failure_incompatible_description": "앱이 기기와 호환되지 않습니다.\n\n앱 개발자에게 문의하여 도움을 요청해 보세요.",
"status_failure_conflict_description": "기존에 설치된 앱이 설치를 방해했습니다.\n\n설치된 앱을 지우고 다시 시도할까요?", "status_failure_conflict_description": "기존에 설치된 앱이 설치를 방해했습니다.\n\n설치된 앱을 지우고 다시 시도할까요?",
"status_failure_blocked_description": "설치가 ${packageName}에 의해 차단되었습니다.\n\n보안 설정을 조정한 뒤 다시 시도하세요.", "status_failure_blocked_description": "설치가 '${packageName}'에 의해 차단되었습니다.\n\n보안 설정을 조정한 뒤 다시 시도하세요.",
"install_failed_verification_failure_description": "인증 문제로 인해 설치에 실패했습니다.\n\n보안 설정을 조정한 뒤 다시 시도하세요.", "install_failed_verification_failure_description": "인증 문제로 인해 설치에 실패했습니다.\n\n보안 설정을 조정한 뒤 다시 시도하세요.",
"install_failed_version_downgrade_description": "패치 앱의 버전이 설치된 앱의 버전보다 낮아 설치에 실패했습니다.\n\n앱을 제거하고 다시 시도할까요?", "install_failed_version_downgrade_description": "패치 앱의 버전이 설치된 앱의 버전보다 낮아 설치에 실패했습니다.\n\n앱을 제거하고 다시 시도할까요?",
"status_unknown_description": "알 수 없는 이유로 설치에 실패했습니다. 다시 시도하세요." "status_unknown_description": "알 수 없는 이유로 설치에 실패했습니다. 다시 시도하세요."
} }
} }

View File

@@ -128,15 +128,12 @@
"dynamicThemeLabel": "Material You", "dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Mėgaukis patirtimi artimiau tavo įrenginiui", "dynamicThemeHint": "Mėgaukis patirtimi artimiau tavo įrenginiui",
"languageLabel": "Kalba", "languageLabel": "Kalba",
"sourcesLabel": "Šaltiniai",
"sourcesIntegrationsLabel": "Integracijų šaltinis", "sourcesIntegrationsLabel": "Integracijų šaltinis",
"sourcesResetDialogTitle": "Nustatyti iš naujo", "sourcesResetDialogTitle": "Nustatyti iš naujo",
"sourcesResetDialogText": "Ar tikrai norite iš naujo nustatyti savo šaltinius į numatytąsias vertes?", "sourcesResetDialogText": "Ar tikrai norite iš naujo nustatyti savo šaltinius į numatytąsias vertes?",
"apiURLResetDialogText": "Ar tikrai norite iš naujo nustatyti savo API URL adresą į numatytąją vertę?", "apiURLResetDialogText": "Ar tikrai norite iš naujo nustatyti savo API URL adresą į numatytąją vertę?",
"sourcesUpdateNote": "Pastaba: pataisymai į naujausią versiją bus atnaujinti automatiškai.\n\nTai atskleis jūsų IP adresą serveriui.",
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"hostRepositoryLabel": "API saugykla",
"orgPatchesLabel": "Modifikacijų organizacija", "orgPatchesLabel": "Modifikacijų organizacija",
"sourcesPatchesLabel": "Modifikacijų šaltinis", "sourcesPatchesLabel": "Modifikacijų šaltinis",
"orgIntegrationsLabel": "Integracijų organizacija", "orgIntegrationsLabel": "Integracijų organizacija",

View File

@@ -100,12 +100,10 @@
"dynamicThemeLabel": "Materiāls izskats", "dynamicThemeLabel": "Materiāls izskats",
"dynamicThemeHint": "Izbaudi pieredzi personalizētu tavai ierīcei", "dynamicThemeHint": "Izbaudi pieredzi personalizētu tavai ierīcei",
"languageLabel": "Valoda", "languageLabel": "Valoda",
"sourcesLabel": "Avoti",
"sourcesIntegrationsLabel": "Integrācijas avots", "sourcesIntegrationsLabel": "Integrācijas avots",
"sourcesResetDialogTitle": "Atiestatīt", "sourcesResetDialogTitle": "Atiestatīt",
"apiURLLabel": "API Saite", "apiURLLabel": "API Saite",
"selectApiURL": "API Saite", "selectApiURL": "API Saite",
"hostRepositoryLabel": "Repozitorija API",
"orgPatchesLabel": "Paču autori", "orgPatchesLabel": "Paču autori",
"sourcesPatchesLabel": "Paču avots", "sourcesPatchesLabel": "Paču avots",
"orgIntegrationsLabel": "Integrāciju autori", "orgIntegrationsLabel": "Integrāciju autori",

View File

@@ -16,6 +16,8 @@
"noShowAgain": "Niet meer tonen", "noShowAgain": "Niet meer tonen",
"add": "Voeg toe", "add": "Voeg toe",
"remove": "Verwijderen", "remove": "Verwijderen",
"showChangelogButton": "Wijzigingslogboek tonen",
"showUpdateButton": "Update weergeven",
"navigationView": { "navigationView": {
"dashboardTab": "Overzicht", "dashboardTab": "Overzicht",
"patcherTab": "Patcher", "patcherTab": "Patcher",
@@ -26,14 +28,25 @@
"widgetTitle": "Overzicht", "widgetTitle": "Overzicht",
"updatesSubtitle": "Updates", "updatesSubtitle": "Updates",
"patchedSubtitle": "Gepatchte applicaties", "patchedSubtitle": "Gepatchte applicaties",
"changeLaterSubtitle": "U kunt dit op een later moment wijzigen in de instellingen.",
"noUpdates": "Geen updates beschikbaar", "noUpdates": "Geen updates beschikbaar",
"WIP": "Bezig met uitvoeren...", "WIP": "Bezig met uitvoeren...",
"noInstallations": "Geen gepatchte applicaties geïnstalleerd", "noInstallations": "Geen gepatchte applicaties geïnstalleerd",
"installUpdate": "Doorgaan met het installeren van de update?", "installUpdate": "Doorgaan met het installeren van de update?",
"updateSheetTitle": "Update ReVanced Manager",
"updateDialogTitle": "Nieuwe update beschikbaar",
"updatePatchesSheetTitle": "Update ReVanced Patches",
"updateChangelogTitle": "Wijzigingslogboek", "updateChangelogTitle": "Wijzigingslogboek",
"updateDialogText": "Er is een nieuwe update beschikbaar voor ${file}.\n\nDe momenteel geïnstalleerde versie is ${version}.",
"downloadConsentDialogTitle": "Download de benodigde bestanden?",
"downloadConsentDialogText": "ReVanced Manager moet de benodigde bestanden downloaden om goed te werken.",
"downloadConsentDialogText2": "Dit verbindt u met ${url}.",
"checkUpdateDialogTitle": "Controleer op updates?",
"checkUpdateDialogText": "Wilt u dat ReVanced Manager automatisch op updates controleert?",
"notificationTitle": "Update gedownload", "notificationTitle": "Update gedownload",
"notificationText": "Tik om de update te installeren", "notificationText": "Tik om de update te installeren",
"downloadingMessage": "Update wordt gedownload...", "downloadingMessage": "Update wordt gedownload...",
"downloadedMessage": "Update gedownload",
"installingMessage": "Update wordt geïnstalleerd...", "installingMessage": "Update wordt geïnstalleerd...",
"errorDownloadMessage": "Update downloaden mislukt", "errorDownloadMessage": "Update downloaden mislukt",
"errorInstallMessage": "Update installeren mislukt", "errorInstallMessage": "Update installeren mislukt",
@@ -53,12 +66,18 @@
"patcherView": { "patcherView": {
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "Patchen", "patchButton": "Patchen",
"armv7WarningDialogText": "Patchen op ARMv7 apparaten zijn nog niet ondersteund en zou mogelijk kunnen misgaan. Toch verder gaan?",
"removedPatchesWarningDialogText": "De volgende patches zijn verwijderd sinds de laatste keer dat je ze hebt gebruikt.\n\n${patches}\n\nToch doorgaan?",
"requiredOptionDialogText": "Er moeten enkele patch-opties worden ingesteld." "requiredOptionDialogText": "Er moeten enkele patch-opties worden ingesteld."
}, },
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "Selecteer een app",
"widgetTitleSelected": "Geselecteerde app",
"widgetSubtitle": "Geen app geselecteerd",
"noAppsLabel": "Geen applicatie gevonden", "noAppsLabel": "Geen applicatie gevonden",
"currentVersion": "Huidige", "currentVersion": "Huidige",
"suggestedVersion": "Voorgesteld" "suggestedVersion": "Voorgesteld",
"anyVersion": "Iedere versie"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Selecteer patches", "widgetTitle": "Selecteer patches",
@@ -71,11 +90,15 @@
"widgetSubtitle": "We zijn online!" "widgetSubtitle": "We zijn online!"
}, },
"appSelectorView": { "appSelectorView": {
"viewTitle": "Selecteer een app",
"searchBarHint": "Zoek naar apps",
"storageButton": "Opslag", "storageButton": "Opslag",
"selectFromStorageButton": "Selecteer uit opslag", "selectFromStorageButton": "Selecteer uit opslag",
"errorMessage": "Kan geselecteerde applicatie niet gebruiken", "errorMessage": "Kan geselecteerde applicatie niet gebruiken",
"downloadToast": "Download functie is nog niet beschikbaar", "downloadToast": "Download functie is nog niet beschikbaar",
"featureNotAvailable": "Functie niet geïmplementeerd" "requireSuggestedAppVersionDialogText": "De versie van de app die u hebt geselecteerd komt niet overeen met de voorgestelde versie die onverwachte problemen kan veroorzaken. Gebruik de voorgestelde versie.\n\nGeselecteerde versie: ${selected}\nSuggeert versie: ${suggested}\n\nOm toch verder te gaan, schakel \"Vereis app versie\" uit in de instellingen.",
"featureNotAvailable": "Functie niet geïmplementeerd",
"featureNotAvailableText": "Deze app is een gesplitste APK en kan alleen op betrouwbare wijze worden gepatenteerd en geïnstalleerd door te koppelen met root-machtigingen. Je kunt echter wel een volledige APK patchen en installeren door deze uit de opslag te selecteren."
}, },
"patchesSelectorView": { "patchesSelectorView": {
"viewTitle": "Selecteer patches", "viewTitle": "Selecteer patches",
@@ -84,7 +107,9 @@
"newPatches": "Nieuwe patches", "newPatches": "Nieuwe patches",
"patches": "Patches", "patches": "Patches",
"doneButton": "Gereed", "doneButton": "Gereed",
"defaultChip": "Standaard",
"defaultTooltip": "Selecteer alle standaard patches", "defaultTooltip": "Selecteer alle standaard patches",
"noneChip": "Geen",
"noneTooltip": "Alle patches deselecteren", "noneTooltip": "Alle patches deselecteren",
"loadPatchesSelection": "Laad patch selectie", "loadPatchesSelection": "Laad patch selectie",
"noSavedPatches": "Geen opgeslagen patch selectie voor de geselecteerde app.\nDruk op Klaar om de huidige selectie op te slaan.", "noSavedPatches": "Geen opgeslagen patch selectie voor de geselecteerde app.\nDruk op Klaar om de huidige selectie op te slaan.",
@@ -110,11 +135,13 @@
"unsupportedDialogText": "Het selecteren van deze patch kan leiden tot patch fouten.\n\nApp-versie: ${packageVersion}\nOndersteunde versies:\n${supportedVersions}", "unsupportedDialogText": "Het selecteren van deze patch kan leiden tot patch fouten.\n\nApp-versie: ${packageVersion}\nOndersteunde versies:\n${supportedVersions}",
"unsupportedPatchVersion": "Patch wordt niet ondersteund voor deze app versie.", "unsupportedPatchVersion": "Patch wordt niet ondersteund voor deze app versie.",
"unsupportedRequiredOption": "Deze patch bevat een verplichte optie die niet wordt ondersteund door deze app", "unsupportedRequiredOption": "Deze patch bevat een verplichte optie die niet wordt ondersteund door deze app",
"patchesChangeWarningDialogText": "Het wordt aangeraden om de standaard patch selectie en opties te gebruiken. Wijzigen van deze opties kan leiden tot onverwachte problemen.\n\nJe moet \"Veranderen van patch-selectie toestaan\" inschakelen in de instellingen voordat je de patch-selectie wijzigt.",
"patchesChangeWarningDialogButton": "Gebruik standaard selectie" "patchesChangeWarningDialogButton": "Gebruik standaard selectie"
}, },
"installerView": { "installerView": {
"widgetTitle": "Installatieprogramma", "widgetTitle": "Installatieprogramma",
"installType": "Selecteer installatietype", "installType": "Selecteer installatietype",
"installTypeDescription": "Selecteer het installatietype om mee door te gaan.",
"installButton": "Installeren", "installButton": "Installeren",
"installRootType": "Bestijgen", "installRootType": "Bestijgen",
"installNonRootType": "Normaal", "installNonRootType": "Normaal",
@@ -137,6 +164,7 @@
"debugSectionTitle": "Foutopsporing", "debugSectionTitle": "Foutopsporing",
"advancedSectionTitle": "Geavanceerd", "advancedSectionTitle": "Geavanceerd",
"exportSectionTitle": "Importeren & exporteren", "exportSectionTitle": "Importeren & exporteren",
"dataSectionTitle": "Gegevensbronnen",
"themeModeLabel": "App thema", "themeModeLabel": "App thema",
"systemThemeLabel": "Systeem", "systemThemeLabel": "Systeem",
"lightThemeLabel": "Licht", "lightThemeLabel": "Licht",
@@ -144,18 +172,20 @@
"dynamicThemeLabel": "Materiaal jij", "dynamicThemeLabel": "Materiaal jij",
"dynamicThemeHint": "Geniet van een ervaring dichter bij je apparaat", "dynamicThemeHint": "Geniet van een ervaring dichter bij je apparaat",
"languageLabel": "Taal", "languageLabel": "Taal",
"languageUpdated": "Taal bijgewerkt",
"englishOption": "Engels", "englishOption": "Engels",
"sourcesLabel": "Bronnen", "sourcesLabel": "Alternatieve bronnen",
"sourcesLabelHint": "Configureer de bron van patches en integraties", "sourcesLabelHint": "Configureer de alternatieve bronnen voor ReVanced Patches en ReVanced Integrations",
"sourcesIntegrationsLabel": "Integratiebronnen", "sourcesIntegrationsLabel": "Integratiebronnen",
"useAlternativeSources": "Gebruik alternatieve bronnen",
"useAlternativeSourcesHint": "Gebruik alternatieve bronnen voor ReVanced Patches en ReVanced Integrations in plaats van de API",
"sourcesResetDialogTitle": "Herstellen naar standaard", "sourcesResetDialogTitle": "Herstellen naar standaard",
"sourcesResetDialogText": "Weet u zeker dat u uw bronnen op hun standaardwaarden wilt herstellen?", "sourcesResetDialogText": "Weet u zeker dat u uw bronnen op hun standaardwaarden wilt herstellen?",
"apiURLResetDialogText": "Weet u zeker dat u uw API-URL wilt resetten naar de standaardwaarde?", "apiURLResetDialogText": "Weet u zeker dat u uw API-URL wilt resetten naar de standaardwaarde?",
"sourcesUpdateNote": "Opmerking: Patches worden automatisch naar de laatste versie bijgewerkt.\n\nUw IP-adres wordt zichtbaar aan de server.", "sourcesUpdateNote": "Opmerking: Dit zal automatisch ReVanceerde Patches en verbeterde integraties uit de alternatieve bronnen downloaden.\n\nDit verbindt je met de alternatieve bron.",
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"apiURLHint": "Stel de URL van de te gebruiken API in", "apiURLHint": "Configureer de API URL van ReVanced Manager",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"hostRepositoryLabel": "Repository-API",
"orgPatchesLabel": "Organisatie van patches", "orgPatchesLabel": "Organisatie van patches",
"sourcesPatchesLabel": "Bronnen voor patches", "sourcesPatchesLabel": "Bronnen voor patches",
"orgIntegrationsLabel": "Integraties organisatie", "orgIntegrationsLabel": "Integraties organisatie",
@@ -169,6 +199,8 @@
"disablePatchesSelectionWarningText": "U staat op het punt om de selectie van patches uit te schakelen.\nDe standaard selectie van patches zal worden hersteld.\n\nToch uitschakelen?", "disablePatchesSelectionWarningText": "U staat op het punt om de selectie van patches uit te schakelen.\nDe standaard selectie van patches zal worden hersteld.\n\nToch uitschakelen?",
"autoUpdatePatchesLabel": "Patch automatisch bijwerken", "autoUpdatePatchesLabel": "Patch automatisch bijwerken",
"autoUpdatePatchesHint": "Patch automatisch bijwerken naar de laatste versie", "autoUpdatePatchesHint": "Patch automatisch bijwerken naar de laatste versie",
"showUpdateDialogLabel": "Toon update dialoogvenster",
"showUpdateDialogHint": "Een dialoogvenster weergeven wanneer een nieuwe update beschikbaar is",
"universalPatchesLabel": "Toon universele patches", "universalPatchesLabel": "Toon universele patches",
"universalPatchesHint": "Alle apps en universele patches weergeven (kan de app-lijst vertragen)", "universalPatchesHint": "Alle apps en universele patches weergeven (kan de app-lijst vertragen)",
"versionCompatibilityCheckLabel": "Versie compatibiliteitscontrole", "versionCompatibilityCheckLabel": "Versie compatibiliteitscontrole",
@@ -239,7 +271,12 @@
"updateNotImplemented": "Deze functie is nog niet geïmplementeerd" "updateNotImplemented": "Deze functie is nog niet geïmplementeerd"
}, },
"contributorsView": { "contributorsView": {
"widgetTitle": "Bijdragers" "widgetTitle": "Bijdragers",
"patcherContributors": "ReVanced Patcher",
"patchesContributors": "ReVanced patches",
"integrationsContributors": "ReVanced integrations",
"cliContributors": "ReVanced CLI",
"managerContributors": "ReVanced Manager"
}, },
"installErrorDialog": { "installErrorDialog": {
"mount_version_mismatch": "Verkeerde versie", "mount_version_mismatch": "Verkeerde versie",

View File

@@ -67,7 +67,6 @@
"darkThemeLabel": "Mørk modus", "darkThemeLabel": "Mørk modus",
"dynamicThemeHint": "Nyt en erfaring nærmere din enhet", "dynamicThemeHint": "Nyt en erfaring nærmere din enhet",
"languageLabel": "Språk", "languageLabel": "Språk",
"sourcesLabel": "Kilder",
"sourcesIntegrationsLabel": "Integrasjoner kilde", "sourcesIntegrationsLabel": "Integrasjoner kilde",
"sourcesResetDialogTitle": "Tilbakestill", "sourcesResetDialogTitle": "Tilbakestill",
"orgPatchesLabel": "Patches organisasjon", "orgPatchesLabel": "Patches organisasjon",

View File

@@ -42,7 +42,6 @@
"lightThemeLabel": "ହାଲୁକା", "lightThemeLabel": "ହାଲୁକା",
"darkThemeLabel": "ଗାଢ଼", "darkThemeLabel": "ଗାଢ଼",
"languageLabel": "ଭାଷା", "languageLabel": "ଭାଷା",
"sourcesLabel": "ଉତ୍ସ",
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"aboutLabel": "ସମ୍ବନ୍ଧରେ", "aboutLabel": "ସମ୍ବନ୍ଧରେ",

View File

@@ -164,6 +164,7 @@
"debugSectionTitle": "Debugowanie", "debugSectionTitle": "Debugowanie",
"advancedSectionTitle": "Zaawansowane", "advancedSectionTitle": "Zaawansowane",
"exportSectionTitle": "Import i eksport", "exportSectionTitle": "Import i eksport",
"dataSectionTitle": "Źródła danych",
"themeModeLabel": "Motyw aplikacji", "themeModeLabel": "Motyw aplikacji",
"systemThemeLabel": "Systemowy", "systemThemeLabel": "Systemowy",
"lightThemeLabel": "Jasny", "lightThemeLabel": "Jasny",
@@ -173,17 +174,18 @@
"languageLabel": "Język", "languageLabel": "Język",
"languageUpdated": "Zaktualizowano język", "languageUpdated": "Zaktualizowano język",
"englishOption": "Angielski", "englishOption": "Angielski",
"sourcesLabel": "Źródła", "sourcesLabel": "Alternatywne źródło",
"sourcesLabelHint": "Skonfiguruj źródło łatek i integracji", "sourcesLabelHint": "Skonfiguruj alternatywne źródła dla Łatek ReVanced i Integracji ReVanced",
"sourcesIntegrationsLabel": "Źródło integracji", "sourcesIntegrationsLabel": "Źródło integracji",
"useAlternativeSources": "Używaj alternatywnych źródeł",
"useAlternativeSourcesHint": "Używaj alternatywnych źródeł dla Łatek ReVanced i Integracji ReVanced zamiast API",
"sourcesResetDialogTitle": "Zresetuj", "sourcesResetDialogTitle": "Zresetuj",
"sourcesResetDialogText": "Czy na pewno chcesz przywrócić źródła niestandardowe do ich wartości domyślnych?", "sourcesResetDialogText": "Czy na pewno chcesz przywrócić źródła niestandardowe do ich wartości domyślnych?",
"apiURLResetDialogText": "Czy jesteś pewien, że chcesz przywrócić wszystkie adresy API do domyślnych wartości?", "apiURLResetDialogText": "Czy jesteś pewien, że chcesz przywrócić wszystkie adresy API do domyślnych wartości?",
"sourcesUpdateNote": "Uwaga: Łatki zostaną automatycznie zaktualizowane.\n\nTo ujawnij Twój adres IP serwerowi.", "sourcesUpdateNote": "Uwaga: To automatycznie pobierze Łatki ReVanced i Integracje ReVanced z alternatywnych źródeł.\n\nTo połączy cię z alternatywnym źródłem.",
"apiURLLabel": "Adres API", "apiURLLabel": "Adres API",
"apiURLHint": "Skonfiguruj adres URL API do użytku", "apiURLHint": "Skonfiguruj adres API Menedżera ReVanced",
"selectApiURL": "Adres API", "selectApiURL": "Adres API",
"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",

View File

@@ -142,14 +142,11 @@
"dynamicThemeLabel": "Material You", "dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Aproveite uma experiência mais próxima do tema de seu dispositivo", "dynamicThemeHint": "Aproveite uma experiência mais próxima do tema de seu dispositivo",
"languageLabel": "Idioma", "languageLabel": "Idioma",
"sourcesLabel": "Fontes",
"sourcesIntegrationsLabel": "Fonte das integrações", "sourcesIntegrationsLabel": "Fonte das integrações",
"sourcesResetDialogTitle": "Redefinir", "sourcesResetDialogTitle": "Redefinir",
"sourcesResetDialogText": "Você tem certeza que deseja redefinir as fontes para os valores padrão?", "sourcesResetDialogText": "Você tem certeza que deseja redefinir as fontes para os valores padrão?",
"sourcesUpdateNote": "Nota: Patches serão atualizados automaticamente para a versão mais recente.\n\nIsso irá revelar seu endereço IP ao servidor.",
"apiURLLabel": "URL da API", "apiURLLabel": "URL da API",
"selectApiURL": "URL da API", "selectApiURL": "URL da API",
"hostRepositoryLabel": "API do Repositório",
"orgPatchesLabel": "Organização dos patches", "orgPatchesLabel": "Organização dos patches",
"sourcesPatchesLabel": "Fonte dos patches", "sourcesPatchesLabel": "Fonte dos patches",
"orgIntegrationsLabel": "Organização das integrações", "orgIntegrationsLabel": "Organização das integrações",

View File

@@ -67,7 +67,7 @@
"widgetTitle": "Modificador", "widgetTitle": "Modificador",
"patchButton": "Modificar", "patchButton": "Modificar",
"armv7WarningDialogText": "Fazer modificações numa aplicação num dispositivo com processador ARMv7 ainda não é suportada e poderá falhar. Continuar na mesma?", "armv7WarningDialogText": "Fazer modificações numa aplicação num dispositivo com processador ARMv7 ainda não é suportada e poderá falhar. Continuar na mesma?",
"removedPatchesWarningDialogText": "As seguintes modificações foram removidos desde a última vez que os utilizaste.\n\n${patches}\n\nContinuar na mesma?", "removedPatchesWarningDialogText": "As seguintes modificações foram removidas desde a última vez que as utilizaste.\n\n${patches}\n\nContinuar na mesma?",
"requiredOptionDialogText": "Algumas opções das Modificações precisam ser definidas." "requiredOptionDialogText": "Algumas opções das Modificações precisam ser definidas."
}, },
"appSelectorCard": { "appSelectorCard": {
@@ -164,6 +164,7 @@
"debugSectionTitle": "Depuração", "debugSectionTitle": "Depuração",
"advancedSectionTitle": "Opções avançadas", "advancedSectionTitle": "Opções avançadas",
"exportSectionTitle": "Importar e exportar", "exportSectionTitle": "Importar e exportar",
"dataSectionTitle": "Fontes de dados",
"themeModeLabel": "Tema da aplicação", "themeModeLabel": "Tema da aplicação",
"systemThemeLabel": "Sistema", "systemThemeLabel": "Sistema",
"lightThemeLabel": "Claro", "lightThemeLabel": "Claro",
@@ -173,17 +174,18 @@
"languageLabel": "Idioma", "languageLabel": "Idioma",
"languageUpdated": "Idioma atualizado", "languageUpdated": "Idioma atualizado",
"englishOption": "Inglês", "englishOption": "Inglês",
"sourcesLabel": "Fontes", "sourcesLabel": "Fontes alternativas",
"sourcesLabelHint": "Configurar a fonte de correções e integrações", "sourcesLabelHint": "Configurar as fontes alternativas para as Modificações ReVanced e Integrações ReVanced",
"sourcesIntegrationsLabel": "Fonte das Integrações", "sourcesIntegrationsLabel": "Fonte das Integrações",
"useAlternativeSources": "Usar fontes alternativas",
"useAlternativeSourcesHint": "Usar fontes alternativas para as Modificações ReVanced e as Integrações ReVanced em vez da API",
"sourcesResetDialogTitle": "Repor", "sourcesResetDialogTitle": "Repor",
"sourcesResetDialogText": "Tens a certeza de que pretendes repor os valores predefinidos das fontes?", "sourcesResetDialogText": "Tens a certeza de que pretendes repor os valores predefinidos das fontes?",
"apiURLResetDialogText": "Tens a certeza de que pretendes repor a URL da API para o seu valor predefinido?", "apiURLResetDialogText": "Tens a certeza de que pretendes repor a URL da API para o seu valor predefinido?",
"sourcesUpdateNote": "Nota: As Modificações serão atualizados automaticamente para a versão mais recente.\n\nIsto revelará o seu endereço IP ao servidor.", "sourcesUpdateNote": "Nota: Esta ação descarrega automaticamente as Modificações do ReVanced e as Integrações do ReVanced das fontes alternativas.\n\nIsto irá conectar-te com a fonte alternativa.",
"apiURLLabel": "URL da API", "apiURLLabel": "URL da API",
"apiURLHint": "Configurar o URL da API para usar", "apiURLHint": "Configurar a URL do API do Gestor ReVanced",
"selectApiURL": "URL da API", "selectApiURL": "URL da API",
"hostRepositoryLabel": "API do Repositório",
"orgPatchesLabel": "Organização de Modificações", "orgPatchesLabel": "Organização de Modificações",
"sourcesPatchesLabel": "Fonte das Modificações", "sourcesPatchesLabel": "Fonte das Modificações",
"orgIntegrationsLabel": "Organização de Integrações", "orgIntegrationsLabel": "Organização de Integrações",
@@ -290,7 +292,7 @@
"status_failure_timeout": "Tempo de instalação esgotado", "status_failure_timeout": "Tempo de instalação esgotado",
"status_unknown": "Falha na instalação", "status_unknown": "Falha na instalação",
"mount_version_mismatch_description": "A instalação falhou devido ao facto da aplicação instalada ser uma versão diferente da aplicação modificada.\n\nInstala a versão da aplicação que estás a montar e tenta novamente.", "mount_version_mismatch_description": "A instalação falhou devido ao facto da aplicação instalada ser uma versão diferente da aplicação modificada.\n\nInstala a versão da aplicação que estás a montar e tenta novamente.",
"mount_no_root_description": "A instalação falhou devido ao facto de o acesso root não ter sido concedido.\n\nConceda o acesso root ao ReVanced Manager e tente novamente.", "mount_no_root_description": "A instalação falhou devido ao facto de o acesso root não ter sido atribuído.\n\nAtribua o acesso root ao ReVanced Manager e tente novamente.",
"mount_missing_installation_description": "A instalação falhou devido ao facto da aplicação não modificada não estar instalada neste dispositivo para poder ser montada sobre o mesmo.\n\nInstale a aplicação não corrigida antes de montar e tente novamente.", "mount_missing_installation_description": "A instalação falhou devido ao facto da aplicação não modificada não estar instalada neste dispositivo para poder ser montada sobre o mesmo.\n\nInstale a aplicação não corrigida antes de montar e tente novamente.",
"status_failure_timeout_description": "A instalação demorou demasiado tempo para terminar.\n\nGostarias de tentar novamente?", "status_failure_timeout_description": "A instalação demorou demasiado tempo para terminar.\n\nGostarias de tentar novamente?",
"status_failure_storage_description": "A instalação falhou devido ao armazenamento insuficiente.\n\nLiberta algum espaço e tenta novamente.", "status_failure_storage_description": "A instalação falhou devido ao armazenamento insuficiente.\n\nLiberta algum espaço e tenta novamente.",

View File

@@ -72,7 +72,7 @@
}, },
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "Selectați o aplicație", "widgetTitle": "Selectați o aplicație",
"widgetTitleSelected": "Aplicația selectata", "widgetTitleSelected": "Aplicația selectată",
"widgetSubtitle": "Nici o aplicație selectată", "widgetSubtitle": "Nici o aplicație selectată",
"noAppsLabel": "Nu s-au găsit aplicații", "noAppsLabel": "Nu s-au găsit aplicații",
"currentVersion": "Actual", "currentVersion": "Actual",
@@ -164,6 +164,7 @@
"debugSectionTitle": "Depanare", "debugSectionTitle": "Depanare",
"advancedSectionTitle": "Avansat", "advancedSectionTitle": "Avansat",
"exportSectionTitle": "Importă & exportă", "exportSectionTitle": "Importă & exportă",
"dataSectionTitle": "Surse de date",
"themeModeLabel": "Tema aplicației", "themeModeLabel": "Tema aplicației",
"systemThemeLabel": "Sistem", "systemThemeLabel": "Sistem",
"lightThemeLabel": "Luminoasă", "lightThemeLabel": "Luminoasă",
@@ -173,17 +174,18 @@
"languageLabel": "Limbă", "languageLabel": "Limbă",
"languageUpdated": "Limbă actualizată", "languageUpdated": "Limbă actualizată",
"englishOption": "Engleză", "englishOption": "Engleză",
"sourcesLabel": "Surse", "sourcesLabel": "Surse alternative",
"sourcesLabelHint": "Configuraţi sursa patch-urilor şi a integrărilor", "sourcesLabelHint": "Configurați sursele alternative pentru patch-urile ReVanced și Integrările ReVanced",
"sourcesIntegrationsLabel": "Sursă integrări", "sourcesIntegrationsLabel": "Sursă integrări",
"useAlternativeSources": "Folosiți surse alternative",
"useAlternativeSourcesHint": "Utilizați surse alternative pentru patch-urile revanced și Integrările ReVanced în loc de API",
"sourcesResetDialogTitle": "Resetează", "sourcesResetDialogTitle": "Resetează",
"sourcesResetDialogText": "Sunteți sigur că doriți să resetați sursele la valorile lor implicite?", "sourcesResetDialogText": "Sunteți sigur că doriți să resetați sursele la valorile lor implicite?",
"apiURLResetDialogText": "Sunteţi sigur că doriţi să resetaţi URL-ul API la valoarea sa implicită?", "apiURLResetDialogText": "Sunteţi sigur că doriţi să resetaţi URL-ul API la valoarea sa implicită?",
"sourcesUpdateNote": "Notă: Patch-urile vor fi actualizate automat la cea mai recentă versiune.\n\nAcest lucru va dezvălui adresa dumneavoastră de IP pe server.", "sourcesUpdateNote": "Notă: Acest lucru va descărca automat patch-urile ReVanced și Integrările ReVanced din sursele alternative.\n\nAceasta vă va conecta la sursa alternativă.",
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"apiURLHint": "Configurați URL-ul API pentru utilizare", "apiURLHint": "Configurați URL-ul API al Managerului ReVanced",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"hostRepositoryLabel": "API-ul Repository",
"orgPatchesLabel": "Organizarea patch-urilor", "orgPatchesLabel": "Organizarea patch-urilor",
"sourcesPatchesLabel": "Sursă patch-uri", "sourcesPatchesLabel": "Sursă patch-uri",
"orgIntegrationsLabel": "Organizare integrări", "orgIntegrationsLabel": "Organizare integrări",

View File

@@ -7,7 +7,7 @@
"enabledLabel": "Включено", "enabledLabel": "Включено",
"disabledLabel": "Отключено", "disabledLabel": "Отключено",
"installed": "Установлено: ${version}", "installed": "Установлено: ${version}",
"suggested": "Предложено: ${version}", "suggested": "Рекомендуемая: ${version}",
"yesButton": "Да", "yesButton": "Да",
"noButton": "Нет", "noButton": "Нет",
"warning": "Внимание", "warning": "Внимание",
@@ -16,6 +16,8 @@
"noShowAgain": "Не показывать снова", "noShowAgain": "Не показывать снова",
"add": "Добавить", "add": "Добавить",
"remove": "Удалить", "remove": "Удалить",
"showChangelogButton": "Показать список изменений",
"showUpdateButton": "Показать обновление",
"navigationView": { "navigationView": {
"dashboardTab": "Панель инструментов", "dashboardTab": "Панель инструментов",
"patcherTab": "Патчер", "patcherTab": "Патчер",
@@ -26,14 +28,25 @@
"widgetTitle": "Панель инструментов", "widgetTitle": "Панель инструментов",
"updatesSubtitle": "Обновления", "updatesSubtitle": "Обновления",
"patchedSubtitle": "Пропатченные приложения", "patchedSubtitle": "Пропатченные приложения",
"changeLaterSubtitle": "Вы можете изменить это в настройках позже.",
"noUpdates": "Нет доступных обновлений", "noUpdates": "Нет доступных обновлений",
"WIP": "В процессе...", "WIP": "В процессе...",
"noInstallations": "Пропатченные приложения не установлены", "noInstallations": "Пропатченные приложения не установлены",
"installUpdate": "Продолжить установку обновления?", "installUpdate": "Продолжить установку обновления?",
"updateSheetTitle": "Обновить Revanced Менеджер",
"updateDialogTitle": "Доступно обновление",
"updatePatchesSheetTitle": "Обновить патчи ReVanced",
"updateChangelogTitle": "Список изменений", "updateChangelogTitle": "Список изменений",
"updateDialogText": "Доступно обновление для ${file}.\n\nТекущая установленная версия ${version}.",
"downloadConsentDialogTitle": "Скачать необходимые файлы?",
"downloadConsentDialogText": "Для правильной работы ReVanced Менеджера нужно загрузить необходимые файлы.",
"downloadConsentDialogText2": "Это соединит вас с ${url}.",
"checkUpdateDialogTitle": "Проверить наличие обновлений?",
"checkUpdateDialogText": "Хотите, чтобы ReVanced Менеджер автоматически проверял наличие обновлений?",
"notificationTitle": "Обновление загружено", "notificationTitle": "Обновление загружено",
"notificationText": "Нажмите, чтобы установить обновление", "notificationText": "Нажмите, чтобы установить обновление",
"downloadingMessage": "Загрузка обновления...", "downloadingMessage": "Загрузка обновления...",
"downloadedMessage": "Обновление загружено",
"installingMessage": "Установка обновления...", "installingMessage": "Установка обновления...",
"errorDownloadMessage": "Не удалось загрузить обновление", "errorDownloadMessage": "Не удалось загрузить обновление",
"errorInstallMessage": "Не удалось установить обновление", "errorInstallMessage": "Не удалось установить обновление",
@@ -53,12 +66,18 @@
"patcherView": { "patcherView": {
"widgetTitle": "Патчер", "widgetTitle": "Патчер",
"patchButton": "Патч", "patchButton": "Патч",
"armv7WarningDialogText": "Патчинг на устройствах ARMv7 пока не поддерживается и может привести к сбоям. Все равно продолжить?",
"removedPatchesWarningDialogText": "Следующие патчи были удалены с момента их последнего использования.\n\n ${patches}\n\n Все равно продолжить?",
"requiredOptionDialogText": "Некоторые параметры патчей должны быть обязательно установлены." "requiredOptionDialogText": "Некоторые параметры патчей должны быть обязательно установлены."
}, },
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "Выбрать приложение",
"widgetTitleSelected": "Выбранное приложение",
"widgetSubtitle": "Приложение не выбрано",
"noAppsLabel": "Приложения не найдены", "noAppsLabel": "Приложения не найдены",
"currentVersion": "Текущая", "currentVersion": "Текущая",
"suggestedVersion": "Предложенная" "suggestedVersion": "Предложенная",
"anyVersion": "Любая версия"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Выбор патчей", "widgetTitle": "Выбор патчей",
@@ -71,11 +90,15 @@
"widgetSubtitle": "Мы онлайн!" "widgetSubtitle": "Мы онлайн!"
}, },
"appSelectorView": { "appSelectorView": {
"viewTitle": "Выбрать приложение",
"searchBarHint": "Поиск приложения",
"storageButton": "Хранилище", "storageButton": "Хранилище",
"selectFromStorageButton": "Выбрать из хранилища", "selectFromStorageButton": "Выбрать из хранилища",
"errorMessage": "Невозможно использовать выбранное приложение", "errorMessage": "Невозможно использовать выбранное приложение",
"downloadToast": "Функция загрузки пока недоступна", "downloadToast": "Функция загрузки пока недоступна",
"featureNotAvailable": "Функция не реализована" "requireSuggestedAppVersionDialogText": "Выбранная Вами версия приложения не соответствует предлагаемой, что может привести к непредвиденным проблемам. Пожалуйста, используйте предложенную версию.\n\n Выбранная версия: ${selected}\n Предлагаемая версия: ${suggested}.\n\nЧтобы продолжить, отключите в настройках параметр «Требовать рекомендуемую версию приложения».",
"featureNotAvailable": "Функция не реализована",
"featureNotAvailableText": "Это приложение представляет собой разделенный APK-файл, и его можно пропатчить и корректно установить только путем монтирования с правами root. Однако Вы можете пропатчить и установить полный APK-файл, выбрав его из хранилища."
}, },
"patchesSelectorView": { "patchesSelectorView": {
"viewTitle": "Выбор патчей", "viewTitle": "Выбор патчей",
@@ -84,7 +107,9 @@
"newPatches": "Новые патчи", "newPatches": "Новые патчи",
"patches": "Патчи", "patches": "Патчи",
"doneButton": "Готово", "doneButton": "Готово",
"defaultChip": "По умолчанию",
"defaultTooltip": "Выбрать все стандартные патчи", "defaultTooltip": "Выбрать все стандартные патчи",
"noneChip": "Никакие",
"noneTooltip": "Снять выбор всех патчей", "noneTooltip": "Снять выбор всех патчей",
"loadPatchesSelection": "Загрузка выборки патчей", "loadPatchesSelection": "Загрузка выборки патчей",
"noSavedPatches": "Нет сохраненной выборки патчей для выбранного приложения.\nНажмите \"Готово\" для сохранения текущего выбора.", "noSavedPatches": "Нет сохраненной выборки патчей для выбранного приложения.\nНажмите \"Готово\" для сохранения текущего выбора.",
@@ -110,11 +135,13 @@
"unsupportedDialogText": "Выбор этого патча может привести к ошибкам во время патчинга.\n\nВерсия приложения: ${packageVersion}\nПоддерживаемые версии:\n${supportedVersions}", "unsupportedDialogText": "Выбор этого патча может привести к ошибкам во время патчинга.\n\nВерсия приложения: ${packageVersion}\nПоддерживаемые версии:\n${supportedVersions}",
"unsupportedPatchVersion": "Патч не поддерживается этой версией приложения.", "unsupportedPatchVersion": "Патч не поддерживается этой версией приложения.",
"unsupportedRequiredOption": "Этот патч содержит обязательную опцию, не поддерживаемую этим приложением", "unsupportedRequiredOption": "Этот патч содержит обязательную опцию, не поддерживаемую этим приложением",
"patchesChangeWarningDialogText": "Рекомендуется использовать выборку патчей и параметры по умолчанию. Их изменение может привести к неожиданным проблемам.\n\n Вам необходимо включить «Разрешить изменение выборки патчей» в настройках, прежде чем изменять какие-либо выборки патчей.",
"patchesChangeWarningDialogButton": "Использовать стандартный набор" "patchesChangeWarningDialogButton": "Использовать стандартный набор"
}, },
"installerView": { "installerView": {
"widgetTitle": "Установщик", "widgetTitle": "Установщик",
"installType": "Выберите тип установки", "installType": "Выберите тип установки",
"installTypeDescription": "Выберите тип установки, чтобы продолжить.",
"installButton": "Установить", "installButton": "Установить",
"installRootType": "Монтировать", "installRootType": "Монтировать",
"installNonRootType": "Обычный", "installNonRootType": "Обычный",
@@ -137,6 +164,7 @@
"debugSectionTitle": "Отладка", "debugSectionTitle": "Отладка",
"advancedSectionTitle": "Дополнительные", "advancedSectionTitle": "Дополнительные",
"exportSectionTitle": "Импорт и экспорт", "exportSectionTitle": "Импорт и экспорт",
"dataSectionTitle": "Источники данных",
"themeModeLabel": "Тема приложения", "themeModeLabel": "Тема приложения",
"systemThemeLabel": "Системная", "systemThemeLabel": "Системная",
"lightThemeLabel": "Светлая", "lightThemeLabel": "Светлая",
@@ -144,18 +172,20 @@
"dynamicThemeLabel": "Material You", "dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Наслаждайтесь темой Вашего устройства", "dynamicThemeHint": "Наслаждайтесь темой Вашего устройства",
"languageLabel": "Язык", "languageLabel": "Язык",
"languageUpdated": "Язык обновлен",
"englishOption": "Английский", "englishOption": "Английский",
"sourcesLabel": "Источники", "sourcesLabel": "Альтернативные источники",
"sourcesLabelHint": "Настройка источника патчей и интеграций", "sourcesLabelHint": "Настройте альтернативные источники для патчей и интеграций ReVanced",
"sourcesIntegrationsLabel": "Репозиторий интеграций", "sourcesIntegrationsLabel": "Репозиторий интеграций",
"useAlternativeSources": "Использовать альтернативные источники",
"useAlternativeSourcesHint": "Использовать альтернативные источники для патчей и интеграций ReVanced вместо API",
"sourcesResetDialogTitle": "Сброс", "sourcesResetDialogTitle": "Сброс",
"sourcesResetDialogText": "Вы уверены, что хотите сбросить ваши источники до значений по умолчанию?", "sourcesResetDialogText": "Вы уверены, что хотите сбросить ваши источники до значений по умолчанию?",
"apiURLResetDialogText": "Вы уверены, что хотите сбросить API-ссылку до значения по умолчанию?", "apiURLResetDialogText": "Вы уверены, что хотите сбросить API-ссылку до значения по умолчанию?",
"sourcesUpdateNote": "Примечание: патчи будут обновляться автоматически до последней версии.\nЭто действие сделает доступным ваш IP адрес для сервера.", "sourcesUpdateNote": "Примечание: при этом будут автоматически загружены патчи и интеграции ReVanced из альтернативных источников.\n\nЭто соединит вас с альтернативным источником.",
"apiURLLabel": "API-ссылка", "apiURLLabel": "API-ссылка",
"apiURLHint": "Настройка URL-адреса API для использования", "apiURLHint": "Настройте URL-адрес API ReVanced Менеджера",
"selectApiURL": "API-ссылка", "selectApiURL": "API-ссылка",
"hostRepositoryLabel": "API репозитория",
"orgPatchesLabel": "Организация патчей", "orgPatchesLabel": "Организация патчей",
"sourcesPatchesLabel": "Репозиторий патчей", "sourcesPatchesLabel": "Репозиторий патчей",
"orgIntegrationsLabel": "Организация интеграций", "orgIntegrationsLabel": "Организация интеграций",
@@ -169,6 +199,8 @@
"disablePatchesSelectionWarningText": "Вы собираетесь выключить измененную выборку патчей.\nБудет восстановлен стандартный выбор патчей.\n\nВсе равно выключить?", "disablePatchesSelectionWarningText": "Вы собираетесь выключить измененную выборку патчей.\nБудет восстановлен стандартный выбор патчей.\n\nВсе равно выключить?",
"autoUpdatePatchesLabel": "Автообновление патчей", "autoUpdatePatchesLabel": "Автообновление патчей",
"autoUpdatePatchesHint": "Автоматически обновлять патчи до последней версии", "autoUpdatePatchesHint": "Автоматически обновлять патчи до последней версии",
"showUpdateDialogLabel": "Показать диалог обновления",
"showUpdateDialogHint": "Показывать диалоговое окно, когда доступно новое обновление",
"universalPatchesLabel": "Показать универсальные патчи", "universalPatchesLabel": "Показать универсальные патчи",
"universalPatchesHint": "Отобразить все приложения и универсальные патчи (может замедлить список отображения приложений)", "universalPatchesHint": "Отобразить все приложения и универсальные патчи (может замедлить список отображения приложений)",
"versionCompatibilityCheckLabel": "Проверка совместимости версий", "versionCompatibilityCheckLabel": "Проверка совместимости версий",
@@ -239,7 +271,12 @@
"updateNotImplemented": "Эта возможность ещё не реализована" "updateNotImplemented": "Эта возможность ещё не реализована"
}, },
"contributorsView": { "contributorsView": {
"widgetTitle": "Соучастники проекта" "widgetTitle": "Соучастники проекта",
"patcherContributors": "ReVanced патчер",
"patchesContributors": "ReVanced патчи",
"integrationsContributors": "Интеграции ReVanced",
"cliContributors": "ReVanced CLI",
"managerContributors": "ReVanced Менеджер"
}, },
"installErrorDialog": { "installErrorDialog": {
"mount_version_mismatch": "Несовпадение версий", "mount_version_mismatch": "Несовпадение версий",

View File

@@ -102,12 +102,10 @@
"darkThemeLabel": "Tmavý režim", "darkThemeLabel": "Tmavý režim",
"dynamicThemeHint": "Užite si tému bližíe prispôsobenú vášmu zariadeniu", "dynamicThemeHint": "Užite si tému bližíe prispôsobenú vášmu zariadeniu",
"languageLabel": "Jazyk", "languageLabel": "Jazyk",
"sourcesLabel": "Zdroje",
"sourcesIntegrationsLabel": "Zdroj integrácie", "sourcesIntegrationsLabel": "Zdroj integrácie",
"sourcesResetDialogTitle": "Resetovať", "sourcesResetDialogTitle": "Resetovať",
"apiURLLabel": "URL API", "apiURLLabel": "URL API",
"selectApiURL": "URL API", "selectApiURL": "URL API",
"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",

View File

@@ -88,12 +88,10 @@
"darkThemeLabel": "Temni videz", "darkThemeLabel": "Temni videz",
"dynamicThemeHint": "Videz je prilagojen za vašo napravo", "dynamicThemeHint": "Videz je prilagojen za vašo napravo",
"languageLabel": "Jezik", "languageLabel": "Jezik",
"sourcesLabel": "Viri",
"sourcesIntegrationsLabel": "Vir integracij", "sourcesIntegrationsLabel": "Vir integracij",
"sourcesResetDialogTitle": "Ponastavi", "sourcesResetDialogTitle": "Ponastavi",
"apiURLLabel": "URL API-ja", "apiURLLabel": "URL API-ja",
"selectApiURL": "URL API-ja", "selectApiURL": "URL API-ja",
"hostRepositoryLabel": "API repozitorija",
"orgPatchesLabel": "Organizacija popravkov", "orgPatchesLabel": "Organizacija popravkov",
"sourcesPatchesLabel": "Vir popravkov", "sourcesPatchesLabel": "Vir popravkov",
"orgIntegrationsLabel": "Organizacija integracij", "orgIntegrationsLabel": "Organizacija integracij",

View File

@@ -80,7 +80,7 @@
"anyVersion": "Bilo koja verzija" "anyVersion": "Bilo koja verzija"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Izaberite pečeve", "widgetTitle": "Izaberi pečeve",
"widgetTitleSelected": "Izabrani pečevi", "widgetTitleSelected": "Izabrani pečevi",
"widgetSubtitle": "Prvo izaberite aplikaciju", "widgetSubtitle": "Prvo izaberite aplikaciju",
"widgetEmptySubtitle": "Nema izabranih pečeva" "widgetEmptySubtitle": "Nema izabranih pečeva"
@@ -91,7 +91,7 @@
}, },
"appSelectorView": { "appSelectorView": {
"viewTitle": "Izaberite aplikaciju", "viewTitle": "Izaberite aplikaciju",
"searchBarHint": "Tražite aplikaciju", "searchBarHint": "Pretražite aplikaciju",
"storageButton": "Memorija", "storageButton": "Memorija",
"selectFromStorageButton": "Izaberi iz memorije", "selectFromStorageButton": "Izaberi iz memorije",
"errorMessage": "Nije moguće koristiti izabranu aplikaciju", "errorMessage": "Nije moguće koristiti izabranu aplikaciju",
@@ -164,6 +164,7 @@
"debugSectionTitle": "Otklanjanje grešaka", "debugSectionTitle": "Otklanjanje grešaka",
"advancedSectionTitle": "Napredno", "advancedSectionTitle": "Napredno",
"exportSectionTitle": "Uvoz i izvoz", "exportSectionTitle": "Uvoz i izvoz",
"dataSectionTitle": "Izvori podataka",
"themeModeLabel": "Tema aplikacije", "themeModeLabel": "Tema aplikacije",
"systemThemeLabel": "Sistemska", "systemThemeLabel": "Sistemska",
"lightThemeLabel": "Svetla", "lightThemeLabel": "Svetla",
@@ -173,17 +174,18 @@
"languageLabel": "Jezik", "languageLabel": "Jezik",
"languageUpdated": "Jezik je ažuriran", "languageUpdated": "Jezik je ažuriran",
"englishOption": "engleski", "englishOption": "engleski",
"sourcesLabel": "Izvori", "sourcesLabel": "Alternativni izvori",
"sourcesLabelHint": "Podesite izvor pečeva i integracija", "sourcesLabelHint": "Konfigurišite alternativne izvore za ReVanced pečeve i ReVanced integracije",
"sourcesIntegrationsLabel": "Izvor integracija", "sourcesIntegrationsLabel": "Izvor integracija",
"useAlternativeSources": "Koristi alternativne izvore",
"useAlternativeSourcesHint": "Koristite alternativne izvore za ReVanced pečeve i ReVanced integracije umesto API-ja",
"sourcesResetDialogTitle": "Resetovanje", "sourcesResetDialogTitle": "Resetovanje",
"sourcesResetDialogText": "Želite li zaista da vratite izvore na podrazumevane vrednosti?", "sourcesResetDialogText": "Želite li zaista da vratite izvore na podrazumevane vrednosti?",
"apiURLResetDialogText": "Želite li zaista da vratite URL API-ja na podrazumevanu vrednost?", "apiURLResetDialogText": "Želite li zaista da vratite URL API-ja na podrazumevanu vrednost?",
"sourcesUpdateNote": "Napomena: pečevi će se automatski ažurirati na najnoviju verziju. \n\nOvim ćete otkriti svoju IP adresu serveru.", "sourcesUpdateNote": "Napomena: Ovo će automatski preuzeti ReVanced pečeve i ReVanced integracije iz alternativnih izvora.\n\nOvo će vas povezati sa alternativnim izvorom.",
"apiURLLabel": "URL API-ja", "apiURLLabel": "URL API-ja",
"apiURLHint": "Podesite URL API-ja za korišćenje", "apiURLHint": "Konfigurišite URL API-ja za ReVanced Manager",
"selectApiURL": "URL API-ja", "selectApiURL": "URL API-ja",
"hostRepositoryLabel": "Repozitorijum API-ja",
"orgPatchesLabel": "Organizacija za pečeve", "orgPatchesLabel": "Organizacija za pečeve",
"sourcesPatchesLabel": "Izvor pečeva", "sourcesPatchesLabel": "Izvor pečeva",
"orgIntegrationsLabel": "Organizacija za integracije", "orgIntegrationsLabel": "Organizacija za integracije",
@@ -229,7 +231,7 @@
"resetStoredOptionsDialogTitle": "Resetovati opcije peča?", "resetStoredOptionsDialogTitle": "Resetovati opcije peča?",
"resetStoredOptionsDialogText": "Resetovanjem opcija peča uklanjate sve sačuvane opcije.", "resetStoredOptionsDialogText": "Resetovanjem opcija peča uklanjate sve sačuvane opcije.",
"resetStoredOptions": "Opcije su resetovane", "resetStoredOptions": "Opcije su resetovane",
"deleteLogsLabel": "Obriši evidencije", "deleteLogsLabel": "Izbriši evidencije",
"deleteLogsHint": "Izbrišite prikupljene evidencije ReVanced Managera", "deleteLogsHint": "Izbrišite prikupljene evidencije ReVanced Managera",
"deletedLogs": "Evidencije su izbrisane", "deletedLogs": "Evidencije su izbrisane",
"regenerateKeystoreLabel": "Generiši novo skladište ključeva", "regenerateKeystoreLabel": "Generiši novo skladište ključeva",

View File

@@ -80,7 +80,7 @@
"anyVersion": "Било која верзија" "anyVersion": "Било која верзија"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Изаберите печеве", "widgetTitle": "Изабери печеве",
"widgetTitleSelected": "Изабрани печеви", "widgetTitleSelected": "Изабрани печеви",
"widgetSubtitle": "Прво изаберите апликацију", "widgetSubtitle": "Прво изаберите апликацију",
"widgetEmptySubtitle": "Нема изабраних печева" "widgetEmptySubtitle": "Нема изабраних печева"
@@ -91,7 +91,7 @@
}, },
"appSelectorView": { "appSelectorView": {
"viewTitle": "Изаберите апликацију", "viewTitle": "Изаберите апликацију",
"searchBarHint": "Тражите апликацију", "searchBarHint": "Претражите апликацију",
"storageButton": "Из меморије", "storageButton": "Из меморије",
"selectFromStorageButton": "Изабери из меморије", "selectFromStorageButton": "Изабери из меморије",
"errorMessage": "Није могуће користити изабрану апликацију", "errorMessage": "Није могуће користити изабрану апликацију",
@@ -164,6 +164,7 @@
"debugSectionTitle": "Отклањање грешака", "debugSectionTitle": "Отклањање грешака",
"advancedSectionTitle": "Напредно", "advancedSectionTitle": "Напредно",
"exportSectionTitle": "Увоз и извоз", "exportSectionTitle": "Увоз и извоз",
"dataSectionTitle": "Извори података",
"themeModeLabel": "Тема апликације", "themeModeLabel": "Тема апликације",
"systemThemeLabel": "Системска", "systemThemeLabel": "Системска",
"lightThemeLabel": "Светла", "lightThemeLabel": "Светла",
@@ -173,17 +174,18 @@
"languageLabel": "Језик", "languageLabel": "Језик",
"languageUpdated": "Језик је ажуриран", "languageUpdated": "Језик је ажуриран",
"englishOption": "енглески", "englishOption": "енглески",
"sourcesLabel": "Извори", "sourcesLabel": "Алтернативни извори",
"sourcesLabelHint": "Подесите извор печева и интеграција", "sourcesLabelHint": "Конфигуришите алтернативне изворе за ReVanced печеве и ReVanced интеграције",
"sourcesIntegrationsLabel": "Извор интеграција", "sourcesIntegrationsLabel": "Извор интеграција",
"useAlternativeSources": "Користи алтернативне изворе",
"useAlternativeSourcesHint": "Користите алтернативне изворе за ReVanced печеве и ReVanced интеграције уместо API-ја",
"sourcesResetDialogTitle": "Ресетовање", "sourcesResetDialogTitle": "Ресетовање",
"sourcesResetDialogText": "Желите ли заиста да вратите изворе на подразумеване вредности?", "sourcesResetDialogText": "Желите ли заиста да вратите изворе на подразумеване вредности?",
"apiURLResetDialogText": "Желите ли заиста да вратите URL API-ја на подразумевану вредност?", "apiURLResetDialogText": "Желите ли заиста да вратите URL API-ја на подразумевану вредност?",
"sourcesUpdateNote": "Напомена: печеви ће се аутоматски ажурирати на најновију верзију. \n\nОвим ћете открити своју IP адресу серверу.", "sourcesUpdateNote": "Напомена: Ово ће аутоматски преузети ReVanced печеве и ReVanced интеграције из алтернативних извора.\n\nОво ће вас повезати са алтернативним извором.",
"apiURLLabel": "URL API-ја", "apiURLLabel": "URL API-ја",
"apiURLHint": "Подесите URL API-ја за коришћење", "apiURLHint": "Конфигуришите URL API-ја за ReVanced Manager",
"selectApiURL": "URL API-ја", "selectApiURL": "URL API-ја",
"hostRepositoryLabel": "Репозиторијум API-ја",
"orgPatchesLabel": "Организација за печеве", "orgPatchesLabel": "Организација за печеве",
"sourcesPatchesLabel": "Извор печева", "sourcesPatchesLabel": "Извор печева",
"orgIntegrationsLabel": "Организација за интеграције", "orgIntegrationsLabel": "Организација за интеграције",
@@ -229,7 +231,7 @@
"resetStoredOptionsDialogTitle": "Ресетовати опције печа?", "resetStoredOptionsDialogTitle": "Ресетовати опције печа?",
"resetStoredOptionsDialogText": "Ресетовањем опција печа уклањате све сачуване опције.", "resetStoredOptionsDialogText": "Ресетовањем опција печа уклањате све сачуване опције.",
"resetStoredOptions": "Опције су ресетоване", "resetStoredOptions": "Опције су ресетоване",
"deleteLogsLabel": "Обриши евиденције", "deleteLogsLabel": "Избриши евиденције",
"deleteLogsHint": "Избришите прикупљене евиденције ReVanced Manager-а", "deleteLogsHint": "Избришите прикупљене евиденције ReVanced Manager-а",
"deletedLogs": "Евиденције су избрисане", "deletedLogs": "Евиденције су избрисане",
"regenerateKeystoreLabel": "Генериши ново складиште кључева", "regenerateKeystoreLabel": "Генериши ново складиште кључева",

View File

@@ -164,6 +164,7 @@
"debugSectionTitle": "Felsökning", "debugSectionTitle": "Felsökning",
"advancedSectionTitle": "Avancerat", "advancedSectionTitle": "Avancerat",
"exportSectionTitle": "Importera och exportera", "exportSectionTitle": "Importera och exportera",
"dataSectionTitle": "Datakällor",
"themeModeLabel": "Apptema", "themeModeLabel": "Apptema",
"systemThemeLabel": "System", "systemThemeLabel": "System",
"lightThemeLabel": "Ljust", "lightThemeLabel": "Ljust",
@@ -173,17 +174,18 @@
"languageLabel": "Språk", "languageLabel": "Språk",
"languageUpdated": "Språket uppdaterat", "languageUpdated": "Språket uppdaterat",
"englishOption": "Engelska", "englishOption": "Engelska",
"sourcesLabel": "Källor", "sourcesLabel": "Alternativa källor",
"sourcesLabelHint": "Konfigurera källan för patchar och integrationer", "sourcesLabelHint": "Konfigurera alternativa källor för ReVanced patches och ReVanced integrations",
"sourcesIntegrationsLabel": "Källa för integrationer", "sourcesIntegrationsLabel": "Källa för integrationer",
"useAlternativeSources": "Använd alternativa källor",
"useAlternativeSourcesHint": "Använd alternativa källor för ReVanced patches och ReVanced integrationer i stället för API",
"sourcesResetDialogTitle": "Återställ", "sourcesResetDialogTitle": "Återställ",
"sourcesResetDialogText": "Är du säker på att du vill återställa dina källorna till deras standardvärden?", "sourcesResetDialogText": "Är du säker på att du vill återställa dina källorna till deras standardvärden?",
"apiURLResetDialogText": "Är du säker att du vill återställa API-webbadressen till standardvärdet?", "apiURLResetDialogText": "Är du säker att du vill återställa API-webbadressen till standardvärdet?",
"sourcesUpdateNote": "Obs: Patches kommer att uppdateras till den senaste versionen automatiskt.\n\nDetta kommer att avslöja din IP-adress för servern.", "sourcesUpdateNote": "Obs: Detta kommer automatiskt att ladda ner ReVanced patches och ReVanced integrationer från alternativa källor.\n\nDetta kommer att ansluta dig till den alternativa källan.",
"apiURLLabel": "API-webbadress", "apiURLLabel": "API-webbadress",
"apiURLHint": "Konfigurera webbadressen till API:et som ska användas", "apiURLHint": "Konfigurera API-webbadressen för ReVanced-hanterare",
"selectApiURL": "API-webbadress", "selectApiURL": "API-webbadress",
"hostRepositoryLabel": "Förvarings-API",
"orgPatchesLabel": "Organisation för patchar", "orgPatchesLabel": "Organisation för patchar",
"sourcesPatchesLabel": "Källa för patchar", "sourcesPatchesLabel": "Källa för patchar",
"orgIntegrationsLabel": "Organisation för integrationer", "orgIntegrationsLabel": "Organisation för integrationer",

View File

@@ -87,12 +87,10 @@
"darkThemeLabel": "ธีมมืด", "darkThemeLabel": "ธีมมืด",
"dynamicThemeHint": "เพลิดเพลินกับประสบการณ์ที่ใกล้ชิดกับอุปกรณ์ของคุณมากขึ้น", "dynamicThemeHint": "เพลิดเพลินกับประสบการณ์ที่ใกล้ชิดกับอุปกรณ์ของคุณมากขึ้น",
"languageLabel": "ภาษา", "languageLabel": "ภาษา",
"sourcesLabel": "แหล่งที่มา",
"sourcesIntegrationsLabel": "ที่มาของส่วนเสริม", "sourcesIntegrationsLabel": "ที่มาของส่วนเสริม",
"sourcesResetDialogTitle": "รีเซ็ต", "sourcesResetDialogTitle": "รีเซ็ต",
"apiURLLabel": "URL ของ API", "apiURLLabel": "URL ของ API",
"selectApiURL": "URL ของ API", "selectApiURL": "URL ของ API",
"hostRepositoryLabel": "API ที่เก็บข้อมูล",
"orgPatchesLabel": "ผู้ดูแลการดัดแปลง", "orgPatchesLabel": "ผู้ดูแลการดัดแปลง",
"sourcesPatchesLabel": "ที่มาของการดัดแปลง", "sourcesPatchesLabel": "ที่มาของการดัดแปลง",
"orgIntegrationsLabel": "ผู้ดูแลส่วนเสริม", "orgIntegrationsLabel": "ผู้ดูแลส่วนเสริม",

View File

@@ -35,7 +35,7 @@
"installUpdate": "Güncelleme yüklensin mi?", "installUpdate": "Güncelleme yüklensin mi?",
"updateSheetTitle": "ReVanced Manager'ı güncelle", "updateSheetTitle": "ReVanced Manager'ı güncelle",
"updateDialogTitle": "Yeni güncelleme mevcut", "updateDialogTitle": "Yeni güncelleme mevcut",
"updatePatchesSheetTitle": "ReVanced Yamaları'nı güncelle", "updatePatchesSheetTitle": "ReVanced Patches'ı güncelle",
"updateChangelogTitle": "Değişiklikler", "updateChangelogTitle": "Değişiklikler",
"updateDialogText": "${file} için yeni bir güncelleme mevcut.\n\nŞu anda kurulu olan sürüm: ${version}.", "updateDialogText": "${file} için yeni bir güncelleme mevcut.\n\nŞu anda kurulu olan sürüm: ${version}.",
"downloadConsentDialogTitle": "Gerekli dosyalar indirilsin mi?", "downloadConsentDialogTitle": "Gerekli dosyalar indirilsin mi?",
@@ -96,9 +96,9 @@
"selectFromStorageButton": "Depolama alanından seçin", "selectFromStorageButton": "Depolama alanından seçin",
"errorMessage": "Seçilen uygulama kullanılamıyor", "errorMessage": "Seçilen uygulama kullanılamıyor",
"downloadToast": "İndirme özelliği henüz kullanılamıyor", "downloadToast": "İndirme özelliği henüz kullanılamıyor",
"requireSuggestedAppVersionDialogText": "Seçtiğiniz uygulamanın sürümü, önerilen sürümle eşleşmiyor. Lütfen önerilen sürümle eşleşen sürümünü seçin.\n\nSeçilen sürüm: v${selected}\nÖnerilen sürüm: v${suggested}\n\nYine de devam etmek istiyorsanız, ayarlardan \"Önerilen uygulama sürümünü zorunlu kıl\" seçeneğini devre dışı bırakın.", "requireSuggestedAppVersionDialogText": "Seçtiğiniz uygulamanın sürümü, önerilen sürümle eşleşmiyor ve bu durum beklenmeyen sorunlara yol açabilir. Lütfen önerilen sürümü kullanın.\n\nSeçilen sürüm: ${selected}\nÖnerilen sürüm: ${suggested}\n\nYine de devam etmek istiyorsanız, ayarlarda \"Önerilen uygulama sürümünü zorunlu kıl\" seçeneğini devre dışı bırakın.",
"featureNotAvailable": "Özellik henüz etkin değil", "featureNotAvailable": "Özellik henüz etkin değil",
"featureNotAvailableText": "Bu uygulama bir bölünmüş APK ve yalnızca root izinleriyle eksiksizce yamalanıp yüklenebilir. Tam APK'yı depolamadan seçerek yamalayabilir ve yükleyebilirsiniz." "featureNotAvailableText": "Bu uygulama bir split APK'dır ve yalnızca root izinleriyle yamalanıp, mount yöntemiyle kurulabilir. Yine de, bir tam APK'yı depolamadan seçerek yamalayabilir ve kurabilirsiniz."
}, },
"patchesSelectorView": { "patchesSelectorView": {
"viewTitle": "Yamaları seçin", "viewTitle": "Yamaları seçin",
@@ -135,7 +135,7 @@
"unsupportedDialogText": "Bu yamayı seçmek yamalama hatalarına sebep olabilir.\n\nUygulama sürümü: ${packageVersion}\nDesteklenen sürümler:\n${supportedVersions}", "unsupportedDialogText": "Bu yamayı seçmek yamalama hatalarına sebep olabilir.\n\nUygulama sürümü: ${packageVersion}\nDesteklenen sürümler:\n${supportedVersions}",
"unsupportedPatchVersion": "Yama, uygulamanın bu sürümü için desteklenmiyor.", "unsupportedPatchVersion": "Yama, uygulamanın bu sürümü için desteklenmiyor.",
"unsupportedRequiredOption": "Bu yama, bu uygulama tarafından desteklenmeyen fakat gerekli olan bir seçenek içeriyor", "unsupportedRequiredOption": "Bu yama, bu uygulama tarafından desteklenmeyen fakat gerekli olan bir seçenek içeriyor",
"patchesChangeWarningDialogText": "Varsayılan yama seçeneklerini kullanmanız önerilir. Bunları değiştirmek beklenmedik sorunlara yol açabilir.\n\nHerhangi bir yama seçimini değiştirmeden önce ayarlarda \"Yama seçimini değiştirmeye izin ver\" seçeneğini açmanız gerekir.", "patchesChangeWarningDialogText": "Varsayılan yama seçimini ve seçeneklerini kullanmanız önerilir. Bunları değiştirmek beklenmedik sorunlara yol açabilir.\n\nHerhangi bir yama seçimini değiştirmeden önce ayarlarda \"Yama seçimini değiştirmeye izin ver\" seçeneğini açmanız gerekir.",
"patchesChangeWarningDialogButton": "Varsayılan seçimi kullan" "patchesChangeWarningDialogButton": "Varsayılan seçimi kullan"
}, },
"installerView": { "installerView": {
@@ -164,6 +164,7 @@
"debugSectionTitle": "Hata ayıklama", "debugSectionTitle": "Hata ayıklama",
"advancedSectionTitle": "Gelişmiş", "advancedSectionTitle": "Gelişmiş",
"exportSectionTitle": "İçe ve dışa aktar", "exportSectionTitle": "İçe ve dışa aktar",
"dataSectionTitle": "Veri kaynakları",
"themeModeLabel": "Uygulama teması", "themeModeLabel": "Uygulama teması",
"systemThemeLabel": "Sistem", "systemThemeLabel": "Sistem",
"lightThemeLabel": "Aydınlık", "lightThemeLabel": "Aydınlık",
@@ -173,24 +174,25 @@
"languageLabel": "Dil", "languageLabel": "Dil",
"languageUpdated": "Dil güncellendi", "languageUpdated": "Dil güncellendi",
"englishOption": "İngilizce", "englishOption": "İngilizce",
"sourcesLabel": "Kaynaklar", "sourcesLabel": "Alternatif kaynaklar",
"sourcesLabelHint": "Yamaların ve Integrations'ın kaynağını ayarlayın", "sourcesLabelHint": "ReVanced Patches ve ReVanced Integrations için alternatif kaynakları ayarlayın",
"sourcesIntegrationsLabel": "Integrations kaynağı", "sourcesIntegrationsLabel": "Integrations source",
"useAlternativeSources": "Alternatif kaynakları kullan",
"useAlternativeSourcesHint": "ReVanced Patches ve ReVanced Integrations için API yerine alternatif kaynakları kullanın",
"sourcesResetDialogTitle": "Sıfırla", "sourcesResetDialogTitle": "Sıfırla",
"sourcesResetDialogText": "Kaynaklarınızı varsayılan değerlerine sıfırlamak istediğinizden emin misiniz?", "sourcesResetDialogText": "Kaynaklarınızı varsayılan değerlerine sıfırlamak istediğinizden emin misiniz?",
"apiURLResetDialogText": "API URL'nizi varsayılan değerine sıfırlamak istediğinizden emin misiniz?", "apiURLResetDialogText": "API URL'nizi varsayılan değerine sıfırlamak istediğinizden emin misiniz?",
"sourcesUpdateNote": "Not: Yamalar otomatik olarak en son sürüme güncellenecektir.\n\nBu, IP adresinizi sunucuya gösterecektir.", "sourcesUpdateNote": "Not: Bu, ReVanced Patches'ı ve ReVanced Integrations'ı otomatik olarak alternatif kaynaklardan indirecektir.\n\nBu sizi alternatif kaynağa bağlayacaktır.",
"apiURLLabel": "API URL'si", "apiURLLabel": "API URL'si",
"apiURLHint": "Kullanılacak API'nin URL'sini ayarlayın", "apiURLHint": "ReVanced Manager'in API URL'sini ayarlayın",
"selectApiURL": "API URL'si", "selectApiURL": "API URL'si",
"hostRepositoryLabel": "Repository API'si", "orgPatchesLabel": "Patches organization",
"orgPatchesLabel": "Yama organizasyonu", "sourcesPatchesLabel": "Patches source",
"sourcesPatchesLabel": "Yama kaynağı", "orgIntegrationsLabel": "Integrations organization",
"orgIntegrationsLabel": "Integrations organizasyonu",
"contributorsLabel": "Katkıda bulunanlar", "contributorsLabel": "Katkıda bulunanlar",
"contributorsHint": "ReVanced'a katkıda bulunanların listesi", "contributorsHint": "ReVanced'a katkıda bulunanların listesi",
"logsLabel": "Logları paylaş", "logsLabel": "Logları paylaş",
"logsHint": "ReVanced Manager loglarını paylaş", "logsHint": "ReVanced Manager loglarını paylaşın",
"enablePatchesSelectionLabel": "Yama seçimini değiştirmeye izin ver", "enablePatchesSelectionLabel": "Yama seçimini değiştirmeye izin ver",
"enablePatchesSelectionHint": "Yamaların seçilmesini veya seçiminin kaldırılmasını engelleme", "enablePatchesSelectionHint": "Yamaların seçilmesini veya seçiminin kaldırılmasını engelleme",
"enablePatchesSelectionWarningText": "Yama seçimini değiştirmek beklenmedik sorunlara yol açabilir.\n\nYine de etkinleştirilsin mi?", "enablePatchesSelectionWarningText": "Yama seçimini değiştirmek beklenmedik sorunlara yol açabilir.\n\nYine de etkinleştirilsin mi?",
@@ -198,7 +200,7 @@
"autoUpdatePatchesLabel": "Yamaları otomatik güncelle", "autoUpdatePatchesLabel": "Yamaları otomatik güncelle",
"autoUpdatePatchesHint": "Yamaları otomatik olarak en son sürüme güncelle", "autoUpdatePatchesHint": "Yamaları otomatik olarak en son sürüme güncelle",
"showUpdateDialogLabel": "Güncelleme penceresini göster", "showUpdateDialogLabel": "Güncelleme penceresini göster",
"showUpdateDialogHint": "Yeni bir güncelleme olduğunda bir diyalog göster", "showUpdateDialogHint": "Yeni bir güncelleme mevcut olduğunda bir pencere göster",
"universalPatchesLabel": "Ortak yamaları göster", "universalPatchesLabel": "Ortak yamaları göster",
"universalPatchesHint": "Tüm uygulamaları ve ortak yamaları göster (uygulamaları listelemeyi yavaşlatabilir)", "universalPatchesHint": "Tüm uygulamaları ve ortak yamaları göster (uygulamaları listelemeyi yavaşlatabilir)",
"versionCompatibilityCheckLabel": "Sürüm uyumluluğu kontrolü", "versionCompatibilityCheckLabel": "Sürüm uyumluluğu kontrolü",
@@ -210,27 +212,27 @@
"snackbarMessage": "Panoya kopyalandı", "snackbarMessage": "Panoya kopyalandı",
"restartAppForChanges": "Değişiklikleri uygulamak için uygulamayı yeniden başlatın", "restartAppForChanges": "Değişiklikleri uygulamak için uygulamayı yeniden başlatın",
"deleteTempDirLabel": "Geçici dosyaları sil", "deleteTempDirLabel": "Geçici dosyaları sil",
"deleteTempDirHint": "Kullanılmayan geçici dosyaları sil", "deleteTempDirHint": "Kullanılmayan geçici dosyaları silin",
"deletedTempDir": "Geçici dosyalar silindi", "deletedTempDir": "Geçici dosyalar silindi",
"exportPatchesLabel": "Yama seçimini dışa aktar", "exportPatchesLabel": "Yama seçimini dışa aktar",
"exportPatchesHint": "Yama seçimini bir JSON dosyasına kaydet", "exportPatchesHint": "Yama seçimini bir JSON dosyasına kaydedin",
"exportedPatches": "Yama seçimi dışa aktarıldı", "exportedPatches": "Yama seçimi dışa aktarıldı",
"noExportFileFound": "Dışa aktarılabilecek yama seçimi yok", "noExportFileFound": "Dışa aktarılabilecek yama seçimi yok",
"importPatchesLabel": "Yama seçimini içe aktar", "importPatchesLabel": "Yama seçimini içe aktar",
"importPatchesHint": "Yama seçimini bir JSON dosyasından içe aktarın", "importPatchesHint": "Yama seçimini bir JSON dosyasından içe aktarın",
"importedPatches": "Yama seçimi içe aktarıldı", "importedPatches": "Yama seçimi içe aktarıldı",
"resetStoredPatchesLabel": "Yama seçimini sıfırla", "resetStoredPatchesLabel": "Yama seçimini sıfırla",
"resetStoredPatchesHint": "Mevcut yama seçimini sıfırla", "resetStoredPatchesHint": "Mevcut yama seçimini sıfırlayın",
"resetStoredPatchesDialogTitle": "Yama seçimi sıfırlansın mı?", "resetStoredPatchesDialogTitle": "Yama seçimi sıfırlansın mı?",
"resetStoredPatchesDialogText": "Varsayılan yama seçimi geri yüklenecektir.", "resetStoredPatchesDialogText": "Varsayılan yama seçimi geri yüklenecektir.",
"resetStoredPatches": "Yama seçimi sıfırlandı", "resetStoredPatches": "Yama seçimi sıfırlandı",
"resetStoredOptionsLabel": "Yama seçeneklerini sıfırla", "resetStoredOptionsLabel": "Yama seçeneklerini sıfırla",
"resetStoredOptionsHint": "Tüm yama seçeneklerini sıfırla", "resetStoredOptionsHint": "Tüm yama seçeneklerini sıfırlayın",
"resetStoredOptionsDialogTitle": "Yama seçenekleri sıfırlansın mı?", "resetStoredOptionsDialogTitle": "Yama seçenekleri sıfırlansın mı?",
"resetStoredOptionsDialogText": "Yama seçeneklerini sıfırlamak, kayıtlı tüm seçenekleri kaldıracaktır.", "resetStoredOptionsDialogText": "Yama seçeneklerini sıfırlamak, kayıtlı tüm seçenekleri kaldıracaktır.",
"resetStoredOptions": "Seçenekler sıfırlandı", "resetStoredOptions": "Seçenekler sıfırlandı",
"deleteLogsLabel": "Logları temizle", "deleteLogsLabel": "Logları temizle",
"deleteLogsHint": "Kayıtlı ReVanced Manager loglarını sil", "deleteLogsHint": "Kayıtlı ReVanced Manager loglarını silin",
"deletedLogs": "Loglar silindi", "deletedLogs": "Loglar silindi",
"regenerateKeystoreLabel": "Keystore'u yeniden oluştur", "regenerateKeystoreLabel": "Keystore'u yeniden oluştur",
"regenerateKeystoreHint": "Uygulamaları imzalamak için kullanılan keystore'u yeniden oluşturun", "regenerateKeystoreHint": "Uygulamaları imzalamak için kullanılan keystore'u yeniden oluşturun",

View File

@@ -65,7 +65,7 @@
}, },
"patcherView": { "patcherView": {
"widgetTitle": "Патчер", "widgetTitle": "Патчер",
"patchButton": "Патч", "patchButton": "Патчити",
"armv7WarningDialogText": "Патчінг на пристроях ARMv7 ще не підтримується і може не спрацювати. Продовжити в будь-якому випадку?", "armv7WarningDialogText": "Патчінг на пристроях ARMv7 ще не підтримується і може не спрацювати. Продовжити в будь-якому випадку?",
"removedPatchesWarningDialogText": "Наступні патчі було видалено з моменту останнього використання.\n\n${patches}\n\nВсе одно продовжити?", "removedPatchesWarningDialogText": "Наступні патчі було видалено з моменту останнього використання.\n\n${patches}\n\nВсе одно продовжити?",
"requiredOptionDialogText": "Потрібно встановити деякі параметри патчу." "requiredOptionDialogText": "Потрібно встановити деякі параметри патчу."
@@ -109,7 +109,7 @@
"doneButton": "Готово", "doneButton": "Готово",
"defaultChip": "За замовчуванням", "defaultChip": "За замовчуванням",
"defaultTooltip": "Обрати всі стандартні патчі", "defaultTooltip": "Обрати всі стандартні патчі",
"noneChip": "Відсутньо", "noneChip": "Скинути",
"noneTooltip": "Зняти вибір з усіх патчів", "noneTooltip": "Зняти вибір з усіх патчів",
"loadPatchesSelection": "Ввантажити вибір патчів", "loadPatchesSelection": "Ввантажити вибір патчів",
"noSavedPatches": "Немає збереженого вибору патчів для вибраного застосунку.\nНатисніть «Готово», щоб зберегти поточний вибір.", "noSavedPatches": "Немає збереженого вибору патчів для вибраного застосунку.\nНатисніть «Готово», щоб зберегти поточний вибір.",
@@ -164,6 +164,7 @@
"debugSectionTitle": "Налагодження", "debugSectionTitle": "Налагодження",
"advancedSectionTitle": "Розширені", "advancedSectionTitle": "Розширені",
"exportSectionTitle": "Імпорт та Експорт", "exportSectionTitle": "Імпорт та Експорт",
"dataSectionTitle": "Джерела даних",
"themeModeLabel": "Тема застосунку", "themeModeLabel": "Тема застосунку",
"systemThemeLabel": "Системна", "systemThemeLabel": "Системна",
"lightThemeLabel": "Світла", "lightThemeLabel": "Світла",
@@ -173,20 +174,21 @@
"languageLabel": "Мова", "languageLabel": "Мова",
"languageUpdated": "Мову застосунку оновлено", "languageUpdated": "Мову застосунку оновлено",
"englishOption": "Англійська", "englishOption": "Англійська",
"sourcesLabel": "Джерела", "sourcesLabel": "Альтернативні джерела",
"sourcesLabelHint": "Налаштування джерела патчів та інтеграцій", "sourcesLabelHint": "Налаштуйте альтернативні джерела для ReVanced Patches та ReVanced Integrations",
"sourcesIntegrationsLabel": "Джерело інтеграцій", "sourcesIntegrationsLabel": "Integrations source",
"useAlternativeSources": "Використовувати альтернативні джерела",
"useAlternativeSourcesHint": "Використовувати альтернативні джерела для ReVanced Patches та ReVanced Integrations замість API",
"sourcesResetDialogTitle": "Скинути", "sourcesResetDialogTitle": "Скинути",
"sourcesResetDialogText": "Ви дійсно бажаєте відновити стандартні значення джерел?", "sourcesResetDialogText": "Ви дійсно бажаєте відновити стандартні значення джерел?",
"apiURLResetDialogText": "Ви дійсно хочете скинути API URL на стандартне значення?", "apiURLResetDialogText": "Ви дійсно хочете скинути API URL на стандартне значення?",
"sourcesUpdateNote": "Примітка: Патчі буде оновлено автоматично до останньої версії.\n\nЦе розкриє вашу IP-адресу серверу.", "sourcesUpdateNote": "Примітка. Це автоматично завантажить ReVanced Patches і ReVanced Integrations з альтернативних джерел.\n\nЦе під'єднає вас до альтернативного джерела.",
"apiURLLabel": "URL-адреса API", "apiURLLabel": "URL-адреса API",
"apiURLHint": "Налаштування URL-адреси API для використання", "apiURLHint": "Налаштуйте API URL для ReVanced Manager",
"selectApiURL": "URL-адреса API", "selectApiURL": "URL-адреса API",
"hostRepositoryLabel": "API репозиторій", "orgPatchesLabel": "Patches organization",
"orgPatchesLabel": "Організація патчів", "sourcesPatchesLabel": "Patches source",
"sourcesPatchesLabel": "Джерело патчів", "orgIntegrationsLabel": "Integrations organization",
"orgIntegrationsLabel": "Організація інтеграцій",
"contributorsLabel": "Розробники", "contributorsLabel": "Розробники",
"contributorsHint": "Список розробників ReVanced", "contributorsHint": "Список розробників ReVanced",
"logsLabel": "Поділитися журналом", "logsLabel": "Поділитися журналом",
@@ -206,7 +208,7 @@
"requireSuggestedAppVersionLabel": "Вимагати запропоновану версію застосунку", "requireSuggestedAppVersionLabel": "Вимагати запропоновану версію застосунку",
"requireSuggestedAppVersionHint": "Запобігати вибору застосунку з не рекомендованою версією", "requireSuggestedAppVersionHint": "Запобігати вибору застосунку з не рекомендованою версією",
"requireSuggestedAppVersionDialogText": "Вибір застосунку не запропонованої версії може спричинити непередбачувані проблеми.\n\nВсе одно бажаєте продовжити?", "requireSuggestedAppVersionDialogText": "Вибір застосунку не запропонованої версії може спричинити непередбачувані проблеми.\n\nВсе одно бажаєте продовжити?",
"aboutLabel": "Про нас", "aboutLabel": "Про застосунок",
"snackbarMessage": "Скопійовано в буфер обміну", "snackbarMessage": "Скопійовано в буфер обміну",
"restartAppForChanges": "Перезапустіть застосунок, щоб застосувати зміни", "restartAppForChanges": "Перезапустіть застосунок, щоб застосувати зміни",
"deleteTempDirLabel": "Видалити тимчасові файли", "deleteTempDirLabel": "Видалити тимчасові файли",
@@ -262,7 +264,7 @@
"installTypeLabel": "Тип встановлення", "installTypeLabel": "Тип встановлення",
"mountTypeLabel": "Монтувати", "mountTypeLabel": "Монтувати",
"regularTypeLabel": "Звичайний", "regularTypeLabel": "Звичайний",
"patchedDateLabel": "Дата патчу", "patchedDateLabel": "Дата патчінгу",
"appliedPatchesLabel": "Застосовані патчі", "appliedPatchesLabel": "Застосовані патчі",
"patchedDateHint": "${date} о ${time}", "patchedDateHint": "${date} о ${time}",
"appliedPatchesHint": "${quantity} застосованих патчів", "appliedPatchesHint": "${quantity} застосованих патчів",

View File

@@ -164,6 +164,7 @@
"debugSectionTitle": "Gỡ Lỗi", "debugSectionTitle": "Gỡ Lỗi",
"advancedSectionTitle": "Nâng cao", "advancedSectionTitle": "Nâng cao",
"exportSectionTitle": "Nhập và xuất", "exportSectionTitle": "Nhập và xuất",
"dataSectionTitle": "Nguồn dữ liệu",
"themeModeLabel": "Chủ đề ứng dụng", "themeModeLabel": "Chủ đề ứng dụng",
"systemThemeLabel": "Hệ thống", "systemThemeLabel": "Hệ thống",
"lightThemeLabel": "Sáng", "lightThemeLabel": "Sáng",
@@ -173,17 +174,18 @@
"languageLabel": "Ngôn ngữ", "languageLabel": "Ngôn ngữ",
"languageUpdated": "Ngôn ngữ đã cập nhập", "languageUpdated": "Ngôn ngữ đã cập nhập",
"englishOption": "Tiếng Anh", "englishOption": "Tiếng Anh",
"sourcesLabel": "Nguồn", "sourcesLabel": "Nguồn thay thế",
"sourcesLabelHint": "Cấu hình nguồn các bản vátích hợp", "sourcesLabelHint": "Cấu hình nguồn thay thế cho Bản vá ReVancedTích hợp ReVanced",
"sourcesIntegrationsLabel": "Nguồn tích hợp", "sourcesIntegrationsLabel": "Nguồn tích hợp",
"useAlternativeSources": "Dùng nguồn thay thế",
"useAlternativeSourcesHint": "Dùng nguồn thay thế cho Bản vá ReVanced và Tích hợp ReVanced thay cho API",
"sourcesResetDialogTitle": "Đặt lại", "sourcesResetDialogTitle": "Đặt lại",
"sourcesResetDialogText": "Bạn có chắc chắn muốn đặt lại nguồn của mình về giá trị mặc định không?", "sourcesResetDialogText": "Bạn có chắc chắn muốn đặt lại nguồn của mình về giá trị mặc định không?",
"apiURLResetDialogText": "Bạn có chắc bạn muốn đặt lại API URL của bạn về giá trị mặc định của nó không?", "apiURLResetDialogText": "Bạn có chắc bạn muốn đặt lại API URL của bạn về giá trị mặc định của nó không?",
"sourcesUpdateNote": "Lưu ý: Bản vá ReVanced sẽ được cập nhật lên phiên bản mới nhất một cách tự động.\n\nĐiều này sẽ tiết lộ địa chỉ IP của bạn cho máy chủ.", "sourcesUpdateNote": "Lưu ý: Việc này sẽ tự động tải Bản vá ReVanced và Tích hợp ReVanced từ nguồn thay thế.",
"apiURLLabel": "Địa chỉ URL của API", "apiURLLabel": "Địa chỉ URL của API",
"apiURLHint": "Cấu hình URL của API để sử dụng", "apiURLHint": "Cấu hình địa chỉ URL API của ReVanced Manager",
"selectApiURL": "Địa chỉ URL của API", "selectApiURL": "Địa chỉ URL của API",
"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",

View File

@@ -137,12 +137,10 @@
"darkThemeLabel": "深色模式", "darkThemeLabel": "深色模式",
"dynamicThemeHint": "享受更贴近你的设备的体验", "dynamicThemeHint": "享受更贴近你的设备的体验",
"languageLabel": "语言", "languageLabel": "语言",
"sourcesLabel": "源",
"sourcesIntegrationsLabel": "集成源", "sourcesIntegrationsLabel": "集成源",
"sourcesResetDialogTitle": "重置", "sourcesResetDialogTitle": "重置",
"apiURLLabel": "API 地址", "apiURLLabel": "API 地址",
"selectApiURL": "API 地址", "selectApiURL": "API 地址",
"hostRepositoryLabel": "存储库 API",
"orgPatchesLabel": "补丁组织", "orgPatchesLabel": "补丁组织",
"sourcesPatchesLabel": "补丁来源", "sourcesPatchesLabel": "补丁来源",
"orgIntegrationsLabel": "集成组织", "orgIntegrationsLabel": "集成组织",

View File

@@ -123,14 +123,12 @@
"darkThemeLabel": "暗黑模式", "darkThemeLabel": "暗黑模式",
"dynamicThemeHint": "享受一個更貼近你裝置嘅體驗", "dynamicThemeHint": "享受一個更貼近你裝置嘅體驗",
"languageLabel": "語言", "languageLabel": "語言",
"sourcesLabel": "來源",
"sourcesIntegrationsLabel": "項目整合來源", "sourcesIntegrationsLabel": "項目整合來源",
"sourcesResetDialogTitle": "重設", "sourcesResetDialogTitle": "重設",
"sourcesResetDialogText": "真喺要重新設定你嘅來源返去預設值?", "sourcesResetDialogText": "真喺要重新設定你嘅來源返去預設值?",
"apiURLResetDialogText": "真喺要重新設定 API URL 返去預設值?", "apiURLResetDialogText": "真喺要重新設定 API URL 返去預設值?",
"apiURLLabel": "API URL", "apiURLLabel": "API URL",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"hostRepositoryLabel": "儲存庫 API",
"orgPatchesLabel": "修補檔組織", "orgPatchesLabel": "修補檔組織",
"sourcesPatchesLabel": "修補檔來源", "sourcesPatchesLabel": "修補檔來源",
"orgIntegrationsLabel": "項目整合組織", "orgIntegrationsLabel": "項目整合組織",

View File

@@ -164,6 +164,7 @@
"debugSectionTitle": "偵錯", "debugSectionTitle": "偵錯",
"advancedSectionTitle": "進階", "advancedSectionTitle": "進階",
"exportSectionTitle": "匯入和匯出", "exportSectionTitle": "匯入和匯出",
"dataSectionTitle": "資料來源",
"themeModeLabel": "應用程式主題", "themeModeLabel": "應用程式主題",
"systemThemeLabel": "系統預設", "systemThemeLabel": "系統預設",
"lightThemeLabel": "亮色模式", "lightThemeLabel": "亮色模式",
@@ -173,17 +174,18 @@
"languageLabel": "語言", "languageLabel": "語言",
"languageUpdated": "已更新語言", "languageUpdated": "已更新語言",
"englishOption": "英文", "englishOption": "英文",
"sourcesLabel": "來源", "sourcesLabel": "替代來源",
"sourcesLabelHint": "設定修補檔和整合功能的來源", "sourcesLabelHint": "設定 ReVanced 補丁和 ReVanced 整合的替代來源",
"sourcesIntegrationsLabel": "整合來源", "sourcesIntegrationsLabel": "整合來源",
"useAlternativeSources": "使用替代來源",
"useAlternativeSourcesHint": "改用 ReVanced 修補檔和 ReVanced 整合的替代來源,而不是 API",
"sourcesResetDialogTitle": "重設", "sourcesResetDialogTitle": "重設",
"sourcesResetDialogText": "確定要將來源資訊重設為預設值嗎?", "sourcesResetDialogText": "確定要將來源資訊重設為預設值嗎?",
"apiURLResetDialogText": "確定要重設 API URL 至預設值嗎?", "apiURLResetDialogText": "確定要重設 API URL 至預設值嗎?",
"sourcesUpdateNote": "注意:修補檔將自動更新至最新版本。\n\n此操作將向伺服器透露您的 IP 位址。", "sourcesUpdateNote": "注意:這將會自動從替代來源下載 ReVanced 修補檔和 ReVanced 整合。\n\n這將連接您到替代來源。",
"apiURLLabel": "API 鏈接", "apiURLLabel": "API 鏈接",
"apiURLHint": "設定要使用的 API 的網址", "apiURLHint": "設定 ReVanced 管理器的 API URL",
"selectApiURL": "API 鏈接", "selectApiURL": "API 鏈接",
"hostRepositoryLabel": "儲存庫 API",
"orgPatchesLabel": "修補檔組織", "orgPatchesLabel": "修補檔組織",
"sourcesPatchesLabel": "修補檔來源", "sourcesPatchesLabel": "修補檔來源",
"orgIntegrationsLabel": "整合組織", "orgIntegrationsLabel": "整合組織",
@@ -269,7 +271,12 @@
"updateNotImplemented": "這項功能尚未實作" "updateNotImplemented": "這項功能尚未實作"
}, },
"contributorsView": { "contributorsView": {
"widgetTitle": "貢獻者" "widgetTitle": "貢獻者",
"patcherContributors": "ReVanced 修補程式",
"patchesContributors": "ReVanced 補丁",
"integrationsContributors": "ReVanced 整合",
"cliContributors": "ReVanced 命令行介面",
"managerContributors": "ReVanced 管理器"
}, },
"installErrorDialog": { "installErrorDialog": {
"mount_version_mismatch": "版本不相符", "mount_version_mismatch": "版本不相符",

View File

@@ -1,16 +1,16 @@
# 💼 Prerequisites # 💼 Prerequisites
In order to use ReVanced Manager, certain requirements must be met. To use ReVanced Manager, you need to fulfill certain requirements.
## 🤝 Requirements ## 🤝 Requirements
- An Android device running Android 8 or higher - An Android device running Android 8 or higher
- Any device architecture except ARMv7[^1] - 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). [^1]: Patching on ARMv7 is limited to bytecode patching but may work in certain circumstances for resource patching. You can check your device architecture in ReVanced Manager settings.
## ⏭️ What's next ## ⏭️ What's next
The next page will guide you through patching an app. The next page will explain how to install ReVanced Manager.
Continue: [⬇️ Installation](1_installation.md) Continue: [⬇️ Installation](1_installation.md)

View File

@@ -1,14 +1,14 @@
# ⬇️ Installation # ⬇️ Installation
In order to use ReVanced on your Android device, ReVanced Manager must be installed. To use ReVanced on your Android device, ReVanced Manager must be first installed.
## ✅ Installation steps ## ✅ Installation steps
1. Download the latest version of ReVanced Manager from [here](https://github.com/revanced/revanced-manager/releases/latest) 1. Download the latest version of ReVanced Manager at [revanced.app/download](https://revanced.app/download) or from [GitHub releases](https://github.com/ReVanced/revanced-manager/releases)
2. Install ReVanced Manager 2. Install ReVanced Manager
## ⏭️ What's next ## ⏭️ What's next
The next page will guide you through using ReVanced Manager. The next page explain how to use ReVanced Manager to update ReVanced Manager and manage or patch apps.
Continue: [🛠️ Usage](2_usage.md) Continue: [🛠️ Usage](2_usage.md)

View File

@@ -1,6 +1,6 @@
# 🧩 Patching apps # 🧩 Patching apps
The following pages will guide you through using ReVanced Manager to patch apps. Learn how to use ReVanced Manager to patch apps.
## ✅ Steps to patch apps ## ✅ Steps to patch apps
@@ -25,12 +25,12 @@ The following pages will guide you through using ReVanced Manager to patch apps.
5. Tap on the **Done** then **Patch** button 5. Tap on the **Done** then **Patch** button
> ⚠️ Warning > ⚠️ Warning
> The patching process may take ~5 minutes. Exiting the app may cancel patching or increase the time it takes to patch significantly. > The patching process may take ~5 minutes. Exiting the app may cancel patching or increase the time it takes to patch significantly.
6. Tap on the **Install** button 6. Tap on the **Install** button
> Note > Note
> If you are rooted, you can mount the patched app on top of the original app.[^3] > 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 option in the bottom left corner. > Optionally, you may export the patched app to storage using the option in the bottom left corner.
@@ -40,6 +40,6 @@ The following pages will guide you through using ReVanced Manager to patch apps.
## ⏭️ What's next ## ⏭️ What's next
The next page will bring you back to the usage page. The next page will lead back to the usage page.
Continue: [🛠️ Usage](2_usage.md) Continue: [🛠️ Usage](2_usage.md)

View File

@@ -1,15 +1,15 @@
# 🧰 Managing patched apps # 🧰 Managing patched apps
After patching an app, you may want to manage it. This page will guide you through managing patched apps. Learn how to view, open and uninstall patched apps.
## ✅ Steps to manage patched apps ## ✅ Steps to view, open and uninstall patched apps
1. Tap on the **Dashboard** tab in the bottom navigation bar 1. Tap on the **Dashboard** tab in the bottom navigation bar
2. Tap on the **Info** button for the app you want to manage 2. Tap on the **Info** button for the app you want to manage
3. Choose one of the options from the menu 3. Choose any of the options from the menu to view, open or uninstall the app
## ⏭️ What's next ## ⏭️ What's next
The next page will bring you back to the usage page. The next page will lead back to the usage page.
Continue: [🛠️ Usage](2_usage.md) Continue: [🛠️ Usage](2_usage.md)

View File

@@ -1,6 +1,6 @@
# 🔄 Updating ReVanced Manager # 🔄 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. Learn how to update ReVanced Manager.
## ✅ Updating steps ## ✅ Updating steps
@@ -9,6 +9,6 @@ In order to keep up with the latest features and bug fixes, it is recommended to
## ⏭️ What's next ## ⏭️ What's next
The next page will bring you back to the usage page. The next page will lead back to the usage page.
Continue: [🛠️ Usage](2_usage.md) Continue: [🛠️ Usage](2_usage.md)

View File

@@ -1,52 +1,65 @@
# ⚙️ Configuring ReVanced Manager # ⚙️ Configuring ReVanced Manager
ReVanced Manager has settings that can be configured to your liking. Learn how to configure ReVanced Manager.
## 🎛️ Essential settings ## 🎛️ Essential settings
- ### 🪛 Allow changing patch selection - ### 🪛 Allow changing patch selection
Allows the user to change the patch selection from the default selection. By default, you can not change the patch selection and the default selection is used. Enabling this will allow you to change the patch selection.
- ### 🔍 Version compatibility check > ⚠️ Warning
> Changing the selection may cause unexpected issues. Unless you know what you are doing, it is recommended to keep this disabled.
Constrains patches to supported app versions. Disable this to patch any version of an app. - ### 📦 Require suggested app version
> [!WARNING] By default, ReVanced Manager allows you to patch an app if the suggested version to patch matches the version of the app you selected. Disabling this will allow you to patch an app even if the suggested version does not match the version of the app you selected.
> Disabling this may cause issues if the patches are not compatible with the app version.
> ⚠️ Warning
> Patches are more likely to fail on versions that are not suggested by ReVanced Manager. Unless you know what you are doing, it is recommended to keep this enabled.
- ### ✅ Version compatibility check
By default, ReVanced Manager does not allow you to select patches that are not compatible with the version of the app you selected. Disabling this will allow you to select patches that are not compatible with the version of the app you selected.
> ⚠️ Warning
> Patches are more likely to fail on versions they are not compatible with. Unless you know what you are doing, it is recommended to keep this enabled.
- ### 🧑‍🔬 Show universal patches - ### 🧑‍🔬 Show universal patches
Reveals patches which can be applied to any app. By default, ReVanced Manager only shows patches that are compatible with specific apps. Enabling this will show patches that are intended to work on all apps.
> [!WARNING] > ⚠️ Warning
> These patches may not work on all apps. > Patches that are intended to may not work on all apps. Unless you know what you are doing, it is recommended to keep this disabled.
- ### 🧬 Sources
Override the API and download patches from a different source.
- ### 🔗 API URL - ### 🔗 API URL
API to use to fetch updates and patches from. Configure the API URL to use. The API is used to download patches and updates.
- ### 💾 Imports & Exports - ### 🧬 Use alternative source
You can import, export or reset the following settings: Use alternative sources for patches and integrations instead of the API.
- 🔑 Keystore > Note
- 📄 Patch selection > ReVanced Manager will still use the API for updates.
- ⚙️ Patch options
> [!NOTE] - ### 💾 Import, export and reset options
> This is particularly useful if you want to backup or reset your settings.
You can import, export or reset saved settings. This includes:
- 🔑 Keystore used to sign patched apps
- 📄 Remembered selection of patches for each app
- ⚙️ Remembered patch options
> Note
> These can be used to backup and restore or reset settings to default in case of issues.
- ### ❓ About - ### ❓ About
View information about your device and ReVanced Manager. This includes the version of ReVanced Manager and supported architectures of your device. View information about your device and ReVanced Manager. This includes the version of ReVanced Manager and architectures your device supports.
## ⏭️ What's next ## ⏭️ What's next
The next page will bring you back to the usage page. The next page will lead back to the usage page.
Continue: [🛠️ Usage](2_usage.md) Continue: [🛠️ Usage](2_usage.md)

View File

@@ -1,6 +1,6 @@
# 🛠️ Usage # 🛠️ Usage
The following pages will guide you through using ReVanced Manager to patch apps, manage patched apps, and update ReVanced Manager. Learn how to use ReVanced Manager to manage and patch apps or update ReVanced Manager.
## 📖 Table of contents ## 📖 Table of contents
@@ -11,6 +11,6 @@ The following pages will guide you through using ReVanced Manager to patch apps,
## ⏭️ What's next ## ⏭️ What's next
The next page will guide you through troubleshooting ReVanced Manager. The next page will explain how to troubleshoot issues with ReVanced Manager.
Continue: [❔ Troubleshooting](3_troubleshooting.md) Continue: [❔ Troubleshooting](3_troubleshooting.md)

View File

@@ -1,26 +1,27 @@
# ❔ Troubleshooting # ❔ Troubleshooting
In case you encounter any issues while using ReVanced Manager, please refer to this page for possible solutions. In case you encounter any issues while using ReVanced Manager, this page will help you troubleshoot them.
- 💉 Patching fails with an error - 💉 Common issues during or after patching
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. - Make sure ReVanced Manager is up to date by following [🔄 Updating ReVanced Manager](2_3_updating.md)
- You may have changed settings in ReVanced Manager that are not recommended to change. Please review the warnings that appear when adjusting these settings and reset them to their default configuration as explained in [⚙️ Configuring ReVanced Manager](2_4_settings.md)
- 🚫 App not installed as package conflicts with an existing package - 🚫 App not installed as package conflicts with an existing package
An existing installation of the app you're trying to patch conflicts with the patched app (i.e., signature mismatch or downgrade). Uninstall the existing app before installing the patched app. An existing installation of the app you're trying to patch conflicts with the patched app (i.e., signature mismatch or downgrade). Uninstall the existing app before installing the patched app.
> 💡 Tip
> This may also be caused by changing settings in ReVanced Manager that are not recommended to change. Please review the warnings that appear when adjusting these settings and reset them to their default configuration as explained in [⚙️ Configuring ReVanced Manager](2_4_settings.md)
- ❗️ Error code `135`, `139` or `1` when patching the app - ❗️ Error code `135`, `139` or `1` when patching the app
You may be trying to patch a split APK[^1]. This may not work under certain circumstances. In such a case, patch a full APK. - You may be trying to patch a split APK[^1]. This can fail under certain circumstances. If that is the case, patch a full APK
- Your device may otherwise be unsupported. Please look at the [Prerequisites](0_prerequisites.md) page to see if your device is supported. Alternatively, you can use [ReVanced CLI](https://github.com/revanced/revanced-cli) to patch the app.
Your device may otherwise be unsupported. Please look at 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.
- 🚨 Patched app crashes on launch - 🚨 Patched app crashes on launch
Select the **Default** button when choosing patches. This may also be caused by changing settings in ReVanced Manager that are not recommended to change. Please review the warnings that appear when adjusting these settings and reset them to their default configuration as explained in [⚙️ Configuring ReVanced Manager](2_4_settings.md)
## ⏭️ What's next ## ⏭️ What's next

View File

@@ -1,37 +1,41 @@
# 🛠️ Building from source # 🛠️ Building from source
This page will guide you through building ReVanced Manager from source. Learn how to build ReVanced Manager from source.
1\. Setup the Flutter environment for your [platform](https://docs.flutter.dev/get-started/install) 1. Setup the Flutter environment for your [platform](https://docs.flutter.dev/get-started/install)
2\. Clone the repository 2. Clone the repository
```sh ```sh
git clone https://github.com/revanced/revanced-manager.git && cd revanced-manager git clone https://github.com/revanced/revanced-manager.git && cd revanced-manager
``` ```
3\. Get dependencies
3. Get dependencies
```sh ```sh
flutter pub get flutter pub get
``` ```
4\. Generate translation file 4. Generate temporary files
```sh ```sh
dart run slang dart run slang
dart run build_runner build -d
``` ```
5\. Delete conflicting outputs 5. Build the APK
> [!TIP]
> Must be run every time you sync your local repository with the remote repository.
```sh
dart run build_runner build --delete-conflicting-outputs
```
6\. Build the APK
```sh ```sh
flutter build apk flutter build apk
``` ```
> [!NOTE]
> If the build fails due to authentication, you may need to authenticate to GitHub Packages.
> Create a PAT with the scope `read:packages` [here](https://github.com/settings/tokens/new?scopes=read:packages&description=ReVanced) and add your token to ~/.gradle/gradle.properties.
>
> Example `gradle.properties` file:
>
> ```properties
> gpr.user = user
> gpr.key = key
> ```

View File

@@ -85,6 +85,9 @@ class GithubAPI {
updates++; updates++;
} }
for (int i = 1; i < updates; i++) { for (int i = 1; i < updates; i++) {
if (response.data[i]['prerelease']) {
continue;
}
releases.update( releases.update(
'body', 'body',
(value) => (value) =>

View File

@@ -669,7 +669,7 @@ class ManagerAPI {
); );
} }
Future<void> rePatchedSavedApps() async { Future<void> reAssessPatchedApps() async {
final List<PatchedApplication> patchedApps = getPatchedApps(); final List<PatchedApplication> patchedApps = getPatchedApps();
// Remove apps that are not installed anymore. // Remove apps that are not installed anymore.

View File

@@ -171,26 +171,26 @@ class PatcherAPI {
if (integrationsFile != null) { if (integrationsFile != null) {
_dataDir.createSync(); _dataDir.createSync();
_tmpDir.createSync(); _tmpDir.createSync();
final Directory workDir = _tmpDir.createTempSync('tmp-'); final Directory workDir = await _tmpDir.createTemp('tmp-');
final File inputFile = File('${workDir.path}/base.apk');
final File patchedFile = File('${workDir.path}/patched.apk'); final File inApkFile = File('${workDir.path}/in.apk');
await File(apkFilePath).copy(inApkFile.path);
outFile = File('${workDir.path}/out.apk'); outFile = File('${workDir.path}/out.apk');
final Directory cacheDir = Directory('${workDir.path}/cache');
cacheDir.createSync(); final Directory tmpDir =
final String originalFilePath = apkFilePath; Directory('${workDir.path}/revanced-temporary-files');
try { try {
await patcherChannel.invokeMethod( await patcherChannel.invokeMethod(
'runPatcher', 'runPatcher',
{ {
'originalFilePath': originalFilePath, 'inFilePath': inApkFile.path,
'inputFilePath': inputFile.path,
'patchedFilePath': patchedFile.path,
'outFilePath': outFile!.path, 'outFilePath': outFile!.path,
'integrationsPath': integrationsFile.path, 'integrationsPath': integrationsFile.path,
'selectedPatches': selectedPatches.map((p) => p.name).toList(), 'selectedPatches': selectedPatches.map((p) => p.name).toList(),
'options': options, 'options': options,
'cacheDirPath': cacheDir.path, 'tmpDirPath': tmpDir.path,
'keyStoreFilePath': _keyStoreFile.path, 'keyStoreFilePath': _keyStoreFile.path,
'keystorePassword': _managerAPI.getKeystorePassword(), 'keystorePassword': _managerAPI.getKeystorePassword(),
}, },
@@ -300,6 +300,18 @@ class PatcherAPI {
); );
bool cleanInstall = false; bool cleanInstall = false;
final bool isFixable = statusCode == 4 || statusCode == 5; final bool isFixable = statusCode == 4 || statusCode == 5;
var description = t['installErrorDialog.${statusValue}_description'];
if (statusCode == 2) {
description = description(
packageName: statusCode == 2
? {
'packageName': status['otherPackageName'],
}
: null,
);
}
await showDialog( await showDialog(
context: _managerAPI.ctx!, context: _managerAPI.ctx!,
builder: (context) => AlertDialog( builder: (context) => AlertDialog(
@@ -309,15 +321,7 @@ class PatcherAPI {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: [ children: [
Text( Text(description),
t['installErrorDialog.${statusValue}_description'](
packageName: statusCode == 2
? {
'packageName': status['otherPackageName'],
}
: null,
),
),
], ],
), ),
actions: (status == null) actions: (status == null)
@@ -462,7 +466,6 @@ enum InstallStatus {
mountNoRoot(1), mountNoRoot(1),
mountVersionMismatch(1.1), mountVersionMismatch(1.1),
mountMissingInstallation(1.2), mountMissingInstallation(1.2),
statusFailureBlocked(2), statusFailureBlocked(2),
installFailedVerificationFailure(3.1), installFailedVerificationFailure(3.1),
statusFailureInvalid(4), statusFailureInvalid(4),
@@ -473,6 +476,7 @@ enum InstallStatus {
statusFailureTimeout(8); statusFailureTimeout(8);
const InstallStatus(this.statusCode); const InstallStatus(this.statusCode);
final double statusCode; final double statusCode;
static String byCode(num code) { static String byCode(num code) {

View File

@@ -2,13 +2,10 @@ import 'dart:ui';
import 'package:dynamic_color/dynamic_color.dart'; import 'package:dynamic_color/dynamic_color.dart';
import 'package:dynamic_themes/dynamic_themes.dart'; import 'package:dynamic_themes/dynamic_themes.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:revanced_manager/app/app.locator.dart';
import 'package:revanced_manager/app/app.router.dart'; import 'package:revanced_manager/app/app.router.dart';
import 'package:revanced_manager/gen/strings.g.dart'; import 'package:revanced_manager/gen/strings.g.dart';
import 'package:revanced_manager/services/manager_api.dart';
import 'package:revanced_manager/theme.dart'; import 'package:revanced_manager/theme.dart';
import 'package:stacked_services/stacked_services.dart'; import 'package:stacked_services/stacked_services.dart';
@@ -28,7 +25,6 @@ class DynamicThemeBuilder extends StatefulWidget {
class _DynamicThemeBuilderState extends State<DynamicThemeBuilder> class _DynamicThemeBuilderState extends State<DynamicThemeBuilder>
with WidgetsBindingObserver { with WidgetsBindingObserver {
Brightness brightness = PlatformDispatcher.instance.platformBrightness; Brightness brightness = PlatformDispatcher.instance.platformBrightness;
final ManagerAPI _managerAPI = locator<ManagerAPI>();
@override @override
void initState() { void initState() {
@@ -36,22 +32,6 @@ class _DynamicThemeBuilderState extends State<DynamicThemeBuilder>
WidgetsBinding.instance.addObserver(this); WidgetsBinding.instance.addObserver(this);
} }
@override
void didChangePlatformBrightness() {
setState(() {
brightness = PlatformDispatcher.instance.platformBrightness;
});
if (_managerAPI.getThemeMode() < 2) {
SystemChrome.setSystemUIOverlayStyle(
SystemUiOverlayStyle(
systemNavigationBarIconBrightness: brightness == Brightness.light
? Brightness.dark
: Brightness.light,
),
);
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return DynamicColorBuilder( return DynamicColorBuilder(
@@ -70,6 +50,7 @@ class _DynamicThemeBuilderState extends State<DynamicThemeBuilder>
textTheme: GoogleFonts.robotoTextTheme(ThemeData.light().textTheme), textTheme: GoogleFonts.robotoTextTheme(ThemeData.light().textTheme),
); );
final ThemeData darkDynamicTheme = ThemeData( final ThemeData darkDynamicTheme = ThemeData(
brightness: Brightness.dark,
useMaterial3: true, useMaterial3: true,
navigationBarTheme: NavigationBarThemeData( navigationBarTheme: NavigationBarThemeData(
labelTextStyle: MaterialStateProperty.all( labelTextStyle: MaterialStateProperty.all(

View File

@@ -78,7 +78,7 @@ class _AppSelectorViewState extends State<AppSelectorView> {
), ),
), ),
) )
: model.allApps.isEmpty : model.allApps.isEmpty && model.apps.isEmpty
? const AppSkeletonLoader() ? const AppSkeletonLoader()
: Padding( : Padding(
padding: const EdgeInsets.symmetric(horizontal: 12.0) padding: const EdgeInsets.symmetric(horizontal: 12.0)

View File

@@ -54,7 +54,7 @@ class AppSelectorViewModel extends BaseViewModel {
.toSet() .toSet()
.where((name) => !apps.any((app) => app.packageName == name)) .where((name) => !apps.any((app) => app.packageName == name))
.toList(); .toList();
noApps = allApps.isEmpty; noApps = allApps.isEmpty && apps.isEmpty;
return allApps; return allApps;
} }

View File

@@ -43,7 +43,7 @@ class HomeViewModel extends BaseViewModel {
File? downloadedApk; File? downloadedApk;
Future<void> initialize(BuildContext context) async { Future<void> initialize(BuildContext context) async {
_managerAPI.rePatchedSavedApps().then((_) => _getPatchedApps()); _managerAPI.reAssessPatchedApps().then((_) => getPatchedApps());
_currentManagerVersion = await _managerAPI.getCurrentManagerVersion(); _currentManagerVersion = await _managerAPI.getCurrentManagerVersion();
if (!_managerAPI.getDownloadConsent()) { if (!_managerAPI.getDownloadConsent()) {
await showDownloadConsent(context); await showDownloadConsent(context);
@@ -122,7 +122,7 @@ class HomeViewModel extends BaseViewModel {
locator<NavigationViewModel>().setIndex(1); locator<NavigationViewModel>().setIndex(1);
} }
void _getPatchedApps() { void getPatchedApps() {
patchedInstalledApps = _managerAPI.getPatchedApps().toList(); patchedInstalledApps = _managerAPI.getPatchedApps().toList();
notifyListeners(); notifyListeners();
} }
@@ -463,6 +463,7 @@ class HomeViewModel extends BaseViewModel {
]) { ]) {
return showModalBottomSheet( return showModalBottomSheet(
context: parentContext, context: parentContext,
useSafeArea: true,
isScrollControlled: true, isScrollControlled: true,
shape: const RoundedRectangleBorder( shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(top: Radius.circular(24.0)), borderRadius: BorderRadius.vertical(top: Radius.circular(24.0)),

View File

@@ -30,7 +30,8 @@ class InstallerView extends StatelessWidget {
bottom: model.isPatching, bottom: model.isPatching,
child: Scaffold( child: Scaffold(
floatingActionButton: Visibility( floatingActionButton: Visibility(
visible: !model.isPatching && !model.hasErrors, visible:
!model.isPatching && !model.hasErrors && !model.isInstalling,
child: HapticFloatingActionButtonExtended( child: HapticFloatingActionButtonExtended(
label: Text( label: Text(
model.isInstalled model.isInstalled

View File

@@ -37,6 +37,7 @@ class InstallerViewModel extends BaseViewModel {
String headerLogs = ''; String headerLogs = '';
bool isRooted = false; bool isRooted = false;
bool isPatching = true; bool isPatching = true;
bool isInstalling = false;
bool isInstalled = false; bool isInstalled = false;
bool hasErrors = false; bool hasErrors = false;
bool isCanceled = false; bool isCanceled = false;
@@ -437,6 +438,7 @@ class InstallerViewModel extends BaseViewModel {
} }
Future<void> installResult(BuildContext context, bool installAsRoot) async { Future<void> installResult(BuildContext context, bool installAsRoot) async {
isInstalling = true;
try { try {
_app.isRooted = installAsRoot; _app.isRooted = installAsRoot;
if (headerLogs != 'Installing...') { if (headerLogs != 'Installing...') {
@@ -463,7 +465,10 @@ class InstallerViewModel extends BaseViewModel {
} }
await _managerAPI.savePatchedApp(_app); await _managerAPI.savePatchedApp(_app);
await locator<HomeViewModel>().initialize(context);
_managerAPI
.reAssessPatchedApps()
.then((_) => locator<HomeViewModel>().getPatchedApps());
update(1.0, 'Installed', 'Installed'); update(1.0, 'Installed', 'Installed');
} else if (response == 3) { } else if (response == 3) {
@@ -486,6 +491,7 @@ class InstallerViewModel extends BaseViewModel {
print(e); print(e);
} }
} }
isInstalling = false;
} }
void exportResult() { void exportResult() {

View File

@@ -1,6 +1,5 @@
// ignore_for_file: use_build_context_synchronously // ignore_for_file: use_build_context_synchronously
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:language_code/language_code.dart'; import 'package:language_code/language_code.dart';
import 'package:revanced_manager/app/app.locator.dart'; import 'package:revanced_manager/app/app.locator.dart';
@@ -35,8 +34,17 @@ class SUpdateLanguage extends BaseViewModel {
} }
Future<void> showLanguagesDialog(BuildContext parentContext) { Future<void> showLanguagesDialog(BuildContext parentContext) {
final ValueNotifier<String> selectedLanguageCode = final ValueNotifier<String> selectedLanguageCode = ValueNotifier(
ValueNotifier(LocaleSettings.currentLocale.languageCode); '${LocaleSettings.currentLocale.languageCode}-${LocaleSettings.currentLocale.countryCode}',
);
LanguageCodes getLanguageCode(locale) {
return LanguageCodes.fromCode(
'${locale.languageCode}_${locale.countryCode}',
orElse: () => LanguageCodes.fromCode(locale.languageCode),
);
}
final currentlyUsedLanguage = getLanguageCode(LocaleSettings.currentLocale);
// initLang(); // initLang();
// Return a dialog with list for each language supported by the application. // Return a dialog with list for each language supported by the application.
@@ -53,36 +61,42 @@ class SUpdateLanguage extends BaseViewModel {
builder: (context, value, child) { builder: (context, value, child) {
return SingleChildScrollView( return SingleChildScrollView(
child: ListBody( child: ListBody(
children: AppLocale.values.map( children: [
(locale) { RadioListTile(
LanguageCodes? languageCode; title: Text(currentlyUsedLanguage.englishName),
Text? languageNativeName; subtitle: Text(
'${currentlyUsedLanguage.nativeName} (${LocaleSettings.currentLocale.languageCode}${LocaleSettings.currentLocale.countryCode != null ? '-${LocaleSettings.currentLocale.countryCode}' : ''})'),
try { value:
languageCode = '${LocaleSettings.currentLocale.languageCode}-${LocaleSettings.currentLocale.countryCode}' ==
LanguageCodes.fromCode(locale.languageCode); selectedLanguageCode.value,
} catch (e) { groupValue: true,
if (kDebugMode) { onChanged: (value) {
print(e); selectedLanguageCode.value =
} '${LocaleSettings.currentLocale.languageCode}-${LocaleSettings.currentLocale.countryCode}';
} },
if (languageCode != null) { ),
languageNativeName = Text(languageCode.nativeName); ...AppLocale.values
} .where(
(locale) =>
locale.languageCode != currentlyUsedLanguage.code,
)
.map((locale) {
final languageCode = getLanguageCode(locale);
return RadioListTile( return RadioListTile(
title: Text( title: Text(languageCode.englishName),
languageCode?.englishName ?? locale.languageCode, subtitle: Text(
'${languageCode.nativeName} (${locale.languageCode}${locale.countryCode != null ? '-${locale.countryCode}' : ''})',
), ),
subtitle: languageNativeName, value: '${locale.languageCode}-${locale.countryCode}' ==
value: locale.languageCode == selectedLanguageCode.value, selectedLanguageCode.value,
groupValue: true, groupValue: true,
onChanged: (value) { onChanged: (value) {
selectedLanguageCode.value = locale.languageCode; selectedLanguageCode.value =
'${locale.languageCode}-${locale.countryCode}';
}, },
); );
}, }),
).toList(), ],
), ),
); );
}, },

View File

@@ -110,7 +110,7 @@ class _InstalledAppItemState extends State<InstalledAppItem> {
Text( Text(
t.suggested( t.suggested(
version: widget.suggestedVersion.isEmpty version: widget.suggestedVersion.isEmpty
? Text(t.appSelectorCard.anyVersion) ? t.appSelectorCard.anyVersion
: 'v${widget.suggestedVersion}', : 'v${widget.suggestedVersion}',
), ),
), ),

225
package-lock.json generated
View File

@@ -5,12 +5,11 @@
"packages": { "packages": {
"": { "": {
"devDependencies": { "devDependencies": {
"@droidsolutions-oss/semantic-release-update-file": "^1.3.2", "@droidsolutions-oss/semantic-release-update-file": "^1.4.0-beta.1",
"@saithodev/semantic-release-backmerge": "^4.0.1", "@saithodev/semantic-release-backmerge": "^4.0.1",
"@semantic-release/changelog": "^6.0.3", "@semantic-release/changelog": "^6.0.3",
"@semantic-release/exec": "^6.0.3", "@semantic-release/exec": "^6.0.3",
"@semantic-release/git": "^10.0.1", "@semantic-release/git": "^10.0.1",
"conventional-changelog-conventionalcommits": "^7.0.2",
"semantic-release": "^23.0.2" "semantic-release": "^23.0.2"
} }
}, },
@@ -61,9 +60,9 @@
} }
}, },
"node_modules/@droidsolutions-oss/semantic-release-update-file": { "node_modules/@droidsolutions-oss/semantic-release-update-file": {
"version": "1.3.2", "version": "1.4.0-beta.1",
"resolved": "https://registry.npmjs.org/@droidsolutions-oss/semantic-release-update-file/-/semantic-release-update-file-1.3.2.tgz", "resolved": "https://registry.npmjs.org/@droidsolutions-oss/semantic-release-update-file/-/semantic-release-update-file-1.4.0-beta.1.tgz",
"integrity": "sha512-ahV0OWiEUf20e7lLH3gnBLF1SfRNPN99MeaLVaFX6jT3DegTLzkVPeY2CZWa+K4tAXBALc29Bq/kzjv8PAXFGw==", "integrity": "sha512-CdqG3vIceWFBmwz0qcY0NdqaE+TGNuhhbgFXHIj/M1fYAD1lQ4QyGEaoD3d4F4ZHYsBqR0HrHNMTG4bycBRKNw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"aggregate-error": "^3.1.0", "aggregate-error": "^3.1.0",
@@ -163,24 +162,24 @@
} }
}, },
"node_modules/@octokit/openapi-types": { "node_modules/@octokit/openapi-types": {
"version": "19.1.0", "version": "20.0.0",
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.1.0.tgz", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz",
"integrity": "sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==", "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==",
"dev": true "dev": true
}, },
"node_modules/@octokit/plugin-paginate-rest": { "node_modules/@octokit/plugin-paginate-rest": {
"version": "9.1.5", "version": "9.2.1",
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.1.5.tgz", "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz",
"integrity": "sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==", "integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@octokit/types": "^12.4.0" "@octokit/types": "^12.6.0"
}, },
"engines": { "engines": {
"node": ">= 18" "node": ">= 18"
}, },
"peerDependencies": { "peerDependencies": {
"@octokit/core": ">=5" "@octokit/core": "5"
} }
}, },
"node_modules/@octokit/plugin-retry": { "node_modules/@octokit/plugin-retry": {
@@ -201,9 +200,9 @@
} }
}, },
"node_modules/@octokit/plugin-throttling": { "node_modules/@octokit/plugin-throttling": {
"version": "8.1.3", "version": "8.2.0",
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.1.3.tgz", "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz",
"integrity": "sha512-pfyqaqpc0EXh5Cn4HX9lWYsZ4gGbjnSmUILeu4u2gnuM50K/wIk9s1Pxt3lVeVwekmITgN/nJdoh43Ka+vye8A==", "integrity": "sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@octokit/types": "^12.2.0", "@octokit/types": "^12.2.0",
@@ -246,12 +245,12 @@
} }
}, },
"node_modules/@octokit/types": { "node_modules/@octokit/types": {
"version": "12.5.0", "version": "12.6.0",
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.5.0.tgz", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz",
"integrity": "sha512-YJEKcb0KkJlIUNU/zjnZwHEP8AoVh/OoIcP/1IyR4UHxExz7fzpe/a8IG4wBtQi7QDEqiomVLX88S6FpxxAJtg==", "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@octokit/openapi-types": "^19.1.0" "@octokit/openapi-types": "^20.0.0"
} }
}, },
"node_modules/@pnpm/config.env-replace": { "node_modules/@pnpm/config.env-replace": {
@@ -500,9 +499,9 @@
} }
}, },
"node_modules/@saithodev/semantic-release-backmerge/node_modules/npm-run-path": { "node_modules/@saithodev/semantic-release-backmerge/node_modules/npm-run-path": {
"version": "5.2.0", "version": "5.3.0",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
"integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"path-key": "^4.0.0" "path-key": "^4.0.0"
@@ -865,9 +864,9 @@
} }
}, },
"node_modules/@semantic-release/npm": { "node_modules/@semantic-release/npm": {
"version": "11.0.2", "version": "11.0.3",
"resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-11.0.2.tgz", "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-11.0.3.tgz",
"integrity": "sha512-owtf3RjyPvRE63iUKZ5/xO4uqjRpVQDUB9+nnXj0xwfIeM9pRl+cG+zGDzdftR4m3f2s4Wyf3SexW+kF5DFtWA==", "integrity": "sha512-KUsozQGhRBAnoVg4UMZj9ep436VEGwT536/jwSqB7vcEfA6oncCUU7UIYTRdLx7GvTtqn0kBjnkfLVkcnBa2YQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"@semantic-release/error": "^4.0.0", "@semantic-release/error": "^4.0.0",
@@ -877,7 +876,7 @@
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"nerf-dart": "^1.0.0", "nerf-dart": "^1.0.0",
"normalize-url": "^8.0.0", "normalize-url": "^8.0.0",
"npm": "^10.0.0", "npm": "^10.5.0",
"rc": "^1.2.8", "rc": "^1.2.8",
"read-pkg": "^9.0.0", "read-pkg": "^9.0.0",
"registry-auth-token": "^5.0.0", "registry-auth-token": "^5.0.0",
@@ -1024,9 +1023,9 @@
} }
}, },
"node_modules/@semantic-release/npm/node_modules/npm-run-path": { "node_modules/@semantic-release/npm/node_modules/npm-run-path": {
"version": "5.2.0", "version": "5.3.0",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
"integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"path-key": "^4.0.0" "path-key": "^4.0.0"
@@ -1138,9 +1137,9 @@
} }
}, },
"node_modules/@sindresorhus/merge-streams": { "node_modules/@sindresorhus/merge-streams": {
"version": "2.2.1", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.2.1.tgz", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
"integrity": "sha512-255V7MMIKw6aQ43Wbqp9HZ+VHn6acddERTLiiLnlcPLU9PdTq9Aijl12oklAgUEblLWye+vHLzmqBx6f2TGcZw==", "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=18" "node": ">=18"
@@ -1529,18 +1528,6 @@
"node": ">=16" "node": ">=16"
} }
}, },
"node_modules/conventional-changelog-conventionalcommits": {
"version": "7.0.2",
"resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-7.0.2.tgz",
"integrity": "sha512-NKXYmMR/Hr1DevQegFB4MwfM5Vv0m4UIxKZTTYuD98lpTknaZlSRrDOG4X7wIXpGkfsYxZTghUN+Qq+T0YQI7w==",
"dev": true,
"dependencies": {
"compare-func": "^2.0.0"
},
"engines": {
"node": ">=16"
}
},
"node_modules/conventional-changelog-writer": { "node_modules/conventional-changelog-writer": {
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-7.0.1.tgz", "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-7.0.1.tgz",
@@ -1820,9 +1807,9 @@
} }
}, },
"node_modules/env-ci/node_modules/npm-run-path": { "node_modules/env-ci/node_modules/npm-run-path": {
"version": "5.2.0", "version": "5.3.0",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
"integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"path-key": "^4.0.0" "path-key": "^4.0.0"
@@ -2915,9 +2902,9 @@
} }
}, },
"node_modules/npm": { "node_modules/npm": {
"version": "10.4.0", "version": "10.5.0",
"resolved": "https://registry.npmjs.org/npm/-/npm-10.4.0.tgz", "resolved": "https://registry.npmjs.org/npm/-/npm-10.5.0.tgz",
"integrity": "sha512-RS7Mx0OVfXlOcQLRePuDIYdFCVBPCNapWHplDK+mh7GDdP/Tvor4ocuybRRPSvfcRb2vjRJt1fHCqw3cr8qACQ==", "integrity": "sha512-Ejxwvfh9YnWVU2yA5FzoYLTW52vxHCz+MHrOFg9Cc8IFgF/6f5AGPAvb5WTay5DIUP1NIfN3VBZ0cLlGO0Ys+A==",
"bundleDependencies": [ "bundleDependencies": [
"@isaacs/string-locale-compare", "@isaacs/string-locale-compare",
"@npmcli/arborist", "@npmcli/arborist",
@@ -2991,13 +2978,6 @@
"write-file-atomic" "write-file-atomic"
], ],
"dev": true, "dev": true,
"workspaces": [
"docs",
"smoke-tests",
"mock-globals",
"mock-registry",
"workspaces/*"
],
"dependencies": { "dependencies": {
"@isaacs/string-locale-compare": "^1.1.0", "@isaacs/string-locale-compare": "^1.1.0",
"@npmcli/arborist": "^7.2.1", "@npmcli/arborist": "^7.2.1",
@@ -3007,7 +2987,7 @@
"@npmcli/package-json": "^5.0.0", "@npmcli/package-json": "^5.0.0",
"@npmcli/promise-spawn": "^7.0.1", "@npmcli/promise-spawn": "^7.0.1",
"@npmcli/run-script": "^7.0.4", "@npmcli/run-script": "^7.0.4",
"@sigstore/tuf": "^2.3.0", "@sigstore/tuf": "^2.3.1",
"abbrev": "^2.0.0", "abbrev": "^2.0.0",
"archy": "~1.0.0", "archy": "~1.0.0",
"cacache": "^18.0.2", "cacache": "^18.0.2",
@@ -3058,7 +3038,7 @@
"proc-log": "^3.0.0", "proc-log": "^3.0.0",
"qrcode-terminal": "^0.12.0", "qrcode-terminal": "^0.12.0",
"read": "^2.1.0", "read": "^2.1.0",
"semver": "^7.5.4", "semver": "^7.6.0",
"spdx-expression-parse": "^3.0.1", "spdx-expression-parse": "^3.0.1",
"ssri": "^10.0.5", "ssri": "^10.0.5",
"supports-color": "^9.4.0", "supports-color": "^9.4.0",
@@ -3174,7 +3154,7 @@
"license": "ISC" "license": "ISC"
}, },
"node_modules/npm/node_modules/@npmcli/agent": { "node_modules/npm/node_modules/@npmcli/agent": {
"version": "2.2.0", "version": "2.2.1",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "ISC", "license": "ISC",
@@ -3190,7 +3170,7 @@
} }
}, },
"node_modules/npm/node_modules/@npmcli/arborist": { "node_modules/npm/node_modules/@npmcli/arborist": {
"version": "7.3.1", "version": "7.4.0",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "ISC", "license": "ISC",
@@ -3203,7 +3183,7 @@
"@npmcli/name-from-folder": "^2.0.0", "@npmcli/name-from-folder": "^2.0.0",
"@npmcli/node-gyp": "^3.0.0", "@npmcli/node-gyp": "^3.0.0",
"@npmcli/package-json": "^5.0.0", "@npmcli/package-json": "^5.0.0",
"@npmcli/query": "^3.0.1", "@npmcli/query": "^3.1.0",
"@npmcli/run-script": "^7.0.2", "@npmcli/run-script": "^7.0.2",
"bin-links": "^4.0.1", "bin-links": "^4.0.1",
"cacache": "^18.0.0", "cacache": "^18.0.0",
@@ -3237,7 +3217,7 @@
} }
}, },
"node_modules/npm/node_modules/@npmcli/config": { "node_modules/npm/node_modules/@npmcli/config": {
"version": "8.1.0", "version": "8.2.0",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "ISC", "license": "ISC",
@@ -3408,7 +3388,7 @@
} }
}, },
"node_modules/npm/node_modules/@npmcli/query": { "node_modules/npm/node_modules/@npmcli/query": {
"version": "3.0.1", "version": "3.1.0",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "ISC", "license": "ISC",
@@ -3446,19 +3426,19 @@
} }
}, },
"node_modules/npm/node_modules/@sigstore/bundle": { "node_modules/npm/node_modules/@sigstore/bundle": {
"version": "2.1.1", "version": "2.2.0",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@sigstore/protobuf-specs": "^0.2.1" "@sigstore/protobuf-specs": "^0.3.0"
}, },
"engines": { "engines": {
"node": "^16.14.0 || >=18.0.0" "node": "^16.14.0 || >=18.0.0"
} }
}, },
"node_modules/npm/node_modules/@sigstore/core": { "node_modules/npm/node_modules/@sigstore/core": {
"version": "0.2.0", "version": "1.0.0",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "Apache-2.0", "license": "Apache-2.0",
@@ -3467,7 +3447,7 @@
} }
}, },
"node_modules/npm/node_modules/@sigstore/protobuf-specs": { "node_modules/npm/node_modules/@sigstore/protobuf-specs": {
"version": "0.2.1", "version": "0.3.0",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "Apache-2.0", "license": "Apache-2.0",
@@ -3476,14 +3456,14 @@
} }
}, },
"node_modules/npm/node_modules/@sigstore/sign": { "node_modules/npm/node_modules/@sigstore/sign": {
"version": "2.2.1", "version": "2.2.3",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@sigstore/bundle": "^2.1.1", "@sigstore/bundle": "^2.2.0",
"@sigstore/core": "^0.2.0", "@sigstore/core": "^1.0.0",
"@sigstore/protobuf-specs": "^0.2.1", "@sigstore/protobuf-specs": "^0.3.0",
"make-fetch-happen": "^13.0.0" "make-fetch-happen": "^13.0.0"
}, },
"engines": { "engines": {
@@ -3491,12 +3471,12 @@
} }
}, },
"node_modules/npm/node_modules/@sigstore/tuf": { "node_modules/npm/node_modules/@sigstore/tuf": {
"version": "2.3.0", "version": "2.3.1",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@sigstore/protobuf-specs": "^0.2.1", "@sigstore/protobuf-specs": "^0.3.0",
"tuf-js": "^2.2.0" "tuf-js": "^2.2.0"
}, },
"engines": { "engines": {
@@ -3504,14 +3484,14 @@
} }
}, },
"node_modules/npm/node_modules/@sigstore/verify": { "node_modules/npm/node_modules/@sigstore/verify": {
"version": "0.1.0", "version": "1.1.0",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@sigstore/bundle": "^2.1.1", "@sigstore/bundle": "^2.2.0",
"@sigstore/core": "^0.2.0", "@sigstore/core": "^1.0.0",
"@sigstore/protobuf-specs": "^0.2.1" "@sigstore/protobuf-specs": "^0.3.0"
}, },
"engines": { "engines": {
"node": "^16.14.0 || >=18.0.0" "node": "^16.14.0 || >=18.0.0"
@@ -3918,7 +3898,7 @@
} }
}, },
"node_modules/npm/node_modules/diff": { "node_modules/npm/node_modules/diff": {
"version": "5.1.0", "version": "5.2.0",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "BSD-3-Clause", "license": "BSD-3-Clause",
@@ -4069,7 +4049,7 @@
"license": "ISC" "license": "ISC"
}, },
"node_modules/npm/node_modules/hasown": { "node_modules/npm/node_modules/hasown": {
"version": "2.0.0", "version": "2.0.1",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "MIT", "license": "MIT",
@@ -4099,7 +4079,7 @@
"license": "BSD-2-Clause" "license": "BSD-2-Clause"
}, },
"node_modules/npm/node_modules/http-proxy-agent": { "node_modules/npm/node_modules/http-proxy-agent": {
"version": "7.0.0", "version": "7.0.2",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "MIT", "license": "MIT",
@@ -4112,7 +4092,7 @@
} }
}, },
"node_modules/npm/node_modules/https-proxy-agent": { "node_modules/npm/node_modules/https-proxy-agent": {
"version": "7.0.2", "version": "7.0.4",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "MIT", "license": "MIT",
@@ -4194,11 +4174,24 @@
"node": "^16.14.0 || >=18.0.0" "node": "^16.14.0 || >=18.0.0"
} }
}, },
"node_modules/npm/node_modules/ip": { "node_modules/npm/node_modules/ip-address": {
"version": "2.0.0", "version": "9.0.5",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "MIT" "license": "MIT",
"dependencies": {
"jsbn": "1.1.0",
"sprintf-js": "^1.1.3"
},
"engines": {
"node": ">= 12"
}
},
"node_modules/npm/node_modules/ip-address/node_modules/sprintf-js": {
"version": "1.1.3",
"dev": true,
"inBundle": true,
"license": "BSD-3-Clause"
}, },
"node_modules/npm/node_modules/ip-regex": { "node_modules/npm/node_modules/ip-regex": {
"version": "5.0.0", "version": "5.0.0",
@@ -4275,6 +4268,12 @@
"@pkgjs/parseargs": "^0.11.0" "@pkgjs/parseargs": "^0.11.0"
} }
}, },
"node_modules/npm/node_modules/jsbn": {
"version": "1.1.0",
"dev": true,
"inBundle": true,
"license": "MIT"
},
"node_modules/npm/node_modules/json-parse-even-better-errors": { "node_modules/npm/node_modules/json-parse-even-better-errors": {
"version": "3.0.1", "version": "3.0.1",
"dev": true, "dev": true,
@@ -4328,7 +4327,7 @@
} }
}, },
"node_modules/npm/node_modules/libnpmdiff": { "node_modules/npm/node_modules/libnpmdiff": {
"version": "6.0.6", "version": "6.0.7",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "ISC", "license": "ISC",
@@ -4348,7 +4347,7 @@
} }
}, },
"node_modules/npm/node_modules/libnpmexec": { "node_modules/npm/node_modules/libnpmexec": {
"version": "7.0.7", "version": "7.0.8",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "ISC", "license": "ISC",
@@ -4370,7 +4369,7 @@
} }
}, },
"node_modules/npm/node_modules/libnpmfund": { "node_modules/npm/node_modules/libnpmfund": {
"version": "5.0.4", "version": "5.0.5",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "ISC", "license": "ISC",
@@ -4408,7 +4407,7 @@
} }
}, },
"node_modules/npm/node_modules/libnpmpack": { "node_modules/npm/node_modules/libnpmpack": {
"version": "6.0.6", "version": "6.0.7",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "ISC", "license": "ISC",
@@ -4483,7 +4482,7 @@
} }
}, },
"node_modules/npm/node_modules/lru-cache": { "node_modules/npm/node_modules/lru-cache": {
"version": "10.1.0", "version": "10.2.0",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "ISC", "license": "ISC",
@@ -5145,7 +5144,7 @@
"optional": true "optional": true
}, },
"node_modules/npm/node_modules/semver": { "node_modules/npm/node_modules/semver": {
"version": "7.5.4", "version": "7.6.0",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "ISC", "license": "ISC",
@@ -5211,17 +5210,17 @@
} }
}, },
"node_modules/npm/node_modules/sigstore": { "node_modules/npm/node_modules/sigstore": {
"version": "2.2.0", "version": "2.2.2",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"@sigstore/bundle": "^2.1.1", "@sigstore/bundle": "^2.2.0",
"@sigstore/core": "^0.2.0", "@sigstore/core": "^1.0.0",
"@sigstore/protobuf-specs": "^0.2.1", "@sigstore/protobuf-specs": "^0.3.0",
"@sigstore/sign": "^2.2.1", "@sigstore/sign": "^2.2.3",
"@sigstore/tuf": "^2.3.0", "@sigstore/tuf": "^2.3.1",
"@sigstore/verify": "^0.1.0" "@sigstore/verify": "^1.1.0"
}, },
"engines": { "engines": {
"node": "^16.14.0 || >=18.0.0" "node": "^16.14.0 || >=18.0.0"
@@ -5238,16 +5237,16 @@
} }
}, },
"node_modules/npm/node_modules/socks": { "node_modules/npm/node_modules/socks": {
"version": "2.7.1", "version": "2.8.0",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"ip": "^2.0.0", "ip-address": "^9.0.5",
"smart-buffer": "^4.2.0" "smart-buffer": "^4.2.0"
}, },
"engines": { "engines": {
"node": ">= 10.13.0", "node": ">= 16.0.0",
"npm": ">= 3.0.0" "npm": ">= 3.0.0"
} }
}, },
@@ -5276,7 +5275,7 @@
} }
}, },
"node_modules/npm/node_modules/spdx-exceptions": { "node_modules/npm/node_modules/spdx-exceptions": {
"version": "2.3.0", "version": "2.5.0",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "CC-BY-3.0" "license": "CC-BY-3.0"
@@ -5292,7 +5291,7 @@
} }
}, },
"node_modules/npm/node_modules/spdx-license-ids": { "node_modules/npm/node_modules/spdx-license-ids": {
"version": "3.0.16", "version": "3.0.17",
"dev": true, "dev": true,
"inBundle": true, "inBundle": true,
"license": "CC0-1.0" "license": "CC0-1.0"
@@ -5999,9 +5998,9 @@
} }
}, },
"node_modules/read-pkg-up/node_modules/type-fest": { "node_modules/read-pkg-up/node_modules/type-fest": {
"version": "4.10.2", "version": "4.11.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.11.0.tgz",
"integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "integrity": "sha512-DPsoHKtnCUqqoB5Y4OPyat7ObSLz1XOkhHTmz+gOkz2p1xs+BBneTvHWriTwc313eozfBWh8b45EpaV3ZrrPPQ==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=16" "node": ">=16"
@@ -6028,9 +6027,9 @@
} }
}, },
"node_modules/read-pkg/node_modules/type-fest": { "node_modules/read-pkg/node_modules/type-fest": {
"version": "4.10.2", "version": "4.11.0",
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.11.0.tgz",
"integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "integrity": "sha512-DPsoHKtnCUqqoB5Y4OPyat7ObSLz1XOkhHTmz+gOkz2p1xs+BBneTvHWriTwc313eozfBWh8b45EpaV3ZrrPPQ==",
"dev": true, "dev": true,
"engines": { "engines": {
"node": ">=16" "node": ">=16"
@@ -6308,9 +6307,9 @@
} }
}, },
"node_modules/semantic-release/node_modules/npm-run-path": { "node_modules/semantic-release/node_modules/npm-run-path": {
"version": "5.2.0", "version": "5.3.0",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
"integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
"dev": true, "dev": true,
"dependencies": { "dependencies": {
"path-key": "^4.0.0" "path-key": "^4.0.0"

View File

@@ -1,11 +1,10 @@
{ {
"devDependencies": { "devDependencies": {
"@droidsolutions-oss/semantic-release-update-file": "^1.3.2", "@droidsolutions-oss/semantic-release-update-file": "^1.4.0-beta.1",
"@saithodev/semantic-release-backmerge": "^4.0.1", "@saithodev/semantic-release-backmerge": "^4.0.1",
"@semantic-release/changelog": "^6.0.3", "@semantic-release/changelog": "^6.0.3",
"@semantic-release/exec": "^6.0.3", "@semantic-release/exec": "^6.0.3",
"@semantic-release/git": "^10.0.1", "@semantic-release/git": "^10.0.1",
"conventional-changelog-conventionalcommits": "^7.0.2",
"semantic-release": "^23.0.2" "semantic-release": "^23.0.2"
} }
} }

View File

@@ -109,10 +109,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: built_value name: built_value
sha256: a3ec2e0f967bc47f69f95009bb93db936288d61d5343b9436e378b28a2f830c6 sha256: fedde275e0a6b798c3296963c5cd224e3e1b55d0e478d5b7e65e6b540f363a0e
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "8.9.0" version: "8.9.1"
characters: characters:
dependency: transitive dependency: transitive
description: description:
@@ -205,10 +205,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: dart_style name: dart_style
sha256: "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368" sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.3.4" version: "2.3.6"
dbus: dbus:
dependency: transitive dependency: transitive
description: description:
@@ -262,10 +262,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: dynamic_color name: dynamic_color
sha256: a866f1f8947bfdaf674d7928e769eac7230388a2e7a2542824fad4bb5b87be3b sha256: eae98052fa6e2826bdac3dd2e921c6ce2903be15c6b7f8b6d8a5d49b5086298d
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.6.9" version: "1.7.0"
dynamic_themes: dynamic_themes:
dependency: "direct main" dependency: "direct main"
description: description:
@@ -385,10 +385,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_markdown name: flutter_markdown
sha256: "21b085a1c185e46701373866144ced56cfb7a0c33f63c916bb8fe2d0c1491278" sha256: a64c5323ac83ed2b7940d2b6288d160aa1753ff271ba9d9b2a86770414aa3eab
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.19" version: "0.6.20+1"
flutter_test: flutter_test:
dependency: transitive dependency: transitive
description: flutter description: flutter
@@ -459,10 +459,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: google_fonts name: google_fonts
sha256: f0b8d115a13ecf827013ec9fc883390ccc0e87a96ed5347a3114cac177ef18e8 sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.0" version: "6.2.1"
graphs: graphs:
dependency: transitive dependency: transitive
description: description:
@@ -563,10 +563,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: language_code name: language_code
sha256: ca1e026cc5d4ceeeb03beb73c6fc695ff091e00cec76e089394a365917a37909 sha256: cbd50546df7c21857a7cfa35f97943f8759705d0c17f9282593abe654cbbdf38
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.4.0" version: "0.4.1"
leak_tracker: leak_tracker:
dependency: transitive dependency: transitive
description: description:
@@ -844,10 +844,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: provider name: provider
sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096" sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.1.1" version: "6.1.2"
pub_semver: pub_semver:
dependency: transitive dependency: transitive
description: description:
@@ -1003,18 +1003,18 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: slang name: slang
sha256: "95dee03eb3fd1b36c99f365d4eace270a0d83c6148f8e7d1057806ef60cfaf12" sha256: "5e08ac915ac27a3508863f37734280d30c3713d56746cd2e4a5da77413da4b95"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.29.0" version: "3.30.1"
slang_flutter: slang_flutter:
dependency: "direct main" dependency: "direct main"
description: description:
name: slang_flutter name: slang_flutter
sha256: "34c7cf297c608e24d3957a29e75c6790f4dbbfb1a4783d261a6c1e33ede7ad0f" sha256: "9ee040b0d364d3a4d692e4af536acff6ef513870689403494ebc6d59b0dccea6"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.29.0" version: "3.30.0"
source_gen: source_gen:
dependency: transitive dependency: transitive
description: description:
@@ -1195,10 +1195,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: url_launcher name: url_launcher
sha256: c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c sha256: "0ecc004c62fd3ed36a2ffcbe0dd9700aee63bd7532d0b642a488b1ec310f492e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.4" version: "6.2.5"
url_launcher_android: url_launcher_android:
dependency: transitive dependency: transitive
description: description:
@@ -1211,10 +1211,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: url_launcher_ios name: url_launcher_ios
sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03" sha256: "9149d493b075ed740901f3ee844a38a00b33116c7c5c10d7fb27df8987fb51d5"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.4" version: "6.2.5"
url_launcher_linux: url_launcher_linux:
dependency: transitive dependency: transitive
description: description:
@@ -1360,5 +1360,5 @@ packages:
source: hosted source: hosted
version: "3.1.2" version: "3.1.2"
sdks: sdks:
dart: ">=3.3.0-279.1.beta <4.0.0" dart: ">=3.3.0 <4.0.0"
flutter: ">=3.16.0" flutter: ">=3.19.2"

View File

@@ -4,7 +4,7 @@ homepage: https://github.com/ReVanced/revanced-manager
publish_to: 'none' publish_to: 'none'
version: 1.19.0-dev.14+101900014 version: 1.19.4-dev.2+101800008
environment: environment:
sdk: '>=3.0.0 <4.0.0' sdk: '>=3.0.0 <4.0.0'
@@ -37,11 +37,11 @@ dependencies:
flutter_markdown: ^0.6.14 flutter_markdown: ^0.6.14
fluttertoast: ^8.2.4 fluttertoast: ^8.2.4
font_awesome_flutter: ^10.4.0 font_awesome_flutter: ^10.4.0
google_fonts: ^6.1.0 google_fonts: ^6.2.1
injectable: ^2.1.1 injectable: ^2.1.1
intl: ^0.18.0 intl: ^0.18.0
json_annotation: ^4.8.1 json_annotation: ^4.8.1
language_code: ^0.4.0 language_code: ^0.4.1
logcat: logcat:
git: git:
url: https://github.com/BenjaminHalko/logcat url: https://github.com/BenjaminHalko/logcat