mirror of
https://github.com/ReVanced/revanced-manager.git
synced 2025-05-20 07:56:47 +08:00
Compare commits
83 Commits
v1.19.0-de
...
v1.20.1
Author | SHA1 | Date | |
---|---|---|---|
a23f032fd2 | |||
95a8234e2d | |||
a7e481c827 | |||
975870e254 | |||
b7c838fd25 | |||
3776674eb4 | |||
4293e27681 | |||
8564c1a72e | |||
f9e6ef3fd3 | |||
e80ee09893 | |||
025ff527ee | |||
35fdbb5988 | |||
401646ace4 | |||
a62a8852e7 | |||
04a3df3642 | |||
ecb041187b | |||
1fd44e1cfc | |||
fb29036d0a | |||
aba2ed4378 | |||
076e17d670 | |||
a971cbd519 | |||
c265794d0e | |||
ecadb80113 | |||
9a66357f7a | |||
63d83a43ad | |||
7833a0d552 | |||
966796dfec | |||
2d19f36901 | |||
6f70a07970 | |||
e85ed5a8e3 | |||
ad416387c2 | |||
58d8e7f34f | |||
bb105b5662 | |||
a71a930125 | |||
af7e39b7f0 | |||
c981cb4a41 | |||
3ea6ef0bbf | |||
2772a96727 | |||
50b4a5f1d8 | |||
e52a6ce734 | |||
add49e14fb | |||
ab13895196 | |||
846afb420b | |||
dca8a1dab6 | |||
d1c36c1bcc | |||
c209c32613 | |||
9e5e89ac95 | |||
7cc6b88e4e | |||
5cd1cba668 | |||
ca365bac6e | |||
f1fc48ce5a | |||
316e440d0d | |||
95018814a7 | |||
b52e49d90a | |||
4acd738353 | |||
982249f974 | |||
1f5461fbe5 | |||
adb7e5663a | |||
ffc14f2146 | |||
0c57322051 | |||
a8b7debf8d | |||
7ed9787b58 | |||
eef701615b | |||
97d8519b8b | |||
00210f7f0e | |||
cea4c6c27a | |||
bc83a39b0f | |||
aa0575a637 | |||
4ca7b8a7c1 | |||
6ec6546cc5 | |||
c5e04cc824 | |||
4fc913eae1 | |||
2d7026ac7a | |||
1200360588 | |||
02722fc0be | |||
2e1de94623 | |||
10bae69db6 | |||
6dee3aa1b7 | |||
e76418d48d | |||
52e1020a90 | |||
c170392123 | |||
d414a91f40 | |||
bb1b0da749 |
61
.github/ISSUE_TEMPLATE/bug-issue.yml
vendored
61
.github/ISSUE_TEMPLATE/bug-issue.yml
vendored
@ -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
126
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
Normal file
@ -0,0 +1,126 @@
|
||||
name: 🐞 Bug report
|
||||
description: Report a bug or an issue.
|
||||
title: "bug: "
|
||||
labels: ["Bug report"]
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
value: |
|
||||
<p align="center">
|
||||
<picture>
|
||||
<source
|
||||
width="256px"
|
||||
media="(prefers-color-scheme: dark)"
|
||||
srcset="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-dark.svg"
|
||||
>
|
||||
<img
|
||||
width="256px"
|
||||
src="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-headline/revanced-headline-vertical-light.svg"
|
||||
>
|
||||
</picture>
|
||||
<br>
|
||||
<a href="https://revanced.app/">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg" />
|
||||
<img height="24px" src="https://raw.githubusercontent.com/revanced/revanced-manager/main/assets/revanced-logo/revanced-logo.svg" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://github.com/ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
|
||||
<img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="http://revanced.app/discord">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://reddit.com/r/revancedapp">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://t.me/app_revanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://x.com/revancedapp">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://www.youtube.com/@ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
Continuing the legacy of Vanced
|
||||
</p>
|
||||
|
||||
# ReVanced Manager bug report
|
||||
|
||||
Before creating a new bug report, please keep the following in mind:
|
||||
|
||||
- **Do not submit a duplicate bug report**: 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
|
6
.github/ISSUE_TEMPLATE/config.yml
vendored
6
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1 +1,5 @@
|
||||
blank_issues_enabled: false
|
||||
blank_issues_enabled: false
|
||||
contact_links:
|
||||
- name: 🗨 Discussions
|
||||
url: https://github.com/revanced/revanced-suggestions/discussions
|
||||
about: Have something unspecific to ReVanced Manager in mind? Search for or start a new discussion!
|
||||
|
42
.github/ISSUE_TEMPLATE/feature-issue.yml
vendored
42
.github/ISSUE_TEMPLATE/feature-issue.yml
vendored
@ -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
|
106
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal file
106
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
Normal 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>
|
||||
<a href="https://github.com/ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
|
||||
<img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="http://revanced.app/discord">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://reddit.com/r/revancedapp">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://t.me/app_revanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://x.com/revancedapp">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://www.youtube.com/@ReVanced">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
|
||||
</picture>
|
||||
</a>
|
||||
<br>
|
||||
<br>
|
||||
Continuing the legacy of Vanced
|
||||
</p>
|
||||
|
||||
# ReVanced Manager feature request
|
||||
|
||||
Before creating a new feature request, please keep the following in mind:
|
||||
|
||||
- **Do not submit a duplicate feature request**: 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
2
.github/config.yaml
vendored
@ -1,2 +1,2 @@
|
||||
firstPRMergeComment: >
|
||||
Thank you for contributing to ReVanced. Join us on [Discord](https://revanced.app/discord) if you want to receive a contributor role.
|
||||
Thank you for contributing to ReVanced. Join us on [Discord](https://revanced.app/discord) to receive a role for your contribution.
|
||||
|
9
.github/dependabot.yml
vendored
9
.github/dependabot.yml
vendored
@ -14,6 +14,7 @@ updates:
|
||||
schedule:
|
||||
interval: monthly
|
||||
|
||||
# ReVanced Manager Flutter
|
||||
- package-ecosystem: pub
|
||||
labels: []
|
||||
directory: /
|
||||
@ -21,6 +22,14 @@ updates:
|
||||
schedule:
|
||||
interval: monthly
|
||||
|
||||
- package-ecosystem: gradle
|
||||
labels: []
|
||||
directory: /
|
||||
target-branch: dev
|
||||
schedule:
|
||||
interval: monthly
|
||||
|
||||
# ReVanced Manager Compose
|
||||
- package-ecosystem: gradle
|
||||
labels: [ "ReVanced Manager Compose" ]
|
||||
directory: /
|
||||
|
@ -1,23 +1,15 @@
|
||||
name: PR Build
|
||||
name: Build pull request
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
# Flutter
|
||||
flutter-branch:
|
||||
description: Flutter branch
|
||||
type: choice
|
||||
default: 'stable'
|
||||
options:
|
||||
- stable
|
||||
- beta
|
||||
- dev
|
||||
- master
|
||||
# Enable or disable cache
|
||||
flutter-cache:
|
||||
description: Cache
|
||||
type: boolean
|
||||
default: true
|
||||
# Application configuration
|
||||
|
||||
# Select app flavour
|
||||
app-flavour:
|
||||
description: App flavour
|
||||
default: 'release'
|
||||
@ -26,22 +18,23 @@ on:
|
||||
- release
|
||||
- debug
|
||||
- profile
|
||||
# Pull Request
|
||||
|
||||
# Select pull request
|
||||
pr-number:
|
||||
description: PR number (No hashtag)
|
||||
description: PR number (Without hashtag)
|
||||
required: true
|
||||
|
||||
run-name: "Build PR ${{ inputs.pr-number }}"
|
||||
run-name: "Build pull request ${{ inputs.pr-number }}"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build the application
|
||||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: read
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Setup
|
||||
- name: Setup pull request
|
||||
env:
|
||||
GH_TOKEN: ${{ github.token }}
|
||||
run: |
|
||||
@ -50,73 +43,74 @@ jobs:
|
||||
gh repo set-default "${{ github.repository }}"
|
||||
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
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
persist-credentials: false
|
||||
|
||||
- name: Setup JDK
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
java-version: '17'
|
||||
distribution: 'zulu'
|
||||
cache: gradle
|
||||
|
||||
- name: Setup Flutter
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Cache Gradle
|
||||
uses: burrunan/gradle-cache-action@v1
|
||||
|
||||
- name: Setup Java
|
||||
run: echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
|
||||
|
||||
- name: Set up Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: ${{ inputs.flutter-branch }}
|
||||
channel: "stable"
|
||||
cache: ${{ inputs.flutter-cache }}
|
||||
|
||||
- name: Install Flutter dependencies
|
||||
|
||||
- name: Get dependencies
|
||||
run: flutter pub get
|
||||
- name: Generate translation with Slang
|
||||
|
||||
- name: Generate translations
|
||||
run: dart run slang
|
||||
- name: Generate files with Builder
|
||||
run: dart run build_runner build --delete-conflicting-outputs
|
||||
|
||||
- name: Build with Flutter
|
||||
|
||||
- name: Generate code files
|
||||
run: dart run build_runner build --delete-conflicting-outputs
|
||||
|
||||
- name: Build
|
||||
continue-on-error: true
|
||||
id: flutter-build
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: |
|
||||
flutter build apk --"${{ inputs.app-flavour }}";
|
||||
|
||||
- name: Prepare to comment
|
||||
|
||||
- name: Prepare comment
|
||||
run: |
|
||||
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
|
||||
echo "MESSAGE=🚫 ReVanced Manager ${{ env.COMMIT_HASH }} build failed." >> $GITHUB_ENV
|
||||
echo "MESSAGE=🚫 Failed build on ${{ env.COMMIT_HASH }}." >> $GITHUB_ENV
|
||||
fi
|
||||
|
||||
- name: "Comment to Pull Request #${{ inputs.pr-number }}"
|
||||
|
||||
- name: "Comment on pull request #${{ inputs.pr-number }}"
|
||||
uses: thollander/actions-comment-pull-request@v2
|
||||
with:
|
||||
GITHUB_TOKEN: ${{ github.token }}
|
||||
pr_number: ${{ inputs.pr-number }}
|
||||
mode: recreate
|
||||
message: |
|
||||
## ⚒️ ReVanced PR Build workflow
|
||||
## ⚒️ Build status
|
||||
|
||||
${{ 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 }}
|
||||
- Branch: ${{ inputs.flutter-branch }}
|
||||
- Start time: ${{ env.DATETIME }}
|
||||
|
||||
- name: Upload build
|
||||
uses: actions/upload-artifact@v3
|
||||
- name: Upload
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
if-no-files-found: error
|
||||
name: revanced-manager-(${{ env.COMMIT_HASH }}-${{ inputs.pr-number }}-${{ inputs.app-flavour }})-${{ inputs.flutter-branch }}
|
||||
path: |
|
||||
name: revanced-manager-(${{ env.COMMIT_HASH }}-${{ inputs.pr-number }}-${{ inputs.app-flavour }})
|
||||
path: |
|
||||
build/app/outputs/flutter-apk/app-${{ inputs.app-flavour }}.apk
|
||||
build/app/outputs/flutter-apk/app-${{ inputs.app-flavour }}.apk.sha1
|
28
.github/workflows/open_pull_request.yml
vendored
Normal file
28
.github/workflows/open_pull_request.yml
vendored
Normal file
@ -0,0 +1,28 @@
|
||||
name: Open a PR to main
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
MESSAGE: Merge branch `${{ github.head_ref || github.ref_name }}` to `main`
|
||||
|
||||
jobs:
|
||||
pull-request:
|
||||
name: Open pull request
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Open pull request
|
||||
uses: repo-sync/pull-request@v2
|
||||
with:
|
||||
destination_branch: 'main'
|
||||
pr_title: 'chore: ${{ env.MESSAGE }}'
|
||||
pr_body: |
|
||||
This pull request will ${{ env.MESSAGE }}.
|
||||
pr_draft: true
|
||||
github_token: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
|
@ -1,4 +1,4 @@
|
||||
name: "Release Build"
|
||||
name: Release
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
@ -7,54 +7,51 @@ on:
|
||||
- main
|
||||
- dev
|
||||
paths:
|
||||
- ".github/workflows/release-build.yml"
|
||||
- ".github/workflows/release.yml"
|
||||
- "android/**"
|
||||
- "assets/**"
|
||||
- "lib/**"
|
||||
- ".releaserc.js"
|
||||
- "pubspec.yaml"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Release
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Set up JDK
|
||||
uses: actions/setup-java@v4
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
java-version: "17"
|
||||
distribution: "zulu"
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Node.js 20
|
||||
- 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: '20'
|
||||
node-version: "lts/*"
|
||||
cache: 'npm'
|
||||
|
||||
- uses: subosito/flutter-action@v2
|
||||
- name: Set up Flutter
|
||||
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
|
||||
- name: Install dependencies
|
||||
run: npm install
|
||||
|
||||
- name: Set up Flutter
|
||||
- name: Get dependencies
|
||||
run: flutter pub get
|
||||
- name: Generate translation with Slang
|
||||
|
||||
- name: Generate translations
|
||||
run: dart run slang
|
||||
- name: Generate files with Builder
|
||||
|
||||
- name: Generate code files
|
||||
run: dart run build_runner build --delete-conflicting-outputs
|
||||
|
||||
- name: Build with Flutter
|
||||
- name: Release
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
|
||||
signingKey: "keystore.jks"
|
||||
keyStorePassword: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
|
||||
keyAlias: ${{ secrets.SIGNING_KEY_ALIAS }}
|
@ -1,12 +1,18 @@
|
||||
name: Crowdin Action
|
||||
name: Sync Crowdin
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: 00 12 * * 1
|
||||
push:
|
||||
branches: [dev]
|
||||
paths:
|
||||
- assets/i18n/*.json
|
||||
- assets/i18n/*.dart
|
||||
- .github/workflows/sync_crowdin.yml
|
||||
|
||||
jobs:
|
||||
synchronize-with-crowdin:
|
||||
sync:
|
||||
name: Sync
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
@ -14,10 +20,10 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Set up Dart
|
||||
- name: Setup Dart
|
||||
uses: dart-lang/setup-dart@v1
|
||||
|
||||
- name: Sync translation from Crowdin
|
||||
- name: Sync translations from Crowdin
|
||||
uses: crowdin/github-action@v1
|
||||
with:
|
||||
config: crowdin.yml
|
||||
@ -26,28 +32,28 @@ jobs:
|
||||
download_translations: true
|
||||
localization_branch_name: feat/translations
|
||||
create_pull_request: true
|
||||
pull_request_title: "chore(i18n): Sync translations"
|
||||
pull_request_body: "Sync translations from [Crowdin/ReVanced](https://crowdin.com/project/revanced)"
|
||||
pull_request_title: "chore: Sync translations"
|
||||
pull_request_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)"
|
||||
pull_request_base_branch_name: "dev"
|
||||
commit_message: "chore(i18n): Sync translations"
|
||||
commit_message: "chore: Sync translations"
|
||||
github_user_name: revanced-bot
|
||||
github_user_email: github@revanced.app
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
|
||||
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
|
||||
- name: Remove empty values from JSON
|
||||
run: |
|
||||
cd assets/i18n
|
||||
sudo chmod 777 *
|
||||
sudo chmod 777 *.json
|
||||
dart nuke.dart >> $GITHUB_STEP_SUMMARY
|
||||
|
||||
- name: Push out changes to i10n
|
||||
- name: Commit translations
|
||||
run: |
|
||||
git config user.name revanced-bot
|
||||
git config user.email github@revanced.app
|
||||
sudo chown -R $USER:$USER .git
|
||||
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
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
@ -11,7 +11,7 @@ jobs:
|
||||
name: Dispatch event to documentation repository
|
||||
if: github.ref == 'refs/heads/main'
|
||||
steps:
|
||||
- uses: peter-evans/repository-dispatch@v2
|
||||
- uses: peter-evans/repository-dispatch@v3
|
||||
with:
|
||||
token: ${{ secrets.DOCUMENTATION_REPO_ACCESS_TOKEN }}
|
||||
repository: revanced/revanced-documentation
|
64
.releaserc
Normal file
64
.releaserc
Normal 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
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
123
.releaserc.js
123
.releaserc.js
@ -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
|
||||
}
|
||||
]
|
||||
],
|
||||
|
||||
|
||||
};
|
@ -13,8 +13,8 @@
|
||||
<br>
|
||||
<a href="https://revanced.app/">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo-round.svg" />
|
||||
<img height="24px" src="assets/revanced-logo/revanced-logo-round.svg" />
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo.svg" />
|
||||
<img height="24px" src="assets/revanced-logo/revanced-logo.svg" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://github.com/ReVanced">
|
||||
@ -71,33 +71,33 @@ This document describes how to contribute to ReVanced Manager.
|
||||
## 🙏 Submitting a feature request
|
||||
|
||||
Features can be requested by opening an issue using the
|
||||
[feature request issue template](https://github.com/ReVanced/revanced-manager/issues/new?assignees=&labels=feature-request&projects=&template=feature-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]
|
||||
> We may reject your request at the discretion of ReVanced Manager's maintainers,
|
||||
> please provide good motivation for a request to be accepted.
|
||||
> **Note**
|
||||
> Requests can be accepted or rejected at the discretion of maintainers of ReVanced Manager.
|
||||
> Good motivation has to be provided for a request to be accepted.
|
||||
|
||||
## 🐞 Submitting a bug report
|
||||
|
||||
If you encounter a bug while using the ReVanced Manager app, 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).
|
||||
If you encounter a bug while using ReVanced Manager, open an issue using the
|
||||
[Bug report issue template](https://github.com/ReVanced/revanced-manager/issues/new?assignees=&labels=Bug+report&projects=&template=bug_report.yml&title=bug%3A+).
|
||||
|
||||
## 📝 How to contribute
|
||||
|
||||
> [!TIP]
|
||||
> We recommend that you discuss your changes with
|
||||
> the maintainers of ReVanced Manager before contributing.
|
||||
> This will help you determine whether your change is acceptable.
|
||||
|
||||
1. Fork the repository and create a new branch based off the `dev` branch
|
||||
2. Commit your changes
|
||||
3. Open a pull request to the `dev` branch and reference issues that your pull request closes
|
||||
4. The maintainers of ReVanced Manager will review and provide suggestions.
|
||||
Once your pull request is approved and merged, it will be included in the next release of ReVanced Manager
|
||||
1. Before contributing, it is recommended to open an issue to discuss your change
|
||||
with the maintainers of ReVanced Manager. This will help you determine whether your change is acceptable
|
||||
and whether it is worth your time to implement it
|
||||
2. Development happens on the `dev` branch. Fork the repository and create your branch from `dev`
|
||||
3. Commit your changes
|
||||
4. Submit a pull request to the `dev` branch of the repository and reference issues
|
||||
that your pull request closes in the description of your pull request
|
||||
5. Our team will review your pull request and provide feedback. Once your pull request is approved,
|
||||
it will be merged into the `dev` branch and will be included in the next release of ReVanced Manager
|
||||
|
||||
## 🤚 I want to contribute but don't know how to code
|
||||
|
||||
Even if you don't know how to code, you can still contribute by
|
||||
translating ReVanced Manager on [Crowdin](https://translate.revanced.app/).
|
||||
|
||||
❤️ Thank you for considering contributing to ReVanced Manager.
|
||||
❤️ Thank you for considering contributing to ReVanced Manager,
|
||||
ReVanced
|
||||
|
48
README.md
48
README.md
@ -13,8 +13,8 @@
|
||||
<br>
|
||||
<a href="https://revanced.app/">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo-round.svg" />
|
||||
<img height="24px" src="assets/revanced-logo/revanced-logo-round.svg" />
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo.svg" />
|
||||
<img height="24px" src="assets/revanced-logo/revanced-logo.svg" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://github.com/ReVanced">
|
||||
@ -60,38 +60,50 @@
|
||||
|
||||
# 💊 ReVanced Manager
|
||||
|
||||
[](https://github.com/ReVanced/revanced-manager/commits "")
|
||||
[](https://github.com/ReVanced/revanced-manager/commits "")
|
||||

|
||||

|
||||
|
||||
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
|
||||
|
||||
Some of the features we provide are:
|
||||
Some of the features ReVanced Manager provides are:
|
||||
|
||||
* 📱 **Portable**: ReVanced Patcher that fit in your pocket;
|
||||
* 🤗 **Intuitive UI**: Help you manage your patched applications with easy-to-use interface;
|
||||
* 🛠️ **Customization**: Patch with third-party sources;
|
||||
* ✨ And a **lot more!**
|
||||
- 💉 **Patch apps**: Apply any patch of your choice to Android apps
|
||||
- 📱 **Portable**: ReVanced Patcher that fits in your pocket
|
||||
- 🤗 **Simple UI**: Quickly understand the ins and outs of ReVanced Manager
|
||||
- 🛠️ **Customization**: Configurable API, custom sources, language, signing keystore, theme and more
|
||||
|
||||
## 🔽 Download
|
||||
|
||||
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
|
||||
|
||||
### 📙 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 on how to use the application is available [here](/docs/README.md).
|
||||
You can find the documentation for ReVanced Manager [here](/docs).
|
||||
|
||||
### 👋 Contributing
|
||||
|
||||
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).
|
||||
Thank you for considering contributing to ReVanced Manager. You can find the contribution guidelines [here](/CONTRIBUTING.md).
|
||||
|
||||
## ⚖️ 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.
|
||||
|
14
SECURITY.md
14
SECURITY.md
@ -13,8 +13,8 @@
|
||||
<br>
|
||||
<a href="https://revanced.app/">
|
||||
<picture>
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo-round.svg" />
|
||||
<img height="24px" src="assets/revanced-logo/revanced-logo-round.svg" />
|
||||
<source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo.svg" />
|
||||
<img height="24px" src="assets/revanced-logo/revanced-logo.svg" />
|
||||
</picture>
|
||||
</a>
|
||||
<a href="https://github.com/ReVanced">
|
||||
@ -70,8 +70,8 @@ If a vulnerability is confirmed and accepted, you can join our [Discord](https:/
|
||||
|
||||
### ⏳ Supported Versions
|
||||
|
||||
| Version | Branch | Supported |
|
||||
| -------------------------------------------------------------------------------------------------------- | ----------- | ------------------ |
|
||||
|  | main | :white_check_mark: |
|
||||
|  | dev | :white_check_mark: |
|
||||
|  | compose-dev | :white_check_mark: |
|
||||
| Version | Branch | Supported |
|
||||
| --------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------ |
|
||||
|  | main | :white_check_mark: |
|
||||
|  | dev | :white_check_mark: |
|
||||
|  | compose-dev | :white_check_mark: |
|
||||
|
@ -113,12 +113,6 @@ flutter {
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.10"
|
||||
|
||||
// ReVanced
|
||||
implementation "app.revanced:revanced-patcher:19.1.0"
|
||||
|
||||
// Signing & aligning
|
||||
implementation("org.bouncycastle:bcpkix-jdk15on:1.70")
|
||||
implementation("com.android.tools.build:apksig:7.2.2")
|
||||
implementation("app.revanced:revanced-patcher:19.3.1")
|
||||
implementation("app.revanced:revanced-library:2.2.1")
|
||||
}
|
||||
|
16
android/app/proguard-rules.pro
vendored
16
android/app/proguard-rules.pro
vendored
@ -5,19 +5,17 @@
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# These packages are referenced by ReVanced Patches
|
||||
-keep class app.revanced.patcher.** { *; }
|
||||
-dontobfuscate
|
||||
|
||||
-keep class app.revanced.** { *; }
|
||||
-keep class com.android.tools.smali.** { *; }
|
||||
-keep class kotlin.** { *; }
|
||||
-keepnames class com.google.common.collect.**
|
||||
|
||||
# This package uses reflection internally, so do not remove and rename
|
||||
-keep class com.google.auto.value.** { *; }
|
||||
-keep class com.android.apksig.internal.** { *; }
|
||||
|
||||
# Fix crash
|
||||
-keepnames class com.google.common.collect.**
|
||||
-keepnames class org.xmlpull.** { *; }
|
||||
|
||||
# Fix build errors
|
||||
-dontwarn com.google.auto.value.**
|
||||
-dontwarn com.google.j2objc.annotations.*
|
||||
-dontwarn java.awt.**
|
||||
-dontwarn javax.**
|
||||
-dontwarn com.google.j2objc.annotations.*
|
@ -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.VIBRATE" />
|
||||
|
||||
@ -17,7 +18,9 @@
|
||||
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
|
||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
|
||||
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
|
||||
tools:ignore="QueryAllPackagesPermission" />
|
||||
|
||||
<application
|
||||
android:label="@string/app_name"
|
||||
android:name="${applicationName}"
|
||||
|
@ -7,23 +7,19 @@ import android.content.pm.PackageInstaller
|
||||
import android.os.Build
|
||||
import android.os.Handler
|
||||
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.aligning.ZipAligner
|
||||
import app.revanced.manager.flutter.utils.packageInstaller.InstallerReceiver
|
||||
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.PatchSet
|
||||
import app.revanced.patcher.Patcher
|
||||
import app.revanced.patcher.PatcherOptions
|
||||
import app.revanced.patcher.PatcherConfig
|
||||
import app.revanced.patcher.patch.PatchResult
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
import io.flutter.embedding.engine.FlutterEngine
|
||||
import io.flutter.plugin.common.MethodChannel
|
||||
import kotlinx.coroutines.InternalCoroutinesApi
|
||||
import kotlinx.coroutines.cancel
|
||||
import kotlinx.coroutines.flow.FlowCollector
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import org.json.JSONArray
|
||||
@ -50,7 +46,10 @@ class MainActivity : FlutterActivity() {
|
||||
val installerChannel = "app.revanced.manager.flutter/installer"
|
||||
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") {
|
||||
val searchQuery = call.argument<String>("query")
|
||||
openBrowser(searchQuery)
|
||||
@ -69,40 +68,34 @@ class MainActivity : FlutterActivity() {
|
||||
mainChannel.setMethodCallHandler { call, result ->
|
||||
when (call.method) {
|
||||
"runPatcher" -> {
|
||||
val originalFilePath = call.argument<String>("originalFilePath")
|
||||
val inputFilePath = call.argument<String>("inputFilePath")
|
||||
val patchedFilePath = call.argument<String>("patchedFilePath")
|
||||
val inFilePath = call.argument<String>("inFilePath")
|
||||
val outFilePath = call.argument<String>("outFilePath")
|
||||
val integrationsPath = call.argument<String>("integrationsPath")
|
||||
val selectedPatches = call.argument<List<String>>("selectedPatches")
|
||||
val 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 keystorePassword = call.argument<String>("keystorePassword")
|
||||
|
||||
if (
|
||||
originalFilePath != null &&
|
||||
inputFilePath != null &&
|
||||
patchedFilePath != null &&
|
||||
inFilePath != null &&
|
||||
outFilePath != null &&
|
||||
integrationsPath != null &&
|
||||
selectedPatches != null &&
|
||||
options != null &&
|
||||
cacheDirPath != null &&
|
||||
tmpDirPath != null &&
|
||||
keyStoreFilePath != null &&
|
||||
keystorePassword != null
|
||||
) {
|
||||
cancel = false
|
||||
runPatcher(
|
||||
result,
|
||||
originalFilePath,
|
||||
inputFilePath,
|
||||
patchedFilePath,
|
||||
inFilePath,
|
||||
outFilePath,
|
||||
integrationsPath,
|
||||
selectedPatches,
|
||||
options,
|
||||
cacheDirPath,
|
||||
tmpDirPath,
|
||||
keyStoreFilePath,
|
||||
keystorePassword
|
||||
)
|
||||
@ -214,28 +207,23 @@ class MainActivity : FlutterActivity() {
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(InternalCoroutinesApi::class)
|
||||
|
||||
private fun runPatcher(
|
||||
result: MethodChannel.Result,
|
||||
originalFilePath: String,
|
||||
inputFilePath: String,
|
||||
patchedFilePath: String,
|
||||
inFilePath: String,
|
||||
outFilePath: String,
|
||||
integrationsPath: String,
|
||||
selectedPatches: List<String>,
|
||||
options: Map<String, Map<String, Any>>,
|
||||
cacheDirPath: String,
|
||||
tmpDirPath: String,
|
||||
keyStoreFilePath: String,
|
||||
keystorePassword: String
|
||||
) {
|
||||
val originalFile = File(originalFilePath)
|
||||
val inputFile = File(inputFilePath)
|
||||
val patchedFile = File(patchedFilePath)
|
||||
val inFile = File(inFilePath)
|
||||
val outFile = File(outFilePath)
|
||||
val integrations = File(integrationsPath)
|
||||
val keyStoreFile = File(keyStoreFilePath)
|
||||
val cacheDir = File(cacheDirPath)
|
||||
val tmpDir = File(tmpDirPath)
|
||||
|
||||
Thread {
|
||||
fun updateProgress(progress: Double, header: String, log: String) {
|
||||
@ -253,6 +241,16 @@ class MainActivity : FlutterActivity() {
|
||||
|
||||
fun postStop() = handler.post { stopResult!!.success(null) }
|
||||
|
||||
fun cancel(block: () -> Unit = {}): Boolean {
|
||||
if (cancel) {
|
||||
block()
|
||||
postStop()
|
||||
}
|
||||
|
||||
return cancel
|
||||
}
|
||||
|
||||
|
||||
// Setup logger
|
||||
Logger.getLogger("").apply {
|
||||
handlers.forEach {
|
||||
@ -273,38 +271,20 @@ class MainActivity : FlutterActivity() {
|
||||
}
|
||||
|
||||
try {
|
||||
updateProgress(0.0, "", "Copying APK")
|
||||
|
||||
if (cancel) {
|
||||
postStop()
|
||||
return@Thread
|
||||
}
|
||||
|
||||
originalFile.copyTo(inputFile, true)
|
||||
|
||||
if (cancel) {
|
||||
postStop()
|
||||
return@Thread
|
||||
}
|
||||
|
||||
updateProgress(0.05, "Reading APK...", "Reading APK")
|
||||
updateProgress(0.0, "Reading APK...", "Reading APK")
|
||||
|
||||
val patcher = Patcher(
|
||||
PatcherOptions(
|
||||
inputFile,
|
||||
cacheDir,
|
||||
PatcherConfig(
|
||||
inFile,
|
||||
tmpDir,
|
||||
Aapt.binary(applicationContext).absolutePath,
|
||||
cacheDir.path,
|
||||
tmpDir.path,
|
||||
true // TODO: Add option to disable this
|
||||
)
|
||||
)
|
||||
|
||||
if (cancel) {
|
||||
postStop()
|
||||
return@Thread
|
||||
}
|
||||
|
||||
updateProgress(0.1, "Loading patches...", "Loading patches")
|
||||
if (cancel(patcher::close)) return@Thread
|
||||
updateProgress(0.02, "Loading patches...", "Loading patches")
|
||||
|
||||
val patches = patches.filter { patch ->
|
||||
val isCompatible = patch.compatiblePackages?.any {
|
||||
@ -319,32 +299,25 @@ class MainActivity : FlutterActivity() {
|
||||
options[patch.name]?.forEach { (key, value) ->
|
||||
patch.options[key] = value
|
||||
}
|
||||
}
|
||||
}.toSet()
|
||||
|
||||
if (cancel) {
|
||||
postStop()
|
||||
return@Thread
|
||||
}
|
||||
if (cancel(patcher::close)) return@Thread
|
||||
updateProgress(0.05, "Executing...", "")
|
||||
|
||||
updateProgress(0.15, "Executing...", "")
|
||||
|
||||
// Update the progress bar every time a patch is executed from 0.15 to 0.7
|
||||
val totalPatchesCount = patches.size
|
||||
val progressStep = 0.55 / totalPatchesCount
|
||||
var progress = 0.15
|
||||
|
||||
patcher.apply {
|
||||
acceptIntegrations(listOf(integrations))
|
||||
acceptPatches(patches)
|
||||
val patcherResult = patcher.use {
|
||||
patcher.apply {
|
||||
acceptIntegrations(setOf(integrations))
|
||||
acceptPatches(patches)
|
||||
}
|
||||
|
||||
runBlocking {
|
||||
apply(false).collect(FlowCollector { patchResult: PatchResult ->
|
||||
if (cancel) {
|
||||
handler.post { stopResult!!.success(null) }
|
||||
this.cancel()
|
||||
this@apply.close()
|
||||
return@FlowCollector
|
||||
}
|
||||
// Update the progress bar every time a patch is executed from 0.15 to 0.7
|
||||
val totalPatchesCount = patches.size
|
||||
val progressStep = 0.55 / totalPatchesCount
|
||||
var progress = 0.05
|
||||
|
||||
patcher.apply(false).collect(FlowCollector { patchResult: PatchResult ->
|
||||
if (cancel(patcher::close)) return@FlowCollector
|
||||
|
||||
val msg = patchResult.exception?.let {
|
||||
val writer = StringWriter()
|
||||
@ -358,50 +331,29 @@ class MainActivity : FlutterActivity() {
|
||||
progress += progressStep
|
||||
})
|
||||
}
|
||||
|
||||
if (cancel(patcher::close)) return@Thread
|
||||
updateProgress(0.75, "Building...", "")
|
||||
|
||||
patcher.get()
|
||||
}
|
||||
|
||||
if (cancel) {
|
||||
postStop()
|
||||
patcher.close()
|
||||
return@Thread
|
||||
}
|
||||
if (cancel(patcher::close)) return@Thread
|
||||
|
||||
updateProgress(0.75, "Building...", "")
|
||||
patcherResult.applyTo(inFile)
|
||||
|
||||
val res = patcher.get()
|
||||
patcher.close()
|
||||
if (cancel(patcher::close)) return@Thread
|
||||
|
||||
ZipFile(patchedFile).use { file ->
|
||||
res.dexFiles.forEach {
|
||||
if (cancel) {
|
||||
postStop()
|
||||
return@Thread
|
||||
}
|
||||
file.addEntryCompressData(
|
||||
ZipEntry.createWithName(it.name),
|
||||
it.stream.readBytes()
|
||||
)
|
||||
}
|
||||
res.resourceFile?.let {
|
||||
file.copyEntriesFromFileAligned(
|
||||
ZipFile(it),
|
||||
ZipAligner::getEntryAlignment
|
||||
)
|
||||
}
|
||||
file.copyEntriesFromFileAligned(
|
||||
ZipFile(inputFile),
|
||||
ZipAligner::getEntryAlignment
|
||||
ApkUtils.sign(
|
||||
inFile,
|
||||
outFile,
|
||||
ApkUtils.SigningOptions(
|
||||
keyStoreFile,
|
||||
keystorePassword,
|
||||
"alias",
|
||||
keystorePassword
|
||||
)
|
||||
}
|
||||
|
||||
if (cancel) {
|
||||
postStop()
|
||||
return@Thread
|
||||
}
|
||||
|
||||
updateProgress(0.8, "Signing...", "Signing APK")
|
||||
|
||||
Signer("ReVanced", keystorePassword).signApk(patchedFile, outFile, keyStoreFile)
|
||||
)
|
||||
|
||||
updateProgress(.85, "Patched", "Patched APK")
|
||||
} catch (ex: Throwable) {
|
||||
@ -421,7 +373,8 @@ class MainActivity : FlutterActivity() {
|
||||
|
||||
private fun installApk(apkPath: String) {
|
||||
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 session: PackageInstaller.Session = packageInstaller.openSession(sessionId)
|
||||
session.use { activeSession ->
|
||||
@ -436,7 +389,12 @@ class MainActivity : FlutterActivity() {
|
||||
val receiverIntent = Intent(applicationContext, InstallerReceiver::class.java).apply {
|
||||
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.close()
|
||||
}
|
||||
@ -446,7 +404,8 @@ class MainActivity : FlutterActivity() {
|
||||
val receiverIntent = Intent(applicationContext, UninstallerReceiver::class.java).apply {
|
||||
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)
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
}
|
@ -1,74 +0,0 @@
|
||||
package app.revanced.manager.flutter.utils.signing
|
||||
|
||||
import com.android.apksig.ApkSigner
|
||||
import org.bouncycastle.asn1.x500.X500Name
|
||||
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo
|
||||
import org.bouncycastle.cert.X509v3CertificateBuilder
|
||||
import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter
|
||||
import org.bouncycastle.jce.provider.BouncyCastleProvider
|
||||
import org.bouncycastle.operator.ContentSigner
|
||||
import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder
|
||||
import java.io.File
|
||||
import java.io.FileInputStream
|
||||
import java.io.FileOutputStream
|
||||
import java.math.BigInteger
|
||||
import java.security.*
|
||||
import java.security.cert.X509Certificate
|
||||
import java.util.*
|
||||
|
||||
internal class Signer(
|
||||
private val cn: String, password: String
|
||||
) {
|
||||
private val passwordCharArray = password.toCharArray()
|
||||
private fun newKeystore(out: File) {
|
||||
val (publicKey, privateKey) = createKey()
|
||||
val privateKS = KeyStore.getInstance("BKS", "BC")
|
||||
privateKS.load(null, passwordCharArray)
|
||||
privateKS.setKeyEntry("alias", privateKey, passwordCharArray, arrayOf(publicKey))
|
||||
privateKS.store(FileOutputStream(out), passwordCharArray)
|
||||
}
|
||||
|
||||
private fun createKey(): Pair<X509Certificate, PrivateKey> {
|
||||
val gen = KeyPairGenerator.getInstance("RSA")
|
||||
gen.initialize(2048)
|
||||
val pair = gen.generateKeyPair()
|
||||
var serialNumber: BigInteger
|
||||
do serialNumber =
|
||||
BigInteger.valueOf(SecureRandom().nextLong()) while (serialNumber < BigInteger.ZERO)
|
||||
val x500Name = X500Name("CN=$cn")
|
||||
val builder = X509v3CertificateBuilder(
|
||||
x500Name,
|
||||
serialNumber,
|
||||
Date(System.currentTimeMillis() - 1000L * 60L * 60L * 24L * 30L),
|
||||
Date(System.currentTimeMillis() + 1000L * 60L * 60L * 24L * 366L * 30L),
|
||||
Locale.ENGLISH,
|
||||
x500Name,
|
||||
SubjectPublicKeyInfo.getInstance(pair.public.encoded)
|
||||
)
|
||||
val signer: ContentSigner = JcaContentSignerBuilder("SHA256withRSA").build(pair.private)
|
||||
return JcaX509CertificateConverter().getCertificate(builder.build(signer)) to pair.private
|
||||
}
|
||||
|
||||
fun signApk(input: File, output: File, ks: File) {
|
||||
Security.addProvider(BouncyCastleProvider())
|
||||
|
||||
if (!ks.exists()) newKeystore(ks)
|
||||
|
||||
val keyStore = KeyStore.getInstance("BKS", "BC")
|
||||
FileInputStream(ks).use { fis -> keyStore.load(fis, null) }
|
||||
val alias = keyStore.aliases().nextElement()
|
||||
|
||||
val config = ApkSigner.SignerConfig.Builder(
|
||||
cn,
|
||||
keyStore.getKey(alias, passwordCharArray) as PrivateKey,
|
||||
listOf(keyStore.getCertificate(alias) as X509Certificate)
|
||||
).build()
|
||||
|
||||
val signer = ApkSigner.Builder(listOf(config))
|
||||
signer.setCreatedBy(cn)
|
||||
signer.setInputApk(input)
|
||||
signer.setOutputApk(output)
|
||||
|
||||
signer.build().sign()
|
||||
}
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
@file:Suppress("unused")
|
||||
|
||||
package app.revanced.manager.flutter.utils.zip
|
||||
|
||||
import java.io.DataInput
|
||||
import java.io.DataOutput
|
||||
import java.nio.ByteBuffer
|
||||
|
||||
fun UInt.toLittleEndian() =
|
||||
(((this.toInt() and 0xff000000.toInt()) shr 24) or ((this.toInt() and 0x00ff0000) shr 8) or ((this.toInt() and 0x0000ff00) shl 8) or (this.toInt() shl 24)).toUInt()
|
||||
|
||||
fun UShort.toLittleEndian() = (this.toUInt() shl 16).toLittleEndian().toUShort()
|
||||
|
||||
fun UInt.toBigEndian() = (((this.toInt() and 0xff) shl 24) or ((this.toInt() and 0xff00) shl 8)
|
||||
or ((this.toInt() and 0x00ff0000) ushr 8) or (this.toInt() ushr 24)).toUInt()
|
||||
|
||||
fun UShort.toBigEndian() = (this.toUInt() shl 16).toBigEndian().toUShort()
|
||||
|
||||
fun ByteBuffer.getUShort() = this.short.toUShort()
|
||||
fun ByteBuffer.getUInt() = this.int.toUInt()
|
||||
|
||||
fun ByteBuffer.putUShort(ushort: UShort): ByteBuffer = this.putShort(ushort.toShort())
|
||||
fun ByteBuffer.putUInt(uint: UInt): ByteBuffer = this.putInt(uint.toInt())
|
||||
|
||||
fun DataInput.readUShort() = this.readShort().toUShort()
|
||||
fun DataInput.readUInt() = this.readInt().toUInt()
|
||||
|
||||
fun DataOutput.writeUShort(ushort: UShort) = this.writeShort(ushort.toInt())
|
||||
fun DataOutput.writeUInt(uint: UInt) = this.writeInt(uint.toInt())
|
||||
|
||||
fun DataInput.readUShortLE() = this.readUShort().toBigEndian()
|
||||
fun DataInput.readUIntLE() = this.readUInt().toBigEndian()
|
||||
|
||||
fun DataOutput.writeUShortLE(ushort: UShort) = this.writeUShort(ushort.toLittleEndian())
|
||||
fun DataOutput.writeUIntLE(uint: UInt) = this.writeUInt(uint.toLittleEndian())
|
@ -1,176 +0,0 @@
|
||||
package app.revanced.manager.flutter.utils.zip
|
||||
|
||||
import app.revanced.manager.flutter.utils.zip.structures.ZipEndRecord
|
||||
import app.revanced.manager.flutter.utils.zip.structures.ZipEntry
|
||||
import java.io.Closeable
|
||||
import java.io.File
|
||||
import java.io.RandomAccessFile
|
||||
import java.nio.ByteBuffer
|
||||
import java.nio.channels.FileChannel
|
||||
import java.util.zip.CRC32
|
||||
import java.util.zip.Deflater
|
||||
|
||||
class ZipFile(file: File) : Closeable {
|
||||
var entries: MutableList<ZipEntry> = mutableListOf()
|
||||
|
||||
private val filePointer: RandomAccessFile = RandomAccessFile(file, "rw")
|
||||
private var CDNeedsRewrite = false
|
||||
|
||||
private val compressionLevel = 5
|
||||
|
||||
init {
|
||||
//if file isn't empty try to load entries
|
||||
if (file.length() > 0) {
|
||||
val endRecord = findEndRecord()
|
||||
|
||||
if (endRecord.diskNumber > 0u || endRecord.totalEntries != endRecord.diskEntries)
|
||||
throw IllegalArgumentException("Multi-file archives are not supported")
|
||||
|
||||
entries = readEntries(endRecord).toMutableList()
|
||||
}
|
||||
|
||||
//seek back to start for writing
|
||||
filePointer.seek(0)
|
||||
}
|
||||
|
||||
private fun findEndRecord(): ZipEndRecord {
|
||||
//look from end to start since end record is at the end
|
||||
for (i in filePointer.length() - 1 downTo 0) {
|
||||
filePointer.seek(i)
|
||||
//possible beginning of signature
|
||||
if (filePointer.readByte() == 0x50.toByte()) {
|
||||
//seek back to get the full int
|
||||
filePointer.seek(i)
|
||||
val possibleSignature = filePointer.readUIntLE()
|
||||
if (possibleSignature == ZipEndRecord.ECD_SIGNATURE) {
|
||||
filePointer.seek(i)
|
||||
return ZipEndRecord.fromECD(filePointer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
throw Exception("Couldn't find end record")
|
||||
}
|
||||
|
||||
private fun readEntries(endRecord: ZipEndRecord): List<ZipEntry> {
|
||||
filePointer.seek(endRecord.centralDirectoryStartOffset.toLong())
|
||||
|
||||
val numberOfEntries = endRecord.diskEntries.toInt()
|
||||
|
||||
return buildList(numberOfEntries) {
|
||||
for (i in 1..numberOfEntries) {
|
||||
add(
|
||||
ZipEntry.fromCDE(filePointer).also
|
||||
{
|
||||
//for some reason the local extra field can be different from the central one
|
||||
it.readLocalExtra(
|
||||
filePointer.channel.map(
|
||||
FileChannel.MapMode.READ_ONLY,
|
||||
it.localHeaderOffset.toLong() + 28,
|
||||
2
|
||||
)
|
||||
)
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun writeCD() {
|
||||
val CDStart = filePointer.channel.position().toUInt()
|
||||
|
||||
entries.forEach {
|
||||
filePointer.channel.write(it.toCDE())
|
||||
}
|
||||
|
||||
val entriesCount = entries.size.toUShort()
|
||||
|
||||
val endRecord = ZipEndRecord(
|
||||
0u,
|
||||
0u,
|
||||
entriesCount,
|
||||
entriesCount,
|
||||
filePointer.channel.position().toUInt() - CDStart,
|
||||
CDStart,
|
||||
""
|
||||
)
|
||||
|
||||
filePointer.channel.write(endRecord.toECD())
|
||||
}
|
||||
|
||||
private fun addEntry(entry: ZipEntry, data: ByteBuffer) {
|
||||
CDNeedsRewrite = true
|
||||
|
||||
entry.localHeaderOffset = filePointer.channel.position().toUInt()
|
||||
|
||||
filePointer.channel.write(entry.toLFH())
|
||||
filePointer.channel.write(data)
|
||||
|
||||
entries.add(entry)
|
||||
}
|
||||
|
||||
fun addEntryCompressData(entry: ZipEntry, data: ByteArray) {
|
||||
val compressor = Deflater(compressionLevel, true)
|
||||
compressor.setInput(data)
|
||||
compressor.finish()
|
||||
|
||||
val uncompressedSize = data.size
|
||||
val compressedData =
|
||||
ByteArray(uncompressedSize) //i'm guessing compression won't make the data bigger
|
||||
|
||||
val compressedDataLength = compressor.deflate(compressedData)
|
||||
val compressedBuffer =
|
||||
ByteBuffer.wrap(compressedData.take(compressedDataLength).toByteArray())
|
||||
|
||||
compressor.end()
|
||||
|
||||
val crc = CRC32()
|
||||
crc.update(data)
|
||||
|
||||
entry.compression = 8u //deflate compression
|
||||
entry.uncompressedSize = uncompressedSize.toUInt()
|
||||
entry.compressedSize = compressedDataLength.toUInt()
|
||||
entry.crc32 = crc.value.toUInt()
|
||||
|
||||
addEntry(entry, compressedBuffer)
|
||||
}
|
||||
|
||||
private fun addEntryCopyData(entry: ZipEntry, data: ByteBuffer, alignment: Int? = null) {
|
||||
alignment?.let {
|
||||
//calculate where data would end up
|
||||
val dataOffset = filePointer.filePointer + entry.LFHSize
|
||||
|
||||
val mod = dataOffset % alignment
|
||||
|
||||
//wrong alignment
|
||||
if (mod != 0L) {
|
||||
//add padding at end of extra field
|
||||
entry.localExtraField =
|
||||
entry.localExtraField.copyOf((entry.localExtraField.size + (alignment - mod)).toInt())
|
||||
}
|
||||
}
|
||||
|
||||
addEntry(entry, data)
|
||||
}
|
||||
|
||||
fun getDataForEntry(entry: ZipEntry): ByteBuffer {
|
||||
return filePointer.channel.map(
|
||||
FileChannel.MapMode.READ_ONLY,
|
||||
entry.dataOffset.toLong(),
|
||||
entry.compressedSize.toLong()
|
||||
)
|
||||
}
|
||||
|
||||
fun copyEntriesFromFileAligned(file: ZipFile, entryAlignment: (entry: ZipEntry) -> Int?) {
|
||||
for (entry in file.entries) {
|
||||
if (entries.any { it.fileName == entry.fileName }) continue //don't add duplicates
|
||||
|
||||
val data = file.getDataForEntry(entry)
|
||||
addEntryCopyData(entry, data, entryAlignment(entry))
|
||||
}
|
||||
}
|
||||
|
||||
override fun close() {
|
||||
if (CDNeedsRewrite) writeCD()
|
||||
filePointer.close()
|
||||
}
|
||||
}
|
@ -1,78 +0,0 @@
|
||||
package app.revanced.manager.flutter.utils.zip.structures
|
||||
|
||||
import app.revanced.manager.flutter.utils.zip.putUInt
|
||||
import app.revanced.manager.flutter.utils.zip.putUShort
|
||||
import app.revanced.manager.flutter.utils.zip.readUIntLE
|
||||
import app.revanced.manager.flutter.utils.zip.readUShortLE
|
||||
import java.io.DataInput
|
||||
import java.nio.ByteBuffer
|
||||
import java.nio.ByteOrder
|
||||
|
||||
data class ZipEndRecord(
|
||||
val diskNumber: UShort,
|
||||
val startingDiskNumber: UShort,
|
||||
val diskEntries: UShort,
|
||||
val totalEntries: UShort,
|
||||
val centralDirectorySize: UInt,
|
||||
val centralDirectoryStartOffset: UInt,
|
||||
val fileComment: String,
|
||||
) {
|
||||
|
||||
companion object {
|
||||
const val ECD_HEADER_SIZE = 22
|
||||
const val ECD_SIGNATURE = 0x06054b50u
|
||||
|
||||
fun fromECD(input: DataInput): ZipEndRecord {
|
||||
val signature = input.readUIntLE()
|
||||
|
||||
if (signature != ECD_SIGNATURE)
|
||||
throw IllegalArgumentException("Input doesn't start with end record signature")
|
||||
|
||||
val diskNumber = input.readUShortLE()
|
||||
val startingDiskNumber = input.readUShortLE()
|
||||
val diskEntries = input.readUShortLE()
|
||||
val totalEntries = input.readUShortLE()
|
||||
val centralDirectorySize = input.readUIntLE()
|
||||
val centralDirectoryStartOffset = input.readUIntLE()
|
||||
val fileCommentLength = input.readUShortLE()
|
||||
var fileComment = ""
|
||||
|
||||
if (fileCommentLength > 0u) {
|
||||
val fileCommentBytes = ByteArray(fileCommentLength.toInt())
|
||||
input.readFully(fileCommentBytes)
|
||||
fileComment = fileCommentBytes.toString(Charsets.UTF_8)
|
||||
}
|
||||
|
||||
return ZipEndRecord(
|
||||
diskNumber,
|
||||
startingDiskNumber,
|
||||
diskEntries,
|
||||
totalEntries,
|
||||
centralDirectorySize,
|
||||
centralDirectoryStartOffset,
|
||||
fileComment
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun toECD(): ByteBuffer {
|
||||
val commentBytes = fileComment.toByteArray(Charsets.UTF_8)
|
||||
|
||||
val buffer = ByteBuffer.allocate(ECD_HEADER_SIZE + commentBytes.size)
|
||||
.also { it.order(ByteOrder.LITTLE_ENDIAN) }
|
||||
|
||||
buffer.putUInt(ECD_SIGNATURE)
|
||||
buffer.putUShort(diskNumber)
|
||||
buffer.putUShort(startingDiskNumber)
|
||||
buffer.putUShort(diskEntries)
|
||||
buffer.putUShort(totalEntries)
|
||||
buffer.putUInt(centralDirectorySize)
|
||||
buffer.putUInt(centralDirectoryStartOffset)
|
||||
buffer.putUShort(commentBytes.size.toUShort())
|
||||
|
||||
buffer.put(commentBytes)
|
||||
|
||||
buffer.flip()
|
||||
return buffer
|
||||
}
|
||||
}
|
@ -1,190 +0,0 @@
|
||||
package app.revanced.manager.flutter.utils.zip.structures
|
||||
|
||||
import app.revanced.manager.flutter.utils.zip.*
|
||||
import java.io.DataInput
|
||||
import java.nio.ByteBuffer
|
||||
import java.nio.ByteOrder
|
||||
|
||||
data class ZipEntry(
|
||||
val version: UShort,
|
||||
val versionNeeded: UShort,
|
||||
val flags: UShort,
|
||||
var compression: UShort,
|
||||
val modificationTime: UShort,
|
||||
val modificationDate: UShort,
|
||||
var crc32: UInt,
|
||||
var compressedSize: UInt,
|
||||
var uncompressedSize: UInt,
|
||||
val diskNumber: UShort,
|
||||
val internalAttributes: UShort,
|
||||
val externalAttributes: UInt,
|
||||
var localHeaderOffset: UInt,
|
||||
val fileName: String,
|
||||
val extraField: ByteArray,
|
||||
val fileComment: String,
|
||||
var localExtraField: ByteArray = ByteArray(0), //separate for alignment
|
||||
) {
|
||||
val LFHSize: Int
|
||||
get() = LFH_HEADER_SIZE + fileName.toByteArray(Charsets.UTF_8).size + localExtraField.size
|
||||
|
||||
val dataOffset: UInt
|
||||
get() = localHeaderOffset + LFHSize.toUInt()
|
||||
|
||||
companion object {
|
||||
const val CDE_HEADER_SIZE = 46
|
||||
const val CDE_SIGNATURE = 0x02014b50u
|
||||
|
||||
const val LFH_HEADER_SIZE = 30
|
||||
const val LFH_SIGNATURE = 0x04034b50u
|
||||
|
||||
fun createWithName(fileName: String): ZipEntry {
|
||||
return ZipEntry(
|
||||
0x1403u, //made by unix, version 20
|
||||
0u,
|
||||
0u,
|
||||
0u,
|
||||
0x0821u, //seems to be static time google uses, no idea
|
||||
0x0221u, //same as above
|
||||
0u,
|
||||
0u,
|
||||
0u,
|
||||
0u,
|
||||
0u,
|
||||
0u,
|
||||
0u,
|
||||
fileName,
|
||||
ByteArray(0),
|
||||
""
|
||||
)
|
||||
}
|
||||
|
||||
fun fromCDE(input: DataInput): ZipEntry {
|
||||
val signature = input.readUIntLE()
|
||||
|
||||
if (signature != CDE_SIGNATURE)
|
||||
throw IllegalArgumentException("Input doesn't start with central directory entry signature")
|
||||
|
||||
val version = input.readUShortLE()
|
||||
val versionNeeded = input.readUShortLE()
|
||||
var flags = input.readUShortLE()
|
||||
val compression = input.readUShortLE()
|
||||
val modificationTime = input.readUShortLE()
|
||||
val modificationDate = input.readUShortLE()
|
||||
val crc32 = input.readUIntLE()
|
||||
val compressedSize = input.readUIntLE()
|
||||
val uncompressedSize = input.readUIntLE()
|
||||
val fileNameLength = input.readUShortLE()
|
||||
var fileName = ""
|
||||
val extraFieldLength = input.readUShortLE()
|
||||
val extraField = ByteArray(extraFieldLength.toInt())
|
||||
val fileCommentLength = input.readUShortLE()
|
||||
var fileComment = ""
|
||||
val diskNumber = input.readUShortLE()
|
||||
val internalAttributes = input.readUShortLE()
|
||||
val externalAttributes = input.readUIntLE()
|
||||
val localHeaderOffset = input.readUIntLE()
|
||||
|
||||
val variableFieldsLength =
|
||||
fileNameLength.toInt() + extraFieldLength.toInt() + fileCommentLength.toInt()
|
||||
|
||||
if (variableFieldsLength > 0) {
|
||||
val fileNameBytes = ByteArray(fileNameLength.toInt())
|
||||
input.readFully(fileNameBytes)
|
||||
fileName = fileNameBytes.toString(Charsets.UTF_8)
|
||||
|
||||
input.readFully(extraField)
|
||||
|
||||
val fileCommentBytes = ByteArray(fileCommentLength.toInt())
|
||||
input.readFully(fileCommentBytes)
|
||||
fileComment = fileCommentBytes.toString(Charsets.UTF_8)
|
||||
}
|
||||
|
||||
flags = (flags and 0b1000u.inv()
|
||||
.toUShort()) //disable data descriptor flag as they are not used
|
||||
|
||||
return ZipEntry(
|
||||
version,
|
||||
versionNeeded,
|
||||
flags,
|
||||
compression,
|
||||
modificationTime,
|
||||
modificationDate,
|
||||
crc32,
|
||||
compressedSize,
|
||||
uncompressedSize,
|
||||
diskNumber,
|
||||
internalAttributes,
|
||||
externalAttributes,
|
||||
localHeaderOffset,
|
||||
fileName,
|
||||
extraField,
|
||||
fileComment,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun readLocalExtra(buffer: ByteBuffer) {
|
||||
buffer.order(ByteOrder.LITTLE_ENDIAN)
|
||||
localExtraField = ByteArray(buffer.getUShort().toInt())
|
||||
}
|
||||
|
||||
fun toLFH(): ByteBuffer {
|
||||
val nameBytes = fileName.toByteArray(Charsets.UTF_8)
|
||||
|
||||
val buffer = ByteBuffer.allocate(LFH_HEADER_SIZE + nameBytes.size + localExtraField.size)
|
||||
.also { it.order(ByteOrder.LITTLE_ENDIAN) }
|
||||
|
||||
buffer.putUInt(LFH_SIGNATURE)
|
||||
buffer.putUShort(versionNeeded)
|
||||
buffer.putUShort(flags)
|
||||
buffer.putUShort(compression)
|
||||
buffer.putUShort(modificationTime)
|
||||
buffer.putUShort(modificationDate)
|
||||
buffer.putUInt(crc32)
|
||||
buffer.putUInt(compressedSize)
|
||||
buffer.putUInt(uncompressedSize)
|
||||
buffer.putUShort(nameBytes.size.toUShort())
|
||||
buffer.putUShort(localExtraField.size.toUShort())
|
||||
|
||||
buffer.put(nameBytes)
|
||||
buffer.put(localExtraField)
|
||||
|
||||
buffer.flip()
|
||||
return buffer
|
||||
}
|
||||
|
||||
fun toCDE(): ByteBuffer {
|
||||
val nameBytes = fileName.toByteArray(Charsets.UTF_8)
|
||||
val commentBytes = fileComment.toByteArray(Charsets.UTF_8)
|
||||
|
||||
val buffer =
|
||||
ByteBuffer.allocate(CDE_HEADER_SIZE + nameBytes.size + extraField.size + commentBytes.size)
|
||||
.also { it.order(ByteOrder.LITTLE_ENDIAN) }
|
||||
|
||||
buffer.putUInt(CDE_SIGNATURE)
|
||||
buffer.putUShort(version)
|
||||
buffer.putUShort(versionNeeded)
|
||||
buffer.putUShort(flags)
|
||||
buffer.putUShort(compression)
|
||||
buffer.putUShort(modificationTime)
|
||||
buffer.putUShort(modificationDate)
|
||||
buffer.putUInt(crc32)
|
||||
buffer.putUInt(compressedSize)
|
||||
buffer.putUInt(uncompressedSize)
|
||||
buffer.putUShort(nameBytes.size.toUShort())
|
||||
buffer.putUShort(extraField.size.toUShort())
|
||||
buffer.putUShort(commentBytes.size.toUShort())
|
||||
buffer.putUShort(diskNumber)
|
||||
buffer.putUShort(internalAttributes)
|
||||
buffer.putUInt(externalAttributes)
|
||||
buffer.putUInt(localHeaderOffset)
|
||||
|
||||
buffer.put(nameBytes)
|
||||
buffer.put(extraField)
|
||||
buffer.put(commentBytes)
|
||||
|
||||
buffer.flip()
|
||||
return buffer
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,12 @@ allprojects {
|
||||
google()
|
||||
mavenCentral()
|
||||
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()
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ pluginManagement {
|
||||
plugins {
|
||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||
id "com.android.application" version "8.1.2" apply false
|
||||
id "org.jetbrains.kotlin.android" version "1.9.10" apply false
|
||||
id "org.jetbrains.kotlin.android" version "1.9.23" apply false
|
||||
}
|
||||
|
||||
include ":app"
|
||||
|
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "This feature has not been implemented yet"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contributors",
|
||||
"patcherContributors": "ReVanced Patcher",
|
||||
"patchesContributors": "ReVanced Patches",
|
||||
"integrationsContributors": "ReVanced Integrations",
|
||||
"cliContributors": "ReVanced CLI",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Contributors"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Version mismatch",
|
||||
|
@ -96,7 +96,9 @@
|
||||
"selectFromStorageButton": "اختيار من التخزين",
|
||||
"errorMessage": "لا يمكن استخدام التطبيق المحدد",
|
||||
"downloadToast": "خاصية التحميل غير متوفرة بعد",
|
||||
"featureNotAvailable": "الميزة غير مُدمَجة بعد"
|
||||
"requireSuggestedAppVersionDialogText": "الإصدار من التطبيق الذي حددته لا يتطابق مع الإصدار المقترح الذي يمكن أن يؤدي إلى مشاكل غير متوقعة. الرجاء استخدام الإصدار المقترح.\n\nالإصدار المحدد: ${selected}\nالإصدار المقترح: ${suggested}\n\nللاستمرار على أي حال، قم بتعطيل \"طلب إصدار التطبيق المقترح\" في الإعدادات.",
|
||||
"featureNotAvailable": "الميزة غير مُدمَجة بعد",
|
||||
"featureNotAvailableText": "هذا التطبيق عبارة عن ملف Spilt APK ولا يمكن تعديله وتثبيته بشكل موثوق إلا عن طريق التثبيت باستخدام أذونات Root. ومع ذلك، يمكنك تعديل وتثبيت ملف APK كاملًا عن طريق تحديده من وحدة التخزين."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "حدد التعديلات",
|
||||
@ -133,6 +135,7 @@
|
||||
"unsupportedDialogText": "قد يؤدي تحديد هذا التعديل إلى حدوث أخطاء في عملية التعديل.\n\nإصدار التطبيق: ${packageVersion}\nالإصدارات المدعومة حالياً:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "التعديل غير مدعوم لإصدار التطبيق هذا.",
|
||||
"unsupportedRequiredOption": "يحتوي هذا التعديل على خيار مطلوب لا يدعمه هذا التطبيق",
|
||||
"patchesChangeWarningDialogText": "يوصى باستخدام تحديد التعديل وخياراته الافتراضية. قد يؤدي تغييرها إلى حدوث مشكلات غير متوقعة.\n\nستحتاج إلى تشغيل \"السماح بتغيير تحديد التعديل\" في الإعدادات قبل تغيير أي تحديد تعديل.",
|
||||
"patchesChangeWarningDialogButton": "استخدام التحديد الافتراضي"
|
||||
},
|
||||
"installerView": {
|
||||
@ -142,6 +145,7 @@
|
||||
"installButton": "تثبيت",
|
||||
"installRootType": "تحميل",
|
||||
"installNonRootType": "عادي",
|
||||
"warning": "قم بتعطيل التحديثات التلقائية للتطبيق المعدل لتجنب المشكلات غير المتوقعة.",
|
||||
"pressBackAgain": "اضغط رجوع مرة اخرى للإلغاء",
|
||||
"openButton": "فتح",
|
||||
"shareButton": "شارك ملف",
|
||||
@ -171,12 +175,16 @@
|
||||
"languageUpdated": "تم تحديث اللغة",
|
||||
"englishOption": "الإنجليزية",
|
||||
"sourcesLabel": "مصادر بديلة",
|
||||
"sourcesLabelHint": "قم بتكوين المصادر البديلة لتعديلات ReVanced وتكاملات ReVanced",
|
||||
"sourcesIntegrationsLabel": "مصدر الـدمج",
|
||||
"useAlternativeSources": "استخدام مصادر بديلة",
|
||||
"useAlternativeSourcesHint": "استخدم مصادر بديلة لتعديلات ReVanced وعمليات التكامل ReVanced بدلاً من API",
|
||||
"sourcesResetDialogTitle": "إعادة التعيين",
|
||||
"sourcesResetDialogText": "هل أنت متأكد من أنك تريد إعادة تعيين المصادر الخاصة بك إلى قيمها الافتراضية؟",
|
||||
"apiURLResetDialogText": "هل أنت متأكد من أنك تريد إعادة تعيين رابط API الخاص بك إلى قيمته الافتراضية؟",
|
||||
"sourcesUpdateNote": "ملاحظة: سيؤدي هذا إلى تنزيل تعديلات ReVanced وتكاملات ReVanced تلقائيًا من المصادر البديلة.\n\nسيؤدي هذا إلى توصيلك بالمصدر البديل.",
|
||||
"apiURLLabel": "رابط API",
|
||||
"apiURLHint": "تكوين عنوان URL لواجهة برمجة التطبيقات الخاصة بـ ReVanced Manager",
|
||||
"selectApiURL": "رابط API",
|
||||
"orgPatchesLabel": "تنظيم التعديلات",
|
||||
"sourcesPatchesLabel": "مصدر التعديلات",
|
||||
@ -186,6 +194,7 @@
|
||||
"logsLabel": "مشاركة السجلات",
|
||||
"logsHint": "مشاركة سجلات ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "السماح بتغيير تحديد التعديل",
|
||||
"enablePatchesSelectionHint": "لا تمنع تحديد أو إلغاء تحديد التعديلات",
|
||||
"enablePatchesSelectionWarningText": "قد يؤدي تغيير تحديد التعديلات إلى حدوث مشكلات غير متوقعة.\n\nهل تريد التمكين على أي حال؟",
|
||||
"disablePatchesSelectionWarningText": "أنت على وشك تعطيل تغيير تحديد التعديلات.\nستتم استعادة التحديد الافتراضي للتعديلات.\n\nهل تريد التعطيل على أي حال؟",
|
||||
"autoUpdatePatchesLabel": "تحديث التعديلات تلقائيًا",
|
||||
@ -195,7 +204,9 @@
|
||||
"universalPatchesLabel": "عرض التعديلات العامة",
|
||||
"universalPatchesHint": "عرض جميع التطبيقات والتعديلات العامة (قد تؤدي إلى إبطاء قائمة التطبيقات)",
|
||||
"versionCompatibilityCheckLabel": "التحقق من توافق الإصدار",
|
||||
"versionCompatibilityCheckHint": "منع تحديد التعديلات غير المتوافقة مع إصدار التطبيق المحدد",
|
||||
"requireSuggestedAppVersionLabel": "يتطلب إصدار التطبيق المقترح",
|
||||
"requireSuggestedAppVersionHint": "منع تحديد تطبيق بإصدار غير المقترح",
|
||||
"requireSuggestedAppVersionDialogText": "قد يؤدي تحديد تطبيق ليس هو الإصدار المقترح إلى حدوث مشكلات غير متوقعة.\n\nهل تريد المتابعة على أية حال؟",
|
||||
"aboutLabel": "لمحة",
|
||||
"snackbarMessage": "نُسِخ إلى الحافظة",
|
||||
@ -262,10 +273,27 @@
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "نسخة غير متطابقة",
|
||||
"mount_no_root": "لا توجد صلاحيات روت",
|
||||
"mount_missing_installation": "التثبيت غير متوفر",
|
||||
"status_failure_blocked": "التثبيت محظور",
|
||||
"install_failed_verification_failure": "فشل التحقق",
|
||||
"status_failure_invalid": "التثبيت غير صالح",
|
||||
"install_failed_version_downgrade": "لا يمكن الرجوع إلى إصدار سابق",
|
||||
"status_failure_conflict": "تعارض التثبيت",
|
||||
"status_failure_storage": "مشكلة تخزين التثبيت",
|
||||
"status_failure_incompatible": "التثبيت غير متوافق",
|
||||
"status_failure_timeout": "مهلة التثبيت",
|
||||
"status_unknown": "فشل التثبيت",
|
||||
"mount_version_mismatch_description": "فشل التثبيت نظرًا لكون التطبيق المثبت إصدارًا مختلفًا عن التطبيق الذي تم تعديله.\n\nقم بتثبيت إصدار التطبيق الذي تقوم بتثبيته وحاول مرة أخرى.",
|
||||
"mount_no_root_description": "فشل التثبيت بسبب عدم منح الوصول إلى Root.\n\nامنح حق الوصول Root إلى ReVanced Manager وحاول مرة أخرى.",
|
||||
"mount_missing_installation_description": "فشل التثبيت بسبب عدم تثبيت التطبيق غير المعدل على هذا الجهاز من أجل تثبيته عليه.\n\nقم بتثبيت التطبيق غير المعدل قبل التثبيت وحاول مرة أخرى.",
|
||||
"status_failure_timeout_description": "استغرق التثبيت وقتا طويلا للانتهاء.\n\nهل تود أن تجرب مجددا؟",
|
||||
"status_failure_storage_description": "فشل التثبيت بسبب عدم كفاية مساحة التخزين.\n\nقم بتحرير بعض المساحة وحاول مرة أخرى.",
|
||||
"status_failure_invalid_description": "فشل التثبيت نظرًا لأن التطبيق المعدل غير صالح.\n\nهل تريد إلغاء تثبيت التطبيق والمحاولة مرة أخرى؟",
|
||||
"status_failure_incompatible_description": "التطبيق غير متوافق مع هذا الجهاز.\n\nاتصل بمطور التطبيق واطلب الدعم.",
|
||||
"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": "فشل التثبيت لسبب غير معروف. الرجاء المحاولة مرة أخرى."
|
||||
}
|
||||
}
|
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Bu özəllik hələ tətbiq olunmayıb"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Töhfə verənlər",
|
||||
"patcherContributors": "ReVanced Patcher",
|
||||
"patchesContributors": "ReVanced Yamaqları",
|
||||
"integrationsContributors": "ReVanced İnteqrasiyaları",
|
||||
"cliContributors": "ReVanced CLI",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Töhfə verənlər"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Versiya uyuşmur",
|
||||
|
@ -12,11 +12,11 @@
|
||||
"noButton": "Не",
|
||||
"warning": "Увага",
|
||||
"options": "Параметры",
|
||||
"notice": "Апавяшчэнне",
|
||||
"notice": "Заўвага",
|
||||
"noShowAgain": "Больш не паказваць",
|
||||
"add": "Дадаць",
|
||||
"remove": "Выдаліць",
|
||||
"showChangelogButton": "Паказаць журнал змен",
|
||||
"showChangelogButton": "Паказаць журнал змяненняў",
|
||||
"showUpdateButton": "Паказаць абнаўленне",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Галоўная",
|
||||
@ -32,7 +32,7 @@
|
||||
"noUpdates": "Няма даступных абнаўленняў",
|
||||
"WIP": "У працэсе...",
|
||||
"noInstallations": "Няма ўсталяваных праграм з выпраўленнямі",
|
||||
"installUpdate": "Працягнуць устаноўку абнаўлення?",
|
||||
"installUpdate": "Працягнуць усталяванне абнаўлення?",
|
||||
"updateSheetTitle": "Абнавіць ReVanced Manager",
|
||||
"updateDialogTitle": "Даступна новае абнаўленне",
|
||||
"updatePatchesSheetTitle": "Абнавіць выпраўленні ReVanced",
|
||||
@ -41,24 +41,24 @@
|
||||
"downloadConsentDialogTitle": "Спампаваць неабходныя файлы?",
|
||||
"downloadConsentDialogText": "ReVanced Manager неабходна спампаваць неабходныя файлы для правільнай працы.",
|
||||
"downloadConsentDialogText2": "Гэта падключыць вас да ${url}.",
|
||||
"checkUpdateDialogTitle": "Праверыць абнаўленні?",
|
||||
"checkUpdateDialogTitle": "Праверыць наяўнасць абнаўленняў?",
|
||||
"checkUpdateDialogText": "Вы сапраўды хочаце правяраць абнаўленні ReVanced Manager аўтаматычна?",
|
||||
"notificationTitle": "Абнаўленне спампавана",
|
||||
"notificationText": "Націсніце, каб усталяваць абнаўленне",
|
||||
"downloadingMessage": "Загружаецца абнаўленне...",
|
||||
"downloadingMessage": "Спампоўваецца абнаўленне...",
|
||||
"downloadedMessage": "Абнаўленне спампавана",
|
||||
"installingMessage": "Усталяванне абнаўлення...",
|
||||
"errorDownloadMessage": "Немагчыма спампаваць абнаўленне",
|
||||
"errorInstallMessage": "Немагчыма ўсталяваць абнаўленне",
|
||||
"noConnection": "Няма злучэння з інтэрнэтам",
|
||||
"updatesDisabled": "Абнаўленне праграмы з выпраўленнем зараз адключана. Неабходна паўторна ўжыць выпраўленне для праграмы."
|
||||
"updatesDisabled": "Абнаўленне выпраўленай праграмы ў цяперашні час адключана. Неабходна паўторна ўжыць выпраўленне для праграмы."
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Інфармацыя"
|
||||
"infoButton": "Звесткі"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Загрузка...",
|
||||
"timeagoLabel": "${time} таму назад",
|
||||
"timeagoLabel": "${time} таму",
|
||||
"patcherLabel": "Праграма выпраўлення: ",
|
||||
"managerLabel": "Менеджар: ",
|
||||
"updateButton": "Абнавіць ReVanced Manager"
|
||||
@ -66,9 +66,9 @@
|
||||
"patcherView": {
|
||||
"widgetTitle": "Праграма выпраўлення",
|
||||
"patchButton": "Выправіць",
|
||||
"armv7WarningDialogText": "Выпраўленне на працэсарах з архітэктурай ARMv7 пакуль не падтрымліваецца і можа прывесці да збою. Працягнуць?",
|
||||
"armv7WarningDialogText": "Выпраўленне для прылад на ARMv7 пакуль не падтрымліваецца і можа прывесці да збою. Працягнуць?",
|
||||
"removedPatchesWarningDialogText": "Наступныя выпраўленні былі выдалены з моманту іх апошняга выкарыстання.\n\n${patches}\n\nУсё роўна працягнуць?",
|
||||
"requiredOptionDialogText": "Некаторыя выпраўленні павінны быць зададзены."
|
||||
"requiredOptionDialogText": "Неабходна задаць некаторыя параметры выпраўленняў."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Выбраць праграму",
|
||||
@ -80,7 +80,7 @@
|
||||
"anyVersion": "Любая версія"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Выбраць выпраўленні",
|
||||
"widgetTitle": "Выберыце выпраўленні",
|
||||
"widgetTitleSelected": "Выбраныя выпраўленні",
|
||||
"widgetSubtitle": "Спачатку выберыце праграму",
|
||||
"widgetEmptySubtitle": "Выпраўленні не выбраны"
|
||||
@ -101,7 +101,7 @@
|
||||
"featureNotAvailableText": "Гэта праграма з'яўляецца раздзеленым файлам APK і яе можна надзейна выправіць і ўсталяваць толькі падключэннем з правамі суперкарыстальніка. Аднак вы можаце выправіць і ўсталяваць поўны файл APK выбраўшы яго са сховішча."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Выбраць выпраўленні",
|
||||
"viewTitle": "Выберыце выпраўленні",
|
||||
"searchBarHint": "Пошук выпраўленняў",
|
||||
"universalPatches": "Універсальныя выпраўленні",
|
||||
"newPatches": "Новыя выпраўленні",
|
||||
@ -117,16 +117,16 @@
|
||||
"setRequiredOption": "Некаторыя выпраўленні патрабуюць зададзеных параметраў:\n\n${patches}\n\nЗадайце іх перад працягам."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Карыстальніцкае значэнне",
|
||||
"customValue": "Уласнае значэнне",
|
||||
"resetOptionsTooltip": "Скінуць параметры выпраўлення",
|
||||
"viewTitle": "Параметры выпраўлення",
|
||||
"saveOptions": "Захаваць",
|
||||
"addOptions": "Дадаць параметры",
|
||||
"deselectPatch": "Зняць выбар з выпраўлення",
|
||||
"tooltip": "Больш уваходных параметраў",
|
||||
"selectFilePath": "Выберыце шлях файла",
|
||||
"selectFilePath": "Выбраць шлях да файла",
|
||||
"selectFolder": "Выбраць папку",
|
||||
"selectOption": "Выбраць параметр",
|
||||
"selectOption": "Выберыце параметр",
|
||||
"requiredOption": "Абавязковы параметр",
|
||||
"unsupportedOption": "Гэты параметр не падтрымліваецца",
|
||||
"requiredOptionNull": "Наступныя параметры павінны быць зададзены:\n\n${options}"
|
||||
@ -140,8 +140,8 @@
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Устаноўшчык праграм",
|
||||
"installType": "Выберыце тып усталявання",
|
||||
"installTypeDescription": "Выберыце тып усталявання для працягу.",
|
||||
"installType": "Выберыце тып устаноўкі",
|
||||
"installTypeDescription": "Выберыце тып устаноўкі для працягу.",
|
||||
"installButton": "Усталяваць",
|
||||
"installRootType": "Падключыць",
|
||||
"installNonRootType": "Звычайны",
|
||||
@ -149,9 +149,9 @@
|
||||
"pressBackAgain": "Націсніце назад яшчэ раз, каб скасаваць",
|
||||
"openButton": "Адкрыць",
|
||||
"shareButton": "Абагуліць файл",
|
||||
"notificationTitle": "Адбываецца ReVanced Manager выпраўленне праграмы",
|
||||
"notificationTitle": "ReVanced Manager працуе над выпраўленнем",
|
||||
"notificationText": "Націсніце для вяртання ва ўсталёўшчык праграм",
|
||||
"exportApkButtonTooltip": "Экспартаваць выпраўлены APK",
|
||||
"exportApkButtonTooltip": "Экспартаваць выпраўленыя APK",
|
||||
"exportLogButtonTooltip": "Экспартаваць журнал",
|
||||
"screenshotDetected": "Выяўлены здымак экрана. Калі вы хочаце абагуліць журнал, то замест гэтага адпраўце тэкставую копію\n\nСкапіраваць журнал у буфер абмену?",
|
||||
"copiedToClipboard": "Журнал скапіяваны ў буфер абмену",
|
||||
@ -170,7 +170,7 @@
|
||||
"lightThemeLabel": "Светлая",
|
||||
"darkThemeLabel": "Цёмная",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Атрымлівайце асалоду досведу яшчэ бліжэй да сваё прылады",
|
||||
"dynamicThemeHint": "Атрымлівайце асалоду ад тэмы сваёй прылады",
|
||||
"languageLabel": "Мова",
|
||||
"languageUpdated": "Мова абноўлена",
|
||||
"englishOption": "Англійская",
|
||||
@ -180,8 +180,8 @@
|
||||
"useAlternativeSources": "Выкарыстоўваць альтэрнатыўныя крыніцы",
|
||||
"useAlternativeSourcesHint": "Выкарыстоўваць альтэрнатыўныя крыніцы для ReVanced Patches і ReVanced Integrations замест API",
|
||||
"sourcesResetDialogTitle": "Скінуць",
|
||||
"sourcesResetDialogText": "Вы ўпэўнены, што хочаце скінуць свае крыніцы да іх прадвызначаных значэнняў?",
|
||||
"apiURLResetDialogText": "Вы ўпэўнены, што хочаце скінуць свае крыніцы да іх прадвызначаных значэнняў?",
|
||||
"sourcesResetDialogText": "Вы сапраўды хочаце скінуць свае крыніцы да іх прадвызначаных значэнняў?",
|
||||
"apiURLResetDialogText": "Вы сапраўды хочаце скінуць свае API URL да іх прадвызначаных значэнняў?",
|
||||
"sourcesUpdateNote": "Нататка: Гэта аўтаматычна спампуе ReVanced Patches і ReVanced Integrations з альтэрнатыўных крыніц.\n\nГэта падключыць вас да альтэрнатыўнай крыніцы.",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Сканфігурыруйце URL API для ReVanced Manager",
|
||||
@ -191,7 +191,7 @@
|
||||
"orgIntegrationsLabel": "Арганізацыя інтэграцый",
|
||||
"contributorsLabel": "Удзельнікі",
|
||||
"contributorsHint": "Спіс усіх удзельнікаў праекта ReVanced",
|
||||
"logsLabel": "Абагуліць журналы",
|
||||
"logsLabel": "Абагуліць журнал",
|
||||
"logsHint": "Абагуліць журнал ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Дазволіць змяненне выбару выпраўлення",
|
||||
"enablePatchesSelectionHint": "Не прадухіляць выбар або скасаванне выбару выпраўленняў",
|
||||
@ -204,25 +204,25 @@
|
||||
"universalPatchesLabel": "Паказваць універсальныя выпраўленні",
|
||||
"universalPatchesHint": "Адлюстраваць усе праграмы і ўніверсальныя выпраўленні (можа запаволіць спіс праграм)",
|
||||
"versionCompatibilityCheckLabel": "Праверка сумяшчальнасці версіі",
|
||||
"versionCompatibilityCheckHint": "Прадухіляць выбар выпраўленняў, якія не сумяшчальныя з выбранай версіяй праграмы",
|
||||
"versionCompatibilityCheckHint": "Прадухіляць выбар выпраўленняў, якія несумяшчальныя з выбранай версіяй праграмы",
|
||||
"requireSuggestedAppVersionLabel": "Запыт прапанаванай версіі праграмы",
|
||||
"requireSuggestedAppVersionHint": "Прадухіляць выбар праграмы з не прапанаванай версіяй",
|
||||
"requireSuggestedAppVersionDialogText": "Выбар праграмы не прапанаванай версіі можа стаць прычынай нечаканых праблем.\n\nВы ўсё роўна хочаце працягнуць?",
|
||||
"aboutLabel": "Пра праграму",
|
||||
"snackbarMessage": "Скапіравана ў буфер абмену",
|
||||
"snackbarMessage": "Скапіявана ў буфер абмену",
|
||||
"restartAppForChanges": "Перазапусціце праграму, каб ужыць змены",
|
||||
"deleteTempDirLabel": "Выдаліць часовыя файлы",
|
||||
"deleteTempDirHint": "Выдаліць нявыкарыстаныя часовыя файлы",
|
||||
"deletedTempDir": "Часовыя файлы выдалены",
|
||||
"exportPatchesLabel": "Экспартаваць выбар выпраўлення",
|
||||
"exportPatchesLabel": "Экспартаваць выбар выпраўленняў",
|
||||
"exportPatchesHint": "Экспартаваць выбар выпраўленняў у файл JSON",
|
||||
"exportedPatches": "Выбар выпраўленняў экспартаваны",
|
||||
"noExportFileFound": "Адсутнічае выбар выпраўленняў для экспартавання",
|
||||
"importPatchesLabel": "Імпартаваць выбар выпраўленняў",
|
||||
"importPatchesHint": "Імпартаваць выбар выпраўленняў у файл JSON",
|
||||
"importedPatches": "Выбар выпраўленняў імпартаваны",
|
||||
"resetStoredPatchesLabel": "Скінуць выбар выпраўленняў",
|
||||
"resetStoredPatchesHint": "Скінуць захаванне выбару выпраўленняў",
|
||||
"resetStoredPatchesLabel": "Скінуць выбар выпраўлення",
|
||||
"resetStoredPatchesHint": "Скінуць захаванне выбару выпраўлення",
|
||||
"resetStoredPatchesDialogTitle": "Скінуць выбар выпраўленняў?",
|
||||
"resetStoredPatchesDialogText": "Прадвызначаны выбар выпраўленняў будзе адноўлены.",
|
||||
"resetStoredPatches": "Выбар выпраўленняў будзе скінуты",
|
||||
@ -237,7 +237,7 @@
|
||||
"regenerateKeystoreLabel": "Перагенерыраваць сховішча ключоў",
|
||||
"regenerateKeystoreHint": "Паўторна генерыраваць сховішча ключоў, якое выкарыстоўваецца для падпісання праграм",
|
||||
"regenerateKeystoreDialogTitle": "Паўторна генерыраваць сховішча ключоў?",
|
||||
"regenerateKeystoreDialogText": "Выпраўленыя праграмы, якія падпісаны старым сховішчам ключом, больш немагчыма будзе абнавіць.",
|
||||
"regenerateKeystoreDialogText": "Выпраўленыя праграмы, якія падпісаны старым сховішчам ключоў, больш немагчыма будзе абнавіць.",
|
||||
"regeneratedKeystore": "Сховішча ключоў генерыравана паўторна",
|
||||
"exportKeystoreLabel": "Экспартаваць сховішча ключоў",
|
||||
"exportKeystoreHint": "Экспартаваць сховішча ключоў, якое выкарыстоўваецца для падпісання праграм",
|
||||
@ -245,7 +245,7 @@
|
||||
"noKeystoreExportFileFound": "Адсутнічае сховішча ключоў для экспартавання",
|
||||
"importKeystoreLabel": "Імпартаваць сховішча ключоў",
|
||||
"importKeystoreHint": "Імпартаваць сховішча ключоў, якое выкарыстоўваецца для падпісання праграм",
|
||||
"importedKeystore": "Сховішча ключоў імпартаваны",
|
||||
"importedKeystore": "Сховішча ключоў імпартавана",
|
||||
"selectKeystorePassword": "Пароль сховішча ключоў",
|
||||
"selectKeystorePasswordHint": "Выбраць пароль сховішча ключоў, які выкарыстоўваецца для падпісання праграм",
|
||||
"jsonSelectorErrorMessage": "Немагчыма выкарыстоўваць выбраны файл JSON",
|
||||
@ -259,7 +259,7 @@
|
||||
"rootDialogTitle": "Памылка",
|
||||
"unmountDialogText": "Вы сапраўды хочаце адключыць гэту праграму?",
|
||||
"uninstallDialogText": "Вы сапраўды хочаце выдаліць гэту праграму?",
|
||||
"rootDialogText": "Праграма ўсталявана з правамі суперкарыстальніка, але ў цяперашні час у ReVanced Manager адсутнічаюць правы.\nСпачатку дайце праграме правы суперкарыстальніка.",
|
||||
"rootDialogText": "Праграма ўсталявана з правамі суперкарыстальніка, але ў цяперашні час у ReVanced Manager адсутнічаюць такія правы.\nСпачатку дайце праграме правы суперкарыстальніка.",
|
||||
"packageNameLabel": "Назва пакета",
|
||||
"installTypeLabel": "Тып усталявання",
|
||||
"mountTypeLabel": "Падключыць",
|
||||
@ -271,29 +271,24 @@
|
||||
"updateNotImplemented": "Пакуль яшчэ гэта функцыя не рэалізавана"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Удзельнікі",
|
||||
"patcherContributors": "ReVanced Patcher",
|
||||
"patchesContributors": "Выпраўленні ReVanced",
|
||||
"integrationsContributors": "Інтэграцыі ReVanced",
|
||||
"cliContributors": "ReVanced CLI",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Удзельнікі"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Неадпаведнасць версій",
|
||||
"mount_no_root": "Няма праў суперкарыстальніка",
|
||||
"mount_missing_installation": "Усталёўка не знойдзена",
|
||||
"status_failure_blocked": "Усталёўка заблакіравана",
|
||||
"mount_missing_installation": "Усталяванне не знойдзена",
|
||||
"status_failure_blocked": "Усталяванне заблакіравана",
|
||||
"install_failed_verification_failure": "Збой праверкі",
|
||||
"status_failure_invalid": "Памылковая ўсталёўка",
|
||||
"status_failure_invalid": "Памылковае ўсталяванне",
|
||||
"install_failed_version_downgrade": "Немагчыма панізіць",
|
||||
"status_failure_conflict": "Канфлікт усталявання",
|
||||
"status_failure_storage": "Праблема са сховішчам устаноўкі",
|
||||
"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Усталюйце не выпраўленую праграму перад падключэннем і паспрабуйце яшчэ раз.",
|
||||
"mount_missing_installation_description": "Збой усталявання, бо спачатку неабходна ўсталяваць не выпраўленую праграму на гэту прыладу для падключэння паверх яе.\n\nУсталюйце не выпраўленую праграму перад падключэннем і паспрабуйце яшчэ раз.",
|
||||
"status_failure_timeout_description": "Працэс усталявання адбываўся занадта доўга.\n\nВы сапраўды хочаце паспрабаваць яшчэ раз?",
|
||||
"status_failure_storage_description": "Збой усталявання, бо на прыладзе недастаткова памяці.\n\nВызваліце крыху месца і паўтарыце спробу яшчэ раз.",
|
||||
"status_failure_invalid_description": "Збой усталявання, бо выпраўленая праграма пашкоджана.\n\nВыдаліць праграму і паспрабаваць яшчэ раз?",
|
||||
|
@ -107,7 +107,9 @@
|
||||
"newPatches": "নতুন প্যাচসমূহ",
|
||||
"patches": "প্যাচসমূহ",
|
||||
"doneButton": "সম্পন্ন হয়েছে",
|
||||
"defaultChip": "পূর্ব-নির্ধারিত",
|
||||
"defaultTooltip": "সকল পূর্ব-নির্ধারিত প্যাচ নির্বাচন করুন",
|
||||
"noneChip": "কোনটি নয়",
|
||||
"noneTooltip": "সকল প্যাচ অনির্বাচন করুন",
|
||||
"loadPatchesSelection": "নির্বাচিত প্যাচ লোড করুন",
|
||||
"noSavedPatches": "নির্বাচিত অ্যাপের জন্য কোন সংরক্ষিত প্যাচ নেই।\nবর্তমানে নির্বাচিত প্যাচ সংরক্ষণ করতে সম্পন্ন হয়েছে চাপুন।",
|
||||
@ -133,11 +135,13 @@
|
||||
"unsupportedDialogText": "এই প্যাচটি নির্বাচন করলে প্যাচিং ত্রুটিপূর্ণ হতে পারে।\n\nঅ্যাপ সংস্করণ: ${packageVersion}\nসমর্থিত সংস্করণ:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "এই অ্যাপ সংস্করণের জন্য প্যাচ সমর্থিত নয়।",
|
||||
"unsupportedRequiredOption": "এই প্যাচটিতে একটি প্রয়োজনীয় অপশন রয়েছে যা এই অ্যাপটি সমর্থন করে না",
|
||||
"patchesChangeWarningDialogText": "পূর্ব নির্ধারিত নির্বাচিত প্যাচ এবং অপশন ব্যবহার করার প্রস্তাব রাখে। এগুলো পরিবর্তন করার মাধ্যমে অনাকাঙ্খিত ইস্যু হতে পারে।\n\nপ্যাচ নির্বাচন পরিবর্তন করার পূর্বে আপনাকে অবশ্যই সেটিং থেকে \"প্যাচ নির্বাচন পরিবর্তন করার অনুমতি\" সচল করতে হবে।",
|
||||
"patchesChangeWarningDialogButton": "পূর্বনির্ধারিত নির্বাচন ব্যবহার করুন"
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "ইনস্টলার",
|
||||
"installType": "ইনস্টল করার ধরণ নির্বাচন করুন",
|
||||
"installTypeDescription": "যে প্রক্রিয়ায় ইনস্টল করা এগিয়ে নিতে চান তা নির্বাচন করুন।",
|
||||
"installButton": "ইনস্টল করুন",
|
||||
"installRootType": "মাউন্ট",
|
||||
"installNonRootType": "সাধারণ",
|
||||
@ -160,6 +164,7 @@
|
||||
"debugSectionTitle": "ডিবাগিং",
|
||||
"advancedSectionTitle": "উন্নত",
|
||||
"exportSectionTitle": "আমদানি ও রপ্তানি",
|
||||
"dataSectionTitle": "তথ্যের উৎস",
|
||||
"themeModeLabel": "অ্যাপের থীম",
|
||||
"systemThemeLabel": "সিস্টেম",
|
||||
"lightThemeLabel": "উজ্জ্বল",
|
||||
@ -167,12 +172,19 @@
|
||||
"dynamicThemeLabel": "ম্যাটেরিয়াল ইউ",
|
||||
"dynamicThemeHint": "আপনার ডিভাইসের লুকের কাছাকাছি অভিজ্ঞতা নিন",
|
||||
"languageLabel": "ভাষা",
|
||||
"languageUpdated": "ভাষা হালনাগাদ করা হয়েছে",
|
||||
"englishOption": "ইংরেজি",
|
||||
"sourcesLabel": "বিকল্প উৎস",
|
||||
"sourcesLabelHint": "ReVanced প্যাচ ও ReVanced ইন্ট্রিগ্রেশনের জন্য বিকল্প উৎস কনফিগার করুন",
|
||||
"sourcesIntegrationsLabel": "ইন্ট্রিগেশনের উৎস",
|
||||
"useAlternativeSources": "বিকল্প উৎস ব্যবহার করুন",
|
||||
"useAlternativeSourcesHint": "ReVanced প্যাচ ও ReVanced ইন্ট্রিগ্রেশনের জন্য API এর পরিবর্তে বিকল্প উৎস ব্যবহার করুন",
|
||||
"sourcesResetDialogTitle": "পুনরায় সেট করুন",
|
||||
"sourcesResetDialogText": "আপনি কি নিশ্চিতভাবে আপনার উৎসগুলোকে পূর্বনির্ধারিত উৎসে ফিরিয়ে নিতে চান?",
|
||||
"apiURLResetDialogText": "আপনি কি নিশ্চিতভাবে আপনার API URL কে তার মূল ভ্যালুতে পুনরায় সেট করতে চান?",
|
||||
"sourcesUpdateNote": "বি:দ্র: এটি স্বয়ংক্রিয়ভাবে বিকল্প উৎস থেকে ReVanced প্যাচ ও ReVanced ইন্ট্রিগ্রেশন ডাউনলোড করবে।\n\nএটি আপনাকে বিকল্প উৎসের সাথে সংযুক্ত করবে।",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "ReVanced Manager এর API URL কনফিগার করুন",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "প্যাচ এর উদ্ভাবক",
|
||||
"sourcesPatchesLabel": "প্যাচ এর উৎস",
|
||||
@ -187,6 +199,8 @@
|
||||
"disablePatchesSelectionWarningText": "আপনি নির্বাচিত প্যাচ পরিবর্তনকে নিষ্ক্রিয় করতে যাচ্ছেন।\nপূর্বনির্ধারিত নির্বাচিত প্যাচসমূহ ফিরিয়ে আনা হবে।\n\nযেকোন ভাবে নিষ্ক্রিয় করতে চান?",
|
||||
"autoUpdatePatchesLabel": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে আপডেট করুন",
|
||||
"autoUpdatePatchesHint": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে সর্বশেষ সংস্করণে আপডেট হবে",
|
||||
"showUpdateDialogLabel": "হালনাগাদ ডায়ালগ দেখান",
|
||||
"showUpdateDialogHint": "যখন হালনাগাদ উপলব্ধ থাকবে তখন একটি ডায়ালগ দেখান",
|
||||
"universalPatchesLabel": "বৈশ্বিক প্যাচসমূহ দেখান",
|
||||
"universalPatchesHint": "সকল অ্যাপ এবং বৈশ্বিক প্যাচসমূহ দেখায় (অ্যাপ লিস্ট দেখানো একটু ধীর হতে পারে)",
|
||||
"versionCompatibilityCheckLabel": "সংস্করণ সামঞ্জস্যতা পরীক্ষা করা",
|
||||
@ -267,6 +281,15 @@
|
||||
"install_failed_verification_failure": "যাচাইকরণ ব্যর্থ হয়েছে",
|
||||
"status_failure_invalid": "ইনস্টল সঠিক নয়",
|
||||
"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 এর রুট প্রবেশাধিকার অনুমতি দিন এবং আবার চেষ্টা করুন।",
|
||||
"mount_missing_installation_description": "এটির উপর মাউন্ট করার জন্য এই ডিভাইসে আনপ্যাচড অ্যাপ ইনস্টল না হওয়ার কারণে ইনস্টলেশন ব্যর্থ হয়েছে.\n\nমাউন্ট করার আগে আনপ্যাচড অ্যাপ ইনস্টল করুন এবং আবার চেষ্টা করুন.",
|
||||
"status_failure_timeout_description": "ইন্সটলেশন শেষ হতে অনেক সময় লেগেছে.\n\nআপনি আবার চেষ্টা করতে চান?",
|
||||
"status_failure_storage_description": "অপর্যাপ্ত সঞ্চয়স্থানের কারণে ইনস্টলেশন ব্যর্থ হয়েছে.\n\nকিছু জায়গা খালি করুন এবং আবার চেষ্টা করুন."
|
||||
}
|
||||
}
|
@ -203,9 +203,7 @@
|
||||
"updateNotImplemented": "Tato funkce ještě není implementována"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Přispěvatelé",
|
||||
"integrationsContributors": "ReVanced Integrace",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Přispěvatelé"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Verse neshodná",
|
||||
|
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Diese Funktion ist noch nicht implementiert"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Mitwirkende",
|
||||
"patcherContributors": "ReVanced Patcher",
|
||||
"patchesContributors": "ReVanced Patches",
|
||||
"integrationsContributors": "ReVanced Integrations",
|
||||
"cliContributors": "ReVanced CLI",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Mitwirkende"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Versionskonflikt",
|
||||
|
@ -16,7 +16,7 @@
|
||||
"noShowAgain": "Να μην ξαναεμφανιστεί",
|
||||
"add": "Προσθήκη",
|
||||
"remove": "Αφαίρεση",
|
||||
"showChangelogButton": "Εμφάνιση αρχείου καταγραφής αλλαγών",
|
||||
"showChangelogButton": "Εμφάνιση αλλαγών",
|
||||
"showUpdateButton": "Εμφάνιση ενημέρωσης",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Πίνακας Ελέγχου",
|
||||
@ -178,11 +178,11 @@
|
||||
"sourcesLabelHint": "Ρυθμίστε τις εναλλακτικές πηγές για τις τροποποιήσεις ReVanced και τις ενσωματώσεις ReVanced",
|
||||
"sourcesIntegrationsLabel": "Πηγή ενσωματώσεων",
|
||||
"useAlternativeSources": "Χρήση εναλλακτικών πηγών",
|
||||
"useAlternativeSourcesHint": "Χρήση εναλλακτικών πηγών για των τροποποιήσεων ReVanced και των ενσωματώσεων ReVanced αντί για το API",
|
||||
"useAlternativeSourcesHint": "Χρήση εναλλακτικών πηγών για τις τροποποιήσεις και τις ενσωματώσεις ReVanced αντί του API",
|
||||
"sourcesResetDialogTitle": "Επαναφορά",
|
||||
"sourcesResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τις πηγές σας στις προεπιλεγμένες τιμές τους;",
|
||||
"apiURLResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε την API URL σας στην προεπιλεγμένη τιμή της;",
|
||||
"sourcesUpdateNote": "Σημείωση: Αυτό θα κάνει αυτόματη λήψη των τροποποιήσεων ReVanced και των ενσωματώσεων ReVanced από τις εναλλακτικές πηγές.\n\nΑυτό θα σας συνδέσει με την εναλλακτική πηγή.",
|
||||
"sourcesUpdateNote": "Σημείωση: Θα γίνεται αυτόματη λήψη των τροποποιήσεων και των ενσωματώσεων ReVanced από τις εναλλακτικές πηγές.\n\nΟπότε θα συνδέεστε με τις εναλλακτικές πηγές.",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "Ρύθμιση διεύθυνσης URL του API του ReVanced Manager",
|
||||
"selectApiURL": "API URL",
|
||||
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Αυτή η δυνατότητα δεν είναι ακόμα διαθέσιμη"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Συνεισφέροντες",
|
||||
"patcherContributors": "Τροποποιητής ReVanced",
|
||||
"patchesContributors": "Τροποποιήσεις ReVanced",
|
||||
"integrationsContributors": "Ενσωματώσεις ReVanced",
|
||||
"cliContributors": "Τερματικό ReVanced",
|
||||
"managerContributors": "Διαχειριστής ReVanced"
|
||||
"widgetTitle": "Συνεισφέροντες"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Ασυμφωνία έκδοσης",
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"okButton": "Está bien",
|
||||
"okButton": "Aceptar",
|
||||
"cancelButton": "Cancelar",
|
||||
"dismissButton": "Descartar",
|
||||
"quitButton": "Salir",
|
||||
@ -8,35 +8,35 @@
|
||||
"disabledLabel": "Desactivado",
|
||||
"installed": "Instalada: ${version}",
|
||||
"suggested": "Sugerida: ${version}",
|
||||
"yesButton": "Si",
|
||||
"yesButton": "Sí",
|
||||
"noButton": "No",
|
||||
"warning": "Atención",
|
||||
"warning": "Advertencia",
|
||||
"options": "Opciones",
|
||||
"notice": "Aviso",
|
||||
"noShowAgain": "No mostrar de nuevo",
|
||||
"noShowAgain": "No volver a mostrar",
|
||||
"add": "Agregar",
|
||||
"remove": "Eliminar",
|
||||
"showChangelogButton": "Mostrar historial de cambios",
|
||||
"showUpdateButton": "Mostrar actualización",
|
||||
"showChangelogButton": "Notas de la versión",
|
||||
"showUpdateButton": "Actualizar",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Panel",
|
||||
"dashboardTab": "Panel de control",
|
||||
"patcherTab": "Parcheador",
|
||||
"settingsTab": "Configuración"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Se ha refrescado satisfactoriamente",
|
||||
"widgetTitle": "Panel",
|
||||
"refreshSuccess": "Refrescado satisfactoriamente",
|
||||
"widgetTitle": "Panel de control",
|
||||
"updatesSubtitle": "Actualizaciones",
|
||||
"patchedSubtitle": "Aplicaciones parcheadas",
|
||||
"changeLaterSubtitle": "Podés cambiar esto en los ajustes más tarde.",
|
||||
"noUpdates": "No hay actualizaciones disponibles",
|
||||
"WIP": "En progreso...",
|
||||
"noInstallations": "No hay aplicaciones parcheadas instaladas",
|
||||
"installUpdate": "¿Continuar instalando la actualización?",
|
||||
"noInstallations": "Aún no parcheaste ninguna aplicación",
|
||||
"installUpdate": "¿Instalar actualización?",
|
||||
"updateSheetTitle": "Actualizar ReVanced Manager",
|
||||
"updateDialogTitle": "Nueva actualización disponible",
|
||||
"updatePatchesSheetTitle": "Actualizar ReVanced Patches",
|
||||
"updateChangelogTitle": "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}.",
|
||||
"downloadConsentDialogTitle": "¿Descargar archivos necesarios?",
|
||||
"downloadConsentDialogText": "ReVanced Manager necesita descargar los archivos necesarios para funcionar correctamente.",
|
||||
@ -50,11 +50,11 @@
|
||||
"installingMessage": "Instalando actualización...",
|
||||
"errorDownloadMessage": "No se pudo descargar la actualización",
|
||||
"errorInstallMessage": "No se pudo instalar la actualización",
|
||||
"noConnection": "No hay conexión a Internet",
|
||||
"noConnection": "No tenés conexión a Internet",
|
||||
"updatesDisabled": "Por ahora no podés actualizar una app parcheada. Parcheala de nuevo."
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Información"
|
||||
"infoButton": "Gestionar"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Cargando...",
|
||||
@ -66,14 +66,14 @@
|
||||
"patcherView": {
|
||||
"widgetTitle": "Parcheador",
|
||||
"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?",
|
||||
"requiredOptionDialogText": "Algunas opciones de parche tienen que ser establecidas."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Seleccionar una app",
|
||||
"widgetTitleSelected": "App seleccionada",
|
||||
"widgetSubtitle": "Ninguna app seleccionada",
|
||||
"widgetTitle": "Seleccionar una aplicación",
|
||||
"widgetTitleSelected": "Aplicación seleccionada",
|
||||
"widgetSubtitle": "Ninguna aplicación seleccionada",
|
||||
"noAppsLabel": "No se encontró ninguna aplicación",
|
||||
"currentVersion": "Actual",
|
||||
"suggestedVersion": "Sugerida",
|
||||
@ -82,68 +82,69 @@
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Seleccionar parches",
|
||||
"widgetTitleSelected": "Parches seleccionados",
|
||||
"widgetSubtitle": "Seleccioná una aplicación primero",
|
||||
"widgetEmptySubtitle": "No hay ningún parche seleccionado"
|
||||
"widgetSubtitle": "Ninguna aplicación seleccionada",
|
||||
"widgetEmptySubtitle": "Ningún parche seleccionado"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Redes sociales",
|
||||
"widgetTitle": "Nuestras redes sociales",
|
||||
"widgetSubtitle": "¡Estamos en línea!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Seleccionar una app",
|
||||
"searchBarHint": "Buscar app",
|
||||
"storageButton": "Almacenamiento",
|
||||
"selectFromStorageButton": "Seleccionar desde el almacenamiento",
|
||||
"errorMessage": "No se puede usar la aplicación seleccionada",
|
||||
"downloadToast": "La función de descarga aún no está disponible",
|
||||
"viewTitle": "Seleccionar una aplicación",
|
||||
"searchBarHint": "Buscar...",
|
||||
"storageButton": "Seleccionar desde\\nel almacenamiento",
|
||||
"selectFromStorageButton": "Seleccionar desde\\nel almacenamiento",
|
||||
"errorMessage": "El archivo que seleccionaste no es una aplicación o está dañado",
|
||||
"downloadToast": "La descarga de aplicaciones aún no está disponible",
|
||||
"requireSuggestedAppVersionDialogText": "La versión de la app que seleccionaste no coincide con la versión sugerida, lo que puede causar errores inesperados. Por favor, usá la versión sugerida.\n\nVersión seleccionada: ${selected}\nVersión sugerida: ${suggested}\n\nPara continuar de todas formas, desactivá \"Requerir versión sugerida de la app\" en los ajustes.",
|
||||
"featureNotAvailable": "Función no implementada"
|
||||
"featureNotAvailable": "Función no implementada",
|
||||
"featureNotAvailableText": "Esta aplicación está instalada en formato AAB (Android App Bundle) y solo se puede parchear e instalar de forma fiable mediante el montaje con acceso root. Sin embargo, podés parchear e instalar una aplicación en formato APK seleccionándola desde el almacenamiento."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Seleccionar parches",
|
||||
"searchBarHint": "Buscar parches",
|
||||
"searchBarHint": "Buscar...",
|
||||
"universalPatches": "Parches universales",
|
||||
"newPatches": "Nuevos parches",
|
||||
"newPatches": "Parches nuevos",
|
||||
"patches": "Parches",
|
||||
"doneButton": "Listo",
|
||||
"doneButton": "Guardar selección",
|
||||
"defaultChip": "Por defecto",
|
||||
"defaultTooltip": "Seleccioná todos los parches por defecto",
|
||||
"defaultTooltip": "Selecciona los parches por defecto",
|
||||
"noneChip": "Ninguno",
|
||||
"noneTooltip": "Deseleccionar todos los parches",
|
||||
"noneTooltip": "Deselecciona todos los parches",
|
||||
"loadPatchesSelection": "Cargar selección de parches",
|
||||
"noSavedPatches": "No se guardó ninguna selección de parches para la aplicación seleccionada.\nApretá Listo para guardar la selección actual.",
|
||||
"noPatchesFound": "No se encontraron parches para la app seleccionada",
|
||||
"setRequiredOption": "Algunos parches requieren establecer algunas opciones:\n\n${patches}\n\nPor favor, configúrelas antes de continuar."
|
||||
"noSavedPatches": "No se guardó ninguna selección de parches para la aplicación seleccionada.\nApretá 'Guardar selección' para guardar la selección actual.",
|
||||
"noPatchesFound": "No se encontraron parches para la aplicación seleccionada",
|
||||
"setRequiredOption": "Los siguientes parches requieren su propia configuración:\\n\\n${patches}\\n\\nPor favor, configuralos antes de continuar."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Valor personalizado",
|
||||
"resetOptionsTooltip": "Restablecer las opciones de parche",
|
||||
"viewTitle": "Opciones de parche",
|
||||
"saveOptions": "Guardar",
|
||||
"addOptions": "Agregar opciones",
|
||||
"resetOptionsTooltip": "Restablecer a los valores por defecto",
|
||||
"viewTitle": "Configuración\\ndel parche",
|
||||
"saveOptions": "Guardar configuración",
|
||||
"addOptions": "Agregar configuración",
|
||||
"deselectPatch": "Deseleccionar parche",
|
||||
"tooltip": "Más opciones de entrada",
|
||||
"selectFilePath": "Selecciona la ruta del archivo",
|
||||
"selectFolder": "Selecciona la carpeta",
|
||||
"selectFilePath": "Seleccionar ruta del archivo",
|
||||
"selectFolder": "Seleccionar carpeta",
|
||||
"selectOption": "Seleccionar opción",
|
||||
"requiredOption": "Esta opción es requerida",
|
||||
"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": {
|
||||
"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.",
|
||||
"unsupportedRequiredOption": "Este parche contiene una opción necesaria que no es compatible con esta aplicación",
|
||||
"patchesChangeWarningDialogText": "Se recomienda utilizar la selección y opciones de parches por defecto. Cambiarlas puede 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.",
|
||||
"unsupportedPatchVersion": "El parche no es compatible con esta versión de la aplicación.",
|
||||
"unsupportedRequiredOption": "El parche contiene una opción necesaria que no es compatible con esta aplicación",
|
||||
"patchesChangeWarningDialogText": "Te recomendamos que utilices la selección y opciones de parches por defecto; cambiarlas puede causar problemas inesperados.\\n\\nTendrás que activar \\\"Permitir cambiar la selección de parches\\\" en la configuración antes de poder hacerlo.",
|
||||
"patchesChangeWarningDialogButton": "Utilizar la opción por defecto"
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Instalador",
|
||||
"installType": "Seleccione el tipo de instalación",
|
||||
"installType": "Tipo de instalación",
|
||||
"installTypeDescription": "Seleccioná el tipo de instalación para continuar.",
|
||||
"installButton": "Instalar",
|
||||
"installRootType": "Montar",
|
||||
"installNonRootType": "Normal",
|
||||
"installRootType": "Instalación por montaje (requiere root)",
|
||||
"installNonRootType": "Instalación normal",
|
||||
"warning": "Recordá desactivar las actualizaciones automáticas de la app parcheada para evitar problemas inesperados.",
|
||||
"pressBackAgain": "Vuelve a presionar atrás para cancelar",
|
||||
"openButton": "Abrir",
|
||||
@ -152,31 +153,38 @@
|
||||
"notificationText": "Apretá para volver al instalador",
|
||||
"exportApkButtonTooltip": "Exportar APK parcheado",
|
||||
"exportLogButtonTooltip": "Exportar registro",
|
||||
"screenshotDetected": "Se ha detectado una captura de pantalla. Si está intentando compartir el registro, por favor comparta una copia de texto en su lugar.\n\n¿Copiar registro al portapapeles?",
|
||||
"copiedToClipboard": "Registro copiado en el portapapeles",
|
||||
"screenshotDetected": "Detectamos que hiciste una captura de pantalla. Si estás intentando compartir el registro, por favor compartilo en formato de texto.\\n\\n¿Copiar registro al portapapeles?",
|
||||
"copiedToClipboard": "Registro copiado al portapapeles",
|
||||
"noExit": "El instalador aún se está ejecutando, no te podés salir..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Ajustes",
|
||||
"widgetTitle": "Configuración",
|
||||
"appearanceSectionTitle": "Apariencia",
|
||||
"teamSectionTitle": "Equipo",
|
||||
"debugSectionTitle": "Depurando",
|
||||
"debugSectionTitle": "Depuración",
|
||||
"advancedSectionTitle": "Avanzado",
|
||||
"exportSectionTitle": "Importación y exportación",
|
||||
"themeModeLabel": "Tema de la app",
|
||||
"systemThemeLabel": "Sistema",
|
||||
"lightThemeLabel": "Luz",
|
||||
"darkThemeLabel": "Modo oscuro",
|
||||
"dataSectionTitle": "Fuentes de datos",
|
||||
"themeModeLabel": "Tema de la aplicación",
|
||||
"systemThemeLabel": "Igual que el sistema",
|
||||
"lightThemeLabel": "Claro",
|
||||
"darkThemeLabel": "Oscuro",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Disfrutá de una experiencia más acorde a tu dispositivo",
|
||||
"languageLabel": "Idioma",
|
||||
"languageUpdated": "Idioma actualizado",
|
||||
"englishOption": "Inglés",
|
||||
"sourcesLabel": "Fuentes alternativas",
|
||||
"sourcesLabelHint": "Configurá las fuentes alternativas para ReVanced Patches y ReVanced Integrations",
|
||||
"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",
|
||||
"sourcesResetDialogText": "¿Estás seguro de que quieres restablecer las fuentes a sus valores por defecto?",
|
||||
"apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de tu API a su valor por defecto?",
|
||||
"sourcesUpdateNote": "Nota: Esto descargará de forma automática ReVanced Patches y ReVanced Integrations desde las fuentes alternativas.\n\nEsto te va a conectar a la fuente alternativa.",
|
||||
"apiURLLabel": "URL de la API",
|
||||
"apiURLHint": "Configurá la URL de la API de ReVanced Manager",
|
||||
"selectApiURL": "URL de la API",
|
||||
"orgPatchesLabel": "Organización de los parches",
|
||||
"sourcesPatchesLabel": "Fuente de los parches",
|
||||
@ -184,30 +192,35 @@
|
||||
"contributorsLabel": "Contribuidores",
|
||||
"contributorsHint": "Una lista de los contribuidores de ReVanced",
|
||||
"logsLabel": "Compartir registros",
|
||||
"logsHint": "Compartir los registros de ReVanced Manager",
|
||||
"logsHint": "Comparte los registros de ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Permitir cambiar la selección de parches",
|
||||
"enablePatchesSelectionHint": "Permite la selección o deselección de parches",
|
||||
"enablePatchesSelectionWarningText": "Cambiar la selección de parches puede causar problemas inesperados.\n\n¿Habilitar de todos modos?",
|
||||
"disablePatchesSelectionWarningText": "Está a punto de desactivar el cambio de la selección de parches.\nSe restablecerá la selección de parches por defecto.\n\n¿Desactivar de todos modos?",
|
||||
"autoUpdatePatchesLabel": "Actualizar parches automáticamente",
|
||||
"autoUpdatePatchesHint": "Actualice automáticamente los parches a la última versión",
|
||||
"autoUpdatePatchesHint": "Actualiza automáticamente los parches a la última versión",
|
||||
"showUpdateDialogLabel": "Mostrar diálogo de actualización",
|
||||
"showUpdateDialogHint": "Muestra un diálogo cuando haya una nueva actualización disponible",
|
||||
"universalPatchesLabel": "Mostrar parches universales",
|
||||
"universalPatchesHint": "Mostrar todas las aplicaciones y parches universales (puede ralentizar la lista de aplicaciones)",
|
||||
"versionCompatibilityCheckLabel": "Comprobación de compatibilidad de versiones",
|
||||
"requireSuggestedAppVersionLabel": "Requiere la versión de aplicación sugerida",
|
||||
"versionCompatibilityCheckLabel": "Comprobar compatibilidad de versiones",
|
||||
"versionCompatibilityCheckHint": "Impide la selección de parches que no sean compatibles con la versión de la aplicación seleccionada",
|
||||
"requireSuggestedAppVersionLabel": "Requerir versión sugerida de la aplicación",
|
||||
"requireSuggestedAppVersionHint": "Impide seleccionar una aplicación cuya versión no sea la sugerida",
|
||||
"requireSuggestedAppVersionDialogText": "Seleccionar una aplicación que no es la versión sugerida puede causar problemas inesperados.\n\n¿Desea continuar de todos modos?",
|
||||
"aboutLabel": "Acerca de",
|
||||
"snackbarMessage": "Copiado al portapapeles",
|
||||
"restartAppForChanges": "Reiniciá la app para aplicar los cambios",
|
||||
"deleteTempDirLabel": "Eliminar archivos temporales",
|
||||
"deleteTempDirHint": "Eliminá los archivos temporales que no se usan",
|
||||
"deleteTempDirHint": "Elimina los archivos temporales que no se usan",
|
||||
"deletedTempDir": "Archivos temporales eliminados",
|
||||
"exportPatchesLabel": "Exportar parche seleccionado",
|
||||
"exportPatchesHint": "Exportar parche seleccionado en un archivo JSON",
|
||||
"exportedPatches": "Parche seleccionado exportado",
|
||||
"noExportFileFound": "Ningún parche seleccionado para exportar",
|
||||
"importPatchesLabel": "Importar parche seleccionado",
|
||||
"importPatchesHint": "Importar parche seleccionado de un archivo JSON",
|
||||
"importedPatches": "Parche seleccionado importado",
|
||||
"exportPatchesLabel": "Exportar selección de parches",
|
||||
"exportPatchesHint": "Exporta la selección de parches a un archivo JSON",
|
||||
"exportedPatches": "Selección de parches exportada",
|
||||
"noExportFileFound": "No hay selección de parches para exportar",
|
||||
"importPatchesLabel": "Importar selección de parches",
|
||||
"importPatchesHint": "Importa la selección de parches desde un archivo JSON",
|
||||
"importedPatches": "Selección de parches importada",
|
||||
"resetStoredPatchesLabel": "Restablecer selección de parches",
|
||||
"resetStoredPatchesHint": "Restablecer selección de parches guardada",
|
||||
"resetStoredPatchesDialogTitle": "¿Restablecer selección de parches?",
|
||||
@ -219,33 +232,38 @@
|
||||
"resetStoredOptionsDialogText": "Restablecer las opciones de parche eliminará todas las opciones guardadas.",
|
||||
"resetStoredOptions": "Las opciones se han restablecido",
|
||||
"deleteLogsLabel": "Borrar registros",
|
||||
"deleteLogsHint": "Eliminar los registros recopilados de ReVanced Manager",
|
||||
"deleteLogsHint": "Elimina los registros recopilados por ReVanced Manager",
|
||||
"deletedLogs": "Registros eliminados",
|
||||
"regenerateKeystoreLabel": "Regenerar almacén de claves",
|
||||
"regenerateKeystoreHint": "Regenerar el almacén de claves utilizado para firmar aplicaciones",
|
||||
"regenerateKeystoreDialogTitle": "¿Regenerar almacén de claves?",
|
||||
"regenerateKeystoreDialogText": "Las aplicaciones parcheadas firmadas con el antiguo almacén de claves ya no podrán actualizarse.",
|
||||
"regeneratedKeystore": "Almacén de claves regenerado",
|
||||
"exportKeystoreLabel": "Exportar almacén de claves",
|
||||
"exportKeystoreHint": "Exportar el almacén de llaves utilizado para firmar aplicaciones",
|
||||
"regenerateKeystoreLabel": "Regenerar repositorio de claves",
|
||||
"regenerateKeystoreHint": "Regenera el repositorio de claves utilizado para firmar aplicaciones",
|
||||
"regenerateKeystoreDialogTitle": "¿Regenerar repositorio de claves?",
|
||||
"regenerateKeystoreDialogText": "Las aplicaciones parcheadas firmadas con el antiguo repositorio de claves ya no podrán actualizarse.",
|
||||
"regeneratedKeystore": "Repositorio de claves regenerado",
|
||||
"exportKeystoreLabel": "Exportar repositorio de claves",
|
||||
"exportKeystoreHint": "Exporta el repositorio de claves utilizado para firmar aplicaciones",
|
||||
"exportedKeystore": "Repositorio de claves exportado",
|
||||
"noKeystoreExportFileFound": "No hay un almacén de claves para exportar",
|
||||
"noKeystoreExportFileFound": "No hay repositorio de claves para exportar",
|
||||
"importKeystoreLabel": "Importar repositorio de claves",
|
||||
"importKeystoreHint": "Importar un almacén de llaves utilizado para firmar aplicaciones",
|
||||
"importKeystoreHint": "Importar un repositorio de claves utilizado para firmar aplicaciones",
|
||||
"importedKeystore": "Repositorio de claves importado",
|
||||
"selectKeystorePassword": "Contraseña del almacén de llaves",
|
||||
"selectKeystorePasswordHint": "Seleccionar la contraseña del almacén de llaves utilizada para firmar aplicaciones",
|
||||
"selectKeystorePassword": "Contraseña del repositorio de claves",
|
||||
"selectKeystorePasswordHint": "Selecciona la contraseña del repositorio de claves utilizada para firmar aplicaciones",
|
||||
"jsonSelectorErrorMessage": "No se puede usar el archivo JSON seleccionado",
|
||||
"keystoreSelectorErrorMessage": "No se puede utilizar el archivo de almacén de llaves seleccionado"
|
||||
"keystoreSelectorErrorMessage": "No se puede utilizar el archivo de repositorio de claves seleccionado"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Información de la app",
|
||||
"widgetTitle": "Información de la aplicación",
|
||||
"openButton": "Abrir",
|
||||
"uninstallButton": "Desinstalar",
|
||||
"unmountButton": "Desmontar",
|
||||
"rootDialogTitle": "Error",
|
||||
"unmountDialogText": "¿Seguro que querés desmontar esta aplicación?",
|
||||
"uninstallDialogText": "¿Seguro que querés desinstalar esta aplicación?",
|
||||
"rootDialogText": "La app se instaló con permisos de superusuario, pero ReVanced Manager no los tiene.\nPor favor, concedele permisos de superusuario.",
|
||||
"packageNameLabel": "Nombre del paquete",
|
||||
"installTypeLabel": "Tipo de instalación",
|
||||
"mountTypeLabel": "Instalación por montaje (requiere root)",
|
||||
"regularTypeLabel": "Instalación normal",
|
||||
"patchedDateLabel": "Fecha de parcheo",
|
||||
"appliedPatchesLabel": "Parches aplicados",
|
||||
"patchedDateHint": "${date} a las ${time}",
|
||||
@ -255,5 +273,30 @@
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contribuidores"
|
||||
},
|
||||
"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."
|
||||
}
|
||||
}
|
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Esta función no se ha implementado aún"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contribuidores",
|
||||
"patcherContributors": "Parcheador de ReVanced",
|
||||
"patchesContributors": "Parches de ReVanced",
|
||||
"integrationsContributors": "Integraciones de ReVanced",
|
||||
"cliContributors": "CLI de ReVanced",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Contribuidores"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "La versión no coincide",
|
||||
|
@ -1,31 +1,52 @@
|
||||
{
|
||||
"okButton": "ACEPTAR",
|
||||
"okButton": "Aceptar",
|
||||
"cancelButton": "Cancelar",
|
||||
"quitButton": "Quit",
|
||||
"dismissButton": "Descartar",
|
||||
"quitButton": "Salir",
|
||||
"updateButton": "Actualizar",
|
||||
"installed": "Instalado: ${version}",
|
||||
"suggested": "Sugerido: ${version}",
|
||||
"enabledLabel": "Activado",
|
||||
"disabledLabel": "Desactivado",
|
||||
"installed": "Instalada: ${version}",
|
||||
"suggested": "Sugerida: ${version}",
|
||||
"yesButton": "Sí",
|
||||
"noButton": "No",
|
||||
"warning": "Advertencia",
|
||||
"options": "Opciones",
|
||||
"notice": "Notice",
|
||||
"notice": "Aviso",
|
||||
"noShowAgain": "No volver a mostrar",
|
||||
"add": "Añadir",
|
||||
"remove": "Quitar",
|
||||
"showChangelogButton": "Registro de cambios",
|
||||
"showUpdateButton": "Actualizar",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Panel de control",
|
||||
"patcherTab": "Aplicador de parches",
|
||||
"settingsTab": "Ajustes"
|
||||
"patcherTab": "Parcheador",
|
||||
"settingsTab": "Configuración"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Actualizado con éxito",
|
||||
"refreshSuccess": "Refrescado satisfactoriamente",
|
||||
"widgetTitle": "Panel de control",
|
||||
"updatesSubtitle": "Actualizaciones",
|
||||
"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",
|
||||
"installUpdate": "¿Continuar actualizando la aplicación?",
|
||||
"updateSheetTitle": "Actualizar ReVanced Manager",
|
||||
"updateDialogTitle": "Nueva actualización disponible",
|
||||
"updatePatchesSheetTitle": "Actualizar ReVanced Patches",
|
||||
"updateChangelogTitle": "Registro de cambios",
|
||||
"updateDialogText": "Hay una nueva versión disponible para ${file}.\n\nLa versión actualmente instalada es la ${version}.",
|
||||
"downloadConsentDialogTitle": "¿Descargar archivos necesarios?",
|
||||
"downloadConsentDialogText": "ReVanced Manager necesita descargar los archivos necesarios para funcionar correctamente.",
|
||||
"downloadConsentDialogText2": "Esto te conectará a ${url}.",
|
||||
"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...",
|
||||
"downloadedMessage": "Actualización descargada",
|
||||
"installingMessage": "Instalando actualización...",
|
||||
"errorDownloadMessage": "No se pudo descargar la actualización",
|
||||
"errorInstallMessage": "Error al instalar la actualización",
|
||||
@ -37,17 +58,26 @@
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Cargando...",
|
||||
"timeagoLabel": "Hace ${time}"
|
||||
"timeagoLabel": "Hace ${time}",
|
||||
"patcherLabel": "Parcheador: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "Actualizar ReVanced Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Parcheador",
|
||||
"patchButton": "Parchear",
|
||||
"armv7WarningDialogText": "El parcheo en dispositivos ARMv7 aún no está soportado y podría fallar. ¿Quieres continuar de todas formas?",
|
||||
"removedPatchesWarningDialogText": "Los siguientes parches fueron removidos desde la última vez que los usaste.\n\n${patches}\n\n¿Quieres continuar de todas formas?",
|
||||
"requiredOptionDialogText": "Algunas opciones de parche tienen que ser establecidas."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Seleccionar una aplicación",
|
||||
"widgetTitleSelected": "Aplicación seleccionada",
|
||||
"widgetSubtitle": "No se seleccionó ninguna aplicación",
|
||||
"noAppsLabel": "No se encontraron aplicaciones",
|
||||
"currentVersion": "Versión actual",
|
||||
"suggestedVersion": "Version sugerida"
|
||||
"suggestedVersion": "Version sugerida",
|
||||
"anyVersion": "Cualquier versión"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Seleccionar parches",
|
||||
@ -60,11 +90,15 @@
|
||||
"widgetSubtitle": "¡Estamos en línea!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Seleccionar una aplicación",
|
||||
"searchBarHint": "Buscar...",
|
||||
"storageButton": "Almacenamiento",
|
||||
"selectFromStorageButton": "Seleccionar desde almacenamiento",
|
||||
"errorMessage": "No se puede usar la aplicación seleccionada",
|
||||
"downloadToast": "La función de descarga aún no está disponible",
|
||||
"featureNotAvailable": "Característica no implementada"
|
||||
"requireSuggestedAppVersionDialogText": "La versión de la aplicación que has seleccionado no coincide con la versión sugerida, lo que podría causar errores inesperados. Por favor, utiliza la versión sugerida.\n\nVersión seleccionada: ${selected}\nVersión sugerida: ${suggested}\n\nPara continuar de todas formas, desactiva \"Requerir versión sugerida de la aplicación\" en la configuración.",
|
||||
"featureNotAvailable": "Característica no implementada",
|
||||
"featureNotAvailableText": "Esta aplicación 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, puedes parchear e instalar una aplicación en formato APK seleccionándola desde el almacenamiento."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Selecciona parches",
|
||||
@ -73,7 +107,9 @@
|
||||
"newPatches": "Nuevos parches",
|
||||
"patches": "Parches",
|
||||
"doneButton": "Completado",
|
||||
"defaultChip": "Por defecto",
|
||||
"defaultTooltip": "Seleccionar todos los parches predeterminados",
|
||||
"noneChip": "Ninguno",
|
||||
"noneTooltip": "Deseleccionar todos los elementos",
|
||||
"loadPatchesSelection": "Cargar selección de parches",
|
||||
"noSavedPatches": "No se ha guardado ninguna selección de parches para la aplicación seleccionada.\nPresione Hecho para guardar la selección actual.",
|
||||
@ -90,21 +126,29 @@
|
||||
"tooltip": "Más opciones de entrada",
|
||||
"selectFilePath": "Selecciona la ruta del archivo",
|
||||
"selectFolder": "Selecciona la carpeta",
|
||||
"selectOption": "Seleccionar opción",
|
||||
"requiredOption": "Esta opción es requerida",
|
||||
"unsupportedOption": "Esta opción no está disponible",
|
||||
"requiredOptionNull": "Hay que configurar las siguientes opciones:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Seleccionar este parche puede causar errores.\n\nVersión de la app: ${packageVersion}\nVersiones compatibles:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "El parche no es compatible con esta versión de la aplicación.",
|
||||
"unsupportedRequiredOption": "Este parche contiene una opción necesaria que no es compatible con esta aplicación",
|
||||
"patchesChangeWarningDialogText": "Se recomienda utilizar la selección y opciones de parches por defecto. Cambiarlas puede resultar en problemas inesperados.\n\nTendrás que activar \"Permitir cambiar la selección de parches\" en la configuración antes de cambiar cualquier selección de parches.",
|
||||
"patchesChangeWarningDialogButton": "Usar selección por defecto"
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Instalador",
|
||||
"installType": "Seleccione el tipo de instalación",
|
||||
"installTypeDescription": "Selecciona el tipo de instalación con el que quieres continuar.",
|
||||
"installButton": "Instalar",
|
||||
"installRootType": "Montar",
|
||||
"installRootType": "Montar (requiere acceso root)",
|
||||
"installNonRootType": "Normal",
|
||||
"warning": "Desactiva las actualizaciones para la aplicación parcheada para evitar problemas inesperados.",
|
||||
"pressBackAgain": "Vuelve a presionar atrás para cancelar",
|
||||
"openButton": "Abrir",
|
||||
"shareButton": "Compartir archivo",
|
||||
"notificationTitle": "ReVanced Manager está parcheando",
|
||||
"notificationText": "Pulsa para volver al instalador",
|
||||
"exportApkButtonTooltip": "Exportar APK parcheado",
|
||||
@ -120,6 +164,7 @@
|
||||
"debugSectionTitle": "Depurando",
|
||||
"advancedSectionTitle": "Avanzado",
|
||||
"exportSectionTitle": "Importar y Exportar",
|
||||
"dataSectionTitle": "Fuentes de datos",
|
||||
"themeModeLabel": "Tema de la app",
|
||||
"systemThemeLabel": "Sistema",
|
||||
"lightThemeLabel": "Claro",
|
||||
@ -127,11 +172,19 @@
|
||||
"dynamicThemeLabel": "Material para ti",
|
||||
"dynamicThemeHint": "Disfruta de una experiencia más cercana a tu dispositivo",
|
||||
"languageLabel": "Idioma",
|
||||
"languageUpdated": "Idioma actualizado",
|
||||
"englishOption": "Inglés",
|
||||
"sourcesLabel": "Fuentes alternativas",
|
||||
"sourcesLabelHint": "Configura las fuentes alternativas para ReVanced Patches y ReVanced Integrations",
|
||||
"sourcesIntegrationsLabel": "Fuente de integraciones",
|
||||
"useAlternativeSources": "Usar fuentes alternativas",
|
||||
"useAlternativeSourcesHint": "Usa fuentes alternativas para ReVanced Patches y ReVanced Integrations en lugar de la API",
|
||||
"sourcesResetDialogTitle": "Reiniciar",
|
||||
"sourcesResetDialogText": "¿Estás seguro de que quieres restablecer las fuentes a sus valores por defecto?",
|
||||
"apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de tu API a su valor por defecto?",
|
||||
"sourcesUpdateNote": "Nota: Se descargarán de forma automática ReVanced Patches y ReVanced Integrations desde las fuentes alternativas.\n\nEsto te conectará a la misma.",
|
||||
"apiURLLabel": "URL API",
|
||||
"apiURLHint": "Configura la URL de la API de ReVanced Manager",
|
||||
"selectApiURL": "URL de la API",
|
||||
"orgPatchesLabel": "Organización de parches",
|
||||
"sourcesPatchesLabel": "Fuente de los parches",
|
||||
@ -141,28 +194,76 @@
|
||||
"logsLabel": "Compartir registros",
|
||||
"logsHint": "Compartir los registros de ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Permitir cambiar la selección de parches",
|
||||
"enablePatchesSelectionHint": "No prevenir la selección o deselección de parches",
|
||||
"enablePatchesSelectionWarningText": "Cambiar la selección de parches puede cauar problemas inespereados.\n\n¿Quieres activarlo de todas formas?",
|
||||
"disablePatchesSelectionWarningText": "Estás a punto de desactivar el cambiar la selección de parches.\nSe restaurará la selección de parches por defecto.",
|
||||
"autoUpdatePatchesLabel": "Actualizar parches automáticamente",
|
||||
"autoUpdatePatchesHint": "Actualiza los parches a la última versión automáticamente",
|
||||
"showUpdateDialogLabel": "Mostrar diálogo de actualización",
|
||||
"showUpdateDialogHint": "Muestra un diálogo cuando una nueva actualización esté disponible",
|
||||
"universalPatchesLabel": "Mostrar parches universales",
|
||||
"universalPatchesHint": "Muestra todas las aplicaciones y los parches universales (puede ralentizar la carga de la lista de aplicaciones)",
|
||||
"versionCompatibilityCheckLabel": "Comprobar compatibilidad de versiones",
|
||||
"versionCompatibilityCheckHint": "Previene seleccionar parches que no sean compatibles con la versión de la aplicación seleccionada",
|
||||
"requireSuggestedAppVersionLabel": "Requerir versión sugerida de la aplicación",
|
||||
"requireSuggestedAppVersionHint": "Previene seleccionar una aplicación cuya versión no sea la sugerida",
|
||||
"requireSuggestedAppVersionDialogText": "Seleccionar una aplicación cuya versión no sea la sugerida puede causar problemas inesperados.\n\n¿Quieres continuar de todas formas?",
|
||||
"aboutLabel": "Acerca de",
|
||||
"snackbarMessage": "Copiado al portapapeles",
|
||||
"restartAppForChanges": "Reinicie la aplicación para aplicar los cambios",
|
||||
"deleteTempDirLabel": "Borrar archivos temporales",
|
||||
"deleteTempDirHint": "Eliminar archivos temporales no utilizados",
|
||||
"deletedTempDir": "Archivos temporales eliminados",
|
||||
"exportPatchesLabel": "Exportar selección de parches",
|
||||
"exportPatchesHint": "Exporta la selección de parches a un archivo JSON",
|
||||
"exportedPatches": "Selección de parches exportada",
|
||||
"noExportFileFound": "No hay selección de parches para exportar",
|
||||
"importPatchesLabel": "Importar selección de parches",
|
||||
"importPatchesHint": "Importa la selección de parches desde un archivo JSON",
|
||||
"importedPatches": "Selección de parches importada",
|
||||
"resetStoredPatchesLabel": "Restablecer selección de parches",
|
||||
"resetStoredPatchesHint": "Restablece la selección de parches almacenada",
|
||||
"resetStoredPatchesDialogTitle": "¿Restablecer selección de parches?",
|
||||
"resetStoredPatchesDialogText": "Se restaurará la selección de parches por defecto.",
|
||||
"resetStoredPatches": "Selección de parches restablecida",
|
||||
"resetStoredOptionsLabel": "Restablecer configuración de parches",
|
||||
"resetStoredOptionsHint": "Restablece la configuración de todos los parches",
|
||||
"resetStoredOptionsDialogTitle": "¿Restablecer configuración de parches?",
|
||||
"resetStoredOptionsDialogText": "Restablecer la configuración de parches eliminará todas las opciones guardadas.",
|
||||
"resetStoredOptions": "Configuración de parches restablecida",
|
||||
"deleteLogsLabel": "Borrar registros",
|
||||
"deleteLogsHint": "Elimina los registros recopilados por ReVanced Manager",
|
||||
"deletedLogs": "Registros eliminados",
|
||||
"regenerateKeystoreLabel": "Regenerar repositorio de claves",
|
||||
"regenerateKeystoreHint": "Regenera el repositorio de claves utilizado para firmar aplicaciones",
|
||||
"regenerateKeystoreDialogTitle": "¿Regenerar repositorio de claves?",
|
||||
"regenerateKeystoreDialogText": "Las aplicaciones parcheadas con el repositorio de claves anterior ya no podrán actualizarse.",
|
||||
"regeneratedKeystore": "Repositorio de claves regenerado",
|
||||
"exportKeystoreLabel": "Exportar repositorio de claves",
|
||||
"exportKeystoreHint": "Exporta el repositorio de claves utilizado para firmar aplicaciones",
|
||||
"exportedKeystore": "Repositorio de claves exportado",
|
||||
"noKeystoreExportFileFound": "No hay repositorio de claves para exportar",
|
||||
"importKeystoreLabel": "Importar repositorio de claves",
|
||||
"importKeystoreHint": "Importa el repositorio de claves utilizado para firmar aplicaciones",
|
||||
"importedKeystore": "Repositorio de claves importado",
|
||||
"jsonSelectorErrorMessage": "No se puede utilizar el archivo JSON seleccionado"
|
||||
"selectKeystorePassword": "Contraseña del repositorio de claves",
|
||||
"selectKeystorePasswordHint": "Introduce la contraseña del repositorio de claves utilizado para firmar aplicaciones",
|
||||
"jsonSelectorErrorMessage": "No se puede utilizar el archivo JSON seleccionado",
|
||||
"keystoreSelectorErrorMessage": "No se puede utilizar el archivo de repositorio de claves seleccionado"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Informacion de la applicacion",
|
||||
"openButton": "Abrir",
|
||||
"uninstallButton": "Desinstalar",
|
||||
"unmountButton": "Desmontar",
|
||||
"rootDialogTitle": "Ocurrió un error",
|
||||
"unmountDialogText": "¿Seguro que quieres desmontar esta aplicación?",
|
||||
"uninstallDialogText": "¿Seguro que quieres desinstalar esta aplicación?",
|
||||
"rootDialogText": "La aplicación se instaló con permisos de root, pero actualmente ReVanced Manager no tiene permisos root.\nPor favor, conceda primero los permisos de root.",
|
||||
"packageNameLabel": "Nombre del paquete",
|
||||
"installTypeLabel": "Tipo de instalación",
|
||||
"mountTypeLabel": "Montar (requiere acceso root)",
|
||||
"regularTypeLabel": "Normal",
|
||||
"patchedDateLabel": "Fecha de parcheo",
|
||||
"appliedPatchesLabel": "Parches aplicados",
|
||||
"patchedDateHint": "${date} a las ${time}",
|
||||
@ -172,5 +273,30 @@
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contribuidores"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "La versión no coincide",
|
||||
"mount_no_root": "Sin acceso root",
|
||||
"mount_missing_installation": "No se encontró la instalación",
|
||||
"status_failure_blocked": "Instalación bloqueada",
|
||||
"install_failed_verification_failure": "Verificación fallida",
|
||||
"status_failure_invalid": "Instalación inválida",
|
||||
"install_failed_version_downgrade": "No se puede bajar de versión",
|
||||
"status_failure_conflict": "Conflicto de instalación",
|
||||
"status_failure_storage": "Problema de almacenamiento de la instalación",
|
||||
"status_failure_incompatible": "Instalación incompatible",
|
||||
"status_failure_timeout": "Tiempo de instalación agotado",
|
||||
"status_unknown": "Instalación fallida",
|
||||
"mount_version_mismatch_description": "La instalación falló debido a que la versión de la aplicación instalada es diferente a la de la aplicación parcheada.\n\nInstala la versión de la aplicación que intentas montar e inténtalo de nuevo.",
|
||||
"mount_no_root_description": "La instalación falló debido a que no se ha concedido acceso root.\n\nConcédele acceso root a ReVanced Manager y vuelve a intentarlo.",
|
||||
"mount_missing_installation_description": "La instalación falló debido a que la aplicación original no ha sido instalada en este dispositivo para montar la versión parcheada sobre ella.\n\nInstala la aplicación original antes de montar y vuelve a intentarlo.",
|
||||
"status_failure_timeout_description": "La instalación tardó demasiado en finalizar.\n\n¿Quieres intentarlo de nuevo?",
|
||||
"status_failure_storage_description": "La instalación falló debido a falta de almacenamiento.\n\nLibera algo de espacio y vuelve a intentarlo.",
|
||||
"status_failure_invalid_description": "La instalación falló debido a que la aplicación parcheada es inválida.\n\n¿Quieres desinstalar la aplicación e intentarlo de nuevo?",
|
||||
"status_failure_incompatible_description": "La aplicación es incompatible con este dispositivo.\n\nContacta con el desarrollador de la aplicación y solicita asistencia.",
|
||||
"status_failure_conflict_description": "Se impidió la instalación debido a una instalación existente de la aplicación.\n\n¿Quieres desinstalar la aplicación instalada e intentarlo de nuevo?",
|
||||
"status_failure_blocked_description": "${packageName} bloqueó la instalación.\n\nAjusta la configuración de seguridad e inténtalo de nuevo.",
|
||||
"install_failed_verification_failure_description": "La instalación falló debido a un problema de verificación.\n\nAjusta la configuración de seguridad e inténtalo de nuevo.",
|
||||
"install_failed_version_downgrade_description": "La instalación falló debido a que la aplicación parcheada es una versión inferior a la instalada.\n\n¿Quieres desinstalar la aplicación e intentarlo de nuevo?",
|
||||
"status_unknown_description": "La instalación falló debido a una razón desconocida. Por favor, inténtalo de nuevo."
|
||||
}
|
||||
}
|
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Cette fonctionnalité n'est pas encore disponible"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contributeurs",
|
||||
"patcherContributors": "ReVanced Patcher",
|
||||
"patchesContributors": "ReVanced Patches",
|
||||
"integrationsContributors": "ReVanced Integrations",
|
||||
"cliContributors": "ReVanced CLI",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Contributeurs"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Incompatibilité de version",
|
||||
|
@ -1,6 +1,7 @@
|
||||
{
|
||||
"okButton": "אישור",
|
||||
"cancelButton": "ביטול",
|
||||
"dismissButton": "התעלם",
|
||||
"quitButton": "יציאה",
|
||||
"updateButton": "עדכן",
|
||||
"enabledLabel": "הופעל",
|
||||
@ -15,6 +16,8 @@
|
||||
"noShowAgain": "אל תציג זאת שוב",
|
||||
"add": "הוסף",
|
||||
"remove": "הסר",
|
||||
"showChangelogButton": "הצגת יומן שינויים",
|
||||
"showUpdateButton": "הצג עדכון",
|
||||
"navigationView": {
|
||||
"dashboardTab": "לוח בקרה",
|
||||
"patcherTab": "מתקן",
|
||||
@ -25,14 +28,25 @@
|
||||
"widgetTitle": "לוח בקרה",
|
||||
"updatesSubtitle": "עדכונים",
|
||||
"patchedSubtitle": "אפליקציות מתוקנות",
|
||||
"changeLaterSubtitle": "ניתן לשנות זאת בהגדרות מאוחר יותר.",
|
||||
"noUpdates": "אין עדכונים זמינים",
|
||||
"WIP": "עבודה בתהליך...",
|
||||
"noInstallations": "אין אפליקציות מתוקנת מותקנות",
|
||||
"installUpdate": "המשך להתקין את העדכון?",
|
||||
"updateSheetTitle": "עדכן את ReVanced Manager",
|
||||
"updateDialogTitle": "עידכון חדש זמין",
|
||||
"updatePatchesSheetTitle": "עדכן את ReVanced Patches",
|
||||
"updateChangelogTitle": "היסטורית שינויים",
|
||||
"updateDialogText": "עדכון חדש זמין עבור ${file}.\n\nהגרסה המותקנת כרגע היא ${version}.",
|
||||
"downloadConsentDialogTitle": "להוריד קבצי עזר?",
|
||||
"downloadConsentDialogText": "ReVanced Manager צריך להוריד קבצי עזר על מנת לעבוד כמו שצריך.",
|
||||
"downloadConsentDialogText2": "זה יחבר אותך ל${url}.",
|
||||
"checkUpdateDialogTitle": "לבדוק עדכונים?",
|
||||
"checkUpdateDialogText": "מעדיף ש-ReVanced Manager יבדוק עדכונים אוטומטית?",
|
||||
"notificationTitle": "העדכון הורד",
|
||||
"notificationText": "הקש כדי להתקין את העדכון",
|
||||
"downloadingMessage": "מוריד עדכון...",
|
||||
"downloadedMessage": "עדכון הורד",
|
||||
"installingMessage": "מתקין עדכון...",
|
||||
"errorDownloadMessage": "הורדת קובץ העדכון נכשלה",
|
||||
"errorInstallMessage": "לא ניתן להתקין את העדכון",
|
||||
@ -46,17 +60,24 @@
|
||||
"loadingLabel": "טוען...",
|
||||
"timeagoLabel": "לפני ${time}",
|
||||
"patcherLabel": "מתקן: ",
|
||||
"managerLabel": "מנהל: "
|
||||
"managerLabel": "מנהל: ",
|
||||
"updateButton": "עדכן את Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "מתקן",
|
||||
"patchButton": "תיקון",
|
||||
"armv7WarningDialogText": "תיקון במכשירי ARMv7 לא נתמך כרגע ואולי יכשל. להמשיך בכל זאת?",
|
||||
"removedPatchesWarningDialogText": "התיקונים הבאים הוסרו מאז הפעם האחרונה שהשתמשת בהם.\n${patches}\nלהמשיך בכל זאת?",
|
||||
"requiredOptionDialogText": "כמה אפשרויות תיקון חייבות להיקבע."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "בחר אפליקציה",
|
||||
"widgetTitleSelected": "אפליקציה שנבחרה",
|
||||
"widgetSubtitle": "לא נבחרה אפליקציה",
|
||||
"noAppsLabel": "לא נמצאו יישומים",
|
||||
"currentVersion": "נוֹכְחִי",
|
||||
"suggestedVersion": "מוצע"
|
||||
"suggestedVersion": "מוצע",
|
||||
"anyVersion": "כל גרסה"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "בחר תיקונים",
|
||||
@ -69,10 +90,13 @@
|
||||
"widgetSubtitle": "אנחנו מחוברים!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "בחר אפליקציה",
|
||||
"searchBarHint": "חיפוש אפליקציה",
|
||||
"storageButton": "אחסון",
|
||||
"selectFromStorageButton": "בחירה מהאחסון",
|
||||
"errorMessage": "לא ניתן להשתמש ביישום שנבחר",
|
||||
"downloadToast": "פונקציית ההורדה אינה זמינה כעת",
|
||||
"requireSuggestedAppVersionDialogText": "גרסת האפליקציה שבחרת אינה תואמת את הגרסה המומלצת, מה שעלול להוביל לבעיות בלתי צפויות. אנא השתמש בגרסה המומלצת.\n\nהגרסה שנבחרה: ${selected}\nהגרסה המומלצת: ${suggested}\n\nכדי להמשיך בכל זאת, כבה את \"דרוש גרסת אפליקציה מומלצת\" בהגדרות.",
|
||||
"featureNotAvailable": "תכונה לא מיושמת"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
@ -82,7 +106,9 @@
|
||||
"newPatches": "תיקונים חדשים",
|
||||
"patches": "תיקונים",
|
||||
"doneButton": "בוצע",
|
||||
"defaultChip": "ברירת מחדל",
|
||||
"defaultTooltip": "בחר את כל תיקוני ברירת המחדל",
|
||||
"noneChip": "כלום",
|
||||
"noneTooltip": "בטל את בחירת כל התיקונים",
|
||||
"loadPatchesSelection": "טען בחירת תיקונים",
|
||||
"noSavedPatches": "אין תיקונים שמורים עבור האפליקציה שנבחרה.\nלחץ על בוצע כדי לשמור את הבחירה הנוכחית.",
|
||||
|
@ -1,8 +1,10 @@
|
||||
{
|
||||
"okButton": "ठीक है",
|
||||
"cancelButton": "रद्द करें",
|
||||
"dismissButton": "बंद करें",
|
||||
"quitButton": "छोड़ें",
|
||||
"updateButton": "अपडेट करें",
|
||||
"enabledLabel": "सक्रिय",
|
||||
"installed": "इंस्टॉल्ड: ${version}",
|
||||
"suggested": "सुझाया गया: ${version}",
|
||||
"yesButton": "हाँ",
|
||||
@ -13,6 +15,7 @@
|
||||
"noShowAgain": "इसे पुनः न दिखाएँ",
|
||||
"add": "ऐड करें",
|
||||
"remove": "हटाएं",
|
||||
"showChangelogButton": "बदलाव दिखाएं",
|
||||
"navigationView": {
|
||||
"dashboardTab": "नियंत्रण-पट्ट",
|
||||
"patcherTab": "पैचर",
|
||||
|
@ -66,7 +66,7 @@
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patchelő",
|
||||
"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?",
|
||||
"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",
|
||||
"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",
|
||||
"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": {
|
||||
"viewTitle": "Patchek kiválasztása",
|
||||
@ -110,7 +110,7 @@
|
||||
"defaultChip": "Alapértelmezett",
|
||||
"defaultTooltip": "Összes alapértelmezett patch kiválasztása",
|
||||
"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",
|
||||
"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",
|
||||
@ -145,7 +145,7 @@
|
||||
"installButton": "Telepítés",
|
||||
"installRootType": "Felcsatolás",
|
||||
"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",
|
||||
"openButton": "Megnyitás",
|
||||
"shareButton": "Fájl megosztása",
|
||||
@ -194,9 +194,9 @@
|
||||
"logsLabel": "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",
|
||||
"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?",
|
||||
"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",
|
||||
"autoUpdatePatchesHint": "A patchek automatikus frissítése a legújabb verzióra",
|
||||
"showUpdateDialogLabel": "Frissítési panel megjelenítése",
|
||||
@ -204,7 +204,7 @@
|
||||
"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)",
|
||||
"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ő",
|
||||
"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é?",
|
||||
@ -237,7 +237,7 @@
|
||||
"regenerateKeystoreLabel": "Kulcstár újragenerálása",
|
||||
"regenerateKeystoreHint": "Újragenerálja az alkalmazások aláírásához használt kulcstárolót",
|
||||
"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",
|
||||
"exportKeystoreLabel": "Kulcstároló exportálása",
|
||||
"exportKeystoreHint": "Exportálja az alkalmazások aláírásához használt kulcstárolót",
|
||||
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Ez a funkció még nem készült el"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Közreműködők",
|
||||
"patcherContributors": "ReVanced Patchelő",
|
||||
"patchesContributors": "ReVanced Patchek",
|
||||
"integrationsContributors": "ReVanced Integrációk",
|
||||
"cliContributors": "ReVanced CLI",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Közreműködők"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Verzió ütközés",
|
||||
@ -291,9 +286,9 @@
|
||||
"status_failure_incompatible": "A telepítés nem kompatibilis",
|
||||
"status_failure_timeout": "Telepítési időtúllépés",
|
||||
"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_missing_installation_description": "A telepítés meghiúsult, mert a kijavítatlan alkalmazás nincs telepítve erre az eszközre ahhoz, hogy rá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_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?",
|
||||
|
@ -3,12 +3,12 @@
|
||||
"cancelButton": "Batal",
|
||||
"dismissButton": "Abaikan",
|
||||
"quitButton": "Keluar",
|
||||
"updateButton": "Pembaruan",
|
||||
"updateButton": "Memperbarui",
|
||||
"enabledLabel": "Aktif",
|
||||
"disabledLabel": "Tidak Aktif",
|
||||
"installed": "Terpasang: ${version}",
|
||||
"suggested": "Disarankan: ${version}",
|
||||
"yesButton": "Ya",
|
||||
"yesButton": "Iya",
|
||||
"noButton": "Tidak",
|
||||
"warning": "Peringatan",
|
||||
"options": "Pengaturan",
|
||||
@ -27,7 +27,7 @@
|
||||
"refreshSuccess": "Berhasil Memuat Ulang",
|
||||
"widgetTitle": "Dasbor",
|
||||
"updatesSubtitle": "Pembaruan",
|
||||
"patchedSubtitle": "Aplikasi tertambal",
|
||||
"patchedSubtitle": "Aplikasi yang dimodifikasi",
|
||||
"changeLaterSubtitle": "Anda dapat mengubahnya di pengaturan nanti.",
|
||||
"noUpdates": "Tidak ada pembaruan",
|
||||
"WIP": "Sedang dikerjakan...",
|
||||
@ -60,19 +60,24 @@
|
||||
"loadingLabel": "Memuat...",
|
||||
"timeagoLabel": "${time} yang lalu",
|
||||
"patcherLabel": "Penambal: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"managerLabel": "Pengelola: ",
|
||||
"updateButton": "Perbarui Manager"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Penambal",
|
||||
"patchButton": "Tambalan",
|
||||
"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."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Pilih aplikasi",
|
||||
"widgetTitleSelected": "Aplikasi yang dipilih",
|
||||
"widgetSubtitle": "Tidak ada aplikasi yang dipilih",
|
||||
"noAppsLabel": "Aplikasi tidak ditemukan",
|
||||
"currentVersion": "Saat ini",
|
||||
"suggestedVersion": "Disarankan"
|
||||
"suggestedVersion": "Disarankan",
|
||||
"anyVersion": "Versi apa saja"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Pilih tambalan",
|
||||
@ -85,11 +90,15 @@
|
||||
"widgetSubtitle": "Ikuti kami!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Pilih aplikasi",
|
||||
"searchBarHint": "Cari aplikasi",
|
||||
"storageButton": "Penyimpanan",
|
||||
"selectFromStorageButton": "Pilih dari penyimpanan",
|
||||
"errorMessage": "Tidak dapat menggunakan aplikasi yang dipilih",
|
||||
"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": {
|
||||
"viewTitle": "Pilih tambalan",
|
||||
@ -98,16 +107,23 @@
|
||||
"newPatches": "Patch baru",
|
||||
"patches": "Patch",
|
||||
"doneButton": "Selesai",
|
||||
"defaultChip": "Bawaan",
|
||||
"defaultTooltip": "Pilih semua tambalan bawaan",
|
||||
"noneChip": "Tidak ada",
|
||||
"noneTooltip": "Batalkan semua tambalan",
|
||||
"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": {
|
||||
"customValue": "Nilai kustom",
|
||||
"resetOptionsTooltip": "Mengatur ulang opsi tambalan",
|
||||
"viewTitle": "Opsi tambalan",
|
||||
"saveOptions": "Simpan",
|
||||
"addOptions": "Tambahkan opsi",
|
||||
"deselectPatch": "Lepas tambalan",
|
||||
"tooltip": "Opsi masukan lainnya",
|
||||
"selectFilePath": "Pilih lokasi berkas",
|
||||
"selectFolder": "Pilih folder",
|
||||
"selectOption": "Pilih opsi",
|
||||
@ -118,11 +134,14 @@
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Memilih tambalan ini akan menyebabkan galat tambal.\n\nVersi apli: ${packageVersion}\nVersi anjuran:\n${supportedVersions}",
|
||||
"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"
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Pemasang",
|
||||
"installType": "Pilih tipe pemasang",
|
||||
"installTypeDescription": "Pilih jenis instalasi untuk melanjutkan.",
|
||||
"installButton": "Pasang",
|
||||
"installRootType": "Mount",
|
||||
"installNonRootType": "Reguler",
|
||||
@ -132,14 +151,20 @@
|
||||
"shareButton": "Bagikan berkas",
|
||||
"notificationTitle": "ReVanced Manager sedang menambal",
|
||||
"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..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Pengaturan",
|
||||
"appearanceSectionTitle": "Tampilan",
|
||||
"teamSectionTitle": "Tim",
|
||||
"debugSectionTitle": "Debugging",
|
||||
"advancedSectionTitle": "Lanjutan",
|
||||
"exportSectionTitle": "Impor & Ekspor",
|
||||
"dataSectionTitle": "Sumber data",
|
||||
"themeModeLabel": "Tema aplikasi",
|
||||
"systemThemeLabel": "Sistem",
|
||||
"lightThemeLabel": "Cahaya",
|
||||
@ -147,39 +172,79 @@
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Nikmati pengalaman lebih dekat ke perangkat Anda",
|
||||
"languageLabel": "Bahasa",
|
||||
"languageUpdated": "Bahasa diperbaharui",
|
||||
"englishOption": "Bahasa Inggris",
|
||||
"sourcesLabel": "Sumber-sumber alternatif",
|
||||
"sourcesLabelHint": "Mengonfigurasi sumber alternatif untuk ReVanced Patches dan ReVanced Integrations",
|
||||
"sourcesIntegrationsLabel": "Sumber Integrasi",
|
||||
"useAlternativeSources": "Gunakan sumber-sumber alternatif",
|
||||
"useAlternativeSourcesHint": "Gunakan sumber alternatif untuk ReVanced Patches dan ReVanced Integrations alih-alih API",
|
||||
"sourcesResetDialogTitle": "Atur ulang",
|
||||
"sourcesResetDialogText": "Apakah Anda yakin ingin mengatur ulang sumber kustom ke bawaannya?",
|
||||
"apiURLResetDialogText": "Apakah Anda yakin ingin mengatur ulang URL API ke bawaan?",
|
||||
"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",
|
||||
"apiURLHint": "Konfigurasikan URL API dari ReVanced Manager",
|
||||
"selectApiURL": "URL API",
|
||||
"orgPatchesLabel": "Perapihan tambalan",
|
||||
"sourcesPatchesLabel": "Sumber tambalan",
|
||||
"orgIntegrationsLabel": "Organisasi Intergrasi",
|
||||
"contributorsLabel": "Kontributor",
|
||||
"contributorsHint": "Daftar kontributor ReVanced",
|
||||
"logsLabel": "Bagikan log",
|
||||
"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?",
|
||||
"disablePatchesSelectionWarningText": "Anda akan menonaktifkan pengubahan pilihan tambalan.\nPilihan tambalan default akan dikembalikan.\n\nMenonaktifkan?",
|
||||
"autoUpdatePatchesLabel": "Otomatis perbarui tambalan",
|
||||
"autoUpdatePatchesHint": "Otomatis perbarui tambalan ke versi terkini",
|
||||
"showUpdateDialogLabel": "Tampilkan dialog pembaruan",
|
||||
"showUpdateDialogHint": "Tampilkan dialog ketika pembaruan tersedia",
|
||||
"universalPatchesLabel": "Tampilkan tambalan universal",
|
||||
"universalPatchesHint": "Menampilkan semua aplikasi dan tambalan universal (dapat memperlambat daftar aplikasi)",
|
||||
"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",
|
||||
"snackbarMessage": "Disalin ke papan klip",
|
||||
"restartAppForChanges": "Mulai ulang aplikasi untuk menerapkan perubahan",
|
||||
"deleteTempDirLabel": "Hapus berkas sementara",
|
||||
"deleteTempDirHint": "Hapus berkas sementara yang tidak dipakai",
|
||||
"deletedTempDir": "Berkas sementara dihapus",
|
||||
"exportPatchesLabel": "Ekspor tambalan pilihan",
|
||||
"exportPatchesHint": "Ekspor tambalan terpilih ke berkas JSON",
|
||||
"exportedPatches": "Tambalan pilihan diekspor",
|
||||
"noExportFileFound": "Belum pilih tambalan untuk diekspor",
|
||||
"importPatchesLabel": "Impor modifikasi terpilih",
|
||||
"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",
|
||||
"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",
|
||||
"exportKeystoreHint": "Ekspor kunci penyimpanan yang digunakan untuk menandatangani aplikasi",
|
||||
"exportedKeystore": "Keystore diekspor",
|
||||
"noKeystoreExportFileFound": "Tidak ada keystore untuk diekspor",
|
||||
"importKeystoreLabel": "Impor keystore",
|
||||
"importKeystoreHint": "Impor kunci penyimpanan yang digunakan untuk menandatangani aplikasi",
|
||||
"importedKeystore": "Keystore diimpor",
|
||||
"selectKeystorePassword": "Kata Sandi Keystore",
|
||||
"selectKeystorePasswordHint": "Pilih kata sandi keystore yang digunakan untuk menandatangani aplikasi",
|
||||
@ -206,12 +271,7 @@
|
||||
"updateNotImplemented": "Fitur ini belum diimplementasikan"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Kontributor",
|
||||
"patcherContributors": "ReVanced Patcher",
|
||||
"patchesContributors": "ReVanced Patches",
|
||||
"integrationsContributors": "ReVanced Integrations",
|
||||
"cliContributors": "ReVanced CLI",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Kontributor"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Versi tidak cocok",
|
||||
@ -226,6 +286,17 @@
|
||||
"status_failure_incompatible": "Pemasangan tidak kompatibel",
|
||||
"status_failure_timeout": "Pemasangan kelamaan",
|
||||
"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."
|
||||
}
|
||||
}
|
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Questa funzionalità non è stata ancora implementata"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contributori",
|
||||
"patcherContributors": "ReVanced Patcher",
|
||||
"patchesContributors": "Patches di ReVanced",
|
||||
"integrationsContributors": "Integrazioni di ReVanced",
|
||||
"cliContributors": "CLI di ReVanced",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Contributori"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Versione non corrispondente",
|
||||
|
@ -1,8 +1,11 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "キャンセル",
|
||||
"dismissButton": "取り消し",
|
||||
"quitButton": "中止",
|
||||
"updateButton": "更新",
|
||||
"enabledLabel": "有効",
|
||||
"disabledLabel": "無効",
|
||||
"installed": "インストール済み: ${version}",
|
||||
"suggested": "推奨: ${version}",
|
||||
"yesButton": "はい",
|
||||
@ -13,6 +16,8 @@
|
||||
"noShowAgain": "今後は表示しない",
|
||||
"add": "追加",
|
||||
"remove": "削除",
|
||||
"showChangelogButton": "更新履歴を確認",
|
||||
"showUpdateButton": "アップデート内容を見せる",
|
||||
"navigationView": {
|
||||
"dashboardTab": "一覧",
|
||||
"patcherTab": "パッチャー",
|
||||
@ -22,12 +27,26 @@
|
||||
"refreshSuccess": "正常に更新されました",
|
||||
"widgetTitle": "一覧",
|
||||
"updatesSubtitle": "更新",
|
||||
"patchedSubtitle": "パッチ適用済みのアプリ",
|
||||
"patchedSubtitle": "パッチ済みのアプリ",
|
||||
"changeLaterSubtitle": "この設定はあとでも変更できます",
|
||||
"noUpdates": "利用可能なアップデートはありません",
|
||||
"WIP": "制作中",
|
||||
"noInstallations": "パッチ済みのアプリはインストールされていません",
|
||||
"installUpdate": "更新を適用しますか?",
|
||||
"updateSheetTitle": "ReVanced Managerをアップデート",
|
||||
"updateDialogTitle": "新しいアップデートが利用可能",
|
||||
"updatePatchesSheetTitle": "ReVancedパッチを更新",
|
||||
"updateChangelogTitle": "変更履歴",
|
||||
"updateDialogText": "新しいアップデートが${file} 向けにあります。\n現在のインストールされているバージョンは${version} です。",
|
||||
"downloadConsentDialogTitle": "必要なファイルをダウンロードしますか?",
|
||||
"downloadConsentDialogText": "ReVanced Managerは正常に動作するために必要なファイルをダウンロードする必要があります。",
|
||||
"downloadConsentDialogText2": "これにより${url} に接続します",
|
||||
"checkUpdateDialogTitle": "アップデートを確認しますか?",
|
||||
"checkUpdateDialogText": "ReVanced Managerのアップデートを自動チェックしますか?",
|
||||
"notificationTitle": "アップデートをダウンロードしました",
|
||||
"notificationText": "タップしてアップデートをインストール",
|
||||
"downloadingMessage": "更新データをダウンロードしています...",
|
||||
"downloadedMessage": "アップデートのダウンロードが完了しました",
|
||||
"installingMessage": "更新を適用しています...",
|
||||
"errorDownloadMessage": "更新データをダウンロードできません",
|
||||
"errorInstallMessage": "更新を適用できませんでした",
|
||||
@ -39,17 +58,26 @@
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "読み込み中...",
|
||||
"timeagoLabel": "${time} 前"
|
||||
"timeagoLabel": "${time} 前",
|
||||
"patcherLabel": "Patcher: ",
|
||||
"managerLabel": "Manager: ",
|
||||
"updateButton": "アップデートマネージャー"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "パッチャー",
|
||||
"patchButton": "パッチ",
|
||||
"armv7WarningDialogText": "ARMv7デバイスではパッチがサポートされていません。失敗する可能性がありますが、続行しますか?",
|
||||
"removedPatchesWarningDialogText": "以下のパッチはもう使用できません。\n\n${patches}\n\n続行しますか?",
|
||||
"requiredOptionDialogText": "一部のパッチオプションを設定する必要があります。"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "アプリを選択",
|
||||
"widgetTitleSelected": "選択済のアプリ",
|
||||
"widgetSubtitle": "アプリが選択されていません",
|
||||
"noAppsLabel": "アプリが見つかりません",
|
||||
"currentVersion": "選択",
|
||||
"suggestedVersion": "推奨"
|
||||
"suggestedVersion": "推奨",
|
||||
"anyVersion": "全てのバージョン"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "パッチを選択",
|
||||
@ -62,11 +90,15 @@
|
||||
"widgetSubtitle": "私たちは活動しています!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"storageButton": "APKを選択",
|
||||
"viewTitle": "アプリを選択",
|
||||
"searchBarHint": "アプリを検索",
|
||||
"storageButton": "APKファイルを選択",
|
||||
"selectFromStorageButton": "ストレージから選択",
|
||||
"errorMessage": "選択されたアプリは使用できません",
|
||||
"downloadToast": "現在、ダウンロード機能は利用できません",
|
||||
"featureNotAvailable": "この機能は未実装です"
|
||||
"requireSuggestedAppVersionDialogText": "選択されたアプリのバージョンは推奨バージョン外です。\n推奨バージョンのアプリを選択してください。\n選択されたバージョン ${selected}\n推奨バージョン ${suggested}\n\n選択されたバージョンを使用する場合、設定から「推奨バージョンの使用を強制」を無効にしてください。",
|
||||
"featureNotAvailable": "この機能は未実装です",
|
||||
"featureNotAvailableText": "このアプリは分割された APK であり、root 権限でマウントすることによってのみ確実にパッチを適用してインストールできます。 ただし、ストレージから選択することで完全な APK をパッチしてインストールすることができます。"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "パッチを選択",
|
||||
@ -75,7 +107,9 @@
|
||||
"newPatches": "新しいパッチ",
|
||||
"patches": "パッチ",
|
||||
"doneButton": "完了",
|
||||
"defaultChip": "既定",
|
||||
"defaultTooltip": "すべてのデフォルトのパッチを選択",
|
||||
"noneChip": "なし",
|
||||
"noneTooltip": "すべてのパッチの選択を解除",
|
||||
"loadPatchesSelection": "パッチの選択を読み込む",
|
||||
"noSavedPatches": "選択したアプリに保存されたパッチはありません。\n「完了」を押して現在の選択を保存します。",
|
||||
@ -99,13 +133,19 @@
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "このパッチを選択するとエラーが発生する可能性があります。\n\n現在のバージョン: ${packageVersion}\nサポートされているバージョン: ${supportedVersions}",
|
||||
"unsupportedPatchVersion": "このアプリのバージョンではパッチはサポートされていません.",
|
||||
"unsupportedRequiredOption": "このパッチには、このアプリではサポートされていない必須オプションが含まれています",
|
||||
"patchesChangeWarningDialogText": "デフォルトのパッチの選択とオプションを使用することを推奨します。変更すると予期せぬ問題が発生する可能性があります。\n\nパッチの選択を続ける場合、設定で「パッチの選択の変更を許可」をオンにする必要があります。",
|
||||
"patchesChangeWarningDialogButton": "デフォルトの選択を使用"
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "インストーラー",
|
||||
"installType": "インストールの種類を選択",
|
||||
"installTypeDescription": "インストールの種類を選択して続行します。",
|
||||
"installButton": "インストール",
|
||||
"installRootType": "マウント",
|
||||
"installNonRootType": "標準",
|
||||
"warning": "予期しない問題を避けるため、パッチを適用したアプリの自動更新を無効にします。",
|
||||
"pressBackAgain": "キャンセルするには、もう一度戻るを押してください",
|
||||
"openButton": "開く",
|
||||
"shareButton": "ファイルを共有",
|
||||
@ -124,6 +164,7 @@
|
||||
"debugSectionTitle": "デバッグ",
|
||||
"advancedSectionTitle": "高度な設定",
|
||||
"exportSectionTitle": "インポート&エクスポート",
|
||||
"dataSectionTitle": "データソース",
|
||||
"themeModeLabel": "アプリのテーマ",
|
||||
"systemThemeLabel": "システム",
|
||||
"lightThemeLabel": "ライト",
|
||||
@ -131,29 +172,39 @@
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "よりデバイスに近い体験が楽しめます",
|
||||
"languageLabel": "言語",
|
||||
"languageUpdated": "言語が更新されました",
|
||||
"englishOption": "英語",
|
||||
"sourcesLabel": "他のソース",
|
||||
"sourcesLabelHint": "ReVanded PatchesとReVanced Integrationsの代替ソースを設定",
|
||||
"sourcesIntegrationsLabel": "Integrations のソース",
|
||||
"useAlternativeSources": "他のソースを使用",
|
||||
"useAlternativeSourcesHint": "APIの代わりにReVanced PatchesとReVanced Integrationsの他のソースを使用する",
|
||||
"sourcesResetDialogTitle": "リセット",
|
||||
"sourcesResetDialogText": "ソースをデフォルト値にリセットしてもよろしいですか?",
|
||||
"apiURLResetDialogText": "API の URL をデフォルト値にリセットしてもよろしいですか?",
|
||||
"sourcesUpdateNote": "注: ReVeded PatchesとReVanced Integrationsを別のソースから自動的にダウンロードします。\n\nこれにより、他のソースに接続されます。",
|
||||
"apiURLLabel": "API の URL",
|
||||
"apiURLHint": "ReVanced ManagerのAPIのURLを設定する",
|
||||
"selectApiURL": "API の URL",
|
||||
"orgPatchesLabel": "パッチの組織",
|
||||
"sourcesPatchesLabel": "パッチのソース",
|
||||
"orgIntegrationsLabel": "Integrations の組織",
|
||||
"contributorsLabel": "コントリビューター",
|
||||
"contributorsHint": "ReVanced のコントリビューターの一覧",
|
||||
"contributorsLabel": "貢献者",
|
||||
"contributorsHint": "ReVancedの貢献者一覧",
|
||||
"logsLabel": "ログを共有",
|
||||
"logsHint": "ReVanced Manager のログを共有します",
|
||||
"enablePatchesSelectionLabel": "パッチの選択の変更を許可",
|
||||
"enablePatchesSelectionHint": "パッチの選択と解除を防止しない",
|
||||
"enablePatchesSelectionWarningText": "パッチの選択を変更すると、予期せぬ問題が起こる可能性があります。\n\n有効にしますか?",
|
||||
"disablePatchesSelectionWarningText": "パッチの選択の変更を無効にしようとしています。\nデフォルトのパッチの選択が復元されます。\n\n無効にしますか?",
|
||||
"autoUpdatePatchesLabel": "パッチの自動アップデート",
|
||||
"autoUpdatePatchesHint": "パッチを自動的に最新バージョンに更新します",
|
||||
"autoUpdatePatchesHint": "パッチを自動的に最新バージョンに更新する",
|
||||
"showUpdateDialogLabel": "アップデートの通知を表示",
|
||||
"showUpdateDialogHint": "新しいアップデートが利用可能な場合にダイアログを表示する",
|
||||
"universalPatchesLabel": "共通パッチの表示",
|
||||
"universalPatchesHint": "すべてのアプリと共通パッチを表示します (アプリのリストの読み込みが遅くなる可能性があります)",
|
||||
"versionCompatibilityCheckLabel": "バージョンの互換性チェック",
|
||||
"requireSuggestedAppVersionLabel": "推奨されたアプリのバージョンが必要です",
|
||||
"universalPatchesHint": "すべてのアプリと共通パッチを表示します(アプリ一覧の読み込みが遅くなる可能性があります)",
|
||||
"versionCompatibilityCheckLabel": "バージョンの互換性の確認",
|
||||
"requireSuggestedAppVersionLabel": "推奨するアプリバージョンの要求",
|
||||
"requireSuggestedAppVersionDialogText": "推奨されているバージョンではないアプリを選択すると、予期しない問題が発生する可能性があります。\n\nこのまま続行しますか?",
|
||||
"aboutLabel": "情報",
|
||||
"snackbarMessage": "クリップボードにコピーしました",
|
||||
@ -162,19 +213,19 @@
|
||||
"deleteTempDirHint": "未使用の一時ファイルを削除",
|
||||
"deletedTempDir": "一時ファイルを削除しました",
|
||||
"exportPatchesLabel": "パッチの選択をエクスポート",
|
||||
"exportPatchesHint": "パッチの選択を JSON ファイルにエクスポートします",
|
||||
"exportPatchesHint": "パッチの選択を JSON ファイルにエクスポートする",
|
||||
"exportedPatches": "パッチの選択をエクスポートしました",
|
||||
"noExportFileFound": "エクスポートするパッチの選択がありません",
|
||||
"importPatchesLabel": "パッチの選択をインポート",
|
||||
"importPatchesHint": "パッチの選択を JSON ファイルからインポートします",
|
||||
"importPatchesHint": "パッチの選択を JSON ファイルからインポートする",
|
||||
"importedPatches": "パッチの選択をインポートしました",
|
||||
"resetStoredPatchesLabel": "パッチの選択をリセット",
|
||||
"resetStoredPatchesHint": "保存されたパッチの選択をリセットします",
|
||||
"resetStoredPatchesHint": "保存されたパッチの選択をリセットする",
|
||||
"resetStoredPatchesDialogTitle": "パッチの選択をリセット",
|
||||
"resetStoredPatchesDialogText": "デフォルトのパッチの選択が復元されます。",
|
||||
"resetStoredPatches": "パッチの選択をリセットしました",
|
||||
"resetStoredOptionsLabel": "パッチオプションをリセット",
|
||||
"resetStoredOptionsHint": "すべてのパッチオプションをリセットします",
|
||||
"resetStoredOptionsHint": "すべてのパッチオプションをリセットする",
|
||||
"resetStoredOptionsDialogTitle": "パッチオプションをリセットしますか?",
|
||||
"resetStoredOptionsDialogText": "パッチオプションをリセットすると、保存されたすべてのオプションが削除されます。",
|
||||
"resetStoredOptions": "オプションをリセットしました",
|
||||
@ -203,9 +254,12 @@
|
||||
"openButton": "開く",
|
||||
"uninstallButton": "アンインストール",
|
||||
"rootDialogTitle": "エラー",
|
||||
"unmountDialogText": "このアプリをアンマウントしてもよろしいですか?",
|
||||
"rootDialogText": "アプリはスーパーユーザー権限でインストールされましたが、現在 ReVanced Manager にはその権限がありません。 スーパーユーザー権限を付与してください。",
|
||||
"packageNameLabel": "パッケージ名",
|
||||
"installTypeLabel": "インストールの種類",
|
||||
"mountTypeLabel": "マウント",
|
||||
"regularTypeLabel": "通常",
|
||||
"patchedDateLabel": "パッチ適用日時",
|
||||
"appliedPatchesLabel": "適用されたパッチ",
|
||||
"patchedDateHint": "${date} ${time}",
|
||||
|
@ -1,6 +1,45 @@
|
||||
{
|
||||
"navigationView": {},
|
||||
"homeView": {},
|
||||
"okButton": "ОК",
|
||||
"cancelButton": "Артқа",
|
||||
"dismissButton": "Елемеу",
|
||||
"quitButton": "Шығу",
|
||||
"updateButton": "Жаңарту",
|
||||
"enabledLabel": "Қосулы",
|
||||
"disabledLabel": "Сөндірулі",
|
||||
"installed": "Орнатылған: ${version}",
|
||||
"suggested": "Ұсынылған: ${version}",
|
||||
"yesButton": "Иә",
|
||||
"noButton": "Жоқ",
|
||||
"warning": "Назар аударыңыз",
|
||||
"options": "Баптау",
|
||||
"notice": "Ескерту",
|
||||
"noShowAgain": "Енді көрсетілмесін",
|
||||
"add": "Қосу",
|
||||
"remove": "Жою",
|
||||
"showChangelogButton": "Өзгерту тарихын көрсету",
|
||||
"showUpdateButton": "Жаңартуды көрсету",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Басқару тақтасы",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "Баптау"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Сәтті жаңартылды",
|
||||
"widgetTitle": "Бақылау тақтасы",
|
||||
"updatesSubtitle": "Жаңартулар",
|
||||
"patchedSubtitle": "Патчталған қолданбалар",
|
||||
"changeLaterSubtitle": "Мұны кейінірек баптауда өзгертіп ала аласыз.",
|
||||
"noUpdates": "Жаңарту жоқ",
|
||||
"WIP": "Жүктеліп жатыр...",
|
||||
"noInstallations": "Патчталған қолданбалар орнатылмаған",
|
||||
"installUpdate": "Жаңартуды әрі қарай орната берейік пе?",
|
||||
"updateSheetTitle": "ReVanced Manager-ді жаңарту",
|
||||
"updateDialogTitle": "Жаңарту қолжетімді",
|
||||
"updatePatchesSheetTitle": "ReVanced патчін жаңарту",
|
||||
"updateChangelogTitle": "Өзгерту тарихы",
|
||||
"updateDialogText": "${file} үшін жаңарту қолжетімді.\n\nҚазіргі ${version} нұсқасы орнатылып тұр.",
|
||||
"downloadConsentDialogTitle": "Керек файлды жүктеп алайық па?"
|
||||
},
|
||||
"applicationItem": {},
|
||||
"latestCommitCard": {},
|
||||
"patcherView": {},
|
||||
|
@ -16,22 +16,22 @@
|
||||
"noShowAgain": "다시 보지 않기",
|
||||
"add": "추가",
|
||||
"remove": "제거",
|
||||
"showChangelogButton": "변경 내역 보기",
|
||||
"showChangelogButton": "변경 사항 보기",
|
||||
"showUpdateButton": "업데이트 보기",
|
||||
"navigationView": {
|
||||
"dashboardTab": "대시보드",
|
||||
"dashboardTab": "Dashboard",
|
||||
"patcherTab": "Patcher",
|
||||
"settingsTab": "설정"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "새로고침을 성공했습니다.",
|
||||
"widgetTitle": "대시보드",
|
||||
"widgetTitle": "Dashboard",
|
||||
"updatesSubtitle": "업데이트",
|
||||
"patchedSubtitle": "패치한 앱",
|
||||
"patchedSubtitle": "설치된 앱",
|
||||
"changeLaterSubtitle": "나중에 설정에서 바꿀 수 있습니다.",
|
||||
"noUpdates": "새 업데이트가 없습니다.",
|
||||
"WIP": "개발 중 입니다...",
|
||||
"noInstallations": "패치한 앱이 설치되지 않았습니다.",
|
||||
"noInstallations": "아직 설치된 ReVanced 앱이 없습니다.",
|
||||
"installUpdate": "업데이트를 계속 설치하겠습니까?",
|
||||
"updateSheetTitle": "ReVanced Manager 업데이트",
|
||||
"updateDialogTitle": "새 업데이트가 있습니다.",
|
||||
@ -142,7 +142,7 @@
|
||||
"widgetTitle": "설치 관리자",
|
||||
"installType": "설치 유형 선택",
|
||||
"installTypeDescription": "설치를 진행할 유형을 선택해주세요.",
|
||||
"installButton": "설치",
|
||||
"installButton": "설치하기",
|
||||
"installRootType": "마운트",
|
||||
"installNonRootType": "일반",
|
||||
"warning": "패치한 앱의 자동 업데이트를 꺼서 예기치 못한 오류를 예방하세요.",
|
||||
@ -175,14 +175,14 @@
|
||||
"languageUpdated": "앱 언어를 변경했습니다.",
|
||||
"englishOption": "영어",
|
||||
"sourcesLabel": "대체 소스",
|
||||
"sourcesLabelHint": "ReVanced Patches 및 ReVanced Integrations을 위한 대체 소스를 설정할 수 있습니다.",
|
||||
"sourcesLabelHint": "ReVanced Patches 및 ReVanced Integrations 대체 소스를 설정할 수 있습니다.",
|
||||
"sourcesIntegrationsLabel": "Integrations 소스",
|
||||
"useAlternativeSources": "대체 소스 사용",
|
||||
"useAlternativeSourcesHint": "API를 대신하여 ReVanced Patches 및 ReVanced Integrations를 위한 대체 소스를 사용합니다.",
|
||||
"useAlternativeSourcesHint": "공식 소스가 아닌 ReVanced Patches 및 ReVanced Integrations 대체 소스를 사용합니다.",
|
||||
"sourcesResetDialogTitle": "초기화",
|
||||
"sourcesResetDialogText": "정말 커스텀 소스를 기본값으로 되돌릴까요?",
|
||||
"apiURLResetDialogText": "정말 API URL을 기본값으로 되돌릴까요?",
|
||||
"sourcesUpdateNote": "알림: 이렇게 하면 대체 소스에서 ReVanced Patches 및 ReVanced Integrations이 자동으로 다운로드됩니다. \n\n그러면 대체 소스로 연결됩니다.",
|
||||
"sourcesUpdateNote": "알림: 변경하면 대체 소스에서 ReVanced Patches 및 ReVanced Integrations이 자동으로 다운로드됩니다. \n\n그 이후에는 대체 소스로 연결됩니다.",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "ReVanced Manager의 API URL를 설정할 수 있습니다.",
|
||||
"selectApiURL": "API URL",
|
||||
@ -242,7 +242,7 @@
|
||||
"exportKeystoreLabel": "키스토어 내보내기",
|
||||
"exportKeystoreHint": "앱을 서명할 때 사용한 키스토어를 내보냅니다.",
|
||||
"exportedKeystore": "키스토어 내보냄",
|
||||
"noKeystoreExportFileFound": "내보낼 키스토어가 없음",
|
||||
"noKeystoreExportFileFound": "내보낼 키스토어가 없습니다.",
|
||||
"importKeystoreLabel": "키스토어 가져오기",
|
||||
"importKeystoreHint": "앱을 서명할 때 사용한 키스토어를 가져옵니다.",
|
||||
"importedKeystore": "키스토어 가져옴",
|
||||
@ -254,7 +254,7 @@
|
||||
"appInfoView": {
|
||||
"widgetTitle": "앱 정보",
|
||||
"openButton": "열기",
|
||||
"uninstallButton": "제거",
|
||||
"uninstallButton": "제거하기",
|
||||
"unmountButton": "마운트 해제",
|
||||
"rootDialogTitle": "오류",
|
||||
"unmountDialogText": "이 앱의 마운트를 해제할까요?",
|
||||
@ -271,20 +271,15 @@
|
||||
"updateNotImplemented": "이 기능은 아직 구현되지 않았습니다."
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "도움을 주신 분들",
|
||||
"patcherContributors": "ReVanced Patcher",
|
||||
"patchesContributors": "ReVanced Patches",
|
||||
"integrationsContributors": "ReVanced Integrations",
|
||||
"cliContributors": "ReVanced CLI",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "도움을 주신 분들"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "버전 불일치",
|
||||
"mount_no_root": "루트 권한 없음",
|
||||
"mount_missing_installation": "설치 대상을 찾을 수 없음",
|
||||
"mount_no_root": "Root 권한이 없습니다.",
|
||||
"mount_missing_installation": "설치 대상을 찾을 수 없습니다.",
|
||||
"status_failure_blocked": "설치 차단됨",
|
||||
"install_failed_verification_failure": "인증 실패",
|
||||
"status_failure_invalid": "설치가 유효하지 않음",
|
||||
"status_failure_invalid": "설치가 유효하지 않습니다.",
|
||||
"install_failed_version_downgrade": "다운그레이드 불가능",
|
||||
"status_failure_conflict": "설치 충돌됨",
|
||||
"status_failure_storage": "설치 저장공간 문제",
|
||||
@ -292,7 +287,7 @@
|
||||
"status_failure_timeout": "설치 시간 초과",
|
||||
"status_unknown": "설치 실패",
|
||||
"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마운트하기 전 패치되지 않은 앱을 설치한 뒤 다시 시도하세요.",
|
||||
"status_failure_timeout_description": "설치하는 데 시간이 너무 오래 걸립니다.\n\n다시 시도할까요?",
|
||||
"status_failure_storage_description": "저장공간이 충분하지 않아 설치에 실패했습니다.\n\n저장공간을 확보한 뒤 다시 시도하세요.",
|
||||
|
@ -16,7 +16,7 @@
|
||||
"noShowAgain": "Niet meer tonen",
|
||||
"add": "Voeg toe",
|
||||
"remove": "Verwijderen",
|
||||
"showChangelogButton": "Laat wijzigingslogboek zien",
|
||||
"showChangelogButton": "Wijzigingslogboek tonen",
|
||||
"showUpdateButton": "Update weergeven",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Overzicht",
|
||||
@ -28,14 +28,25 @@
|
||||
"widgetTitle": "Overzicht",
|
||||
"updatesSubtitle": "Updates",
|
||||
"patchedSubtitle": "Gepatchte applicaties",
|
||||
"changeLaterSubtitle": "U kunt dit op een later moment wijzigen in de instellingen.",
|
||||
"noUpdates": "Geen updates beschikbaar",
|
||||
"WIP": "Bezig met uitvoeren...",
|
||||
"noInstallations": "Geen gepatchte applicaties geïnstalleerd",
|
||||
"installUpdate": "Doorgaan met het installeren van de update?",
|
||||
"updateSheetTitle": "Update ReVanced Manager",
|
||||
"updateDialogTitle": "Nieuwe update beschikbaar",
|
||||
"updatePatchesSheetTitle": "Update ReVanced Patches",
|
||||
"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",
|
||||
"notificationText": "Tik om de update te installeren",
|
||||
"downloadingMessage": "Update wordt gedownload...",
|
||||
"downloadedMessage": "Update gedownload",
|
||||
"installingMessage": "Update wordt geïnstalleerd...",
|
||||
"errorDownloadMessage": "Update downloaden mislukt",
|
||||
"errorInstallMessage": "Update installeren mislukt",
|
||||
@ -55,12 +66,18 @@
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcher",
|
||||
"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."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Selecteer een app",
|
||||
"widgetTitleSelected": "Geselecteerde app",
|
||||
"widgetSubtitle": "Geen app geselecteerd",
|
||||
"noAppsLabel": "Geen applicatie gevonden",
|
||||
"currentVersion": "Huidige",
|
||||
"suggestedVersion": "Voorgesteld"
|
||||
"suggestedVersion": "Voorgesteld",
|
||||
"anyVersion": "Iedere versie"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Selecteer patches",
|
||||
@ -73,11 +90,15 @@
|
||||
"widgetSubtitle": "We zijn online!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Selecteer een app",
|
||||
"searchBarHint": "Zoek naar apps",
|
||||
"storageButton": "Opslag",
|
||||
"selectFromStorageButton": "Selecteer uit opslag",
|
||||
"errorMessage": "Kan geselecteerde applicatie niet gebruiken",
|
||||
"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": {
|
||||
"viewTitle": "Selecteer patches",
|
||||
@ -86,7 +107,9 @@
|
||||
"newPatches": "Nieuwe patches",
|
||||
"patches": "Patches",
|
||||
"doneButton": "Gereed",
|
||||
"defaultChip": "Standaard",
|
||||
"defaultTooltip": "Selecteer alle standaard patches",
|
||||
"noneChip": "Geen",
|
||||
"noneTooltip": "Alle patches deselecteren",
|
||||
"loadPatchesSelection": "Laad patch selectie",
|
||||
"noSavedPatches": "Geen opgeslagen patch selectie voor de geselecteerde app.\nDruk op Klaar om de huidige selectie op te slaan.",
|
||||
@ -112,11 +135,13 @@
|
||||
"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.",
|
||||
"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"
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Installatieprogramma",
|
||||
"installType": "Selecteer installatietype",
|
||||
"installTypeDescription": "Selecteer het installatietype om mee door te gaan.",
|
||||
"installButton": "Installeren",
|
||||
"installRootType": "Bestijgen",
|
||||
"installNonRootType": "Normaal",
|
||||
@ -139,6 +164,7 @@
|
||||
"debugSectionTitle": "Foutopsporing",
|
||||
"advancedSectionTitle": "Geavanceerd",
|
||||
"exportSectionTitle": "Importeren & exporteren",
|
||||
"dataSectionTitle": "Gegevensbronnen",
|
||||
"themeModeLabel": "App thema",
|
||||
"systemThemeLabel": "Systeem",
|
||||
"lightThemeLabel": "Licht",
|
||||
@ -146,12 +172,19 @@
|
||||
"dynamicThemeLabel": "Materiaal jij",
|
||||
"dynamicThemeHint": "Geniet van een ervaring dichter bij je apparaat",
|
||||
"languageLabel": "Taal",
|
||||
"languageUpdated": "Taal bijgewerkt",
|
||||
"englishOption": "Engels",
|
||||
"sourcesLabel": "Alternatieve bronnen",
|
||||
"sourcesLabelHint": "Configureer de alternatieve bronnen voor ReVanced Patches en ReVanced Integrations",
|
||||
"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",
|
||||
"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?",
|
||||
"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",
|
||||
"apiURLHint": "Configureer de API URL van ReVanced Manager",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "Organisatie van patches",
|
||||
"sourcesPatchesLabel": "Bronnen voor patches",
|
||||
@ -166,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?",
|
||||
"autoUpdatePatchesLabel": "Patch automatisch bijwerken",
|
||||
"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",
|
||||
"universalPatchesHint": "Alle apps en universele patches weergeven (kan de app-lijst vertragen)",
|
||||
"versionCompatibilityCheckLabel": "Versie compatibiliteitscontrole",
|
||||
|
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Ta funkcja nie została jeszcze zaimplementowana"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Współtwórcy",
|
||||
"patcherContributors": "Program łatający ReVanced",
|
||||
"patchesContributors": "Łatki ReVanced",
|
||||
"integrationsContributors": "Integracje ReVanced",
|
||||
"cliContributors": "CLI ReVanced",
|
||||
"managerContributors": "Menedżer ReVanced"
|
||||
"widgetTitle": "Współtwórcy"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Niezgodność wersji",
|
||||
|
@ -16,16 +16,16 @@
|
||||
"noShowAgain": "Não mostrar isto novamente",
|
||||
"add": "Adicionar",
|
||||
"remove": "Remover",
|
||||
"showChangelogButton": "Mostrar o registo de modificações",
|
||||
"showChangelogButton": "Mostrar as correções",
|
||||
"showUpdateButton": "Mostrar atualização",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Painel de controlo",
|
||||
"dashboardTab": "Painel de Controlo",
|
||||
"patcherTab": "Modificador",
|
||||
"settingsTab": "Definições"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Atualizado com sucesso",
|
||||
"widgetTitle": "Painel de controlo",
|
||||
"widgetTitle": "Painel de Controlo",
|
||||
"updatesSubtitle": "Atualizações",
|
||||
"patchedSubtitle": "Aplicações Modificadas",
|
||||
"changeLaterSubtitle": "Podes modificar esta definição mais tarde.",
|
||||
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Este recurso ainda não foi implementado"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contribuidores",
|
||||
"patcherContributors": "Modificador ReVanced",
|
||||
"patchesContributors": "Modificações ReVanced",
|
||||
"integrationsContributors": "Integrações ReVanced",
|
||||
"cliContributors": "Cliente ReVanced",
|
||||
"managerContributors": "Gestor ReVanced"
|
||||
"widgetTitle": "Contribuidores"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Versão incompatível",
|
||||
|
@ -72,7 +72,7 @@
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Selectați o aplicație",
|
||||
"widgetTitleSelected": "Aplicația selectata",
|
||||
"widgetTitleSelected": "Aplicația selectată",
|
||||
"widgetSubtitle": "Nici o aplicație selectată",
|
||||
"noAppsLabel": "Nu s-au găsit aplicații",
|
||||
"currentVersion": "Actual",
|
||||
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Această funcție nu a fost încă implementată"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contribuitori",
|
||||
"patcherContributors": "Patcher ReVanced",
|
||||
"patchesContributors": "Patch-uri ReVanced",
|
||||
"integrationsContributors": "Integrări ReVanced",
|
||||
"cliContributors": "CLI ReVanced",
|
||||
"managerContributors": "Manager ReVanced"
|
||||
"widgetTitle": "Contribuitori"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Versiune nepotrivită",
|
||||
|
@ -7,7 +7,7 @@
|
||||
"enabledLabel": "Включено",
|
||||
"disabledLabel": "Отключено",
|
||||
"installed": "Установлено: ${version}",
|
||||
"suggested": "Предложено: ${version}",
|
||||
"suggested": "Рекомендуемая: ${version}",
|
||||
"yesButton": "Да",
|
||||
"noButton": "Нет",
|
||||
"warning": "Внимание",
|
||||
@ -16,6 +16,8 @@
|
||||
"noShowAgain": "Не показывать снова",
|
||||
"add": "Добавить",
|
||||
"remove": "Удалить",
|
||||
"showChangelogButton": "Показать список изменений",
|
||||
"showUpdateButton": "Показать обновление",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Панель инструментов",
|
||||
"patcherTab": "Патчер",
|
||||
@ -26,14 +28,25 @@
|
||||
"widgetTitle": "Панель инструментов",
|
||||
"updatesSubtitle": "Обновления",
|
||||
"patchedSubtitle": "Пропатченные приложения",
|
||||
"changeLaterSubtitle": "Вы можете изменить это в настройках позже.",
|
||||
"noUpdates": "Нет доступных обновлений",
|
||||
"WIP": "В процессе...",
|
||||
"noInstallations": "Пропатченные приложения не установлены",
|
||||
"installUpdate": "Продолжить установку обновления?",
|
||||
"updateSheetTitle": "Обновить Revanced Менеджер",
|
||||
"updateDialogTitle": "Доступно обновление",
|
||||
"updatePatchesSheetTitle": "Обновить патчи ReVanced",
|
||||
"updateChangelogTitle": "Список изменений",
|
||||
"updateDialogText": "Доступно обновление для ${file}.\n\nТекущая установленная версия ${version}.",
|
||||
"downloadConsentDialogTitle": "Скачать необходимые файлы?",
|
||||
"downloadConsentDialogText": "Для правильной работы ReVanced Менеджера нужно загрузить необходимые файлы.",
|
||||
"downloadConsentDialogText2": "Это соединит вас с ${url}.",
|
||||
"checkUpdateDialogTitle": "Проверить наличие обновлений?",
|
||||
"checkUpdateDialogText": "Хотите, чтобы ReVanced Менеджер автоматически проверял наличие обновлений?",
|
||||
"notificationTitle": "Обновление загружено",
|
||||
"notificationText": "Нажмите, чтобы установить обновление",
|
||||
"downloadingMessage": "Загрузка обновления...",
|
||||
"downloadedMessage": "Обновление загружено",
|
||||
"installingMessage": "Установка обновления...",
|
||||
"errorDownloadMessage": "Не удалось загрузить обновление",
|
||||
"errorInstallMessage": "Не удалось установить обновление",
|
||||
@ -53,12 +66,18 @@
|
||||
"patcherView": {
|
||||
"widgetTitle": "Патчер",
|
||||
"patchButton": "Патч",
|
||||
"armv7WarningDialogText": "Патчинг на устройствах ARMv7 пока не поддерживается и может привести к сбоям. Все равно продолжить?",
|
||||
"removedPatchesWarningDialogText": "Следующие патчи были удалены с момента их последнего использования.\n\n ${patches}\n\n Все равно продолжить?",
|
||||
"requiredOptionDialogText": "Некоторые параметры патчей должны быть обязательно установлены."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Выбрать приложение",
|
||||
"widgetTitleSelected": "Выбранное приложение",
|
||||
"widgetSubtitle": "Приложение не выбрано",
|
||||
"noAppsLabel": "Приложения не найдены",
|
||||
"currentVersion": "Текущая",
|
||||
"suggestedVersion": "Предложенная"
|
||||
"suggestedVersion": "Предложенная",
|
||||
"anyVersion": "Любая версия"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Выбор патчей",
|
||||
@ -71,11 +90,15 @@
|
||||
"widgetSubtitle": "Мы онлайн!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Выбрать приложение",
|
||||
"searchBarHint": "Поиск приложения",
|
||||
"storageButton": "Хранилище",
|
||||
"selectFromStorageButton": "Выбрать из хранилища",
|
||||
"errorMessage": "Невозможно использовать выбранное приложение",
|
||||
"downloadToast": "Функция загрузки пока недоступна",
|
||||
"featureNotAvailable": "Функция не реализована"
|
||||
"requireSuggestedAppVersionDialogText": "Выбранная Вами версия приложения не соответствует предлагаемой, что может привести к непредвиденным проблемам. Пожалуйста, используйте предложенную версию.\n\n Выбранная версия: ${selected}\n Предлагаемая версия: ${suggested}.\n\nЧтобы продолжить, отключите в настройках параметр «Требовать рекомендуемую версию приложения».",
|
||||
"featureNotAvailable": "Функция не реализована",
|
||||
"featureNotAvailableText": "Это приложение представляет собой разделенный APK-файл, и его можно пропатчить и корректно установить только путем монтирования с правами root. Однако Вы можете пропатчить и установить полный APK-файл, выбрав его из хранилища."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Выбор патчей",
|
||||
@ -84,7 +107,9 @@
|
||||
"newPatches": "Новые патчи",
|
||||
"patches": "Патчи",
|
||||
"doneButton": "Готово",
|
||||
"defaultChip": "По умолчанию",
|
||||
"defaultTooltip": "Выбрать все стандартные патчи",
|
||||
"noneChip": "Никакие",
|
||||
"noneTooltip": "Снять выбор всех патчей",
|
||||
"loadPatchesSelection": "Загрузка выборки патчей",
|
||||
"noSavedPatches": "Нет сохраненной выборки патчей для выбранного приложения.\nНажмите \"Готово\" для сохранения текущего выбора.",
|
||||
@ -110,11 +135,13 @@
|
||||
"unsupportedDialogText": "Выбор этого патча может привести к ошибкам во время патчинга.\n\nВерсия приложения: ${packageVersion}\nПоддерживаемые версии:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Патч не поддерживается этой версией приложения.",
|
||||
"unsupportedRequiredOption": "Этот патч содержит обязательную опцию, не поддерживаемую этим приложением",
|
||||
"patchesChangeWarningDialogText": "Рекомендуется использовать выборку патчей и параметры по умолчанию. Их изменение может привести к неожиданным проблемам.\n\n Вам необходимо включить «Разрешить изменение выборки патчей» в настройках, прежде чем изменять какие-либо выборки патчей.",
|
||||
"patchesChangeWarningDialogButton": "Использовать стандартный набор"
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "Установщик",
|
||||
"installType": "Выберите тип установки",
|
||||
"installTypeDescription": "Выберите тип установки, чтобы продолжить.",
|
||||
"installButton": "Установить",
|
||||
"installRootType": "Монтировать",
|
||||
"installNonRootType": "Обычный",
|
||||
@ -137,6 +164,7 @@
|
||||
"debugSectionTitle": "Отладка",
|
||||
"advancedSectionTitle": "Дополнительные",
|
||||
"exportSectionTitle": "Импорт и экспорт",
|
||||
"dataSectionTitle": "Источники данных",
|
||||
"themeModeLabel": "Тема приложения",
|
||||
"systemThemeLabel": "Системная",
|
||||
"lightThemeLabel": "Светлая",
|
||||
@ -144,12 +172,19 @@
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Наслаждайтесь темой Вашего устройства",
|
||||
"languageLabel": "Язык",
|
||||
"languageUpdated": "Язык обновлен",
|
||||
"englishOption": "Английский",
|
||||
"sourcesLabel": "Альтернативные источники",
|
||||
"sourcesLabelHint": "Настройте альтернативные источники для патчей и интеграций ReVanced",
|
||||
"sourcesIntegrationsLabel": "Репозиторий интеграций",
|
||||
"useAlternativeSources": "Использовать альтернативные источники",
|
||||
"useAlternativeSourcesHint": "Использовать альтернативные источники для патчей и интеграций ReVanced вместо API",
|
||||
"sourcesResetDialogTitle": "Сброс",
|
||||
"sourcesResetDialogText": "Вы уверены, что хотите сбросить ваши источники до значений по умолчанию?",
|
||||
"apiURLResetDialogText": "Вы уверены, что хотите сбросить API-ссылку до значения по умолчанию?",
|
||||
"sourcesUpdateNote": "Примечание: при этом будут автоматически загружены патчи и интеграции ReVanced из альтернативных источников.\n\nЭто соединит вас с альтернативным источником.",
|
||||
"apiURLLabel": "API-ссылка",
|
||||
"apiURLHint": "Настройте URL-адрес API ReVanced Менеджера",
|
||||
"selectApiURL": "API-ссылка",
|
||||
"orgPatchesLabel": "Организация патчей",
|
||||
"sourcesPatchesLabel": "Репозиторий патчей",
|
||||
@ -164,6 +199,8 @@
|
||||
"disablePatchesSelectionWarningText": "Вы собираетесь выключить измененную выборку патчей.\nБудет восстановлен стандартный выбор патчей.\n\nВсе равно выключить?",
|
||||
"autoUpdatePatchesLabel": "Автообновление патчей",
|
||||
"autoUpdatePatchesHint": "Автоматически обновлять патчи до последней версии",
|
||||
"showUpdateDialogLabel": "Показать диалог обновления",
|
||||
"showUpdateDialogHint": "Показывать диалоговое окно, когда доступно новое обновление",
|
||||
"universalPatchesLabel": "Показать универсальные патчи",
|
||||
"universalPatchesHint": "Отобразить все приложения и универсальные патчи (может замедлить список отображения приложений)",
|
||||
"versionCompatibilityCheckLabel": "Проверка совместимости версий",
|
||||
|
@ -80,7 +80,7 @@
|
||||
"anyVersion": "Bilo koja verzija"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Izaberite pečeve",
|
||||
"widgetTitle": "Izaberi pečeve",
|
||||
"widgetTitleSelected": "Izabrani pečevi",
|
||||
"widgetSubtitle": "Prvo izaberite aplikaciju",
|
||||
"widgetEmptySubtitle": "Nema izabranih pečeva"
|
||||
@ -91,7 +91,7 @@
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Izaberite aplikaciju",
|
||||
"searchBarHint": "Tražite aplikaciju",
|
||||
"searchBarHint": "Pretražite aplikaciju",
|
||||
"storageButton": "Memorija",
|
||||
"selectFromStorageButton": "Izaberi iz memorije",
|
||||
"errorMessage": "Nije moguće koristiti izabranu aplikaciju",
|
||||
@ -231,7 +231,7 @@
|
||||
"resetStoredOptionsDialogTitle": "Resetovati opcije peča?",
|
||||
"resetStoredOptionsDialogText": "Resetovanjem opcija peča uklanjate sve sačuvane opcije.",
|
||||
"resetStoredOptions": "Opcije su resetovane",
|
||||
"deleteLogsLabel": "Obriši evidencije",
|
||||
"deleteLogsLabel": "Izbriši evidencije",
|
||||
"deleteLogsHint": "Izbrišite prikupljene evidencije ReVanced Managera",
|
||||
"deletedLogs": "Evidencije su izbrisane",
|
||||
"regenerateKeystoreLabel": "Generiši novo skladište ključeva",
|
||||
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Ova funkcija još uvek nije implementirana"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Saradnici",
|
||||
"patcherContributors": "ReVanced Patcher",
|
||||
"patchesContributors": "ReVanced pečevi",
|
||||
"integrationsContributors": "ReVanced integracije",
|
||||
"cliContributors": "ReVanced CLI",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Saradnici"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Verzija se ne poklapa",
|
||||
|
@ -80,7 +80,7 @@
|
||||
"anyVersion": "Било која верзија"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Изаберите печеве",
|
||||
"widgetTitle": "Изабери печеве",
|
||||
"widgetTitleSelected": "Изабрани печеви",
|
||||
"widgetSubtitle": "Прво изаберите апликацију",
|
||||
"widgetEmptySubtitle": "Нема изабраних печева"
|
||||
@ -91,7 +91,7 @@
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Изаберите апликацију",
|
||||
"searchBarHint": "Тражите апликацију",
|
||||
"searchBarHint": "Претражите апликацију",
|
||||
"storageButton": "Из меморије",
|
||||
"selectFromStorageButton": "Изабери из меморије",
|
||||
"errorMessage": "Није могуће користити изабрану апликацију",
|
||||
@ -231,7 +231,7 @@
|
||||
"resetStoredOptionsDialogTitle": "Ресетовати опције печа?",
|
||||
"resetStoredOptionsDialogText": "Ресетовањем опција печа уклањате све сачуване опције.",
|
||||
"resetStoredOptions": "Опције су ресетоване",
|
||||
"deleteLogsLabel": "Обриши евиденције",
|
||||
"deleteLogsLabel": "Избриши евиденције",
|
||||
"deleteLogsHint": "Избришите прикупљене евиденције ReVanced Manager-а",
|
||||
"deletedLogs": "Евиденције су избрисане",
|
||||
"regenerateKeystoreLabel": "Генериши ново складиште кључева",
|
||||
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Ова функција још увек није имплементирана"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Сарадници",
|
||||
"patcherContributors": "ReVanced Patcher",
|
||||
"patchesContributors": "ReVanced печеви",
|
||||
"integrationsContributors": "ReVanced интеграције",
|
||||
"cliContributors": "ReVanced CLI",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Сарадници"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Верзија се не поклапа",
|
||||
|
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Denna funktionen har inte lagts till ännu"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Bidragsgivare",
|
||||
"patcherContributors": "Revanced-patcher",
|
||||
"patchesContributors": "Revanced-patchar",
|
||||
"integrationsContributors": "ReVanced-integrationer",
|
||||
"cliContributors": "ReVanced-CLI",
|
||||
"managerContributors": "ReVanced-hanterare"
|
||||
"widgetTitle": "Bidragsgivare"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Versionerna stämmer inte överens",
|
||||
|
@ -35,7 +35,7 @@
|
||||
"installUpdate": "Güncelleme yüklensin mi?",
|
||||
"updateSheetTitle": "ReVanced Manager'ı güncelle",
|
||||
"updateDialogTitle": "Yeni güncelleme mevcut",
|
||||
"updatePatchesSheetTitle": "ReVanced Yamaları'nı güncelle",
|
||||
"updatePatchesSheetTitle": "ReVanced Patches'ı güncelle",
|
||||
"updateChangelogTitle": "Değişiklikler",
|
||||
"updateDialogText": "${file} için yeni bir güncelleme mevcut.\n\nŞu anda kurulu olan sürüm: ${version}.",
|
||||
"downloadConsentDialogTitle": "Gerekli dosyalar indirilsin mi?",
|
||||
@ -96,9 +96,9 @@
|
||||
"selectFromStorageButton": "Depolama alanından seçin",
|
||||
"errorMessage": "Seçilen uygulama 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",
|
||||
"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": {
|
||||
"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}",
|
||||
"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",
|
||||
"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"
|
||||
},
|
||||
"installerView": {
|
||||
@ -175,24 +175,24 @@
|
||||
"languageUpdated": "Dil güncellendi",
|
||||
"englishOption": "İngilizce",
|
||||
"sourcesLabel": "Alternatif kaynaklar",
|
||||
"sourcesLabelHint": "ReVanced Yamaları ve ReVanced Entegrasyonları için alternatif kaynakları yapılandırın",
|
||||
"sourcesIntegrationsLabel": "Integrations kaynağı",
|
||||
"sourcesLabelHint": "ReVanced Patches ve ReVanced Integrations için alternatif kaynakları ayarlayın",
|
||||
"sourcesIntegrationsLabel": "Integrations source",
|
||||
"useAlternativeSources": "Alternatif kaynakları kullan",
|
||||
"useAlternativeSourcesHint": "ReVanced Yamaları ve ReVanced Entegrasyonları için API yerine alternatif kaynakları kullan",
|
||||
"useAlternativeSourcesHint": "ReVanced Patches ve ReVanced Integrations için API yerine alternatif kaynakları kullanın",
|
||||
"sourcesResetDialogTitle": "Sıfırla",
|
||||
"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?",
|
||||
"sourcesUpdateNote": "Not: Bu, ReVanced Yamalarını ve ReVanced Entegrasyonlarını otomatik olarak alternatif kaynaklardan indirecek.\n\nBu sizi alternatif kaynağa bağlayacaktır.",
|
||||
"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",
|
||||
"apiURLHint": "ReVanced Manager'in API URL'sini yapılandırın",
|
||||
"apiURLHint": "ReVanced Manager'in API URL'sini ayarlayın",
|
||||
"selectApiURL": "API URL'si",
|
||||
"orgPatchesLabel": "Yama organizasyonu",
|
||||
"sourcesPatchesLabel": "Yama kaynağı",
|
||||
"orgIntegrationsLabel": "Integrations organizasyonu",
|
||||
"orgPatchesLabel": "Patches organization",
|
||||
"sourcesPatchesLabel": "Patches source",
|
||||
"orgIntegrationsLabel": "Integrations organization",
|
||||
"contributorsLabel": "Katkıda bulunanlar",
|
||||
"contributorsHint": "ReVanced'a katkıda bulunanların listesi",
|
||||
"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",
|
||||
"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?",
|
||||
@ -212,27 +212,27 @@
|
||||
"snackbarMessage": "Panoya kopyalandı",
|
||||
"restartAppForChanges": "Değişiklikleri uygulamak için uygulamayı yeniden başlatın",
|
||||
"deleteTempDirLabel": "Geçici dosyaları sil",
|
||||
"deleteTempDirHint": "Kullanılmayan geçici dosyaları sil",
|
||||
"deleteTempDirHint": "Kullanılmayan geçici dosyaları silin",
|
||||
"deletedTempDir": "Geçici dosyalar silindi",
|
||||
"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ı",
|
||||
"noExportFileFound": "Dışa aktarılabilecek yama seçimi yok",
|
||||
"importPatchesLabel": "Yama seçimini içe aktar",
|
||||
"importPatchesHint": "Yama seçimini bir JSON dosyasından içe aktarın",
|
||||
"importedPatches": "Yama seçimi içe aktarıldı",
|
||||
"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ı?",
|
||||
"resetStoredPatchesDialogText": "Varsayılan yama seçimi geri yüklenecektir.",
|
||||
"resetStoredPatches": "Yama seçimi sıfırlandı",
|
||||
"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ı?",
|
||||
"resetStoredOptionsDialogText": "Yama seçeneklerini sıfırlamak, kayıtlı tüm seçenekleri kaldıracaktır.",
|
||||
"resetStoredOptions": "Seçenekler sıfırlandı",
|
||||
"deleteLogsLabel": "Logları temizle",
|
||||
"deleteLogsHint": "Kayıtlı ReVanced Manager loglarını sil",
|
||||
"deleteLogsHint": "Kayıtlı ReVanced Manager loglarını silin",
|
||||
"deletedLogs": "Loglar silindi",
|
||||
"regenerateKeystoreLabel": "Keystore'u yeniden oluştur",
|
||||
"regenerateKeystoreHint": "Uygulamaları imzalamak için kullanılan keystore'u yeniden oluşturun",
|
||||
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Bu özellik henüz geliştirilmedi"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Katkıda bulunanlar",
|
||||
"patcherContributors": "ReVanced Patcher",
|
||||
"patchesContributors": "ReVanced Patches",
|
||||
"integrationsContributors": "ReVanced Integrations",
|
||||
"cliContributors": "ReVanced CLI",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Katkıda bulunanlar"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Sürüm uyuşmazlığı",
|
||||
|
@ -182,7 +182,7 @@
|
||||
"sourcesResetDialogTitle": "Скинути",
|
||||
"sourcesResetDialogText": "Ви дійсно бажаєте відновити стандартні значення джерел?",
|
||||
"apiURLResetDialogText": "Ви дійсно хочете скинути API URL на стандартне значення?",
|
||||
"sourcesUpdateNote": "Примітка: Це буде автоматично завантажувати ReVanced Patches та ReVanced Integrations з альтернативних джерел.\n\nЦе під'єднає вас до альтернативного джерела.",
|
||||
"sourcesUpdateNote": "Примітка. Це автоматично завантажить ReVanced Patches і ReVanced Integrations з альтернативних джерел.\n\nЦе під'єднає вас до альтернативного джерела.",
|
||||
"apiURLLabel": "URL-адреса API",
|
||||
"apiURLHint": "Налаштуйте API URL для ReVanced Manager",
|
||||
"selectApiURL": "URL-адреса API",
|
||||
@ -271,12 +271,7 @@
|
||||
"updateNotImplemented": "Ця можливість ще не реалізована"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Розробники",
|
||||
"patcherContributors": "ReVanced Patcher",
|
||||
"patchesContributors": "ReVanced Patches",
|
||||
"integrationsContributors": "ReVanced Integrations",
|
||||
"cliContributors": "ReVanced CLI",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Розробники"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Невідповідність версії",
|
||||
|
@ -164,6 +164,7 @@
|
||||
"debugSectionTitle": "Gỡ Lỗi",
|
||||
"advancedSectionTitle": "Nâng cao",
|
||||
"exportSectionTitle": "Nhập và xuất",
|
||||
"dataSectionTitle": "Nguồn dữ liệu",
|
||||
"themeModeLabel": "Chủ đề ứng dụng",
|
||||
"systemThemeLabel": "Hệ thống",
|
||||
"lightThemeLabel": "Sáng",
|
||||
@ -173,11 +174,17 @@
|
||||
"languageLabel": "Ngôn ngữ",
|
||||
"languageUpdated": "Ngôn ngữ đã cập nhập",
|
||||
"englishOption": "Tiếng Anh",
|
||||
"sourcesLabel": "Nguồn thay thế",
|
||||
"sourcesLabelHint": "Cấu hình nguồn thay thế cho Bản vá ReVanced và Tích hợp ReVanced",
|
||||
"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",
|
||||
"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?",
|
||||
"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",
|
||||
"apiURLHint": "Cấu hình địa chỉ URL API của ReVanced Manager",
|
||||
"selectApiURL": "Địa chỉ URL của API",
|
||||
"orgPatchesLabel": "Tác giả bản vá",
|
||||
"sourcesPatchesLabel": "Nguồn bản vá",
|
||||
@ -264,12 +271,7 @@
|
||||
"updateNotImplemented": "Tính năng này chưa được triển khai"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Những người đóng góp",
|
||||
"patcherContributors": "Trình vá ReVanced",
|
||||
"patchesContributors": "Bản vá ReVanced",
|
||||
"integrationsContributors": "Tích hợp ReVanced",
|
||||
"cliContributors": "Giao tiếp dòng lệnh (CLI) ReVanced",
|
||||
"managerContributors": "ReVanced Manager"
|
||||
"widgetTitle": "Những người đóng góp"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "Phiên bản không phù hợp",
|
||||
|
@ -1,8 +1,11 @@
|
||||
{
|
||||
"okButton": "确定",
|
||||
"cancelButton": "取消",
|
||||
"dismissButton": "忽略",
|
||||
"quitButton": "退出",
|
||||
"updateButton": "更新",
|
||||
"enabledLabel": "已启用",
|
||||
"disabledLabel": "已禁用",
|
||||
"installed": "已安装版本:${version}",
|
||||
"suggested": "建议的版本:${version}",
|
||||
"yesButton": "是",
|
||||
@ -14,6 +17,7 @@
|
||||
"add": "添加",
|
||||
"remove": "移除",
|
||||
"showChangelogButton": "显示更新日志",
|
||||
"showUpdateButton": "显示更新",
|
||||
"navigationView": {
|
||||
"dashboardTab": "控制面板",
|
||||
"patcherTab": "补丁程序",
|
||||
@ -25,15 +29,20 @@
|
||||
"updatesSubtitle": "更新",
|
||||
"patchedSubtitle": "已应用补丁的应用程序",
|
||||
"changeLaterSubtitle": "您可以稍后在设置中更改此设置。",
|
||||
"noUpdates": "暂无更新",
|
||||
"WIP": "正在执行操作…",
|
||||
"noInstallations": "没有安装已修补的应用",
|
||||
"installUpdate": "继续安装该更新?",
|
||||
"updateSheetTitle": "更新 ReVanced Manager",
|
||||
"updateDialogTitle": "有可用的更新",
|
||||
"updatePatchesSheetTitle": "更新 ReVanced 补丁",
|
||||
"updateChangelogTitle": "更新日志",
|
||||
"updateDialogText": "${file} 有新的更新可用。\n\n当前安装的版本是${version}。",
|
||||
"downloadConsentDialogTitle": "下载必要文件吗?",
|
||||
"downloadConsentDialogText": "ReVanced Manager 需要下载必要的文件才能正常工作。",
|
||||
"downloadConsentDialogText2": "这会将您连接到 ${url}。",
|
||||
"checkUpdateDialogTitle": "要检查更新吗?",
|
||||
"checkUpdateDialogText": "您想要ReVanced Manager自动检查更新吗?",
|
||||
"notificationTitle": "更新下载完成!",
|
||||
"notificationText": "点击安装更新",
|
||||
"downloadingMessage": "正在下载更新…",
|
||||
@ -49,11 +58,17 @@
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "正在加载…",
|
||||
"timeagoLabel": "${time}前"
|
||||
"timeagoLabel": "${time}前",
|
||||
"patcherLabel": "补丁程序: ",
|
||||
"managerLabel": "管理器: ",
|
||||
"updateButton": "更新管理器"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "修补器",
|
||||
"patchButton": "修补"
|
||||
"patchButton": "修补",
|
||||
"armv7WarningDialogText": "尚不支持在 ARMv7 设备上进行修补并且可能会失败。仍要继续吗?",
|
||||
"removedPatchesWarningDialogText": "自您上次使用以下补丁以来,它们已被删除。\n\n${patches}\n\n还是继续吗?",
|
||||
"requiredOptionDialogText": "某些补丁选项必须设置。"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "选择一个应用",
|
||||
@ -61,7 +76,8 @@
|
||||
"widgetSubtitle": "未选择任何应用",
|
||||
"noAppsLabel": "未发现应用程序",
|
||||
"currentVersion": "当前",
|
||||
"suggestedVersion": "建议"
|
||||
"suggestedVersion": "建议",
|
||||
"anyVersion": "所有版本"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "选择补丁",
|
||||
@ -81,7 +97,8 @@
|
||||
"errorMessage": "无法使用所选应用程序。",
|
||||
"downloadToast": "下载功能尚不可用",
|
||||
"requireSuggestedAppVersionDialogText": "你所选择的应用版本与推荐的版本不一致,这可能会导致不可预料的问题。请使用推荐的版本。\n\n选择的版本:${selected}\n推荐的版本:${suggested}",
|
||||
"featureNotAvailable": "功能未实现"
|
||||
"featureNotAvailable": "功能未实现",
|
||||
"featureNotAvailableText": "此应用程序是一个拆分的 APK,只能通过安装root 权限来修补和可靠安装。 然而,您可以通过从存储中选择一个完整的 APK来修补和安装。"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "选择补丁",
|
||||
@ -90,10 +107,14 @@
|
||||
"newPatches": "新补丁",
|
||||
"patches": "补丁",
|
||||
"doneButton": "完成",
|
||||
"defaultChip": "默认",
|
||||
"defaultTooltip": "选择所有默认补丁",
|
||||
"noneChip": "无",
|
||||
"noneTooltip": "取消选择所有补丁",
|
||||
"loadPatchesSelection": "加载补丁选项",
|
||||
"noPatchesFound": "未找到适用于所选应用程序的补丁"
|
||||
"noSavedPatches": "所选应用没有保存补丁选择。\n按完成保存当前选择。",
|
||||
"noPatchesFound": "未找到适用于所选应用程序的补丁",
|
||||
"setRequiredOption": "某些补丁需要设置选项:\n\n${patches}\n\n请设置后再继续。"
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "自定义值",
|
||||
@ -105,22 +126,34 @@
|
||||
"tooltip": "更多输入选项",
|
||||
"selectFilePath": "选择文件路径",
|
||||
"selectFolder": "选择文件夹",
|
||||
"unsupportedOption": "不支持此选项"
|
||||
"selectOption": "选择选项",
|
||||
"requiredOption": "必须填写此选项",
|
||||
"unsupportedOption": "不支持此选项",
|
||||
"requiredOptionNull": "必须设置以下选项:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "选择此补丁可能导致修补错误。\n\n应用版本: ${packageVersion}\n当前支持的版本:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "此应用版本不支持补丁。",
|
||||
"unsupportedRequiredOption": "此补丁包含不支持此应用程序的必填选项",
|
||||
"patchesChangeWarningDialogText": "建议使用默认补丁选择和选项。更改它们可能会导致意外问题。\n\n您需要在更改任何补丁选择之前在设置中打开\"允许更改补丁选择\"。",
|
||||
"patchesChangeWarningDialogButton": "使用默认选择"
|
||||
},
|
||||
"installerView": {
|
||||
"widgetTitle": "安装器",
|
||||
"installType": "选择安装类型",
|
||||
"installTypeDescription": "选择要继续的安装类型。",
|
||||
"installButton": "安装",
|
||||
"installRootType": "挂载",
|
||||
"installNonRootType": "常规",
|
||||
"warning": "禁用补丁应用的自动更新,以避免意外问题。",
|
||||
"pressBackAgain": "再次按返回键取消",
|
||||
"openButton": "打开",
|
||||
"shareButton": "分享文件",
|
||||
"notificationTitle": "ReVanced Manager 正在应用补丁",
|
||||
"notificationText": "点击返回到安装器",
|
||||
"exportApkButtonTooltip": "导出已修补的 APK",
|
||||
"exportLogButtonTooltip": "导出日志",
|
||||
"screenshotDetected": "已检测到截图。如果您要共享日志,请共享文本副本。\n\n将日志复制到剪贴板?",
|
||||
"copiedToClipboard": "复制日志至剪贴板",
|
||||
"noExit": "安装程序仍在运行,无法退出..."
|
||||
},
|
||||
@ -131,15 +164,27 @@
|
||||
"debugSectionTitle": "调试",
|
||||
"advancedSectionTitle": "高级",
|
||||
"exportSectionTitle": "导入与导出",
|
||||
"dataSectionTitle": "数据来源",
|
||||
"themeModeLabel": "应用主题",
|
||||
"systemThemeLabel": "系统",
|
||||
"lightThemeLabel": "亮色主题",
|
||||
"darkThemeLabel": "深色模式",
|
||||
"dynamicThemeLabel": "Material You 风格",
|
||||
"dynamicThemeHint": "享受更贴近你的设备的体验",
|
||||
"languageLabel": "语言",
|
||||
"languageUpdated": "语言已更新",
|
||||
"englishOption": "英语",
|
||||
"sourcesLabel": "其他来源",
|
||||
"sourcesLabelHint": "配置 ReVanced 补丁和 ReVanced 集成的替代源",
|
||||
"sourcesIntegrationsLabel": "集成源",
|
||||
"useAlternativeSources": "使用其他来源",
|
||||
"useAlternativeSourcesHint": "使用 ReVanced 补丁和 ReVanced 集成的替代来源而不是 API",
|
||||
"sourcesResetDialogTitle": "重置",
|
||||
"sourcesResetDialogText": "您确定要将源重置为默认值吗?",
|
||||
"apiURLResetDialogText": "您确定要重置你的 API URL 为默认值吗?",
|
||||
"sourcesUpdateNote": "注意:这将自动从其他来源下载 ReVanced 补丁和 ReVanced 集成。\n\n这将连接到替代源。",
|
||||
"apiURLLabel": "API 地址",
|
||||
"apiURLHint": "配置 ReVanced Manager 的 API URL",
|
||||
"selectApiURL": "API 地址",
|
||||
"orgPatchesLabel": "补丁组织",
|
||||
"sourcesPatchesLabel": "补丁来源",
|
||||
@ -147,35 +192,78 @@
|
||||
"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": "密钥库已导入\n\n",
|
||||
"jsonSelectorErrorMessage": "无法使用所选的 json 文件"
|
||||
"selectKeystorePassword": "密钥存储密码",
|
||||
"selectKeystorePasswordHint": "选择用于签署应用程序的密钥库密码",
|
||||
"jsonSelectorErrorMessage": "无法使用所选的 json 文件",
|
||||
"keystoreSelectorErrorMessage": "无法使用选定的密钥存储文件"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "应用信息",
|
||||
"openButton": "打开",
|
||||
"uninstallButton": "卸载",
|
||||
"unmountButton": "卸载",
|
||||
"rootDialogTitle": "错误",
|
||||
"unmountDialogText": "您确定要卸载此应用程序吗?",
|
||||
"uninstallDialogText": "您确定要卸载此应用程序吗?",
|
||||
"rootDialogText": "应用程序曾以超级用户权限安装,但是 ReVanced 管理器目前没有权限。\n请先授予超级用户权限。",
|
||||
"packageNameLabel": "包名",
|
||||
"installTypeLabel": "安装类型",
|
||||
"mountTypeLabel": "安装",
|
||||
"regularTypeLabel": "常规",
|
||||
"patchedDateLabel": "修补日期",
|
||||
"appliedPatchesLabel": "应用的补丁",
|
||||
"patchedDateHint": "${date} 于 ${time}",
|
||||
@ -185,5 +273,30 @@
|
||||
"contributorsView": {
|
||||
"widgetTitle": "贡献者"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "版本不兼容",
|
||||
"mount_no_root": "无超级用户权限",
|
||||
"mount_missing_installation": "未找到安装",
|
||||
"status_failure_blocked": "安装已被阻止",
|
||||
"install_failed_verification_failure": "校验失败",
|
||||
"status_failure_invalid": "安装失败",
|
||||
"install_failed_version_downgrade": "无法降级",
|
||||
"status_failure_conflict": "安装冲突",
|
||||
"status_failure_storage": "安装存储错误",
|
||||
"status_failure_incompatible": "安装不兼容",
|
||||
"status_failure_timeout": "安装超时",
|
||||
"status_unknown": "安装失败",
|
||||
"mount_version_mismatch_description": "安装失败,因为已安装的应用不同于已修补的应用。\n\n安装您正在挂载的应用程序版本,然后重试。",
|
||||
"mount_no_root_description": "由于未授予 root 访问权限,安装失败。\n\n授予 ReVanced Manager root 访问权限,然后重试。",
|
||||
"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": "由于未知原因,安装失败。请重试。"
|
||||
}
|
||||
}
|
@ -178,9 +178,11 @@
|
||||
"sourcesLabelHint": "設定 ReVanced 補丁和 ReVanced 整合的替代來源",
|
||||
"sourcesIntegrationsLabel": "整合來源",
|
||||
"useAlternativeSources": "使用替代來源",
|
||||
"useAlternativeSourcesHint": "改用 ReVanced 修補檔和 ReVanced 整合的替代來源,而不是 API",
|
||||
"sourcesResetDialogTitle": "重設",
|
||||
"sourcesResetDialogText": "確定要將來源資訊重設為預設值嗎?",
|
||||
"apiURLResetDialogText": "確定要重設 API URL 至預設值嗎?",
|
||||
"sourcesUpdateNote": "注意:這將會自動從替代來源下載 ReVanced 修補檔和 ReVanced 整合。\n\n這將連接您到替代來源。",
|
||||
"apiURLLabel": "API 鏈接",
|
||||
"apiURLHint": "設定 ReVanced 管理器的 API URL",
|
||||
"selectApiURL": "API 鏈接",
|
||||
@ -269,11 +271,7 @@
|
||||
"updateNotImplemented": "這項功能尚未實作"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "貢獻者",
|
||||
"patchesContributors": "ReVanced 補丁",
|
||||
"integrationsContributors": "ReVanced 整合",
|
||||
"cliContributors": "ReVanced 命令行介面",
|
||||
"managerContributors": "ReVanced 管理器"
|
||||
"widgetTitle": "貢獻者"
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "版本不相符",
|
||||
|
@ -1 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 800 800" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g id="Logo"><g id="Ring"><circle id="Ring-Background" serif:id="Ring Background" cx="400" cy="400" r="400" style="fill:#1b1b1b;"/><path id="Ring1" serif:id="Ring" d="M400,0c220.766,0 400,179.234 400,400c-0,220.766 -179.234,400 -400,400c-220.766,-0 -400,-179.234 -400,-400c0,-220.766 179.234,-400 400,-400Zm-0,36c200.897,-0 364,163.103 364,364c0,200.897 -163.103,364 -364,364c-200.897,0 -364,-163.103 -364,-364c-0,-200.897 163.103,-364 364,-364Z" style="fill:url(#_Linear1);"/></g><g id="Shape"><path id="V-Shape" serif:id="V Shape" d="M538.74,269.872c1.481,-3.382 1.157,-7.283 -0.863,-10.373c-2.021,-3.091 -5.464,-4.954 -9.156,-4.954c-5.148,0 -10.435,0 -14.165,0c-3.1,0 -5.907,1.834 -7.153,4.672c-12.468,28.396 -78.273,178.273 -100.25,228.328c-1.246,2.838 -4.053,4.671 -7.154,4.671c-3.1,0 -5.907,-1.833 -7.153,-4.671c-21.977,-50.055 -87.782,-199.932 -100.25,-228.328c-1.246,-2.838 -4.053,-4.672 -7.153,-4.672c-3.73,0 -9.017,0 -14.164,0c-3.693,0 -7.135,1.863 -9.156,4.954c-2.02,3.09 -2.344,6.991 -0.863,10.373c23.557,53.766 101.872,232.519 117.871,269.034c1.743,3.979 5.674,6.549 10.018,6.549c6.293,-0 15.408,-0 21.701,-0c4.344,-0 8.275,-2.57 10.018,-6.549c15.999,-36.515 94.315,-215.268 117.872,-269.034Z" style="fill:#fff;"/><path id="Diamond" d="M408.119,395.312c-1.675,2.901 -4.77,4.688 -8.119,4.688c-3.349,-0 -6.444,-1.787 -8.119,-4.688c-16.997,-29.44 -56.156,-97.264 -73.153,-126.704c-1.675,-2.901 -1.675,-6.474 0,-9.375c1.675,-2.901 4.77,-4.688 8.119,-4.688c33.995,0 112.311,0 146.306,0c3.349,0 6.444,1.787 8.119,4.688c1.675,2.901 1.675,6.474 -0,9.375c-16.997,29.44 -56.156,97.264 -73.153,126.704Z" style="fill:url(#_Linear2);"/></g></g><defs><linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4.89859e-14,800,-800,4.89859e-14,400.001,3.31681e-10)"><stop offset="0" style="stop-color:#f04e98;stop-opacity:1"/><stop offset="0.5" style="stop-color:#5f65d4;stop-opacity:1"/><stop offset="1" style="stop-color:#4e98f0;stop-opacity:1"/></linearGradient><linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.77155e-14,289.317,-282.535,1.73003e-14,400,254.545)"><stop offset="0" style="stop-color:#f04e98;stop-opacity:1"/><stop offset="0.5" style="stop-color:#5f65d4;stop-opacity:1"/><stop offset="1" style="stop-color:#4e98f0;stop-opacity:1"/></linearGradient></defs></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 800 800" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><g id="Logo"><g id="Ring"><circle id="Ring-Background" serif:id="Ring Background" cx="400" cy="400" r="400" style="fill:#1b1b1b;"/><path id="Ring1" serif:id="Ring" d="M400,0c220.766,0 400,179.234 400,400c-0,220.766 -179.234,400 -400,400c-220.766,-0 -400,-179.234 -400,-400c0,-220.766 179.234,-400 400,-400Zm-0,36c200.897,-0 364,163.103 364,364c0,200.897 -163.103,364 -364,364c-200.897,0 -364,-163.103 -364,-364c-0,-200.897 163.103,-364 364,-364Z" style="fill:url(#_Linear1);"/></g><g id="Shape"><path id="V-Shape" serif:id="V Shape" d="M538.74,269.872c1.481,-3.382 1.157,-7.283 -0.863,-10.373c-2.021,-3.091 -5.464,-4.954 -9.156,-4.954c-5.148,0 -10.435,0 -14.165,0c-3.1,0 -5.907,1.834 -7.153,4.672c-12.468,28.396 -78.273,178.273 -100.25,228.328c-1.246,2.838 -4.053,4.671 -7.154,4.671c-3.1,0 -5.907,-1.833 -7.153,-4.671c-21.977,-50.055 -87.782,-199.932 -100.25,-228.328c-1.246,-2.838 -4.053,-4.672 -7.153,-4.672c-3.73,0 -9.017,0 -14.164,0c-3.693,0 -7.135,1.863 -9.156,4.954c-2.02,3.09 -2.344,6.991 -0.863,10.373c23.557,53.766 101.872,232.519 117.871,269.034c1.743,3.979 5.674,6.549 10.018,6.549c6.293,-0 15.408,-0 21.701,-0c4.344,-0 8.275,-2.57 10.018,-6.549c15.999,-36.515 94.315,-215.268 117.872,-269.034Z" style="fill:#fff;"/><path id="Diamond" d="M408.119,395.312c-1.675,2.901 -4.77,4.688 -8.119,4.688c-3.349,-0 -6.444,-1.787 -8.119,-4.688c-16.997,-29.44 -56.156,-97.264 -73.153,-126.704c-1.675,-2.901 -1.675,-6.474 0,-9.375c1.675,-2.901 4.77,-4.688 8.119,-4.688c33.995,0 112.311,0 146.306,0c3.349,0 6.444,1.787 8.119,4.688c1.675,2.901 1.675,6.474 -0,9.375c-16.997,29.44 -56.156,97.264 -73.153,126.704Z" style="fill:url(#_Linear2);"/></g></g><defs><linearGradient id="_Linear1" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(4.89859e-14,800,-800,4.89859e-14,400.001,3.31681e-10)"><stop offset="0" style="stop-color:#f04e98;stop-opacity:1"/><stop offset="0.5" style="stop-color:#5f65d4;stop-opacity:1"/><stop offset="1" style="stop-color:#4e98f0;stop-opacity:1"/></linearGradient><linearGradient id="_Linear2" x1="0" y1="0" x2="1" y2="0" gradientUnits="userSpaceOnUse" gradientTransform="matrix(1.77155e-14,289.317,-282.535,1.73003e-14,400,254.545)"><stop offset="0" style="stop-color:#f04e98;stop-opacity:1"/><stop offset="0.5" style="stop-color:#5f65d4;stop-opacity:1"/><stop offset="1" style="stop-color:#4e98f0;stop-opacity:1"/></linearGradient></defs></svg>
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
@ -1,7 +1,7 @@
|
||||
project_id_env: "CROWDIN_PROJECT_ID"
|
||||
api_token_env: "CROWDIN_PERSONAL_TOKEN"
|
||||
|
||||
preserve_hierarchy: true
|
||||
preserve_hierarchy: false
|
||||
files:
|
||||
- source: /assets/i18n/strings.i18n.json
|
||||
translation: /assets/i18n/strings_%locale_with_underscore%.i18n.json
|
||||
|
@ -1,16 +1,16 @@
|
||||
# 💼 Prerequisites
|
||||
|
||||
In order to use ReVanced Manager, certain requirements must be met.
|
||||
To use ReVanced Manager, you need to fulfill certain requirements.
|
||||
|
||||
## 🤝 Requirements
|
||||
|
||||
- An Android device running Android 8 or higher
|
||||
- Any device architecture except ARMv7[^1]
|
||||
|
||||
[^1]: This constraint only applies to patches, that require patching APK resources which is why some patches may or may not work on ARMv7 architecture. You can find out, which architectures your device supports here: [⚙️ Configuring ReVanced Manager](2_4_settings.md#%E2%84%B9%EF%B8%8F-about).
|
||||
[^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
|
||||
|
||||
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)
|
||||
|
@ -1,14 +1,14 @@
|
||||
# ⬇️ 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
|
||||
|
||||
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
|
||||
|
||||
## ⏭️ 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)
|
||||
|
@ -1,6 +1,6 @@
|
||||
# 🧩 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
|
||||
|
||||
@ -8,13 +8,13 @@ The following pages will guide you through using ReVanced Manager to patch apps.
|
||||
2. Tap on the **Select an app** card
|
||||
3. Choose an app to patch[^1]
|
||||
|
||||
> 💡 Tip
|
||||
> If you are prompted to select an APK file from storage because the selected app is a split APK, tap on the "Suggested version" label to open a search query to obtain said APK file
|
||||
|
||||
> ℹ️ Note
|
||||
> The suggested version is visible on each app's card.
|
||||
> You can tap on it to open a search query to obtain an APK file for the selected app with the suggested version
|
||||
|
||||
> 💡 Tip
|
||||
> If you are prompted to select an APK file from storage because the selected app is a split APK, tap on the "Suggested version" label to open a search query to obtain said APK file
|
||||
|
||||
4. Tap on the **Select patches** card and select the patches you want to apply[^2].
|
||||
|
||||
> ℹ️ Note
|
||||
@ -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
|
||||
|
||||
> ⚠️ Warning
|
||||
> ⚠️ Warning
|
||||
> 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
|
||||
|
||||
> ℹ️ Note
|
||||
> ℹ️ Note
|
||||
> If you are rooted, you can mount the patched app on top of the original app.[^3]
|
||||
> Optionally, you may export the patched app to storage using the 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
|
||||
|
||||
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)
|
||||
|
@ -1,15 +1,15 @@
|
||||
# 🧰 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
|
||||
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
|
||||
|
||||
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)
|
||||
|
@ -1,6 +1,6 @@
|
||||
# 🔄 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
|
||||
|
||||
@ -9,6 +9,6 @@ In order to keep up with the latest features and bug fixes, it is recommended to
|
||||
|
||||
## ⏭️ 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)
|
||||
|
@ -1,52 +1,65 @@
|
||||
# ⚙️ Configuring ReVanced Manager
|
||||
|
||||
ReVanced Manager has settings that can be configured to your liking.
|
||||
Learn how to configure ReVanced Manager.
|
||||
|
||||
## 🎛️ Essential settings
|
||||
|
||||
- ### 🪛 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]
|
||||
> Disabling this may cause issues if the patches are not compatible with the app version.
|
||||
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.
|
||||
|
||||
> ⚠️ 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
|
||||
|
||||
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]
|
||||
> These patches may not work on all apps.
|
||||
|
||||
- ### 🧬 Sources
|
||||
|
||||
Override the API and download patches from a different source.
|
||||
> ⚠️ Warning
|
||||
> 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.
|
||||
|
||||
- ### 🔗 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
|
||||
- 📄 Patch selection
|
||||
- ⚙️ Patch options
|
||||
> ℹ️ Note
|
||||
> ReVanced Manager will still use the API for updates.
|
||||
|
||||
> [!NOTE]
|
||||
> This is particularly useful if you want to backup or reset your settings.
|
||||
- ### 💾 Import, export and reset options
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
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)
|
||||
|
@ -1,6 +1,6 @@
|
||||
# 🛠️ 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
|
||||
|
||||
@ -11,6 +11,6 @@ The following pages will guide you through using ReVanced Manager to patch apps,
|
||||
|
||||
## ⏭️ 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)
|
||||
|
@ -1,26 +1,27 @@
|
||||
# ❔ 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
|
||||
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
- 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.
|
||||
|
||||
- 🚨 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
|
||||
|
||||
|
@ -1,37 +1,41 @@
|
||||
# 🛠️ 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
|
||||
git clone https://github.com/revanced/revanced-manager.git && cd revanced-manager
|
||||
```
|
||||
3\. Get dependencies
|
||||
|
||||
3. Get dependencies
|
||||
|
||||
```sh
|
||||
flutter pub get
|
||||
```
|
||||
|
||||
4\. Generate translation file
|
||||
4. Generate temporary files
|
||||
|
||||
```sh
|
||||
dart run slang
|
||||
dart run build_runner build -d
|
||||
```
|
||||
|
||||
5\. Delete conflicting outputs
|
||||
|
||||
> [!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
|
||||
5. Build the APK
|
||||
|
||||
```sh
|
||||
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
|
||||
> ```
|
||||
|
@ -85,6 +85,9 @@ class GithubAPI {
|
||||
updates++;
|
||||
}
|
||||
for (int i = 1; i < updates; i++) {
|
||||
if (response.data[i]['prerelease']) {
|
||||
continue;
|
||||
}
|
||||
releases.update(
|
||||
'body',
|
||||
(value) =>
|
||||
|
@ -669,7 +669,7 @@ class ManagerAPI {
|
||||
);
|
||||
}
|
||||
|
||||
Future<void> rePatchedSavedApps() async {
|
||||
Future<void> reAssessPatchedApps() async {
|
||||
final List<PatchedApplication> patchedApps = getPatchedApps();
|
||||
|
||||
// Remove apps that are not installed anymore.
|
||||
|
@ -171,26 +171,26 @@ class PatcherAPI {
|
||||
if (integrationsFile != null) {
|
||||
_dataDir.createSync();
|
||||
_tmpDir.createSync();
|
||||
final Directory workDir = _tmpDir.createTempSync('tmp-');
|
||||
final File inputFile = File('${workDir.path}/base.apk');
|
||||
final File patchedFile = File('${workDir.path}/patched.apk');
|
||||
final Directory workDir = await _tmpDir.createTemp('tmp-');
|
||||
|
||||
final File inApkFile = File('${workDir.path}/in.apk');
|
||||
await File(apkFilePath).copy(inApkFile.path);
|
||||
|
||||
outFile = File('${workDir.path}/out.apk');
|
||||
final Directory cacheDir = Directory('${workDir.path}/cache');
|
||||
cacheDir.createSync();
|
||||
final String originalFilePath = apkFilePath;
|
||||
|
||||
final Directory tmpDir =
|
||||
Directory('${workDir.path}/revanced-temporary-files');
|
||||
|
||||
try {
|
||||
await patcherChannel.invokeMethod(
|
||||
'runPatcher',
|
||||
{
|
||||
'originalFilePath': originalFilePath,
|
||||
'inputFilePath': inputFile.path,
|
||||
'patchedFilePath': patchedFile.path,
|
||||
'inFilePath': inApkFile.path,
|
||||
'outFilePath': outFile!.path,
|
||||
'integrationsPath': integrationsFile.path,
|
||||
'selectedPatches': selectedPatches.map((p) => p.name).toList(),
|
||||
'options': options,
|
||||
'cacheDirPath': cacheDir.path,
|
||||
'tmpDirPath': tmpDir.path,
|
||||
'keyStoreFilePath': _keyStoreFile.path,
|
||||
'keystorePassword': _managerAPI.getKeystorePassword(),
|
||||
},
|
||||
@ -300,6 +300,18 @@ class PatcherAPI {
|
||||
);
|
||||
bool cleanInstall = false;
|
||||
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(
|
||||
context: _managerAPI.ctx!,
|
||||
builder: (context) => AlertDialog(
|
||||
@ -309,15 +321,7 @@ class PatcherAPI {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
Text(
|
||||
t['installErrorDialog.${statusValue}_description'](
|
||||
packageName: statusCode == 2
|
||||
? {
|
||||
'packageName': status['otherPackageName'],
|
||||
}
|
||||
: null,
|
||||
),
|
||||
),
|
||||
Text(description),
|
||||
],
|
||||
),
|
||||
actions: (status == null)
|
||||
@ -462,7 +466,6 @@ enum InstallStatus {
|
||||
mountNoRoot(1),
|
||||
mountVersionMismatch(1.1),
|
||||
mountMissingInstallation(1.2),
|
||||
|
||||
statusFailureBlocked(2),
|
||||
installFailedVerificationFailure(3.1),
|
||||
statusFailureInvalid(4),
|
||||
@ -473,6 +476,7 @@ enum InstallStatus {
|
||||
statusFailureTimeout(8);
|
||||
|
||||
const InstallStatus(this.statusCode);
|
||||
|
||||
final double statusCode;
|
||||
|
||||
static String byCode(num code) {
|
||||
|
@ -2,13 +2,10 @@ import 'dart:ui';
|
||||
import 'package:dynamic_color/dynamic_color.dart';
|
||||
import 'package:dynamic_themes/dynamic_themes.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_localizations/flutter_localizations.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/gen/strings.g.dart';
|
||||
import 'package:revanced_manager/services/manager_api.dart';
|
||||
import 'package:revanced_manager/theme.dart';
|
||||
import 'package:stacked_services/stacked_services.dart';
|
||||
|
||||
|
@ -78,7 +78,7 @@ class _AppSelectorViewState extends State<AppSelectorView> {
|
||||
),
|
||||
),
|
||||
)
|
||||
: model.allApps.isEmpty
|
||||
: model.allApps.isEmpty && model.apps.isEmpty
|
||||
? const AppSkeletonLoader()
|
||||
: Padding(
|
||||
padding: const EdgeInsets.symmetric(horizontal: 12.0)
|
||||
|
@ -54,7 +54,7 @@ class AppSelectorViewModel extends BaseViewModel {
|
||||
.toSet()
|
||||
.where((name) => !apps.any((app) => app.packageName == name))
|
||||
.toList();
|
||||
noApps = allApps.isEmpty;
|
||||
noApps = allApps.isEmpty && apps.isEmpty;
|
||||
return allApps;
|
||||
}
|
||||
|
||||
@ -258,7 +258,7 @@ class AppSelectorViewModel extends BaseViewModel {
|
||||
try {
|
||||
final String? result = await FlutterFileDialog.pickFile(
|
||||
params: const OpenFileDialogParams(
|
||||
fileExtensionsFilter: ['apk'],
|
||||
mimeTypesFilter: ['application/vnd.android.package-archive'],
|
||||
),
|
||||
);
|
||||
if (result != null) {
|
||||
|
@ -31,27 +31,27 @@ class ContributorsView extends StatelessWidget {
|
||||
delegate: SliverChildListDelegate.fixed(
|
||||
<Widget>[
|
||||
ContributorsCard(
|
||||
title: t.contributorsView.patcherContributors,
|
||||
title: 'ReVanced Patcher',
|
||||
contributors: model.patcherContributors,
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
ContributorsCard(
|
||||
title: t.contributorsView.patchesContributors,
|
||||
title: 'ReVanced Patches',
|
||||
contributors: model.patchesContributors,
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
ContributorsCard(
|
||||
title: t.contributorsView.integrationsContributors,
|
||||
title: 'ReVanced Integrations',
|
||||
contributors: model.integrationsContributors,
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
ContributorsCard(
|
||||
title: t.contributorsView.cliContributors,
|
||||
title: 'ReVanced CLI',
|
||||
contributors: model.cliContributors,
|
||||
),
|
||||
const SizedBox(height: 20),
|
||||
ContributorsCard(
|
||||
title: t.contributorsView.managerContributors,
|
||||
title: 'ReVanced Manager',
|
||||
contributors: model.managerContributors,
|
||||
),
|
||||
SizedBox(height: MediaQuery.viewPaddingOf(context).bottom),
|
||||
|
@ -43,7 +43,7 @@ class HomeViewModel extends BaseViewModel {
|
||||
File? downloadedApk;
|
||||
|
||||
Future<void> initialize(BuildContext context) async {
|
||||
_managerAPI.rePatchedSavedApps().then((_) => _getPatchedApps());
|
||||
_managerAPI.reAssessPatchedApps().then((_) => getPatchedApps());
|
||||
_currentManagerVersion = await _managerAPI.getCurrentManagerVersion();
|
||||
if (!_managerAPI.getDownloadConsent()) {
|
||||
await showDownloadConsent(context);
|
||||
@ -122,7 +122,7 @@ class HomeViewModel extends BaseViewModel {
|
||||
locator<NavigationViewModel>().setIndex(1);
|
||||
}
|
||||
|
||||
void _getPatchedApps() {
|
||||
void getPatchedApps() {
|
||||
patchedInstalledApps = _managerAPI.getPatchedApps().toList();
|
||||
notifyListeners();
|
||||
}
|
||||
@ -463,6 +463,7 @@ class HomeViewModel extends BaseViewModel {
|
||||
]) {
|
||||
return showModalBottomSheet(
|
||||
context: parentContext,
|
||||
useSafeArea: true,
|
||||
isScrollControlled: true,
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.vertical(top: Radius.circular(24.0)),
|
||||
|
@ -75,43 +75,64 @@ class InstallerView extends StatelessWidget {
|
||||
),
|
||||
),
|
||||
),
|
||||
body: CustomScrollView(
|
||||
controller: model.scrollController,
|
||||
slivers: <Widget>[
|
||||
CustomSliverAppBar(
|
||||
title: Text(
|
||||
model.headerLogs,
|
||||
style: GoogleFonts.inter(
|
||||
color: Theme.of(context).textTheme.titleLarge!.color,
|
||||
),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
onBackButtonPressed: () => Navigator.maybePop(context),
|
||||
bottom: PreferredSize(
|
||||
preferredSize: const Size(double.infinity, 1.0),
|
||||
child: GradientProgressIndicator(progress: model.progress),
|
||||
),
|
||||
),
|
||||
SliverPadding(
|
||||
padding: const EdgeInsets.all(20.0),
|
||||
sliver: SliverList(
|
||||
delegate: SliverChildListDelegate.fixed(
|
||||
<Widget>[
|
||||
CustomCard(
|
||||
child: Text(
|
||||
model.logs,
|
||||
style: GoogleFonts.jetBrainsMono(
|
||||
fontSize: 13,
|
||||
height: 1.5,
|
||||
),
|
||||
body: NotificationListener<ScrollNotification>(
|
||||
onNotification: model.handleAutoScrollNotification,
|
||||
child: Stack(
|
||||
children: [
|
||||
CustomScrollView(
|
||||
key: model.logCustomScrollKey,
|
||||
controller: model.scrollController,
|
||||
slivers: <Widget>[
|
||||
CustomSliverAppBar(
|
||||
title: Text(
|
||||
model.headerLogs,
|
||||
style: GoogleFonts.inter(
|
||||
color:
|
||||
Theme.of(context).textTheme.titleLarge!.color,
|
||||
),
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
),
|
||||
onBackButtonPressed: () => Navigator.maybePop(context),
|
||||
bottom: PreferredSize(
|
||||
preferredSize: const Size(double.infinity, 1.0),
|
||||
child: GradientProgressIndicator(
|
||||
progress: model.progress,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SliverPadding(
|
||||
padding: const EdgeInsets.all(20.0),
|
||||
sliver: SliverList(
|
||||
delegate: SliverChildListDelegate.fixed(
|
||||
<Widget>[
|
||||
CustomCard(
|
||||
child: Text(
|
||||
model.logs,
|
||||
style: GoogleFonts.jetBrainsMono(
|
||||
fontSize: 13,
|
||||
height: 1.5,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
Visibility(
|
||||
visible: model.showAutoScrollButton,
|
||||
child: Align(
|
||||
alignment: const Alignment(0.9, 0.97),
|
||||
child: FloatingActionButton(
|
||||
onPressed: model.scrollToBottom,
|
||||
child: const Icon(Icons.arrow_downward_rounded),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
@ -30,6 +30,7 @@ class InstallerViewModel extends BaseViewModel {
|
||||
static const _installerChannel = MethodChannel(
|
||||
'app.revanced.manager.flutter/installer',
|
||||
);
|
||||
final Key logCustomScrollKey = UniqueKey();
|
||||
final ScrollController scrollController = ScrollController();
|
||||
final ScreenshotCallback screenshotCallback = ScreenshotCallback();
|
||||
double? progress = 0.0;
|
||||
@ -44,6 +45,57 @@ class InstallerViewModel extends BaseViewModel {
|
||||
bool cancel = false;
|
||||
bool showPopupScreenshotWarning = true;
|
||||
|
||||
bool showAutoScrollButton = false;
|
||||
bool _isAutoScrollEnabled = true;
|
||||
bool _isAutoScrolling = false;
|
||||
|
||||
double get getCurrentScrollPercentage {
|
||||
final maxScrollExtent = scrollController.position.maxScrollExtent;
|
||||
final currentPosition = scrollController.position.pixels;
|
||||
|
||||
return currentPosition / maxScrollExtent;
|
||||
}
|
||||
|
||||
bool handleAutoScrollNotification(ScrollNotification event) {
|
||||
if (_isAutoScrollEnabled && event is ScrollStartNotification) {
|
||||
_isAutoScrollEnabled = _isAutoScrolling;
|
||||
showAutoScrollButton = false;
|
||||
notifyListeners();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
if (event is ScrollEndNotification) {
|
||||
const anchorThreshold = 0.987;
|
||||
|
||||
_isAutoScrollEnabled =
|
||||
_isAutoScrolling || getCurrentScrollPercentage >= anchorThreshold;
|
||||
|
||||
showAutoScrollButton = !_isAutoScrollEnabled && !_isAutoScrolling;
|
||||
notifyListeners();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void scrollToBottom() {
|
||||
_isAutoScrolling = true;
|
||||
|
||||
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||
final maxScrollExtent = scrollController.position.maxScrollExtent;
|
||||
|
||||
await scrollController.animateTo(
|
||||
maxScrollExtent,
|
||||
duration: const Duration(milliseconds: 100),
|
||||
curve: Curves.fastOutSlowIn,
|
||||
);
|
||||
|
||||
_isAutoScrolling = false;
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> initialize(BuildContext context) async {
|
||||
isRooted = await _rootAPI.isRooted();
|
||||
if (await Permission.ignoreBatteryOptimizations.isGranted) {
|
||||
@ -123,13 +175,9 @@ class InstallerViewModel extends BaseViewModel {
|
||||
if (logs[logs.length - 1] == '\n') {
|
||||
logs = logs.substring(0, logs.length - 1);
|
||||
}
|
||||
Future.delayed(const Duration(milliseconds: 100)).then((value) {
|
||||
scrollController.animateTo(
|
||||
scrollController.position.maxScrollExtent,
|
||||
duration: const Duration(milliseconds: 100),
|
||||
curve: Curves.fastOutSlowIn,
|
||||
);
|
||||
});
|
||||
if (_isAutoScrollEnabled) {
|
||||
scrollToBottom();
|
||||
}
|
||||
}
|
||||
notifyListeners();
|
||||
}
|
||||
@ -465,7 +513,10 @@ class InstallerViewModel extends BaseViewModel {
|
||||
}
|
||||
|
||||
await _managerAPI.savePatchedApp(_app);
|
||||
await locator<HomeViewModel>().initialize(context);
|
||||
|
||||
_managerAPI
|
||||
.reAssessPatchedApps()
|
||||
.then((_) => locator<HomeViewModel>().getPatchedApps());
|
||||
|
||||
update(1.0, 'Installed', 'Installed');
|
||||
} else if (response == 3) {
|
||||
|
@ -20,8 +20,9 @@ class SManageApiUrl extends BaseViewModel {
|
||||
builder: (context) => AlertDialog(
|
||||
title: Row(
|
||||
children: <Widget>[
|
||||
Text(t.settingsView.apiURLLabel),
|
||||
const Spacer(),
|
||||
Expanded(
|
||||
child: Text(t.settingsView.apiURLLabel),
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.manage_history_outlined),
|
||||
onPressed: () => showApiUrlResetDialog(context),
|
||||
|
@ -21,8 +21,9 @@ class SManageKeystorePassword extends BaseViewModel {
|
||||
builder: (context) => AlertDialog(
|
||||
title: Row(
|
||||
children: <Widget>[
|
||||
Text(t.settingsView.selectKeystorePassword),
|
||||
const Spacer(),
|
||||
Expanded(
|
||||
child: Text(t.settingsView.selectKeystorePassword),
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.manage_history_outlined),
|
||||
onPressed: () => _keystorePasswordController.text =
|
||||
|
@ -29,8 +29,9 @@ class SManageSources extends BaseViewModel {
|
||||
builder: (context) => AlertDialog(
|
||||
title: Row(
|
||||
children: <Widget>[
|
||||
Text(t.settingsView.sourcesLabel),
|
||||
const Spacer(),
|
||||
Expanded(
|
||||
child: Text(t.settingsView.sourcesLabel),
|
||||
),
|
||||
IconButton(
|
||||
icon: const Icon(Icons.manage_history_outlined),
|
||||
onPressed: () => showResetConfirmationDialog(context),
|
||||
|
@ -34,9 +34,18 @@ class SUpdateLanguage extends BaseViewModel {
|
||||
}
|
||||
|
||||
Future<void> showLanguagesDialog(BuildContext parentContext) {
|
||||
final ValueNotifier<String> selectedLanguageCode = ValueNotifier(
|
||||
'${LocaleSettings.currentLocale.languageCode}-${LocaleSettings.currentLocale.countryCode}',
|
||||
final ValueNotifier<AppLocale> selectedLanguageCode = ValueNotifier(
|
||||
LocaleSettings.currentLocale,
|
||||
);
|
||||
LanguageCodes getLanguageCode(Locale locale) {
|
||||
return LanguageCodes.fromLocale(
|
||||
locale,
|
||||
orElse: () => LanguageCodes.fromCode(locale.languageCode),
|
||||
);
|
||||
}
|
||||
|
||||
final currentlyUsedLanguage =
|
||||
getLanguageCode(LocaleSettings.currentLocale.flutterLocale);
|
||||
// initLang();
|
||||
|
||||
// Return a dialog with list for each language supported by the application.
|
||||
@ -53,30 +62,40 @@ class SUpdateLanguage extends BaseViewModel {
|
||||
builder: (context, value, child) {
|
||||
return SingleChildScrollView(
|
||||
child: ListBody(
|
||||
children: AppLocale.values.map(
|
||||
(locale) {
|
||||
final LanguageCodes languageCode = LanguageCodes.fromCode(
|
||||
'${locale.languageCode}_${locale.countryCode}',
|
||||
orElse: () => LanguageCodes.fromCode(locale.languageCode),
|
||||
);
|
||||
|
||||
children: [
|
||||
RadioListTile(
|
||||
title: Text(currentlyUsedLanguage.englishName),
|
||||
subtitle: Text(
|
||||
'${currentlyUsedLanguage.nativeName}\n'
|
||||
'(${LocaleSettings.currentLocale.languageTag})',
|
||||
),
|
||||
value: LocaleSettings.currentLocale ==
|
||||
selectedLanguageCode.value,
|
||||
groupValue: true,
|
||||
onChanged: (value) {
|
||||
selectedLanguageCode.value = LocaleSettings.currentLocale;
|
||||
},
|
||||
),
|
||||
...AppLocale.values
|
||||
.where(
|
||||
(locale) => locale != LocaleSettings.currentLocale,
|
||||
)
|
||||
.map((locale) {
|
||||
final languageCode = getLanguageCode(locale.flutterLocale);
|
||||
return RadioListTile(
|
||||
title: Text(
|
||||
languageCode.englishName,
|
||||
),
|
||||
title: Text(languageCode.englishName),
|
||||
subtitle: Text(
|
||||
'${languageCode.nativeName} (${locale.languageCode}${locale.countryCode != null ? '-${locale.countryCode}' : ''})',
|
||||
'${languageCode.nativeName}\n'
|
||||
'(${locale.languageTag})',
|
||||
),
|
||||
value: '${locale.languageCode}-${locale.countryCode}' ==
|
||||
selectedLanguageCode.value,
|
||||
value: locale == selectedLanguageCode.value,
|
||||
groupValue: true,
|
||||
onChanged: (value) {
|
||||
selectedLanguageCode.value =
|
||||
'${locale.languageCode}-${locale.countryCode}';
|
||||
selectedLanguageCode.value = locale;
|
||||
},
|
||||
);
|
||||
},
|
||||
).toList(),
|
||||
}),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
@ -90,7 +109,8 @@ class SUpdateLanguage extends BaseViewModel {
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
updateLocale(selectedLanguageCode.value);
|
||||
// TODO(nullcube): Translation will not update until we refresh the page.
|
||||
updateLocale(selectedLanguageCode.value.languageTag);
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.okButton),
|
||||
@ -110,7 +130,7 @@ class SUpdateLanguageUI extends StatelessWidget {
|
||||
padding: const EdgeInsets.symmetric(horizontal: 20.0),
|
||||
title: t.settingsView.languageLabel,
|
||||
subtitle:
|
||||
LanguageCodes.fromCode(LocaleSettings.currentLocale.languageCode)
|
||||
LanguageCodes.fromLocale(LocaleSettings.currentLocale.flutterLocale)
|
||||
.nativeName,
|
||||
onTap: () =>
|
||||
_settingViewModel.sUpdateLanguage.showLanguagesDialog(context),
|
||||
|
@ -445,8 +445,11 @@ class _TextFieldForPatchOptionState extends State<TextFieldForPatchOption> {
|
||||
value: '',
|
||||
child: Text(
|
||||
t.patchOptionsView.customValue,
|
||||
style: const TextStyle(
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
color: Theme.of(context)
|
||||
.colorScheme
|
||||
.onSecondaryContainer,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
512
package-lock.json
generated
512
package-lock.json
generated
@ -5,13 +5,12 @@
|
||||
"packages": {
|
||||
"": {
|
||||
"devDependencies": {
|
||||
"@droidsolutions-oss/semantic-release-update-file": "^1.3.2",
|
||||
"@droidsolutions-oss/semantic-release-update-file": "^1.4.0",
|
||||
"@saithodev/semantic-release-backmerge": "^4.0.1",
|
||||
"@semantic-release/changelog": "^6.0.3",
|
||||
"@semantic-release/exec": "^6.0.3",
|
||||
"@semantic-release/git": "^10.0.1",
|
||||
"conventional-changelog-conventionalcommits": "^7.0.2",
|
||||
"semantic-release": "^23.0.2"
|
||||
"semantic-release": "^23.0.6"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/code-frame": {
|
||||
@ -61,9 +60,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@droidsolutions-oss/semantic-release-update-file": {
|
||||
"version": "1.3.2",
|
||||
"resolved": "https://registry.npmjs.org/@droidsolutions-oss/semantic-release-update-file/-/semantic-release-update-file-1.3.2.tgz",
|
||||
"integrity": "sha512-ahV0OWiEUf20e7lLH3gnBLF1SfRNPN99MeaLVaFX6jT3DegTLzkVPeY2CZWa+K4tAXBALc29Bq/kzjv8PAXFGw==",
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/@droidsolutions-oss/semantic-release-update-file/-/semantic-release-update-file-1.4.0.tgz",
|
||||
"integrity": "sha512-kl9krFVGLOklI7YswoghWkI4muQ8iV6mDg/3lAed0dlZGsoRvdH5IMLxQ2FeJzvcgh7QjuZN1SggzsOo9AV+9w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"aggregate-error": "^3.1.0",
|
||||
@ -163,24 +162,24 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/openapi-types": {
|
||||
"version": "19.1.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.1.0.tgz",
|
||||
"integrity": "sha512-6G+ywGClliGQwRsjvqVYpklIfa7oRPA0vyhPQG/1Feh+B+wU0vGH1JiJ5T25d3g1JZYBHzR2qefLi9x8Gt+cpw==",
|
||||
"version": "20.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz",
|
||||
"integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@octokit/plugin-paginate-rest": {
|
||||
"version": "9.1.5",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.1.5.tgz",
|
||||
"integrity": "sha512-WKTQXxK+bu49qzwv4qKbMMRXej1DU2gq017euWyKVudA6MldaSSQuxtz+vGbhxV4CjxpUxjZu6rM2wfc1FiWVg==",
|
||||
"version": "9.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.1.tgz",
|
||||
"integrity": "sha512-wfGhE/TAkXZRLjksFXuDZdmGnJQHvtU/joFQdweXUgzo1XwvBCD4o4+75NtFfjfLK5IwLf9vHTfSiU3sLRYpRw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@octokit/types": "^12.4.0"
|
||||
"@octokit/types": "^12.6.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@octokit/core": ">=5"
|
||||
"@octokit/core": "5"
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/plugin-retry": {
|
||||
@ -201,9 +200,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/plugin-throttling": {
|
||||
"version": "8.1.3",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.1.3.tgz",
|
||||
"integrity": "sha512-pfyqaqpc0EXh5Cn4HX9lWYsZ4gGbjnSmUILeu4u2gnuM50K/wIk9s1Pxt3lVeVwekmITgN/nJdoh43Ka+vye8A==",
|
||||
"version": "8.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-8.2.0.tgz",
|
||||
"integrity": "sha512-nOpWtLayKFpgqmgD0y3GqXafMFuKcA4tRPZIfu7BArd2lEZeb1988nhWhwx4aZWmjDmUfdgVf7W+Tt4AmvRmMQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@octokit/types": "^12.2.0",
|
||||
@ -246,12 +245,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@octokit/types": {
|
||||
"version": "12.5.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.5.0.tgz",
|
||||
"integrity": "sha512-YJEKcb0KkJlIUNU/zjnZwHEP8AoVh/OoIcP/1IyR4UHxExz7fzpe/a8IG4wBtQi7QDEqiomVLX88S6FpxxAJtg==",
|
||||
"version": "12.6.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz",
|
||||
"integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@octokit/openapi-types": "^19.1.0"
|
||||
"@octokit/openapi-types": "^20.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@pnpm/config.env-replace": {
|
||||
@ -500,9 +499,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@saithodev/semantic-release-backmerge/node_modules/npm-run-path": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz",
|
||||
"integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==",
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
|
||||
"integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"path-key": "^4.0.0"
|
||||
@ -865,9 +864,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@semantic-release/npm": {
|
||||
"version": "11.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-11.0.2.tgz",
|
||||
"integrity": "sha512-owtf3RjyPvRE63iUKZ5/xO4uqjRpVQDUB9+nnXj0xwfIeM9pRl+cG+zGDzdftR4m3f2s4Wyf3SexW+kF5DFtWA==",
|
||||
"version": "11.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-11.0.3.tgz",
|
||||
"integrity": "sha512-KUsozQGhRBAnoVg4UMZj9ep436VEGwT536/jwSqB7vcEfA6oncCUU7UIYTRdLx7GvTtqn0kBjnkfLVkcnBa2YQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@semantic-release/error": "^4.0.0",
|
||||
@ -877,7 +876,7 @@
|
||||
"lodash-es": "^4.17.21",
|
||||
"nerf-dart": "^1.0.0",
|
||||
"normalize-url": "^8.0.0",
|
||||
"npm": "^10.0.0",
|
||||
"npm": "^10.5.0",
|
||||
"rc": "^1.2.8",
|
||||
"read-pkg": "^9.0.0",
|
||||
"registry-auth-token": "^5.0.0",
|
||||
@ -1024,9 +1023,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@semantic-release/npm/node_modules/npm-run-path": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz",
|
||||
"integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==",
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
|
||||
"integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"path-key": "^4.0.0"
|
||||
@ -1138,9 +1137,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@sindresorhus/merge-streams": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.2.1.tgz",
|
||||
"integrity": "sha512-255V7MMIKw6aQ43Wbqp9HZ+VHn6acddERTLiiLnlcPLU9PdTq9Aijl12oklAgUEblLWye+vHLzmqBx6f2TGcZw==",
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz",
|
||||
"integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
@ -1529,18 +1528,6 @@
|
||||
"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": {
|
||||
"version": "7.0.1",
|
||||
"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": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz",
|
||||
"integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==",
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
|
||||
"integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"path-key": "^4.0.0"
|
||||
@ -2915,9 +2902,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm": {
|
||||
"version": "10.4.0",
|
||||
"resolved": "https://registry.npmjs.org/npm/-/npm-10.4.0.tgz",
|
||||
"integrity": "sha512-RS7Mx0OVfXlOcQLRePuDIYdFCVBPCNapWHplDK+mh7GDdP/Tvor4ocuybRRPSvfcRb2vjRJt1fHCqw3cr8qACQ==",
|
||||
"version": "10.5.0",
|
||||
"resolved": "https://registry.npmjs.org/npm/-/npm-10.5.0.tgz",
|
||||
"integrity": "sha512-Ejxwvfh9YnWVU2yA5FzoYLTW52vxHCz+MHrOFg9Cc8IFgF/6f5AGPAvb5WTay5DIUP1NIfN3VBZ0cLlGO0Ys+A==",
|
||||
"bundleDependencies": [
|
||||
"@isaacs/string-locale-compare",
|
||||
"@npmcli/arborist",
|
||||
@ -2991,13 +2978,6 @@
|
||||
"write-file-atomic"
|
||||
],
|
||||
"dev": true,
|
||||
"workspaces": [
|
||||
"docs",
|
||||
"smoke-tests",
|
||||
"mock-globals",
|
||||
"mock-registry",
|
||||
"workspaces/*"
|
||||
],
|
||||
"dependencies": {
|
||||
"@isaacs/string-locale-compare": "^1.1.0",
|
||||
"@npmcli/arborist": "^7.2.1",
|
||||
@ -3007,7 +2987,7 @@
|
||||
"@npmcli/package-json": "^5.0.0",
|
||||
"@npmcli/promise-spawn": "^7.0.1",
|
||||
"@npmcli/run-script": "^7.0.4",
|
||||
"@sigstore/tuf": "^2.3.0",
|
||||
"@sigstore/tuf": "^2.3.1",
|
||||
"abbrev": "^2.0.0",
|
||||
"archy": "~1.0.0",
|
||||
"cacache": "^18.0.2",
|
||||
@ -3058,7 +3038,7 @@
|
||||
"proc-log": "^3.0.0",
|
||||
"qrcode-terminal": "^0.12.0",
|
||||
"read": "^2.1.0",
|
||||
"semver": "^7.5.4",
|
||||
"semver": "^7.6.0",
|
||||
"spdx-expression-parse": "^3.0.1",
|
||||
"ssri": "^10.0.5",
|
||||
"supports-color": "^9.4.0",
|
||||
@ -3174,7 +3154,7 @@
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/npm/node_modules/@npmcli/agent": {
|
||||
"version": "2.2.0",
|
||||
"version": "2.2.1",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
@ -3190,7 +3170,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@npmcli/arborist": {
|
||||
"version": "7.3.1",
|
||||
"version": "7.4.0",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
@ -3203,7 +3183,7 @@
|
||||
"@npmcli/name-from-folder": "^2.0.0",
|
||||
"@npmcli/node-gyp": "^3.0.0",
|
||||
"@npmcli/package-json": "^5.0.0",
|
||||
"@npmcli/query": "^3.0.1",
|
||||
"@npmcli/query": "^3.1.0",
|
||||
"@npmcli/run-script": "^7.0.2",
|
||||
"bin-links": "^4.0.1",
|
||||
"cacache": "^18.0.0",
|
||||
@ -3237,7 +3217,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@npmcli/config": {
|
||||
"version": "8.1.0",
|
||||
"version": "8.2.0",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
@ -3408,7 +3388,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@npmcli/query": {
|
||||
"version": "3.0.1",
|
||||
"version": "3.1.0",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
@ -3446,19 +3426,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@sigstore/bundle": {
|
||||
"version": "2.1.1",
|
||||
"version": "2.2.0",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@sigstore/protobuf-specs": "^0.2.1"
|
||||
"@sigstore/protobuf-specs": "^0.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^16.14.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@sigstore/core": {
|
||||
"version": "0.2.0",
|
||||
"version": "1.0.0",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "Apache-2.0",
|
||||
@ -3467,7 +3447,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@sigstore/protobuf-specs": {
|
||||
"version": "0.2.1",
|
||||
"version": "0.3.0",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "Apache-2.0",
|
||||
@ -3476,14 +3456,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@sigstore/sign": {
|
||||
"version": "2.2.1",
|
||||
"version": "2.2.3",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@sigstore/bundle": "^2.1.1",
|
||||
"@sigstore/core": "^0.2.0",
|
||||
"@sigstore/protobuf-specs": "^0.2.1",
|
||||
"@sigstore/bundle": "^2.2.0",
|
||||
"@sigstore/core": "^1.0.0",
|
||||
"@sigstore/protobuf-specs": "^0.3.0",
|
||||
"make-fetch-happen": "^13.0.0"
|
||||
},
|
||||
"engines": {
|
||||
@ -3491,12 +3471,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@sigstore/tuf": {
|
||||
"version": "2.3.0",
|
||||
"version": "2.3.1",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@sigstore/protobuf-specs": "^0.2.1",
|
||||
"@sigstore/protobuf-specs": "^0.3.0",
|
||||
"tuf-js": "^2.2.0"
|
||||
},
|
||||
"engines": {
|
||||
@ -3504,14 +3484,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/@sigstore/verify": {
|
||||
"version": "0.1.0",
|
||||
"version": "1.1.0",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@sigstore/bundle": "^2.1.1",
|
||||
"@sigstore/core": "^0.2.0",
|
||||
"@sigstore/protobuf-specs": "^0.2.1"
|
||||
"@sigstore/bundle": "^2.2.0",
|
||||
"@sigstore/core": "^1.0.0",
|
||||
"@sigstore/protobuf-specs": "^0.3.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^16.14.0 || >=18.0.0"
|
||||
@ -3918,7 +3898,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/diff": {
|
||||
"version": "5.1.0",
|
||||
"version": "5.2.0",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "BSD-3-Clause",
|
||||
@ -4069,7 +4049,7 @@
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/npm/node_modules/hasown": {
|
||||
"version": "2.0.0",
|
||||
"version": "2.0.1",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
@ -4099,7 +4079,7 @@
|
||||
"license": "BSD-2-Clause"
|
||||
},
|
||||
"node_modules/npm/node_modules/http-proxy-agent": {
|
||||
"version": "7.0.0",
|
||||
"version": "7.0.2",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
@ -4112,7 +4092,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/https-proxy-agent": {
|
||||
"version": "7.0.2",
|
||||
"version": "7.0.4",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
@ -4194,11 +4174,24 @@
|
||||
"node": "^16.14.0 || >=18.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/ip": {
|
||||
"version": "2.0.0",
|
||||
"node_modules/npm/node_modules/ip-address": {
|
||||
"version": "9.0.5",
|
||||
"dev": 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": {
|
||||
"version": "5.0.0",
|
||||
@ -4275,6 +4268,12 @@
|
||||
"@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": {
|
||||
"version": "3.0.1",
|
||||
"dev": true,
|
||||
@ -4328,7 +4327,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/libnpmdiff": {
|
||||
"version": "6.0.6",
|
||||
"version": "6.0.7",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
@ -4348,7 +4347,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/libnpmexec": {
|
||||
"version": "7.0.7",
|
||||
"version": "7.0.8",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
@ -4370,7 +4369,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/libnpmfund": {
|
||||
"version": "5.0.4",
|
||||
"version": "5.0.5",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
@ -4408,7 +4407,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/libnpmpack": {
|
||||
"version": "6.0.6",
|
||||
"version": "6.0.7",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
@ -4483,7 +4482,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/lru-cache": {
|
||||
"version": "10.1.0",
|
||||
"version": "10.2.0",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
@ -5145,7 +5144,7 @@
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/npm/node_modules/semver": {
|
||||
"version": "7.5.4",
|
||||
"version": "7.6.0",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "ISC",
|
||||
@ -5211,17 +5210,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/sigstore": {
|
||||
"version": "2.2.0",
|
||||
"version": "2.2.2",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@sigstore/bundle": "^2.1.1",
|
||||
"@sigstore/core": "^0.2.0",
|
||||
"@sigstore/protobuf-specs": "^0.2.1",
|
||||
"@sigstore/sign": "^2.2.1",
|
||||
"@sigstore/tuf": "^2.3.0",
|
||||
"@sigstore/verify": "^0.1.0"
|
||||
"@sigstore/bundle": "^2.2.0",
|
||||
"@sigstore/core": "^1.0.0",
|
||||
"@sigstore/protobuf-specs": "^0.3.0",
|
||||
"@sigstore/sign": "^2.2.3",
|
||||
"@sigstore/tuf": "^2.3.1",
|
||||
"@sigstore/verify": "^1.1.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^16.14.0 || >=18.0.0"
|
||||
@ -5238,16 +5237,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/socks": {
|
||||
"version": "2.7.1",
|
||||
"version": "2.8.0",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ip": "^2.0.0",
|
||||
"ip-address": "^9.0.5",
|
||||
"smart-buffer": "^4.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.13.0",
|
||||
"node": ">= 16.0.0",
|
||||
"npm": ">= 3.0.0"
|
||||
}
|
||||
},
|
||||
@ -5276,7 +5275,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/spdx-exceptions": {
|
||||
"version": "2.3.0",
|
||||
"version": "2.5.0",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "CC-BY-3.0"
|
||||
@ -5292,7 +5291,7 @@
|
||||
}
|
||||
},
|
||||
"node_modules/npm/node_modules/spdx-license-ids": {
|
||||
"version": "3.0.16",
|
||||
"version": "3.0.17",
|
||||
"dev": true,
|
||||
"inBundle": true,
|
||||
"license": "CC0-1.0"
|
||||
@ -5999,9 +5998,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/read-pkg-up/node_modules/type-fest": {
|
||||
"version": "4.10.2",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz",
|
||||
"integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==",
|
||||
"version": "4.11.0",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.11.0.tgz",
|
||||
"integrity": "sha512-DPsoHKtnCUqqoB5Y4OPyat7ObSLz1XOkhHTmz+gOkz2p1xs+BBneTvHWriTwc313eozfBWh8b45EpaV3ZrrPPQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=16"
|
||||
@ -6028,9 +6027,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/read-pkg/node_modules/type-fest": {
|
||||
"version": "4.10.2",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz",
|
||||
"integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==",
|
||||
"version": "4.11.0",
|
||||
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.11.0.tgz",
|
||||
"integrity": "sha512-DPsoHKtnCUqqoB5Y4OPyat7ObSLz1XOkhHTmz+gOkz2p1xs+BBneTvHWriTwc313eozfBWh8b45EpaV3ZrrPPQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=16"
|
||||
@ -6133,16 +6132,16 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/semantic-release": {
|
||||
"version": "23.0.2",
|
||||
"resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-23.0.2.tgz",
|
||||
"integrity": "sha512-OnVYJ6Xgzwe1x8MKswba7RU9+5djS1MWRTrTn5qsq3xZYpslroZkV9Pt0dA2YcIuieeuSZWJhn+yUWoBUHO5Fw==",
|
||||
"version": "23.0.6",
|
||||
"resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-23.0.6.tgz",
|
||||
"integrity": "sha512-/r62F4PNhJZhyZYMobcpcACGwpFNQyaVcSmqZQXG50GMbHSBVZQLCvwafqxO1lDQKVgmGmyCEtOVYzwvzvyhVw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@semantic-release/commit-analyzer": "^11.0.0",
|
||||
"@semantic-release/commit-analyzer": "^12.0.0",
|
||||
"@semantic-release/error": "^4.0.0",
|
||||
"@semantic-release/github": "^9.0.0",
|
||||
"@semantic-release/npm": "^11.0.0",
|
||||
"@semantic-release/release-notes-generator": "^12.0.0",
|
||||
"@semantic-release/github": "^10.0.0",
|
||||
"@semantic-release/npm": "^12.0.0",
|
||||
"@semantic-release/release-notes-generator": "^13.0.0",
|
||||
"aggregate-error": "^5.0.0",
|
||||
"cosmiconfig": "^9.0.0",
|
||||
"debug": "^4.0.0",
|
||||
@ -6175,6 +6174,156 @@
|
||||
"node": ">=20.8.1"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@octokit/auth-token": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.0.1.tgz",
|
||||
"integrity": "sha512-RTmWsLfig8SBoiSdgvCht4BXl1CHU89Co5xiQ5JF19my/sIRDFCQ1RPrmK0exgqUZuNm39C/bV8+/83+MJEjGg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@octokit/core": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.0.1.tgz",
|
||||
"integrity": "sha512-MIpPQXu8Y8GjHwXM81JLveiV+DHJZtLMcB5nKekBGOl3iAtk0HT3i12Xl8Biybu+bCS1+k4qbuKEq5d0RxNRnQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@octokit/auth-token": "^5.0.0",
|
||||
"@octokit/graphql": "^8.0.0",
|
||||
"@octokit/request": "^9.0.0",
|
||||
"@octokit/request-error": "^6.0.1",
|
||||
"@octokit/types": "^12.0.0",
|
||||
"before-after-hook": "^3.0.2",
|
||||
"universal-user-agent": "^7.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@octokit/endpoint": {
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.0.0.tgz",
|
||||
"integrity": "sha512-emBcNDxBdC1y3+knJonS5zhUB/CG6TihubxM2U1/pG/Z1y3a4oV0Gzz3lmkCvWWQI6h3tqBAX9MgCBFp+M68Jw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@octokit/types": "^12.0.0",
|
||||
"universal-user-agent": "^7.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@octokit/graphql": {
|
||||
"version": "8.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.0.1.tgz",
|
||||
"integrity": "sha512-lLDb6LhC1gBj2CxEDa5Xk10+H/boonhs+3Mi6jpRyetskDKNHe6crMeKmUE2efoLofMP8ruannLlCUgpTFmVzQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@octokit/request": "^9.0.0",
|
||||
"@octokit/types": "^12.0.0",
|
||||
"universal-user-agent": "^7.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@octokit/plugin-paginate-rest": {
|
||||
"version": "10.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-10.0.0.tgz",
|
||||
"integrity": "sha512-G1Z67qOiFneKDJyMafHQkWnKm1kU3FfbRZLzxgsFg4dOa3pRNdABbdk+xo/oev6P88lnbt7GKdBNB6dJZuPphA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@octokit/types": "^12.6.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@octokit/core": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@octokit/plugin-retry": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-7.0.3.tgz",
|
||||
"integrity": "sha512-T9l5Z7XnDZ7dkyNmhJPSUq0YjbqUT/xn4yQbhcSuv4WGC/LqM73/mKwkl68VDPoLw20e8oz4L7qQopWt9v6sow==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@octokit/request-error": "^6.0.0",
|
||||
"@octokit/types": "^12.0.0",
|
||||
"bottleneck": "^2.15.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@octokit/core": ">=6"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@octokit/plugin-throttling": {
|
||||
"version": "9.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.0.3.tgz",
|
||||
"integrity": "sha512-DReKamrLBJOzld73dmmxV2H137QKJfsxszAczEZXeAJQ/Po6bzQacKajPdodA6T1jfmP9+waImus+d/R2j+R7Q==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@octokit/types": "^12.6.0",
|
||||
"bottleneck": "^2.15.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@octokit/core": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@octokit/request": {
|
||||
"version": "9.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.0.1.tgz",
|
||||
"integrity": "sha512-kL+cAcbSl3dctYLuJmLfx6Iku2MXXy0jszhaEIjQNaCp4zjHXrhVAHeuaRdNvJjW9qjl3u1MJ72+OuBP0YW/pg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@octokit/endpoint": "^10.0.0",
|
||||
"@octokit/request-error": "^6.0.1",
|
||||
"@octokit/types": "^12.0.0",
|
||||
"universal-user-agent": "^7.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@octokit/request-error": {
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.0.2.tgz",
|
||||
"integrity": "sha512-WtRVpoHcNXs84+s9s/wqfHaxM68NGMg8Av7h59B50OVO0PwwMx+2GgQ/OliUd0iQBSNWgR6N8afi/KjSHbXHWw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@octokit/types": "^12.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 18"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@semantic-release/commit-analyzer": {
|
||||
"version": "12.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-12.0.0.tgz",
|
||||
"integrity": "sha512-qG+md5gdes+xa8zP7lIo1fWE17zRdO8yMCaxh9lyL65TQleoSv8WHHOqRURfghTytUh+NpkSyBprQ5hrkxOKVQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"conventional-changelog-angular": "^7.0.0",
|
||||
"conventional-commits-filter": "^4.0.0",
|
||||
"conventional-commits-parser": "^5.0.0",
|
||||
"debug": "^4.0.0",
|
||||
"import-from-esm": "^1.0.3",
|
||||
"lodash-es": "^4.17.21",
|
||||
"micromatch": "^4.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.8.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"semantic-release": ">=20.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@semantic-release/error": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-4.0.0.tgz",
|
||||
@ -6184,6 +6333,99 @@
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@semantic-release/github": {
|
||||
"version": "10.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-10.0.2.tgz",
|
||||
"integrity": "sha512-SP5ihhv/uQa8vPuWKmbJrrzfv8lRUkDFC6qwgaWoorrflN1DEW0IGCa9w/PxUp8Ad3dbvXZPmpXdGiP3eyTzhg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@octokit/core": "^6.0.0",
|
||||
"@octokit/plugin-paginate-rest": "^10.0.0",
|
||||
"@octokit/plugin-retry": "^7.0.0",
|
||||
"@octokit/plugin-throttling": "^9.0.0",
|
||||
"@semantic-release/error": "^4.0.0",
|
||||
"aggregate-error": "^5.0.0",
|
||||
"debug": "^4.3.4",
|
||||
"dir-glob": "^3.0.1",
|
||||
"globby": "^14.0.0",
|
||||
"http-proxy-agent": "^7.0.0",
|
||||
"https-proxy-agent": "^7.0.0",
|
||||
"issue-parser": "^7.0.0",
|
||||
"lodash-es": "^4.17.21",
|
||||
"mime": "^4.0.0",
|
||||
"p-filter": "^4.0.0",
|
||||
"url-join": "^5.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.8.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"semantic-release": ">=20.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@semantic-release/npm": {
|
||||
"version": "12.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-12.0.0.tgz",
|
||||
"integrity": "sha512-72TVYQCH9NvVsO/y13eF8vE4bNnfls518+4KcFwJUKi7AtA/ZXoNgSg9gTTfw5eMZMkiH0izUrpGXgZE/cSQhA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@semantic-release/error": "^4.0.0",
|
||||
"aggregate-error": "^5.0.0",
|
||||
"execa": "^8.0.0",
|
||||
"fs-extra": "^11.0.0",
|
||||
"lodash-es": "^4.17.21",
|
||||
"nerf-dart": "^1.0.0",
|
||||
"normalize-url": "^8.0.0",
|
||||
"npm": "^10.5.0",
|
||||
"rc": "^1.2.8",
|
||||
"read-pkg": "^9.0.0",
|
||||
"registry-auth-token": "^5.0.0",
|
||||
"semver": "^7.1.2",
|
||||
"tempy": "^3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.8.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"semantic-release": ">=20.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@semantic-release/release-notes-generator": {
|
||||
"version": "13.0.0",
|
||||
"resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-13.0.0.tgz",
|
||||
"integrity": "sha512-LEeZWb340keMYuREMyxrODPXJJ0JOL8D/mCl74B4LdzbxhtXV2LrPN2QBEcGJrlQhoqLO0RhxQb6masHytKw+A==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"conventional-changelog-angular": "^7.0.0",
|
||||
"conventional-changelog-writer": "^7.0.0",
|
||||
"conventional-commits-filter": "^4.0.0",
|
||||
"conventional-commits-parser": "^5.0.0",
|
||||
"debug": "^4.0.0",
|
||||
"get-stream": "^7.0.0",
|
||||
"import-from-esm": "^1.0.3",
|
||||
"into-stream": "^7.0.0",
|
||||
"lodash-es": "^4.17.21",
|
||||
"read-pkg-up": "^11.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.8.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"semantic-release": ">=20.1.0"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/@semantic-release/release-notes-generator/node_modules/get-stream": {
|
||||
"version": "7.0.1",
|
||||
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-7.0.1.tgz",
|
||||
"integrity": "sha512-3M8C1EOFN6r8AMUhwUAACIoXZJEOufDU5+0gFFN5uNs6XYOralD2Pqkl7m046va6x77FwposWXbAhPPIOus7mQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/aggregate-error": {
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-5.0.0.tgz",
|
||||
@ -6200,6 +6442,12 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/before-after-hook": {
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz",
|
||||
"integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/clean-stack": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-5.2.0.tgz",
|
||||
@ -6295,6 +6543,22 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/issue-parser": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-7.0.0.tgz",
|
||||
"integrity": "sha512-jgAw78HO3gs9UrKqJNQvfDj9Ouy8Mhu40fbEJ8yXff4MW8+/Fcn9iFjyWUQ6SKbX8ipPk3X5A3AyfYHRu6uVLw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"lodash.capitalize": "^4.2.1",
|
||||
"lodash.escaperegexp": "^4.1.2",
|
||||
"lodash.isplainobject": "^4.0.6",
|
||||
"lodash.isstring": "^4.0.1",
|
||||
"lodash.uniqby": "^4.7.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.17 || >=20.6.1"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/mimic-fn": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
|
||||
@ -6308,9 +6572,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/npm-run-path": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz",
|
||||
"integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==",
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz",
|
||||
"integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"path-key": "^4.0.0"
|
||||
@ -6385,6 +6649,12 @@
|
||||
"url": "https://github.com/sponsors/sindresorhus"
|
||||
}
|
||||
},
|
||||
"node_modules/semantic-release/node_modules/universal-user-agent": {
|
||||
"version": "7.0.2",
|
||||
"resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz",
|
||||
"integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "7.6.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
|
||||
|
@ -1,11 +1,10 @@
|
||||
{
|
||||
"devDependencies": {
|
||||
"@droidsolutions-oss/semantic-release-update-file": "^1.3.2",
|
||||
"@droidsolutions-oss/semantic-release-update-file": "^1.4.0",
|
||||
"@saithodev/semantic-release-backmerge": "^4.0.1",
|
||||
"@semantic-release/changelog": "^6.0.3",
|
||||
"@semantic-release/exec": "^6.0.3",
|
||||
"@semantic-release/git": "^10.0.1",
|
||||
"conventional-changelog-conventionalcommits": "^7.0.2",
|
||||
"semantic-release": "^23.0.2"
|
||||
"semantic-release": "^23.0.6"
|
||||
}
|
||||
}
|
||||
|
103
pubspec.lock
103
pubspec.lock
@ -109,10 +109,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: built_value
|
||||
sha256: a3ec2e0f967bc47f69f95009bb93db936288d61d5343b9436e378b28a2f830c6
|
||||
sha256: fedde275e0a6b798c3296963c5cd224e3e1b55d0e478d5b7e65e6b540f363a0e
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "8.9.0"
|
||||
version: "8.9.1"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -157,18 +157,18 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: connectivity_plus
|
||||
sha256: "224a77051d52a11fbad53dd57827594d3bd24f945af28bd70bab376d68d437f0"
|
||||
sha256: e9feae83b1849f61bad9f6f33ee00646e3410d54ce0821e02f262f9901dad3c9
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.0.2"
|
||||
version: "6.0.1"
|
||||
connectivity_plus_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: connectivity_plus_platform_interface
|
||||
sha256: cf1d1c28f4416f8c654d7dc3cd638ec586076255d407cef3ddbdaf178272a71a
|
||||
sha256: b6a56efe1e6675be240de39107281d4034b64ac23438026355b4234042a35adb
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.4"
|
||||
version: "2.0.0"
|
||||
convert:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -181,10 +181,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: cross_file
|
||||
sha256: fedaadfa3a6996f75211d835aaeb8fede285dae94262485698afd832371b9a5e
|
||||
sha256: "55d7b444feb71301ef6b8838dbc1ae02e63dd48c8773f3810ff53bb1e2945b32"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.3+8"
|
||||
version: "0.3.4+1"
|
||||
crypto:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -205,10 +205,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_style
|
||||
sha256: "40ae61a5d43feea6d24bd22c0537a6629db858963b99b4bc1c3db80676f32368"
|
||||
sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.4"
|
||||
version: "2.3.6"
|
||||
dbus:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -262,10 +262,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: dynamic_color
|
||||
sha256: a866f1f8947bfdaf674d7928e769eac7230388a2e7a2542824fad4bb5b87be3b
|
||||
sha256: eae98052fa6e2826bdac3dd2e921c6ce2903be15c6b7f8b6d8a5d49b5086298d
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.6.9"
|
||||
version: "1.7.0"
|
||||
dynamic_themes:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -348,10 +348,10 @@ packages:
|
||||
dependency: "direct dev"
|
||||
description:
|
||||
name: flutter_lints
|
||||
sha256: e2a421b7e59244faef694ba7b30562e489c2b489866e505074eb005cd7060db7
|
||||
sha256: "9e8c3858111da373efc5aa341de011d9bd23e2c5c5e0c62bccf32438e192d7b1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
version: "3.0.2"
|
||||
flutter_local_notifications:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -385,10 +385,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_markdown
|
||||
sha256: "21b085a1c185e46701373866144ced56cfb7a0c33f63c916bb8fe2d0c1491278"
|
||||
sha256: a64c5323ac83ed2b7940d2b6288d160aa1753ff271ba9d9b2a86770414aa3eab
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.6.19"
|
||||
version: "0.6.20+1"
|
||||
flutter_test:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
@ -459,10 +459,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: google_fonts
|
||||
sha256: f0b8d115a13ecf827013ec9fc883390ccc0e87a96ed5347a3114cac177ef18e8
|
||||
sha256: b1ac0fe2832c9cc95e5e88b57d627c5e68c223b9657f4b96e1487aa9098c7b82
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.1.0"
|
||||
version: "6.2.1"
|
||||
graphs:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -475,10 +475,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http
|
||||
sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba
|
||||
sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.0"
|
||||
version: "1.2.1"
|
||||
http_multi_server:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -562,12 +562,11 @@ packages:
|
||||
language_code:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
path: "."
|
||||
ref: "21b71892d1ce07fb8ea51ac2b474e435360fb6f7"
|
||||
resolved-ref: "21b71892d1ce07fb8ea51ac2b474e435360fb6f7"
|
||||
url: "https://github.com/Ushie/language_code"
|
||||
source: git
|
||||
version: "0.4.0"
|
||||
name: language_code
|
||||
sha256: "3124246f599039a89c990d007b00bc41b1526d6400de97cf13a478b7f4b16a83"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.2"
|
||||
leak_tracker:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -693,10 +692,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: package_info_plus
|
||||
sha256: "88bc797f44a94814f2213db1c9bd5badebafdfb8290ca9f78d4b9ee2a3db4d79"
|
||||
sha256: cb44f49b6e690fa766f023d5b22cac6b9affe741dd792b6ac7ad4fabe0d7b097
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.0.1"
|
||||
version: "6.0.0"
|
||||
package_info_plus_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -845,10 +844,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: provider
|
||||
sha256: "9a96a0a19b594dbc5bf0f1f27d2bc67d5f95957359b461cd9feb44ed6ae75096"
|
||||
sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.1.1"
|
||||
version: "6.1.2"
|
||||
pub_semver:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -959,10 +958,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_web
|
||||
sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21"
|
||||
sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.2"
|
||||
version: "2.3.0"
|
||||
shared_preferences_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1004,18 +1003,18 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: slang
|
||||
sha256: "95dee03eb3fd1b36c99f365d4eace270a0d83c6148f8e7d1057806ef60cfaf12"
|
||||
sha256: "5e08ac915ac27a3508863f37734280d30c3713d56746cd2e4a5da77413da4b95"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.29.0"
|
||||
version: "3.30.1"
|
||||
slang_flutter:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: slang_flutter
|
||||
sha256: "34c7cf297c608e24d3957a29e75c6790f4dbbfb1a4783d261a6c1e33ede7ad0f"
|
||||
sha256: "9ee040b0d364d3a4d692e4af536acff6ef513870689403494ebc6d59b0dccea6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.29.0"
|
||||
version: "3.30.0"
|
||||
source_gen:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1196,10 +1195,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: url_launcher
|
||||
sha256: c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c
|
||||
sha256: "0ecc004c62fd3ed36a2ffcbe0dd9700aee63bd7532d0b642a488b1ec310f492e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.2.4"
|
||||
version: "6.2.5"
|
||||
url_launcher_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1212,10 +1211,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_ios
|
||||
sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03"
|
||||
sha256: "9149d493b075ed740901f3ee844a38a00b33116c7c5c10d7fb27df8987fb51d5"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.2.4"
|
||||
version: "6.2.5"
|
||||
url_launcher_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1244,10 +1243,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_web
|
||||
sha256: fff0932192afeedf63cdd50ecbb1bc825d31aed259f02bb8dba0f3b729a5e88b
|
||||
sha256: "3692a459204a33e04bc94f5fb91158faf4f2c8903281ddd82915adecdb1a901d"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.3"
|
||||
version: "2.3.0"
|
||||
url_launcher_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1284,18 +1283,18 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: wakelock_plus
|
||||
sha256: f268ca2116db22e57577fb99d52515a24bdc1d570f12ac18bb762361d43b043d
|
||||
sha256: "104d94837bb28c735894dcd592877e990149c380e6358b00c04398ca1426eed4"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.4"
|
||||
version: "1.2.1"
|
||||
wakelock_plus_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: wakelock_plus_platform_interface
|
||||
sha256: "40fabed5da06caff0796dc638e1f07ee395fb18801fbff3255a2372db2d80385"
|
||||
sha256: "582f2f7aecc7376332d961a0dd1efa9378ce117657e0ade55d9ff72699a55e82"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
version: "1.2.0"
|
||||
watcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1308,18 +1307,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web
|
||||
sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05"
|
||||
sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.4.2"
|
||||
version: "0.5.1"
|
||||
web_socket_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web_socket_channel
|
||||
sha256: "939ab60734a4f8fa95feacb55804fa278de28bdeef38e616dc08e44a84adea23"
|
||||
sha256: "1d8e795e2a8b3730c41b8a98a2dff2e0fb57ae6f0764a1c46ec5915387d257b2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.3"
|
||||
version: "2.4.4"
|
||||
win32:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1361,5 +1360,5 @@ packages:
|
||||
source: hosted
|
||||
version: "3.1.2"
|
||||
sdks:
|
||||
dart: ">=3.3.0-279.1.beta <4.0.0"
|
||||
flutter: ">=3.16.0"
|
||||
dart: ">=3.3.0 <4.0.0"
|
||||
flutter: ">=3.19.2"
|
||||
|
15
pubspec.yaml
15
pubspec.yaml
@ -4,7 +4,7 @@ homepage: https://github.com/ReVanced/revanced-manager
|
||||
|
||||
publish_to: 'none'
|
||||
|
||||
version: 1.19.0-dev.17+101900017
|
||||
version: 1.20.1+101800016
|
||||
|
||||
environment:
|
||||
sdk: '>=3.0.0 <4.0.0'
|
||||
@ -12,7 +12,7 @@ environment:
|
||||
dependencies:
|
||||
animations: ^2.0.7
|
||||
collection: ^1.17.0
|
||||
connectivity_plus: ^5.0.1
|
||||
connectivity_plus: ^6.0.1
|
||||
device_apps:
|
||||
git:
|
||||
url: https://github.com/ponces/flutter_plugin_device_apps
|
||||
@ -37,19 +37,16 @@ dependencies:
|
||||
flutter_markdown: ^0.6.14
|
||||
fluttertoast: ^8.2.4
|
||||
font_awesome_flutter: ^10.4.0
|
||||
google_fonts: ^6.1.0
|
||||
google_fonts: ^6.2.1
|
||||
injectable: ^2.1.1
|
||||
intl: ^0.18.0
|
||||
json_annotation: ^4.8.1
|
||||
language_code:
|
||||
git:
|
||||
url: https://github.com/Ushie/language_code
|
||||
ref: 21b71892d1ce07fb8ea51ac2b474e435360fb6f7 # Branch: feat/add-Filipino, Upstream PR: https://github.com/lamnhan066/language_code/pull/1
|
||||
language_code: ^0.5.1
|
||||
logcat:
|
||||
git:
|
||||
url: https://github.com/BenjaminHalko/logcat
|
||||
ref: 4a6d5e0e22292c8eb160cfb9365b9ea29735fd43 # Branch: master
|
||||
package_info_plus: ^5.0.1
|
||||
package_info_plus: ^6.0.0
|
||||
path_provider: ^2.0.14
|
||||
permission_handler: ^11.0.1
|
||||
root:
|
||||
@ -77,7 +74,7 @@ dependencies:
|
||||
dev_dependencies:
|
||||
analyzer: ^6.4.1
|
||||
build_runner: any
|
||||
flutter_lints: ^3.0.1
|
||||
flutter_lints: ^3.0.2
|
||||
injectable_generator: ^2.1.5
|
||||
json_serializable: ^6.7.1
|
||||
|
||||
|
Reference in New Issue
Block a user