Compare commits

..

2 Commits

Author SHA1 Message Date
d3d8f89d53 chore: bump version to 0.0.55 2023-02-10 05:34:10 +01:00
3d8aee09c3 build: bump patcher version 2023-02-10 05:33:50 +01:00
311 changed files with 12662 additions and 34195 deletions

3
.env Normal file
View File

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

120
.github/ISSUE_TEMPLATE/bug-issue.yml vendored Normal file
View File

@ -0,0 +1,120 @@
name: 🐞 Bug report
description: Report a very clearly broken issue.
title: 'bug: <title>'
labels: [bug]
body:
- type: markdown
attributes:
value: |
# ReVanced Manager bug report
Important to note that your issue may have already been reported before. Please check for existing issues [here](https://github.com/revanced/revanced-manager/labels/bug).
- type: dropdown
attributes:
label: Type
options:
- Error while running the manager
- Error at runtime
- Cosmetic
- Other
validations:
required: true
- type: textarea
attributes:
label: Bug description
description: How did you find the bug? Any additional details that might help?
validations:
required: true
- type: textarea
attributes:
label: Steps to reproduce
description: Add the steps to reproduce this bug including your environment.
placeholder: Step 1. Download some files. Step 2. ...
validations:
required: true
- type: textarea
attributes:
label: Android version
description: Android version used.
validations:
required: true
- type: textarea
attributes:
label: Manager version
description: Manager version used.
validations:
required: true
- type: textarea
attributes:
label: Target package name
description: App you tried to patch.
validations:
required: true
- type: textarea
attributes:
label: Target package version.
description: Version of the app you tried to patch.
validations:
required: true
- type: dropdown
attributes:
label: Installation type
options:
- Non-root
- Root
validations:
required: true
- type: textarea
attributes:
label: Patches selected.
description: Patches you selected for the app.
validations:
required: true
- type: textarea
attributes:
label: Device logs (exported using Manager settings).
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
render: shell
validations:
required: true
- type: textarea
attributes:
label: Installer logs (exported using Installer menu option) [unneeded if issue is not during patching].
description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
render: shell
validations:
required: false
- type: textarea
attributes:
label: Screenshots or videos
description: Add screenshots or videos that show the bug here.
placeholder: Drag and drop the screenshots/videos into this box.
validations:
required: false
- type: textarea
attributes:
label: Solution
description: If applicable, add a possible solution.
validations:
required: false
- type: textarea
attributes:
label: Additional context
description: Add additional context here.
validations:
required: false
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Your issue will be closed if you haven't done these steps.
options:
- label: I have searched the existing issues and this is a new and no duplicate or related to another open issue.
required: true
- label: I have written a short but informative title.
required: true
- label: I filled out all of the requested information in this issue properly.
required: true
- label: The issue is related solely to the ReVanced Manager and not related to patching errors or patches
required: true

View File

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

View File

@ -1,5 +1 @@
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!
blank_issues_enabled: false

View File

@ -0,0 +1,52 @@
name: ⭐ Feature request
description: Create a detailed feature request.
title: 'feat: <title>'
labels: [feature-request]
body:
- type: dropdown
attributes:
label: Type
options:
- Functionality
- Cosmetic
- Other
validations:
required: true
- type: textarea
attributes:
label: Issue
description: What is the current problem. Why does it require a feature request?
validations:
required: true
- type: textarea
attributes:
label: Feature
description: Describe your feature in detail. How does it solve the issue?
validations:
required: true
- type: textarea
attributes:
label: Motivation
description: Why should your feature should be considered?
validations:
required: true
- type: textarea
attributes:
label: Additional context
description: Add additional context here.
validations:
required: false
- type: checkboxes
id: acknowledgements
attributes:
label: Acknowledgements
description: Your issue will be closed if you haven't done these steps.
options:
- label: I have searched the existing issues and this is a new and no duplicate or related to another open issue.
required: true
- label: I have written a short but informative title.
required: true
- label: I filled out all of the requested information in this issue properly.
required: true
- label: The issue is related solely to the ReVanced Manager
required: true

View File

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

2
.github/config.yaml vendored
View File

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

View File

@ -1,78 +0,0 @@
version: 2
updates:
- package-ecosystem: github-actions
labels: []
directory: /
target-branch: dev
schedule:
interval: monthly
groups:
gh-actions:
applies-to: version-updates
patterns:
- "*"
update-types:
- "minor"
- "patch"
- package-ecosystem: npm
labels: []
directory: /
target-branch: dev
schedule:
interval: monthly
groups:
npm:
applies-to: version-updates
patterns:
- "*"
update-types:
- "minor"
- "patch"
# ReVanced Manager Flutter
- package-ecosystem: pub
labels: []
directory: /
target-branch: dev
schedule:
interval: monthly
groups:
pubspec:
applies-to: version-updates
patterns:
- "*"
update-types:
- "minor"
- "patch"
- package-ecosystem: gradle
labels: []
directory: /android
target-branch: dev
schedule:
interval: monthly
groups:
gradle:
applies-to: version-updates
patterns:
- "*"
update-types:
- "minor"
- "patch"
# ReVanced Manager Compose
- package-ecosystem: gradle
labels: [ "ReVanced Manager Compose" ]
directory: /
target-branch: compose-dev
schedule:
interval: monthly
groups:
gradle-compose:
applies-to: version-updates
patterns:
- "*"
update-types:
- "minor"
- "patch"

View File

@ -1,117 +0,0 @@
name: Build pull request
on:
workflow_dispatch:
inputs:
# Enable or disable cache
flutter-cache:
description: Cache
type: boolean
default: true
# Select app flavour
app-flavour:
description: App flavour
default: 'release'
type: choice
options:
- release
- debug
- profile
# Select pull request
pr-number:
description: PR number (Without hashtag)
required: true
run-name: "Build pull request ${{ inputs.pr-number }}"
jobs:
build:
name: Build
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Setup pull request
env:
GH_TOKEN: ${{ github.token }}
run: |
gh repo clone "${{ github.repository }}"
cd revanced-manager
gh repo set-default "${{ github.repository }}"
gh pr checkout "${{ inputs.pr-number }}"
echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- name: Checkout
uses: actions/checkout@v4
with:
persist-credentials: false
fetch-depth: 0
- name: Cache Gradle
uses: burrunan/gradle-cache-action@v2
- name: Setup Java
run: echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: "stable"
flutter-version: 3.24.x
cache: ${{ inputs.flutter-cache }}
- name: Get dependencies
run: flutter pub get
- name: Generate translations
run: dart run slang
- name: Generate code files
run: dart run build_runner build --delete-conflicting-outputs
- name: Build
continue-on-error: true
id: flutter-build
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
flutter build apk --"${{ inputs.app-flavour }}";
- name: Prepare comment
run: |
if [[ "${{ steps.flutter-build.outcome }}" == "success" ]]; then
echo "MESSAGE=✅ Succeeded build on ${{ env.COMMIT_HASH }}." >> $GITHUB_ENV
else
echo "MESSAGE=🚫 Failed build on ${{ env.COMMIT_HASH }}." >> $GITHUB_ENV
fi
- name: "Comment on pull request #${{ inputs.pr-number }}"
uses: thollander/actions-comment-pull-request@v2
with:
GITHUB_TOKEN: ${{ github.token }}
pr_number: ${{ inputs.pr-number }}
mode: recreate
message: |
## ⚒️ Build status
${{ env.MESSAGE }}
Details: [${{ github.run_id }}](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})!
### ⚙️ Workflow run configuration
- Flutter cache: ${{ inputs.flutter-cache }}
- App flavor: ${{ inputs.app-flavour }}
- name: Upload
uses: actions/upload-artifact@v4
with:
if-no-files-found: error
name: revanced-manager-(${{ env.COMMIT_HASH }}-${{ inputs.pr-number }}-${{ inputs.app-flavour }})
path: |
build/app/outputs/flutter-apk/app-${{ inputs.app-flavour }}.apk
build/app/outputs/flutter-apk/app-${{ inputs.app-flavour }}.apk.sha1

55
.github/workflows/commit-build.yml vendored Normal file
View File

@ -0,0 +1,55 @@
name: "Android CI Actions"
on:
push:
branches:
- "**"
tags-ignore:
- "v*" # Ignore tags that start with "v" (e.g. v1.0.0) because they are handled by release-build.yml
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Set up JDK 12
uses: actions/setup-java@v3
with:
java-version: '12'
distribution: 'zulu'
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
- name: Set environment variables
run: echo $SECRETS | base64 -d > lib/utils/environment.dart
env:
SECRETS: ${{ secrets.SECRETS }}
- name: Set up Flutter
run: flutter pub get
- name: Generate files with Builder
run: flutter packages pub run build_runner build --delete-conflicting-outputs
- name: Build with Flutter
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
run: flutter build apk
- name: Sign APK
id: sign_apk
uses: ilharp/sign-android-release@v1
with:
releaseDir: build/app/outputs/apk/release
signingKey: ${{ secrets.SIGNING_KEYSTORE }}
keyStorePassword: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
keyAlias: ${{ secrets.SIGNING_KEY_ALIAS }}
keyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }}
- name: Add version to APK
run: mv ${{ steps.sign_apk.outputs.signedFile }} revanced-manager-${{ env.RELEASE_VERSION }}.apk
- name: Upload APK
uses: actions/upload-artifact@v3
with:
name: revanced-manager-${{ env.RELEASE_VERSION }}
path: revanced-manager-${{ env.RELEASE_VERSION }}.apk

46
.github/workflows/crowdin.yml vendored Normal file
View File

@ -0,0 +1,46 @@
name: Sync Crowdin translations
on:
push:
branches:
- "flutter"
paths:
- "assets/i18n/en_US.json"
- ".github/workflows/crowdin.yml"
schedule:
- cron: "0 0 * * *" # daily
workflow_dispatch:
jobs:
sync-crowdin:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Crowdin
uses: crowdin/github-action@v1
with:
config: crowdin.yml
upload_sources: true
upload_translations: false
download_translations: true
push_translations: true
create_pull_request: false
localization_branch_name: i18n_flutter
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
# commented due to Manager not being ready for the translated files to be in the main branch
# - name: GitHub is so dumb i just cant
# run: |
# sudo chmod -R ugo+rwX .
# - name: Merge
# run: |
# git checkout flutter
# git add *
# git merge i18n_flutter
# git push

View File

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

View File

@ -0,0 +1,41 @@
name: "Android CI PR Build"
on:
pull_request:
branches:
- "**"
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Set up JDK 12
uses: actions/setup-java@v3
with:
java-version: '12'
distribution: 'zulu'
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
- name: Set environment variables
run: echo $SECRETS | base64 -d > lib/utils/environment.dart
env:
SECRETS: ${{ secrets.SECRETS }}
- name: Set up Flutter
run: flutter pub get
- name: Generate files with Builder
run: flutter packages pub run build_runner build --delete-conflicting-outputs
- name: Build with Flutter
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: flutter build apk
- name: Add version to APK
run: mv build/app/outputs/flutter-apk/app-release.apk revanced-manager-${{ env.RELEASE_VERSION }}.apk
- name: Upload APK
uses: actions/upload-artifact@v3
with:
name: revanced-manager-${{ env.RELEASE_VERSION }}
path: revanced-manager-${{ env.RELEASE_VERSION }}.apk

54
.github/workflows/release-build.yml vendored Normal file
View File

@ -0,0 +1,54 @@
name: "Release Build"
on:
push:
tags:
- "v*"
jobs:
release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set env
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
- name: Set up JDK 12
uses: actions/setup-java@v3
with:
java-version: '12'
distribution: 'zulu'
- uses: subosito/flutter-action@v2
with:
channel: 'stable'
- name: Set environment variables
run: echo $SECRETS | base64 -d > lib/utils/environment.dart
env:
SECRETS: ${{ secrets.SECRETS }}
- name: Set up Flutter
run: flutter pub get
- name: Generate files with Builder
run: flutter packages pub run build_runner build --delete-conflicting-outputs
- name: Build with Flutter
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
run: flutter build apk
- name: Sign APK
id: sign_apk
uses: ilharp/sign-android-release@v1
with:
releaseDir: build/app/outputs/apk/release
signingKey: ${{ secrets.SIGNING_KEYSTORE }}
keyStorePassword: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }}
keyAlias: ${{ secrets.SIGNING_KEY_ALIAS }}
keyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }}
- name: Add version to APK
run: mv ${{steps.sign_apk.outputs.signedFile}} revanced-manager-${{ env.RELEASE_VERSION }}.apk
- name: Publish release APK
uses: "marvinpinto/action-automatic-releases@latest"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
prerelease: false
files: revanced-manager-${{ env.RELEASE_VERSION }}.apk

View File

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

View File

@ -1,72 +0,0 @@
name: Sync Crowdin
on:
workflow_dispatch:
schedule:
- cron: 00 12 * * 1
push:
branches: dev
paths:
- assets/i18n/*.json
- assets/i18n/*.dart
- .github/workflows/sync_crowdin.yml
jobs:
sync:
name: Sync
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Flutter
uses: subosito/flutter-action@v2
with:
cache: true
flutter-version: 3.24.x
- name: Sync translations from Crowdin
uses: crowdin/github-action@v1
with:
config: crowdin.yml
upload_sources: true
upload_translations: false
download_translations: true
localization_branch_name: feat/translations
create_pull_request: true
pull_request_title: "chore: Sync translations"
pull_request_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)"
pull_request_base_branch_name: "dev"
commit_message: "chore: Sync translations"
github_user_name: revanced-bot
github_user_email: github@revanced.app
env:
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
# There has to be a better way to do this
- name: Normalization of Translation Strings
run: |
dart pub get
cd assets/i18n
sudo chmod 766 *.json
cd ../..
dart run slang analyze
dart run slang clean
dart run slang normalize
cd assets/i18n
dart nuke.dart >> $GITHUB_STEP_SUMMARY
cd ../..
dart run slang
flutter analyze lib/gen/strings.g.dart --no-fatal-infos --no-fatal-warnings
- name: Commit translations
run: |
git config user.name revanced-bot
git config user.email github@revanced.app
sudo chown -R $USER:$USER .git
git commit -m "chore: Remove empty values from JSON" assets/i18n/strings_*.json
git push origin HEAD:feat/translations

View File

@ -1,19 +0,0 @@
name: Update documentation
on:
push:
paths:
- docs/**
jobs:
trigger:
runs-on: ubuntu-latest
name: Dispatch event to documentation repository
if: github.ref == 'refs/heads/main'
steps:
- uses: peter-evans/repository-dispatch@v3
with:
token: ${{ secrets.DOCUMENTATION_REPO_ACCESS_TOKEN }}
repository: revanced/revanced-documentation
event-type: update-documentation
client-payload: '{"repo": "${{ github.event.repository.name }}", "ref": "${{ github.ref }}"}'

126
.gitignore vendored
View File

@ -1,5 +1,6 @@
# Miscellaneous
*.class
*.lock
*.log
*.pyc
*.swp
@ -8,7 +9,6 @@
.buildlog/
.history
.svn/
migrate_working_dir/
# IntelliJ related
*.iml
@ -16,20 +16,109 @@ migrate_working_dir/
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Visual Studio Code related
.classpath
.project
.settings/
# Flutter repo-specific
/bin/cache/
/bin/mingit/
/dev/benchmarks/mega_gallery/
/dev/bots/.recipe_deps
/dev/bots/android_tools/
/dev/docs/doc/
/dev/docs/flutter.docs.zip
/dev/docs/lib/
/dev/docs/pubspec.yaml
/dev/integration_tests/**/xcuserdata
/dev/integration_tests/**/Pods
/packages/flutter/coverage/
version
# packages file containing multi-root paths
.packages.generated
# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
**/*.g.dart
**/*.locator.dart
**/*.router.dart
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
**/generated_plugin_registrant.dart
.packages
.pub-cache/
.pub/
/build/
build/
flutter_*.png
linked_*.ds
unlinked.ds
unlinked_spec.ds
# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
**/android/key.properties
*.jks
# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/.last_build_id
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
# macOS related
**/macos/Flutter/GeneratedPluginRegistrant.swift
**/macos/Flutter/Flutter-Debug.xcconfig
**/macos/Flutter/Flutter-Release.xcconfig
**/macos/Flutter/Flutter-Profile.xcconfig
# Windows related
**/windows/flutter/ephemeral/
**/windows/**/*.suo
**/windows/**/*.user
**/windows/**/*.userosscache
**/windows/**/*.sln.docstates
**/windows/x64/
**/windows/x86/
**/windows/**/*.[Cc]ache
**/windows/**/!*.[Cc]ache/
# Web related
lib/generated_plugin_registrant.dart
# Coverage
coverage/
# Symbolication related
app.*.symbols
@ -37,18 +126,13 @@ app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release
# Generated files
**/*.g.dart
**/*.locator.dart
**/*.router.dart
# Project specific
node_modules/
.vscode/
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
!/dev/ci/**/Gemfile.lock
Firebase related
.firebase

View File

@ -1,11 +1,11 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
# This file should be version controlled.
version:
revision: "2663184aa79047d0a33a14a3b607954f8fdd8730"
channel: "stable"
revision: 85684f9300908116a78138ea4c6036c35c9a1236
channel: stable
project_type: app
@ -13,11 +13,26 @@ project_type: app
migration:
platforms:
- platform: root
create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
- platform: android
create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
- platform: ios
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
- platform: linux
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
- platform: macos
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
- platform: web
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
- platform: windows
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
# User provided section

View File

@ -1,62 +0,0 @@
{
"branches": [
"main",
{
"name": "dev",
"prerelease": true
}
],
"plugins": [
[
"@semantic-release/commit-analyzer", {
"releaseRules": [
{ "type": "build", "scope": "Needs bump", "release": "patch" }
]
}
],
"@semantic-release/changelog",
"@semantic-release/release-notes-generator",
[
"semantic-release-pub",
{
"publishPub": false,
"updateBuildNumber": true
}
],
[
"@semantic-release/exec",
{
"prepareCmd": "flutter build apk"
}
],
[
"@semantic-release/git",
{
"assets": [
"pubspec.yaml"
]
}
],
[
"@semantic-release/github",
{
"assets": [
{
"path": "build/app/outputs/apk/release/revanced-manager*.apk"
},
],
"commits": [
"message": "chore: Release v${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
],
"successComment": false
}
],
[
"@saithodev/semantic-release-backmerge",
{
"backmergeBranches": [{"from": "main", "to": "dev"}],
"clearWorkspace": true
}
]
]
}

6
.run/main.dart.run.xml Normal file
View File

@ -0,0 +1,6 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="main.dart" type="FlutterRunConfigurationType" factoryName="Flutter">
<option name="filePath" value="$PROJECT_DIR$/lib/main.dart" />
<method v="2" />
</configuration>
</component>

91
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,91 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Generate (Builder)",
"type": "shell",
"command": "flutter packages pub run build_runner build --delete-conflicting-outputs",
"problemMatcher": []
},
{
"label": "Build (Android)",
"type": "shell",
"command": "flutter build apk",
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "Install (Android)",
"type": "shell",
"command": "adb install build\\app\\outputs\\flutter-apk\\app-release.apk",
"problemMatcher": []
},
{
"label": "Clean (Flutter)",
"type": "shell",
"command": "flutter clean && flutter pub get",
"problemMatcher": []
},
{
"label": "Clean (Builder)",
"type": "shell",
"command": "flutter packages pub run build_runner clean",
"problemMatcher": []
},
{
"label": "Build all (Android)",
"dependsOrder": "sequence",
"dependsOn": [
"Generate (Builder)",
"Build (Android)"
],
"problemMatcher": []
},
{
"label": "Clean all",
"dependsOrder": "sequence",
"dependsOn": [
"Clean (Flutter)",
"Clean (Builder)"
],
"problemMatcher": []
},
{
"label": "Clean all & Build all (Android)",
"dependsOrder": "sequence",
"dependsOn": [
"Clean all",
"Build all (Android)"
],
"problemMatcher": []
},
{
"label": "Clean all & Install (Android)",
"dependsOrder": "sequence",
"dependsOn": [
"Clean all",
"Build all (Android)",
"Install (Android)",
],
"problemMatcher": []
},
{
"label": "Build & Install (Android)",
"dependsOrder": "sequence",
"dependsOn": [
"Build (Android)",
"Install (Android)"
],
"problemMatcher": []
},
{
"label": "Validate translations",
"type": "shell",
"command": "flutter pub run flutter_i18n diff en.json pt.json",
"problemMatcher": []
}
]
}

View File

@ -1,103 +0,0 @@
<p align="center">
<picture>
<source
width="256px"
media="(prefers-color-scheme: dark)"
srcset="assets/revanced-headline/revanced-headline-vertical-dark.svg"
>
<img
width="256px"
src="assets/revanced-headline/revanced-headline-vertical-light.svg"
>
</picture>
<br>
<a href="https://revanced.app/">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo.svg" />
<img height="24px" src="assets/revanced-logo/revanced-logo.svg" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://github.com/ReVanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
<img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="http://revanced.app/discord">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://reddit.com/r/revancedapp">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://t.me/app_revanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://x.com/revancedapp">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
<img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://www.youtube.com/@ReVanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
</picture>
</a>
<br>
<br>
Continuing the legacy of Vanced
</p>
# 👋 Contribution guidelines
This document describes how to contribute to ReVanced Manager.
## 📖 Resources to help you get started
* The [documentation](/docs/README.md) provides steps to build ReVanced Manager from source
* Our [backlog](https://github.com/orgs/ReVanced/projects/12) is where we keep track of what we're working on
* [Issues](https://github.com/ReVanced/revanced-manager/issues) are where we keep track of bugs and feature requests
## 🙏 Submitting a feature request
Features can be requested by opening an issue using the
[Feature request issue template](https://github.com/ReVanced/revanced-manager/issues/new?assignees=&labels=Feature+request&projects=&template=feature_request.yml&title=feat%3A+).
> **Note**
> Requests can be accepted or rejected at the discretion of maintainers of ReVanced Manager.
> Good motivation has to be provided for a request to be accepted.
## 🐞 Submitting a bug report
If you encounter a bug while using ReVanced Manager, open an issue using the
[Bug report issue template](https://github.com/ReVanced/revanced-manager/issues/new?assignees=&labels=Bug+report&projects=&template=bug_report.yml&title=bug%3A+).
## 📝 How to contribute
1. Before contributing, it is recommended to open an issue to discuss your change
with the maintainers of ReVanced Manager. This will help you determine whether your change is acceptable
and whether it is worth your time to implement it
2. Development happens on the `dev` branch. Fork the repository and create your branch from `dev`
3. Commit your changes
4. Submit a pull request to the `dev` branch of the repository and reference issues
that your pull request closes in the description of your pull request
5. Our team will review your pull request and provide feedback. Once your pull request is approved,
it will be merged into the `dev` branch and will be included in the next release of ReVanced Manager
## 🤚 I want to contribute but don't know how to code
Even if you don't know how to code, you can still contribute by
translating ReVanced Manager on [Crowdin](https://translate.revanced.app/).
❤️ Thank you for considering contributing to ReVanced Manager,
ReVanced

116
README.md
View File

@ -1,105 +1,37 @@
<p align="center">
<picture>
<source
width="256px"
media="(prefers-color-scheme: dark)"
srcset="assets/revanced-headline/revanced-headline-vertical-dark.svg"
>
<img
width="256px"
src="assets/revanced-headline/revanced-headline-vertical-light.svg"
>
</picture>
<br>
<a href="https://revanced.app/">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo.svg" />
<img height="24px" src="assets/revanced-logo/revanced-logo.svg" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://github.com/ReVanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
<img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="http://revanced.app/discord">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://reddit.com/r/revancedapp">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://t.me/app_revanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://x.com/revancedapp">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
<img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://www.youtube.com/@ReVanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
</picture>
</a>
<br>
<br>
Continuing the legacy of Vanced
</p>
# 💊 ReVanced Manager
![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/ReVanced/revanced-manager/release.yml)
![GPLv3 License](https://img.shields.io/badge/License-GPL%20v3-yellow.svg)
The official ReVanced Manager based on Flutter.
Application to use ReVanced on Android
## ❓ About
ReVanced Manager is an application that uses [ReVanced Patcher](https://github.com/revanced/revanced-patcher) to patch Android apps.
## 💪 Features
Some of the features ReVanced Manager provides are:
- 💉 **Patch apps**: Apply any patch of your choice to Android apps
- 📱 **Portable**: ReVanced Patcher that fits in your pocket
- 🤗 **Simple UI**: Quickly understand the ins and outs of ReVanced Manager
- 🛠️ **Customization**: Configurable API, custom sources, language, signing keystore, theme and more
> **Warning**: This repository currently has no active maintainer. For that reason, development is stale. Active development continues for [revanced-cli](https://github.com/revanced/revanced-cli). If you are interested in maintaining this repository, please let us know at manager@revanced.app.
## 🔽 Download
To download the Alpha version of Manager, go [here](https://github.com/revanced/revanced-manager/releases/latest) and install the provided APK file.
You can download the most recent version of ReVanced Manager at [revanced.app/download](https://revanced.app/download) or from [GitHub releases](https://github.com/ReVanced/revanced-manager/releases/latest).
Learn how to use ReVanced Manager by following the [documentation](/docs).
## 📝 Prerequisites
1. Android 8 or higher
2. Does not work on some armv7 devices
3. [Vanced MicroG](https://github.com/TeamVanced/VancedMicroG/releases) required for YouTube and YouTube Music (Only for non-root)
## 📚 Everything else
## ⚠️ Disclaimer
*Please note that even though we're releasing the Manager, it is an ALPHA version. There's a big chance that the Manager might not work at all for you.*
### 📙 Contributing
## 🔴 Issues
For suggestions and bug reports, open an issue [here](https://github.com/revanced/revanced-manager/issues/new/choose).
Thank you for considering contributing to ReVanced Manager.
You can find the contribution guidelines [here](CONTRIBUTING.md).
## 💭 Discussion
If you wish to discuss the Manager, a thread has been made under the [#development](https://discord.com/channels/952946952348270622/1002922226443632761) channel in the Discord server, please note that this thread may be temporary and may be removed in the future.
### 🛠️ Building
To build a ReVanced Manager, you can follow the [documentation](/docs).
## 🌐 Translation
[![Crowdin](https://badges.crowdin.net/revanced/localized.svg)](https://crowdin.com/project/revanced)
### 📄 Documentation
If you wish to translate ReVanced Manager, we're accepting translations on [Crowdin](https://translate.revanced.app)
You can find the documentation for ReVanced Manager [here](/docs).
## ⚖️ License
ReVanced Manager is licensed under the GPLv3 license. Please see the [license file](LICENSE) for more information.
[tl;dr](https://www.tldrlegal.com/license/gnu-general-public-license-v3-gpl-3) you may copy, distribute and modify ReVanced Manager as long as you track changes/dates in source files.
Any modifications to ReVanced Manager must also be made available under the GPL, along with build & install instructions.
## 🛠️ Building Manager from source
1. Setup flutter environment for your [platform](https://docs.flutter.dev/get-started/install)
2. Clone the repository locally
3. Add your github token in gradle.properties like [this](https://github.com/revanced/revanced-manager/blob/docs/docs/5_building-from-source.md)
4. Open the project in terminal
5. Run `flutter pub get` in terminal
6. Then `flutter packages pub run build_runner build --delete-conflicting-outputs` (Must be done on each git pull)
7. To build release apk run `flutter build apk`

View File

@ -1,77 +0,0 @@
<p align="center">
<picture>
<source
width="256px"
media="(prefers-color-scheme: dark)"
srcset="assets/revanced-headline/revanced-headline-vertical-dark.svg"
>
<img
width="256px"
src="assets/revanced-headline/revanced-headline-vertical-light.svg"
>
</picture>
<br>
<a href="https://revanced.app/">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="assets/revanced-logo/revanced-logo.svg" />
<img height="24px" src="assets/revanced-logo/revanced-logo.svg" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://github.com/ReVanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://i.ibb.co/dMMmCrW/Git-Hub-Mark.png" />
<img height="24px" src="https://i.ibb.co/9wV3HGF/Git-Hub-Mark-Light.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="http://revanced.app/discord">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032563-d4e084b7-244e-4358-af50-26bde6dd4996.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://reddit.com/r/revancedapp">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032351-9d9d5619-8ef7-470a-9eec-2744ece54553.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://t.me/app_revanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032213-faf25ab8-0bc3-4a94-a730-b524c96df124.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://x.com/revancedapp">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/93124920/270180600-7c1b38bf-889b-4d68-bd5e-b9d86f91421a.png">
<img height="24px" src="https://user-images.githubusercontent.com/93124920/270108715-d80743fa-b330-4809-b1e6-79fbdc60d09c.png" />
</picture>
</a>&nbsp;&nbsp;&nbsp;
<a href="https://www.youtube.com/@ReVanced">
<picture>
<source height="24px" media="(prefers-color-scheme: dark)" srcset="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
<img height="24px" src="https://user-images.githubusercontent.com/13122796/178032714-c51c7492-0666-44ac-99c2-f003a695ab50.png" />
</picture>
</a>
<br>
<br>
Continuing the legacy of Vanced
</p>
# 🔒 Security Policy
This document describes how to report security vulnerabilities for ReVanced Manager.
## 🚨 Reporting a Vulnerability
Please open an issue in our [advisory tracker](https://github.com/ReVanced/revanced-manager/security/advisories/new) or reach out privately to us on [Discord](https://discord.gg/revanced).
If a vulnerability is confirmed and accepted, you can join our [Discord](https://discord.gg/revanced) server to receive a special contributor role.
### ⏳ Supported Versions
| Version | Branch | Supported |
| --------------------------------------------------------------------------------------------------------------------------------------- | ----------- | ------------------ |
| ![Latest stable release](https://img.shields.io/github/v/release/ReVanced/revanced-manager?style=for-the-badge "Latest stable release") | main | :white_check_mark: |
| ![Latest version](https://img.shields.io/badge/version-latest-brightgreen?style=for-the-badge "Latest version") | dev | :white_check_mark: |
| ![Latest version](https://img.shields.io/badge/version-latest-brightgreen?style=for-the-badge "Latest version") | compose-dev | :white_check_mark: |

View File

@ -11,16 +11,14 @@ include: package:flutter_lints/flutter.yaml
analyzer:
exclude:
- lib/app/app.locator.dart
- lib/app/app.router.dart
- lib/models/patch.g.dart
- lib/models/patched_application.g.dart
- lib/utils/env_class.g.dart
linter:
rules:
- always_declare_return_types
- require_trailing_commas
- always_put_control_body_on_new_line
- always_require_non_null_named_parameters
- always_use_package_imports # we do this commonly
- annotate_overrides
- avoid_bool_literals_in_conditional_expressions
@ -39,6 +37,8 @@ linter:
- avoid_relative_lib_imports
- avoid_renaming_method_parameters
- avoid_return_types_on_setters
- avoid_returning_null
- avoid_returning_null_for_future
- avoid_returning_null_for_void
- avoid_setters_without_getters
- avoid_shadowing_type_parameters
@ -68,10 +68,12 @@ linter:
- flutter_style_todos
- hash_and_equals
- implementation_imports
- collection_methods_unrelated_type
- iterable_contains_unrelated_type
- leading_newlines_in_multiline_strings
- library_names
- library_prefixes
- library_private_types_in_public_api
- list_remove_unrelated_type
- missing_whitespace_between_adjacent_strings
- no_adjacent_strings_in_list
- no_duplicate_case_values
@ -83,6 +85,7 @@ linter:
- overridden_fields
- package_api_docs
- package_names
- package_prefixed_library_names
- prefer_adjacent_string_concatenation
- prefer_asserts_in_initializer_lists
- prefer_collection_literals
@ -92,6 +95,7 @@ linter:
- prefer_const_declarations
- prefer_const_literals_to_create_immutables
- prefer_contains
- prefer_equal_for_default_values
- prefer_final_fields
- prefer_final_in_for_each
- prefer_final_locals
@ -108,18 +112,19 @@ linter:
- prefer_is_not_empty
- prefer_is_not_operator
- prefer_iterable_whereType
- prefer_mixin # Has false positives, see https://github.com/dart-lang/linter/issues/3018
- prefer_null_aware_method_calls # "call()" is confusing to people new to the language since it's not documented anywhere
- prefer_null_aware_operators
- prefer_single_quotes
- prefer_spread_collections
- prefer_typing_uninitialized_variables
- prefer_void_to_null
- provide_deprecation_message
- recursive_getters
- sized_box_for_whitespace
- slash_for_doc_comments
- sort_child_properties_last
- sort_constructors_first
- sort_pub_dependencies
- sort_unnamed_constructors_first
- test_types_in_equals
- throw_in_finally

2
android/.gitignore vendored
View File

@ -7,7 +7,7 @@ gradle-wrapper.jar
GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore.
# See https://flutter.dev/to/reference-keystore
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
**/*.keystore
**/*.jks

84
android/app/build.gradle Normal file
View File

@ -0,0 +1,84 @@
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 33
ndkVersion flutter.ndkVersion
compileOptions {
sourceCompatibility JavaVersion.VERSION_11
targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
jvmTarget = '11'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
applicationId "app.revanced.manager.flutter"
minSdkVersion 26
targetSdkVersion 33
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
buildTypes {
release {
shrinkResources false
minifyEnabled false
signingConfig signingConfigs.debug
}
}
packagingOptions {
exclude '/prebuilt/**'
}
}
flutter {
source '../..'
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
// ReVanced
implementation "app.revanced:revanced-patcher:6.4.3"
// Signing & aligning
implementation("org.bouncycastle:bcpkix-jdk15on:1.70")
implementation("com.android.tools.build:apksig:7.2.2")
// MicroG cronet
implementation("org.microg:cronet-common:$cronetVersion")
implementation("org.microg:cronet-native:$cronetVersion")
}

View File

@ -1,92 +0,0 @@
plugins {
id("com.android.application")
id("kotlin-android")
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
id("dev.flutter.flutter-gradle-plugin")
}
android {
namespace = "app.revanced.manager.flutter"
compileSdk = 34
ndkVersion = "27.0.12077973"
compileOptions {
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
}
defaultConfig {
applicationId = "app.revanced.manager.flutter"
minSdk = 26
targetSdk = 34
versionCode = flutter.versionCode
versionName = flutter.versionName
}
buildTypes {
configureEach {
isShrinkResources = false
isMinifyEnabled = false
signingConfig = signingConfigs["debug"]
ndk.abiFilters += setOf("armeabi-v7a", "arm64-v8a", "x86_64")
setProperty("archivesBaseName", "revanced-manager-v${flutter.versionName}")
}
release {
isShrinkResources = true
isMinifyEnabled = true
val keystoreFile = file("keystore.jks")
if (keystoreFile.exists()) {
signingConfig = signingConfigs.create("release") {
storeFile = keystoreFile
storePassword = System.getenv("KEYSTORE_PASSWORD")
keyAlias = System.getenv("KEYSTORE_ENTRY_ALIAS")
keyPassword = System.getenv("KEYSTORE_ENTRY_PASSWORD")
}
} else {
resValue("string", "app_name", "ReVanced Manager (Debug)")
applicationIdSuffix = ".debug"
signingConfig = signingConfigs["debug"]
}
resValue("string", "app_name", "ReVanced Manager")
}
debug {
resValue("string", "app_name", "ReVanced Manager (Debug)")
applicationIdSuffix = ".debug"
}
}
packaging {
jniLibs {
useLegacyPackaging = true
excludes.add("/prebuilt/**")
}
resources {
excludes.add("/prebuilt/**")
}
}
}
flutter {
source = "../.."
}
dependencies {
coreLibraryDesugaring(libs.desugar.jdk.libs) // https://pub.dev/packages/flutter_local_notifications#gradle-setup
implementation(libs.revanced.patcher)
implementation(libs.revanced.library)
}

View File

@ -1,14 +0,0 @@
-dontobfuscate
-keep class app.revanced.** { *; }
-keep class com.android.tools.smali.** { *; }
-keep class kotlin.** { *; }
-keep class com.google.auto.value.** { *; }
-keep class com.android.apksig.internal.** { *; }
-keepnames class com.google.common.collect.**
-keepnames class org.xmlpull.** { *; }
-dontwarn com.google.auto.value.**
-dontwarn com.google.j2objc.annotations.*
-dontwarn java.awt.**
-dontwarn javax.**

View File

@ -1,7 +1,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app.revanced.manager.flutter">
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

View File

@ -1,32 +1,23 @@
<manifest xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android">
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app.revanced.manager.flutter">
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
<uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />
<application
android:label="@string/app_name"
android:label="ReVanced Manager"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
android:largeHeap="true"
android:requestLegacyExternalStorage="true"
android:extractNativeLibs="true"
android:enableOnBackInvokedCallback="true">
<activity
android:name=".MainActivity"
@ -37,21 +28,13 @@
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize">
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme" />
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"/>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<service
android:name="de.julianassmann.flutter_background.IsolateHolderService"
android:exported="false"
android:foregroundServiceType="shortService" />
<activity
android:name=".ExportSettingsActivity"
android:exported="true">
</activity>
<meta-data
android:name="flutterEmbedding"
android:value="2" />
@ -64,22 +47,5 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
<receiver
android:name=".utils.packageInstaller.InstallerReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="APP_INSTALL_ACTION" />
</intent-filter>
</receiver>
<receiver
android:name=".utils.packageInstaller.UninstallerReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="APP_UNINSTALL_ACTION" />
</intent-filter>
</receiver>
</application>
</manifest>

View File

@ -1,83 +0,0 @@
package app.revanced.manager.flutter
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.os.Bundle
import android.util.Base64
import org.json.JSONObject
import java.io.ByteArrayInputStream
import java.io.File
import java.security.cert.CertificateFactory
import java.security.cert.X509Certificate
import java.security.MessageDigest
class ExportSettingsActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val callingPackageName = getCallingPackage()!!
if (getFingerprint(callingPackageName) == getFingerprint(getPackageName())) {
// Create JSON Object
val json = JSONObject()
// Default Data
json.put("keystorePassword", "s3cur3p@ssw0rd")
// Load Shared Preferences
val sharedPreferences = getSharedPreferences("FlutterSharedPreferences", Context.MODE_PRIVATE)
val allEntries: Map<String, *> = sharedPreferences.getAll()
for ((key, value) in allEntries.entries) {
json.put(key.replace("flutter.", ""), value)
}
// Load keystore
val keystoreFile = File(getExternalFilesDir(null), "/revanced-manager.keystore")
if (keystoreFile.exists()) {
val keystoreBytes = keystoreFile.readBytes()
val keystoreBase64 = Base64.encodeToString(keystoreBytes, Base64.DEFAULT)
json.put("keystore", keystoreBase64)
}
// Load saved patches
val storedPatchesFile = File(filesDir.parentFile.absolutePath, "/app_flutter/selected-patches.json")
if (storedPatchesFile.exists()) {
val patchesBytes = storedPatchesFile.readBytes()
val patches = String(patchesBytes, Charsets.UTF_8)
json.put("patches", JSONObject(patches))
}
// Send data back
val resultIntent = Intent()
resultIntent.putExtra("data", json.toString())
setResult(Activity.RESULT_OK, resultIntent)
finish()
} else {
val resultIntent = Intent()
setResult(Activity.RESULT_CANCELED)
finish()
}
}
fun getFingerprint(packageName: String): String {
// Get the signature of the app that matches the package name
val packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
val signature = packageInfo.signatures[0]
// Get the raw certificate data
val rawCert = signature.toByteArray()
// Generate an X509Certificate from the data
val certFactory = CertificateFactory.getInstance("X509")
val x509Cert = certFactory.generateCertificate(ByteArrayInputStream(rawCert)) as X509Certificate
// Get the SHA256 fingerprint
val fingerprint = MessageDigest.getInstance("SHA256").digest(x509Cert.encoded).joinToString("") {
"%02x".format(it)
}
return fingerprint
}
}

View File

@ -1,425 +1,317 @@
package app.revanced.manager.flutter
import android.app.PendingIntent
import android.app.SearchManager
import android.content.Intent
import android.content.pm.PackageInstaller
import android.os.Build
import android.os.Handler
import android.os.Looper
import app.revanced.library.ApkUtils
import app.revanced.library.ApkUtils.applyTo
import app.revanced.library.installation.installer.LocalInstaller
import androidx.annotation.NonNull
import app.revanced.manager.flutter.utils.Aapt
import app.revanced.manager.flutter.utils.packageInstaller.InstallerReceiver
import app.revanced.manager.flutter.utils.packageInstaller.UninstallerReceiver
import app.revanced.manager.flutter.utils.aligning.ZipAligner
import app.revanced.manager.flutter.utils.signing.Signer
import app.revanced.manager.flutter.utils.zip.ZipFile
import app.revanced.manager.flutter.utils.zip.structures.ZipEntry
import app.revanced.patcher.Patcher
import app.revanced.patcher.PatcherConfig
import app.revanced.patcher.patch.Patch
import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.patch.loadPatchesFromDex
import app.revanced.patcher.PatcherOptions
import app.revanced.patcher.extensions.PatchExtensions.compatiblePackages
import app.revanced.patcher.extensions.PatchExtensions.patchName
import app.revanced.patcher.logging.Logger
import app.revanced.patcher.util.patch.PatchBundle
import dalvik.system.DexClassLoader
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import kotlinx.coroutines.flow.FlowCollector
import kotlinx.coroutines.runBlocking
import org.json.JSONArray
import org.json.JSONObject
import java.io.File
import java.io.PrintWriter
import java.io.StringWriter
import java.util.logging.LogRecord
import java.util.logging.Logger
private const val PATCHER_CHANNEL = "app.revanced.manager.flutter/patcher"
private const val INSTALLER_CHANNEL = "app.revanced.manager.flutter/installer"
class MainActivity : FlutterActivity() {
private val handler = Handler(Looper.getMainLooper())
private lateinit var installerChannel: MethodChannel
private var cancel: Boolean = false
private var stopResult: MethodChannel.Result? = null
private lateinit var patches: Set<Patch<*>>
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
val patcherChannel = "app.revanced.manager.flutter/patcher"
val installerChannel = "app.revanced.manager.flutter/installer"
val openBrowserChannel = "app.revanced.manager.flutter/browser"
MethodChannel(
flutterEngine.dartExecutor.binaryMessenger,
openBrowserChannel
).setMethodCallHandler { call, result ->
if (call.method == "openBrowser") {
val searchQuery = call.argument<String>("query")
openBrowser(searchQuery)
result.success(null)
} else {
result.notImplemented()
}
}
val mainChannel =
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, patcherChannel)
this.installerChannel =
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, installerChannel)
val mainChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, PATCHER_CHANNEL)
installerChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, INSTALLER_CHANNEL)
mainChannel.setMethodCallHandler { call, result ->
when (call.method) {
"runPatcher" -> {
val inFilePath = call.argument<String>("inFilePath")
val patchBundleFilePath = call.argument<String>("patchBundleFilePath")
val originalFilePath = call.argument<String>("originalFilePath")
val inputFilePath = call.argument<String>("inputFilePath")
val patchedFilePath = call.argument<String>("patchedFilePath")
val 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 tmpDirPath = call.argument<String>("tmpDirPath")
val cacheDirPath = call.argument<String>("cacheDirPath")
val mergeIntegrations = call.argument<Boolean>("mergeIntegrations")
val keyStoreFilePath = call.argument<String>("keyStoreFilePath")
val keystorePassword = call.argument<String>("keystorePassword")
if (
inFilePath != null &&
if (patchBundleFilePath != null &&
originalFilePath != null &&
inputFilePath != null &&
patchedFilePath != null &&
outFilePath != null &&
integrationsPath != null &&
selectedPatches != null &&
options != null &&
tmpDirPath != null &&
keyStoreFilePath != null &&
keystorePassword != null
cacheDirPath != null &&
mergeIntegrations != null &&
keyStoreFilePath != null
) {
cancel = false
runPatcher(
result,
inFilePath,
patchBundleFilePath,
originalFilePath,
inputFilePath,
patchedFilePath,
outFilePath,
integrationsPath,
selectedPatches,
options,
tmpDirPath,
keyStoreFilePath,
keystorePassword
)
} else result.error(
"INVALID_ARGUMENTS",
"Invalid arguments",
"One or more arguments are missing"
)
}
"stopPatcher" -> {
cancel = true
stopResult = result
}
"getPatches" -> {
val patchBundleFilePath = call.argument<String>("patchBundleFilePath")!!
try {
val patchBundleFile = File(patchBundleFilePath)
patchBundleFile.setWritable(false)
patches = loadPatchesFromDex(
setOf(patchBundleFile),
optimizedDexDirectory = codeCacheDir
)
} catch (t: Throwable) {
return@setMethodCallHandler result.error(
"PATCH_BUNDLE_ERROR",
"Failed to load patch bundle",
t.stackTraceToString()
cacheDirPath,
mergeIntegrations,
keyStoreFilePath
)
} else {
result.notImplemented()
}
JSONArray().apply {
patches.forEach {
JSONObject().apply {
put("name", it.name)
put("description", it.description)
put("excluded", !it.use)
put("compatiblePackages", JSONArray().apply {
it.compatiblePackages?.forEach { (name, versions) ->
val compatiblePackageJson = JSONObject().apply {
put("name", name)
put(
"versions",
JSONArray().apply {
versions?.forEach { version ->
put(version)
}
})
}
put(compatiblePackageJson)
}
})
put("options", JSONArray().apply {
it.options.values.forEach { option ->
JSONObject().apply {
put("key", option.key)
put("title", option.title)
put("description", option.description)
put("required", option.required)
fun JSONObject.putValue(
value: Any?,
key: String = "value"
) = if (value is Array<*>) put(
key,
JSONArray().apply {
value.forEach { put(it) }
})
else put(key, value)
putValue(option.default)
option.values?.let { values ->
put("values",
JSONObject().apply {
values.forEach { (key, value) ->
putValue(value, key)
}
})
} ?: put("values", null)
put("type", option.type)
}.let(::put)
}
})
}.let(::put)
}
}.toString().let(result::success)
}
"installApk" -> {
val apkPath = call.argument<String>("apkPath")!!
PackageInstallerManager.result = result
installApk(apkPath)
}
"uninstallApp" -> {
val packageName = call.argument<String>("packageName")!!
uninstallApp(packageName)
PackageInstallerManager.result = result
}
else -> result.notImplemented()
}
}
}
private fun openBrowser(query: String?) {
val intent = Intent(Intent.ACTION_WEB_SEARCH).apply {
putExtra(SearchManager.QUERY, query)
}
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}
}
private fun runPatcher(
result: MethodChannel.Result,
inFilePath: String,
patchBundleFilePath: String,
originalFilePath: String,
inputFilePath: String,
patchedFilePath: String,
outFilePath: String,
integrationsPath: String,
selectedPatches: List<String>,
options: Map<String, Map<String, Any>>,
tmpDirPath: String,
keyStoreFilePath: String,
keystorePassword: String
cacheDirPath: String,
mergeIntegrations: Boolean,
keyStoreFilePath: String
) {
val inFile = File(inFilePath)
// Necessary because the file is copied from a nonwriteable location.
inFile.setWritable(true)
inFile.setReadable(true)
val originalFile = File(originalFilePath)
val inputFile = File(inputFilePath)
val patchedFile = File(patchedFilePath)
val outFile = File(outFilePath)
val integrations = File(integrationsPath)
val keyStoreFile = File(keyStoreFilePath)
val tmpDir = File(tmpDirPath)
Thread {
fun updateProgress(progress: Double, header: String, log: String) {
try {
handler.post {
installerChannel.invokeMethod(
"update",
mapOf(
"progress" to progress,
"header" to header,
"log" to log
"progress" to 0.1,
"header" to "",
"log" to "Copying original apk"
)
)
}
originalFile.copyTo(inputFile, true)
handler.post {
installerChannel.invokeMethod(
"update",
mapOf(
"progress" to 0.2,
"header" to "Unpacking apk...",
"log" to "Unpacking input apk"
)
)
}
val patcher =
Patcher(
PatcherOptions(
inputFile,
cacheDirPath,
Aapt.binary(applicationContext).absolutePath,
cacheDirPath,
logger = ManagerLogger()
)
)
handler.post {
installerChannel.invokeMethod(
"update",
mapOf("progress" to 0.3, "header" to "", "log" to "")
)
}
if (mergeIntegrations) {
handler.post {
installerChannel.invokeMethod(
"update",
mapOf(
"progress" to 0.4,
"header" to "Merging integrations...",
"log" to "Merging integrations"
)
)
}
patcher.addFiles(listOf(integrations)) {}
}
handler.post {
installerChannel.invokeMethod(
"update",
mapOf(
"progress" to 0.5,
"header" to "Applying patches...",
"log" to ""
)
)
}
val patches = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.CUPCAKE) {
PatchBundle.Dex(
patchBundleFilePath,
DexClassLoader(
patchBundleFilePath,
cacheDirPath,
null,
javaClass.classLoader
)
).loadPatches().filter { patch ->
(patch.compatiblePackages?.any { it.name == patcher.context.packageMetadata.packageName } == true || patch.compatiblePackages.isNullOrEmpty()) &&
selectedPatches.any { it == patch.patchName }
}
} else {
TODO("VERSION.SDK_INT < CUPCAKE")
}
patcher.addPatches(patches)
patcher.executePatches().forEach { (patch, res) ->
if (res.isSuccess) {
val msg = "Applied $patch"
handler.post {
installerChannel.invokeMethod(
"update",
mapOf(
"progress" to 0.5,
"header" to "",
"log" to msg
)
)
}
return@forEach
}
val msg = "Failed to apply $patch: " + "${res.exceptionOrNull()!!.message ?: res.exceptionOrNull()!!.cause!!::class.simpleName}"
handler.post {
installerChannel.invokeMethod(
"update",
mapOf("progress" to 0.5, "header" to "", "log" to msg)
)
}
}
handler.post {
installerChannel.invokeMethod(
"update",
mapOf(
"progress" to 0.7,
"header" to "Repacking apk...",
"log" to "Repacking patched apk"
)
)
}
val res = patcher.save()
ZipFile(patchedFile).use { file ->
res.dexFiles.forEach {
file.addEntryCompressData(
ZipEntry.createWithName(it.name),
it.stream.readBytes()
)
}
res.resourceFile?.let {
file.copyEntriesFromFileAligned(
ZipFile(it),
ZipAligner::getEntryAlignment
)
}
file.copyEntriesFromFileAligned(
ZipFile(inputFile),
ZipAligner::getEntryAlignment
)
}
handler.post {
installerChannel.invokeMethod(
"update",
mapOf(
"progress" to 0.9,
"header" to "Signing apk...",
"log" to ""
)
)
}
// Signer("ReVanced", "s3cur3p@ssw0rd").signApk(patchedFile, outFile, keyStoreFile)
try {
Signer("ReVanced", "s3cur3p@ssw0rd").signApk(patchedFile, outFile, keyStoreFile)
} catch (e: Exception) {
//log to console
print("Error signing apk: ${e.message}")
e.printStackTrace()
}
handler.post {
installerChannel.invokeMethod(
"update",
mapOf(
"progress" to 1.0,
"header" to "Finished!",
"log" to "Finished!"
)
)
}
} catch (ex: Throwable) {
val stack = ex.stackTraceToString()
handler.post {
installerChannel.invokeMethod(
"update",
mapOf(
"progress" to -100.0,
"header" to "Aborting...",
"log" to "An error occurred! Aborting\nError:\n$stack"
)
)
}
}
fun postStop() = handler.post { stopResult!!.success(null) }
fun cancel(block: () -> Unit = {}): Boolean {
if (cancel) {
block()
postStop()
}
return cancel
}
// Setup logger
Logger.getLogger("").apply {
handlers.forEach {
it.close()
removeHandler(it)
}
object : java.util.logging.Handler() {
override fun publish(record: LogRecord) {
if (record.loggerName?.startsWith("app.revanced") != true || cancel) return
updateProgress(-1.0, "", record.message)
}
override fun flush() = Unit
override fun close() = flush()
}.let(::addHandler)
}
try {
updateProgress(0.0, "Reading APK...", "Reading APK")
val patcher = Patcher(
PatcherConfig(
inFile,
tmpDir,
Aapt.binary(applicationContext).absolutePath,
tmpDir.path,
true // TODO: Add option to disable this
)
)
if (cancel(patcher::close)) return@Thread
updateProgress(0.02, "Loading patches...", "Loading patches")
val patches = patches.filter { patch ->
val isCompatible = patch.compatiblePackages?.any { (name, _) ->
name == patcher.context.packageMetadata.packageName
} ?: false
val compatibleOrUniversal =
isCompatible || patch.compatiblePackages.isNullOrEmpty()
compatibleOrUniversal && selectedPatches.any { it == patch.name }
}.onEach { patch ->
options[patch.name]?.forEach { (key, value) ->
patch.options[key] = value
}
}.toSet()
if (cancel(patcher::close)) return@Thread
updateProgress(0.05, "Executing...", "")
val patcherResult = patcher.use {
it += patches
runBlocking {
// Update the progress bar every time a patch is executed from 0.15 to 0.7
val totalPatchesCount = patches.size
val progressStep = 0.55 / totalPatchesCount
var progress = 0.05
patcher().collect(FlowCollector { patchResult: PatchResult ->
if (cancel(patcher::close)) return@FlowCollector
val msg = patchResult.exception?.let {
val writer = StringWriter()
it.printStackTrace(PrintWriter(writer))
"${patchResult.patch.name} failed: $writer"
} ?: run {
"${patchResult.patch.name} succeeded"
}
updateProgress(progress, "", msg)
progress += progressStep
})
}
if (cancel(patcher::close)) return@Thread
updateProgress(0.75, "Building...", "")
patcher.get()
}
if (cancel(patcher::close)) return@Thread
patcherResult.applyTo(inFile)
if (cancel(patcher::close)) return@Thread
ApkUtils.signApk(
inFile,
outFile,
"ReVanced",
ApkUtils.KeyStoreDetails(
keyStoreFile,
keystorePassword,
"alias",
keystorePassword
)
)
updateProgress(.85, "Patched", "Patched APK")
} catch (ex: Throwable) {
if (!cancel) {
val stack = ex.stackTraceToString()
updateProgress(
-100.0,
"Failed",
"An error occurred:\n$stack"
)
}
} finally {
inFile.delete()
tmpDir.deleteRecursively()
}
handler.post { result.success(null) }
}.start()
}
private fun installApk(apkPath: String) {
val packageInstaller: PackageInstaller = applicationContext.packageManager.packageInstaller
val sessionParams =
PackageInstaller.SessionParams(PackageInstaller.SessionParams.MODE_FULL_INSTALL)
val sessionId: Int = packageInstaller.createSession(sessionParams)
val session: PackageInstaller.Session = packageInstaller.openSession(sessionId)
session.use { activeSession ->
val sessionOutputStream = activeSession.openWrite(applicationContext.packageName, 0, -1)
sessionOutputStream.use { outputStream ->
val apkFile = File(apkPath)
apkFile.inputStream().use { inputStream ->
inputStream.copyTo(outputStream)
}
inner class ManagerLogger : Logger {
override fun error(msg: String) {
handler.post {
installerChannel
.invokeMethod(
"update",
mapOf("progress" to -1.0, "header" to "", "log" to msg)
)
}
}
val receiverIntent = Intent(applicationContext, InstallerReceiver::class.java).apply {
action = "APP_INSTALL_ACTION"
}
val receiverPendingIntent = PendingIntent.getBroadcast(
context,
sessionId,
receiverIntent,
PackageInstallerManager.flags
)
session.commit(receiverPendingIntent.intentSender)
session.close()
}
private fun uninstallApp(packageName: String) {
val packageInstaller: PackageInstaller = applicationContext.packageManager.packageInstaller
val receiverIntent = Intent(applicationContext, UninstallerReceiver::class.java).apply {
action = "APP_UNINSTALL_ACTION"
override fun warn(msg: String) {
handler.post {
installerChannel.invokeMethod(
"update",
mapOf("progress" to -1.0, "header" to "", "log" to msg)
)
}
}
val receiverPendingIntent =
PendingIntent.getBroadcast(context, 0, receiverIntent, PackageInstallerManager.flags)
packageInstaller.uninstall(packageName, receiverPendingIntent.intentSender)
}
object PackageInstallerManager {
var result: MethodChannel.Result? = null
val flags = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
PendingIntent.FLAG_MUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
} else {
PendingIntent.FLAG_UPDATE_CURRENT
override fun info(msg: String) {
handler.post {
installerChannel.invokeMethod(
"update",
mapOf("progress" to -1.0, "header" to "", "log" to msg)
)
}
}
override fun trace(_msg: String) { /* unused */
}
}
}

View File

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

View File

@ -1,32 +0,0 @@
package app.revanced.manager.flutter.utils.packageInstaller
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInstaller
import app.revanced.manager.flutter.MainActivity
class InstallerReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
when (val status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -1)) {
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
val confirmationIntent = intent.getParcelableExtra<Intent>(Intent.EXTRA_INTENT)
if (confirmationIntent != null) {
context.startActivity(confirmationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
}
}
else -> {
val packageName = intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME)
val message = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE)
val otherPackageName = intent.getStringExtra(PackageInstaller.EXTRA_OTHER_PACKAGE_NAME)
MainActivity.PackageInstallerManager.result!!.success(mapOf(
"status" to status,
"packageName" to packageName,
"message" to message,
"otherPackageName" to otherPackageName
))
}
}
}
}

View File

@ -1,24 +0,0 @@
package app.revanced.manager.flutter.utils.packageInstaller
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInstaller
import app.revanced.manager.flutter.MainActivity
class UninstallerReceiver : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
when (val status = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -1)) {
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
val confirmationIntent = intent.getParcelableExtra<Intent>(Intent.EXTRA_INTENT)
if (confirmationIntent != null) {
context.startActivity(confirmationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK))
}
}
else -> {
MainActivity.PackageInstallerManager.result!!.success(status)
}
}
}
}

View File

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

View File

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

View File

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

View File

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

View File

@ -0,0 +1,190 @@
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
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -1,30 +0,0 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="108dp"
android:height="108dp"
android:viewportWidth="256"
android:viewportHeight="256">
<group android:scaleX="0.23"
android:scaleY="0.23"
android:translateX="98.56"
android:translateY="98.56">
<path
android:pathData="M253.85,4.9C254.32,3.82 254.22,2.57 253.58,1.58C252.93,0.6 251.83,0 250.64,0C243.29,0 230.47,0 225.95,0C224.96,0 224.06,0.59 223.66,1.5C216.03,18.88 144.1,182.7 130.29,214.16C129.89,215.07 128.99,215.66 128,215.66C127.01,215.66 126.11,215.07 125.71,214.16C111.9,182.7 39.97,18.88 32.34,1.5C31.94,0.59 31.04,0 30.05,0C25.53,0 12.71,0 5.36,0C4.17,0 3.07,0.6 2.42,1.58C1.78,2.57 1.68,3.82 2.15,4.9C16.78,38.3 101.47,231.61 111.24,253.9C111.8,255.18 113.06,256 114.45,256C120.29,256 135.71,256 141.55,256C142.94,256 144.2,255.18 144.76,253.9C154.52,231.61 239.22,38.3 253.85,4.9Z"
android:fillColor="#ffffff"/>
<path
android:pathData="M130.59,131.75C130.06,132.68 129.07,133.25 128,133.25C126.93,133.25 125.94,132.68 125.4,131.75C113.45,111.06 63.88,25.19 51.93,4.5C51.4,3.57 51.4,2.43 51.93,1.5C52.47,0.57 53.46,-0 54.53,-0L201.47,-0C202.54,-0 203.53,0.57 204.06,1.5C204.6,2.43 204.6,3.57 204.06,4.5C192.12,25.19 142.54,111.06 130.59,131.75Z">
<aapt:attr name="android:fillColor">
<gradient
android:startX="128"
android:startY="-0"
android:endX="128"
android:endY="254.6"
android:type="linear">
<item android:offset="0" android:color="#FFF04E98"/>
<item android:offset="0.5" android:color="#FF5F65D4"/>
<item android:offset="1" android:color="#FF4E98F0"/>
</gradient>
</aapt:attr>
</path>
</group>
</vector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 KiB

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 7.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@ -1,3 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/ic_notification" />

View File

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

View File

@ -1,7 +1,4 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app.revanced.manager.flutter">
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>

37
android/build.gradle Normal file
View File

@ -0,0 +1,37 @@
buildscript {
ext.cronetVersion = '102.5005.125'
ext.kotlin_version = '1.8.0'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.1.3'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
maven {
url = uri("https://maven.pkg.github.com/revanced/revanced-patcher")
credentials {
username = (project.findProperty("gpr.user") ?: System.getenv("GITHUB_ACTOR")) as String
password = (project.findProperty("gpr.key") ?: System.getenv("GITHUB_TOKEN")) as String
}
}
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}

View File

@ -1,31 +0,0 @@
import com.android.build.api.dsl.CommonExtension
allprojects {
repositories {
google()
mavenCentral()
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/revanced/registry")
credentials {
username = providers.gradleProperty("gpr.user").orNull ?: System.getenv("GITHUB_ACTOR")
password = providers.gradleProperty("gpr.key").orNull ?: System.getenv("GITHUB_TOKEN")
}
}
}
}
layout.buildDirectory = File("../build")
subprojects {
afterEvaluate {
extensions.findByName("android")?.let {
it as CommonExtension<*, *, *, *, *, *>
if (it.compileSdk != null && it.compileSdk!! < 31)
it.compileSdk = 34
}
}
layout.buildDirectory = rootProject.layout.buildDirectory.file(name).get().asFile
evaluationDependsOn(":app")
}

View File

@ -1,8 +1,3 @@
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.caching=true
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=false
android.nonFinalResIds=false
android.enableJetifier=true

View File

@ -1,9 +0,0 @@
[versions]
revanced-patcher = "20.0.2"
revanced-library = "3.0.1"
desugar_jdk_libs = "2.1.2"
[libraries]
revanced-patcher = { module = "app.revanced:revanced-patcher", version.ref = "revanced-patcher" }
revanced-library = { module = "app.revanced:revanced-library", version.ref = "revanced-library" }
desugar_jdk_libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar_jdk_libs" }

View File

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

11
android/settings.gradle Normal file
View File

@ -0,0 +1,11 @@
include ':app'
def localPropertiesFile = new File(rootProject.projectDir, "local.properties")
def properties = new Properties()
assert localPropertiesFile.exists()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle"

View File

@ -1,24 +0,0 @@
pluginManagement {
val properties = java.util.Properties().apply {
load(file("local.properties").inputStream())
}
val flutterSdkPath = properties.getProperty("flutter.sdk")
assert(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.5.0" apply false
id("org.jetbrains.kotlin.android") version "2.0.20" apply false
}
include(":app")

View File

@ -1,14 +0,0 @@
# Nuke:tm:
> ![CAUTION]
> Some of the code are licensed under BSD 3-Clause License, please check inside the code file for more information.
## Usage
Move to your desire directory and run
```bash
dart nuke.dart
```
and it will remove all the empty keys from the JSON files in the current folder.

200
assets/i18n/ar_SA.json Normal file
View File

@ -0,0 +1,200 @@
{
"okButton": "موافق",
"cancelButton": "إلغاء",
"updateButton": "تحديث",
"enabledLabel": "مفعّل",
"disabledLabel": "معطّل",
"yesButton": "نعم",
"noButton": "لا",
"warning": "تحذير",
"navigationView": {
"dashboardTab": "لوحة التحكم",
"patcherTab": "لوحة التعديل",
"settingsTab": "الإعدادات"
},
"homeView": {
"widgetTitle": "لوحة التحكم",
"updatesSubtitle": "تحديثات",
"patchedSubtitle": "التطبيقات المعدلة",
"updatesAvailable": "تحديثات متوفرة",
"noUpdates": "لا توجد تحديثات متاحة",
"WIP": "العمل قيد التنفيذ...",
"noInstallations": "لا توجد تطبيقات معدلة مثبتة",
"installed": "مثبت",
"updateDialogTitle": "تحديث المدير",
"updateChangelogTitle": "سجل التغييرات",
"notificationTitle": "تم تنزيل التحديث",
"notificationText": "أنقر لتثبيت التحديث",
"downloadingMessage": "جاري تحميل التحديث...",
"installingMessage": "جاري تثبيت التحديث...",
"errorDownloadMessage": "تعذر تحميل التحديث",
"errorInstallMessage": "تعذّر تثبيت التحديث",
"noConnection": "لا يوجد اتصال بالإنترنت",
"updatesDisabled": "تحديث تطبيق تم تعديله معطل حاليًا. أعد تعديل التطبيق مرة أخرى."
},
"applicationItem": {
"patchButton": "تعديل",
"infoButton": "معلومات",
"changelogLabel": "سجل التغييرات"
},
"latestCommitCard": {
"loadingLabel": "جاري التحميل...",
"timeagoLabel": "منذ {time}",
"patcherLabel": "المعدّل: ",
"managerLabel": "المدير: ",
"updateButton": "تحديث المدير"
},
"patcherView": {
"widgetTitle": "المُعَّدِّل",
"patchButton": "تعديل",
"patchDialogText": "لقد اخترت تعديل مورد وتم اكتشاف APK منقسم مثبت، لذا من الممكن أن تحدث أخطاء في التعديل.\nهل أنت متأكد أنك تريد المتابعة؟"
},
"appSelectorCard": {
"widgetTitle": "إختر تطبيقًا",
"widgetTitleSelected": "التطبيق المحدد",
"widgetSubtitle": "لم يتم اختيار أي تطبيق",
"noAppsLabel": "لم يتم العثور على تطبيقات",
"currentVersion": "الحالي",
"recommendedVersion": "موصى به",
"anyVersion": "أي"
},
"patchSelectorCard": {
"widgetTitle": "اختر التعديلات",
"widgetTitleSelected": "التعديلات التي تم اختيارها",
"widgetSubtitle": "اختر تطبيق أولاً",
"widgetEmptySubtitle": "لم يتم تحديد أي تعديلات"
},
"socialMediaCard": {
"widgetTitle": "وسائل التواصل",
"widgetSubtitle": "تابعونا!"
},
"appSelectorView": {
"viewTitle": "إختر تطبيقًا",
"searchBarHint": "البحث عن التطبيقات",
"storageButton": "التخزين",
"errorMessage": "لا يمكن استخدام التطبيق المحدد"
},
"patchesSelectorView": {
"viewTitle": "اختر التعديلات",
"searchBarHint": "البحث عن التعديلات",
"doneButton": "تم",
"recommended": "موصى به",
"all": "الكل",
"none": "بدون",
"loadPatchesSelection": "تحميل التعديلات المحددة",
"noSavedPatches": "لا توجد تعديلات محفوظة للتطبيق المختار.\nاضغط على تم لحفظ الاختيار الحالي.",
"noPatchesFound": "لم يتم العثور على تعديلات للتطبيق المحدد",
"selectAllPatchesWarningContent": "أنت على وشك تحديد جميع التعديلات، بما في ذلك التعديلات غير الموصى بها والتي يمكن أن تسبب سلوكاً غير مرغوب فيه."
},
"patchItem": {
"unsupportedDialogText": "قد يؤدي تحديد هذا التعديل إلى حدوث أخطاء في عملية التعديل.\n\nإصدار التطبيق: {packageVersion}\nالإصدارات المدعومة حالياً:\n{supportedVersions}",
"unsupportedPatchVersion": "التعديل غير مدعوم لهذا الإصدار من التطبيق. فعِّل خِيار التعديل التجريبي في الإعدادات للمتابعة."
},
"installerView": {
"widgetTitle": "المثبت",
"installButton": "تثبيت",
"installRootButton": "تثبيت كـ Root",
"openButton": "فتح",
"shareButton": "شارك ملف",
"notificationTitle": "ReVanced Manager يقوم بعملية التعديل",
"notificationText": "انقر للعودة إلى المثبت",
"shareApkMenuOption": "مشاركة APK",
"exportApkMenuOption": "تصدير APK",
"shareLogMenuOption": "مشاركة السجل",
"installErrorDialogTitle": "خطأ",
"installErrorDialogText1": "التثبيت بطريقة Root غير ممكن مع التعديلات التي تم اختيارها.\nأعد تعديل التطبيق الخاص بك أو اختر التثبيت كـ Non-Root.",
"installErrorDialogText2": "التثبيت بطريقة Non-Root غير ممكن مع التعديلات التي تم اختيارها.\nأعد تعديل التطبيق الخاص بك، أو اختر التثبيت كـ Root إذا كان قد تم عمل Root لجهازك.",
"installErrorDialogText3": "لا يمكن التثبيت بطريقة Root لأن ملف APK تم اختياره من وحدة التخزين.\nحدد تطبيقًا مثبتًا أو اختر التثبيت كـ Non-Root.",
"noExit": "المثبت لا يزال قيد التشغيل، لا يمكن الخروج..."
},
"settingsView": {
"widgetTitle": "الإعدادات",
"appearanceSectionTitle": "المظهر",
"teamSectionTitle": "الفريق",
"infoSectionTitle": "معلومات",
"advancedSectionTitle": "إعدادات متقدمة",
"logsSectionTitle": "السجلات",
"darkThemeLabel": "الوضع الداكن",
"darkThemeHint": "أهلا وسهلا بك إلى الجانب الداكن",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "استمتع بتجربة أقرب إلى جهازك",
"languageLabel": "اللغة",
"englishOption": "الإنجليزية",
"sourcesLabel": "المصادر",
"sourcesLabelHint": "تكوين مصادرك المخصصة",
"hostRepositoryLabel": "مستودع API",
"orgPatchesLabel": "تنظيم التعديلات",
"sourcesPatchesLabel": "مصدر التعديلات",
"orgIntegrationsLabel": "تنظيم الدمج",
"sourcesIntegrationsLabel": "مصدر الـدمج",
"sourcesResetDialogTitle": "إعادة التعيين",
"sourcesResetDialogText": "هل تريد بالتأكيد إعادة تعيين المصادر المخصصة إلى قيمها الافتراضية؟",
"apiURLResetDialogText": "هل أنت متأكد من أنك تريد إعادة رابط API إلى القيم الافتراضية؟",
"contributorsLabel": "المساهمون",
"contributorsHint": "قائمة المساهمين في ReVanced",
"logsLabel": "السجلات",
"logsHint": "مشاركة سجلات المدير",
"apiURLLabel": "رابط API",
"apiURLHint": "تكوين رابط API الخاص بك",
"selectApiURL": "رابط API",
"experimentalUniversalPatchesLabel": "دعم التعديلات العامة التجريبية",
"experimentalUniversalPatchesHint": "عرض جميع التطبيقات المراد استخدامها مع التعديلات العامة، قد يكون تحميل قائمة التطبيقات أبطأ",
"experimentalPatchesLabel": "دعم التعديلات التجريبية",
"experimentalPatchesHint": "تمكين استخدام التعديلات غير المدعومة في أي إصدار للتطبيق",
"enabledExperimentalPatches": "تم تمكين دعم التعديلات التجريبية",
"exportSectionTitle": "استيراد و تصدير",
"aboutLabel": "عن التطبيق",
"snackbarMessage": "نُسِخ إلى الحافظة",
"sentryLabel": "تسجيل الحراسة",
"sentryHint": "إرسال سجلات مجهولة لمساعدتنا في تحسين ReVanced Manager",
"restartAppForChanges": "إعادة تشغيل التطبيق لتطبيق التغييرات",
"deleteKeystoreLabel": "حذف ملف تخزين المفاتيح",
"deleteKeystoreHint": "حذف ملف تخزين المفاتيح المستخدم للتوقيع على التطبيق",
"deletedKeystore": "تم حذف مِلَفّ تخزين المفاتيح",
"deleteTempDirLabel": "حذف الملفات المؤقتة",
"deleteTempDirHint": "حذف الملفات المؤقتة غير المستخدمة",
"deletedTempDir": "تم حذف الملفات المؤقتة",
"exportPatchesLabel": "تصدير التعديلات المحددة",
"exportPatchesHint": "تصدير التعديلات المحددة إلى مِلَفّ JSON",
"exportedPatches": "تم تصدير التعديلات المحددة",
"noExportFileFound": "لا يوجد تعديلات محددة للتصدير",
"importPatchesLabel": "استيراد التعديلات المحددة",
"importPatchesHint": "استيراد التعديلات المحددة من مِلَفّ JSON",
"importedPatches": "تم استيراد التعديلات المحددة",
"resetStoredPatchesLabel": "إعادة تعيين التعديلات",
"resetStoredPatchesHint": "إعادة تعيين التعديلات المحددة المخزنة",
"resetStoredPatches": "تم إعادة تعيين التعديلات المحددة",
"jsonSelectorErrorMessage": "تعذر استخدام مِلَفّ JSON المحدد",
"deleteLogsLabel": "حذف السجلات",
"deleteLogsHint": "حذف سجلات المدير التي تم جمعها",
"deletedLogs": "تم حذف السجلات"
},
"appInfoView": {
"widgetTitle": "معلومات التطبيق",
"openButton": "فتح",
"uninstallButton": "إلغاء التثبيت",
"patchButton": "تعديل",
"unpatchButton": "إلغاء التعديل",
"unpatchDialogText": "هل أنت متأكد من إلغاء تعديل هذا التطبيق؟",
"rootDialogTitle": "خطأ",
"rootDialogText": "تم تثبيت التطبيق بأذونات المستخدم المتميز، لكن ReVanced Manager ليس لديه أذونات حاليًا.\nالرجاء منح أذونات المستخدم المتميز أولاً.",
"packageNameLabel": "اسم الحُزْمَة",
"originalPackageNameLabel": "اسم الحُزْمَة الأصلية",
"installTypeLabel": "نوع التثبيت",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "بدون Root",
"patchedDateLabel": "تاريخ التعديل",
"patchedDateHint": "{date} في {time}",
"appliedPatchesLabel": "التعديلات المطبقة",
"appliedPatchesHint": "{quantity} تعديلات مطبقة",
"updateNotImplemented": "لم يتم تنفيذ هذه الميزة بعد"
},
"contributorsView": {
"widgetTitle": "المساهمون",
"patcherContributors": "المساهمون المُعَدِّلون",
"patchesContributors": "المساهمون في التعديلات",
"integrationsContributors": "المساهمون في الدمج",
"cliContributors": "المساهمون في CLI",
"managerContributors": "المساهمون في Manager"
}
}

196
assets/i18n/az_AZ.json Normal file
View File

@ -0,0 +1,196 @@
{
"okButton": "Oldu",
"cancelButton": "İmtina",
"enabledLabel": "Fəaldır",
"disabledLabel": "Sıradan çıxarıldı",
"yesButton": "Bəli",
"noButton": "Xeyr",
"warning": "Xәbәrdarlıq",
"navigationView": {
"dashboardTab": "İdarəetmə lövhəsi",
"patcherTab": "Yamaqlayıcı",
"settingsTab": "Tənzimləmələr"
},
"homeView": {
"widgetTitle": "İdarəetmə lövhəsi",
"updatesSubtitle": "Güncəlləmələr",
"patchedSubtitle": "Yamaqlanmış tətbiqlər",
"updatesAvailable": "Güncəlləmə mövcuddur",
"noUpdates": "Güncəlləmə mövcud deyil",
"WIP": "Proses davam edir...",
"noInstallations": "Yamaqlanmış tətbiq yoxdur",
"installed": "Quraşdırıldı",
"updateDialogTitle": "Güncəlləmə meneceri",
"updateDialogText": "ReVanced Meneceri endirmək və güncəlləmə istədiyinizə əminsiniz?",
"notificationTitle": "Güncəlləmə endirildi",
"notificationText": "Güncəlləməni quraşdırmaq üçün toxunun",
"downloadingMessage": "Güncəlləmə endirilir...",
"installingMessage": "Güncəlləmə quraşdırılır...",
"errorDownloadMessage": "Güncəlləmə endirilə bilmir",
"errorInstallMessage": "Güncəlləmə quraşdırıla bilmir",
"noConnection": "İnternet bağlantısı yoxdur",
"updatesDisabled": "Yamaqlanmış bir tətbiqin güncəllənməsi hazırda sıradan çıxarılıb. Tətbiqi yenidən yamaqlayın."
},
"applicationItem": {
"patchButton": "Yamaqla",
"infoButton": "Məlumat",
"changelogLabel": "Dəyişiklik jurnalı"
},
"latestCommitCard": {
"loadingLabel": "Yüklənir...",
"timeagoLabel": "{time} əvvəl",
"patcherLabel": "Yamaqlayıcı: ",
"managerLabel": "Menecer: ",
"updateButton": "Güncəlləmə meneceri"
},
"patcherView": {
"widgetTitle": "Yamaqlayıcı",
"patchButton": "Yamaqla",
"patchDialogText": "Bir resurs yamağı seçmisiniz və bölünmüş bir APK quraşdırması aşkarlandı, ona görə də yamaq prosesi zamanı xəta baş verə bilər.\nDavam etmək istədiyinizə əminsiniz?"
},
"appSelectorCard": {
"widgetTitle": "Bir tətbiq seçin",
"widgetTitleSelected": "Seçilmiş tətbiq",
"widgetSubtitle": "Heç bir tətbiq seçilməyib",
"noAppsLabel": "Heç bir tətbiq tapılmadı",
"currentVersion": "Hazırkı",
"recommendedVersion": "Tövsiyyə edilən",
"anyVersion": "istənilən"
},
"patchSelectorCard": {
"widgetTitle": "Yamaqları seçin",
"widgetTitleSelected": "Seçilmiş yamaqlar",
"widgetSubtitle": "Əvvəlcə bir tətbiq seçin",
"widgetEmptySubtitle": "Heç bir yamaq seçilməyib"
},
"socialMediaCard": {
"widgetTitle": "Sosial",
"widgetSubtitle": "Xətdəyik!"
},
"appSelectorView": {
"viewTitle": "Bir tətbiq seçin",
"searchBarHint": "Tətbiq axtarın",
"storageButton": "Anbar",
"errorMessage": "Seçilmiş tətbiq istifadə edilə bilmir"
},
"patchesSelectorView": {
"viewTitle": "Yamaqları seçin",
"searchBarHint": "Yamaqları axtarın",
"doneButton": "Hazırdır",
"recommended": "Tövsiyyə edilən",
"all": "Hamısı",
"none": "Heç biri",
"loadPatchesSelection": "Yamaq seçimini yüklə",
"noSavedPatches": "Seçilmiş tətbiq üçün saxlanılmış yamaq yoxdur\nHazırkı seçimi saxlamaq üçün \"Hazırdır\"a toxunun",
"noPatchesFound": "Seçilmiş tətbiq üçün yamaq tapılmadı",
"selectAllPatchesWarningContent": "Tövsiyə edilməyən yamaqları ehtiva edən və istənilməyən davranışlara səbəb ola biləcək bütün yamaqları seçmək üzrəsiniz."
},
"patchItem": {
"unsupportedDialogText": "Bu yamağı seçmək, yamaqlama xətalarına səbəb ola bilər.\n\nTətbiq versiyası: {packageVersion} \nDəstəklənən versiyalar:\n{supportedVersions}",
"unsupportedPatchVersion": "Yamaq, bu tətbiq versiyası üçün dəstəklənmir. Davam etmək üçün tənzimləmələrdə təcrübi keçidi fəallaşdırın."
},
"installerView": {
"widgetTitle": "Quraşdırıcı",
"installButton": "Quraşdır",
"installRootButton": "Root olaraq quraşdır",
"openButton": "Aç",
"shareButton": "Faylı paylaş",
"notificationTitle": "ReVanced Menecer yamaqlayır",
"notificationText": "Quraşdırıcıya geri qayıtmaq üçün toxunun",
"shareApkMenuOption": "APK-nı paylaş",
"exportApkMenuOption": "APK-nı xaricə köçür",
"shareLogMenuOption": "Jurnalı paylaş",
"installErrorDialogTitle": "Xəta",
"installErrorDialogText1": "Hazırkı yamaq seçimi ilə Root quraşdırması mümkün deyil.\nTətbiqi yenidən yamaqlayın və ya Root-suz quraşdırmanı seçin.",
"installErrorDialogText2": "Hazırkı yamaq seçimi ilə Root-suz quraşdırma mümkün deyil.\nTətbiqi yenidən yamaqlayın və ya cihazınız Root-ludursa, Root quraşdırmasını seçin.",
"installErrorDialogText3": "Orijinal APK, anbardan seçildiyi üçün Root quraşdırması mümkün deyil.\nQuraşdırılmış bir tətbiq seçin və ya Root-suz quraşdırmanı seçin.",
"noExit": "Quraşdırıcı hələ də işləyir, çıxış edilə bilməz..."
},
"settingsView": {
"widgetTitle": "Tənzimləmələr",
"appearanceSectionTitle": "Görünüş",
"teamSectionTitle": "Komanda",
"infoSectionTitle": "Məlumat",
"advancedSectionTitle": "Qabaqcıl",
"logsSectionTitle": "Jurnallar",
"darkThemeLabel": "Qaranlıq rejim",
"darkThemeHint": "Qaranlıq tərəfə xoş gəldiniz",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Cihazınıza yaxın bir təcrübədən həzz alın",
"languageLabel": "Dil",
"englishOption": "İngiliscə",
"sourcesLabel": "Mənbələr",
"sourcesLabelHint": "Özəl mənbələrinizi konfiqurasiya edin",
"orgPatchesLabel": "Yamaq təşkilatı",
"sourcesPatchesLabel": "Yamaq mənbəyi",
"orgIntegrationsLabel": "İnteqrasiya təşkilatı",
"sourcesIntegrationsLabel": "İnteqrasiya mənbəyi",
"sourcesResetDialogTitle": "Sıfırla",
"sourcesResetDialogText": "Özəl mənbələri ilkin dəyərlərinə sıfırlamaq istədiyinizə əminsiniz?",
"apiURLResetDialogText": "API URL-ni ilkin dəyərinə sıfırlamaq istədiyinizə əminsiz?",
"contributorsLabel": "Töhfə verənlər",
"contributorsHint": "ReVanced-ə töhfə verənlərin siyahısı",
"logsLabel": "Jurnallar",
"logsHint": "Menecerin jurnallarını paylaş",
"apiURLLabel": "API URL",
"apiURLHint": "Özəl API URL-lərinizi konfiqurasiya edin",
"selectApiURL": "API URL",
"experimentalPatchesLabel": "Təcrübi yamaq dəstəyi",
"experimentalPatchesHint": "İstənilən bir tətbiq versiyasında dəstəklənməyən yamaqların istifadəsini fəallaşdır",
"enabledExperimentalPatches": "Təcrübi yamaq dəstəyi fəaldır",
"exportSectionTitle": "Daxilə və xaricə köçür",
"aboutLabel": "Haqqında",
"snackbarMessage": "Lövhəyə kopyalandı",
"sentryLabel": "Keşikçi jurnalı",
"sentryHint": "ReVanced Manager-i inkişaf etdirməyimizə kömək etməsi üçün anonim jurnallar göndərin",
"restartAppForChanges": "Dəyişiklikləri tətbiq etmək üçün tətbiqi yenidən başlat",
"deleteKeystoreLabel": "Keystore-u sil",
"deleteKeystoreHint": "Tətbiqi imzalamaq üçün istifadə edilən keystoru-u sil",
"deletedKeystore": "Keystore silindi",
"deleteTempDirLabel": "Müvəqqəti faylları sil",
"deleteTempDirHint": "İstifadə edilməyən müvəqqəti faylları sil",
"deletedTempDir": "Müvəqqəti fayllar silindi",
"exportPatchesLabel": "Yamaq seçimini xaricə köçür",
"exportPatchesHint": "Yamaq seçimini JSON faylına köçür",
"exportedPatches": "Yamaq seçimi xaricə köçürüldü",
"noExportFileFound": "Xaricə köçürüləcək yamaq seçimi yoxdur",
"importPatchesLabel": "Yamaq seçimini daxilə köçür",
"importPatchesHint": "Yamaq seçimini JSON faylından köçür",
"importedPatches": "Yamaq seçimi daxilə köçürüldü",
"resetStoredPatchesLabel": "Yamaqları sıfırla",
"resetStoredPatchesHint": "Saxlanılmış yamaq seçimini sıfırla",
"resetStoredPatches": "Yamaq seçimi sıfırlandı",
"jsonSelectorErrorMessage": "Seçilmiş JSON faylı istifadə edilə bilmir",
"deleteLogsLabel": "Jurnalları sil",
"deleteLogsHint": "Yığılmış menecer jurnallarını sil",
"deletedLogs": "Jurnallar silindi"
},
"appInfoView": {
"widgetTitle": "Tətbiq məlumatı",
"openButton": "Aç",
"uninstallButton": "Sil",
"patchButton": "Yamaqla",
"unpatchButton": "Yamağı götür",
"unpatchDialogText": "Yamağı götürmək istədiyinizə əminsiniz?",
"rootDialogTitle": "Xəta",
"rootDialogText": "Tətbiq, superuser icazələri ilə quraşdırıldı, ancaq hazırda ReVanced Manager-in heç bir icazəsi yoxdur.\nZəhmət olmasa əvvəlcə superuser icazələrini verin.",
"packageNameLabel": "Paket adı",
"originalPackageNameLabel": "Orijinal paket adı",
"installTypeLabel": "Quraşdırma növü",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Root-suz",
"patchedDateLabel": "Yamaqlama tarixi",
"patchedDateHint": "{time} {date}",
"appliedPatchesLabel": "Tətbiq edilmiş yamaqlar",
"appliedPatchesHint": "{quantity} tətbiq edilmiş yamaq",
"updateNotImplemented": "Bu özəllik hələ tətbiq olunmayıb"
},
"contributorsView": {
"widgetTitle": "Töhfə verənlər",
"patcherContributors": "Yamaqlama üzrə töhfə verənlər",
"patchesContributors": "Yamaqlara töhfə verənlər",
"integrationsContributors": "İnteqrasiyalara töhfə verənlər",
"cliContributors": "CLI-yə töhfə verənlər",
"managerContributors": "Manager-ə töhfə verənlər"
}
}

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

@ -0,0 +1,200 @@
{
"okButton": "OK",
"cancelButton": "Отказ",
"updateButton": "Актуализация",
"enabledLabel": "Включено",
"disabledLabel": "Изключено",
"yesButton": "Да",
"noButton": "Не",
"warning": "Внимание",
"navigationView": {
"dashboardTab": "Табло за управление",
"patcherTab": "Пачър",
"settingsTab": "Настройки"
},
"homeView": {
"widgetTitle": "Табло за управление",
"updatesSubtitle": "Актуализации",
"patchedSubtitle": "Модифицирани приложения",
"updatesAvailable": "Налични актуализации",
"noUpdates": "Няма налични актуализации",
"WIP": "В процес на разработка...",
"noInstallations": "Няма инсталирани модифицирани приложения",
"installed": "Инсталирани",
"updateDialogTitle": "Обнови ReVanced Manager",
"updateChangelogTitle": "Списък с промени",
"notificationTitle": "Актуализацията е изтеглена",
"notificationText": "Натиснете за да инсталирате актуализациите",
"downloadingMessage": "Изтегляне на актуализация...",
"installingMessage": "Инсталиране на актуализация...",
"errorDownloadMessage": "Свалянето на актуализацията не беше успешно",
"errorInstallMessage": "Инсталирането на актуализацията не беше успешно",
"noConnection": "Няма връзка с интернет",
"updatesDisabled": "Актуализацията на модифицирани приложения в момента не работи. Модифицирайте приложението наново."
},
"applicationItem": {
"patchButton": "Модифицирай",
"infoButton": "Информация",
"changelogLabel": "Списък с промените"
},
"latestCommitCard": {
"loadingLabel": "Зареждане...",
"timeagoLabel": "Преди {time}",
"patcherLabel": "Пачър: ",
"managerLabel": "Мениджър: ",
"updateButton": "Обнови ReVanced Manager"
},
"patcherView": {
"widgetTitle": "Модификатор",
"patchButton": "Модифицирай",
"patchDialogText": "Избрали сте модификация за ресурси и разделен APK пакет, което може да доведе до грешки при пачването.\nСигурни ли сте, че искате да продължите?"
},
"appSelectorCard": {
"widgetTitle": "Изберете приложение",
"widgetTitleSelected": "Избрано приложение",
"widgetSubtitle": "Няма избрано приложение",
"noAppsLabel": "Няма намерени приложения",
"currentVersion": "Текуща",
"recommendedVersion": "Препоръчана",
"anyVersion": "всяка"
},
"patchSelectorCard": {
"widgetTitle": "Изберете модификации",
"widgetTitleSelected": "Избрани модификации",
"widgetSubtitle": "Първо изберете приложение",
"widgetEmptySubtitle": "Няма избрани модификации"
},
"socialMediaCard": {
"widgetTitle": "Социални мрежи",
"widgetSubtitle": "Открийте ни онлайн!"
},
"appSelectorView": {
"viewTitle": "Изберете приложение",
"searchBarHint": "Търсене на приложение",
"storageButton": "Хранилище",
"errorMessage": "Избраното приложение не може да се използва"
},
"patchesSelectorView": {
"viewTitle": "Изберете модификации",
"searchBarHint": "Търсене на модификации",
"doneButton": "Готово",
"recommended": "Препоръчано",
"all": "Всички",
"none": "Нито един",
"loadPatchesSelection": "Заредете избраните модификации",
"noSavedPatches": "Няма запазени модификации за избраното приложение.\nНатиснете Готово за да запазите текущия избор.",
"noPatchesFound": "Няма налични модификации за избраното приложение",
"selectAllPatchesWarningContent": "Напът сте да изберете всички патчове, дори и тези, които не са препоръчителни, а това може да доведе до нежелани промени."
},
"patchItem": {
"unsupportedDialogText": "Изборът на тази модификация може да доведе до грешки.\n\nВерсия: {packageVersion}\nПоддържани версии: {supportedVersions}",
"unsupportedPatchVersion": "Модификацията не се поддържа за тази версия на приложението. Активираите експерименталната опция в настройките за да продължите."
},
"installerView": {
"widgetTitle": "Инсталатор",
"installButton": "Инсталиране",
"installRootButton": "Инсталиране с root",
"openButton": "Отвори",
"shareButton": "Споделяне на файла",
"notificationTitle": "ReVanced Мениджър модифицира",
"notificationText": "Натиснете за да се върнете при инсталатора",
"shareApkMenuOption": "Споделяне на APK",
"exportApkMenuOption": "Експортиране на APK",
"shareLogMenuOption": "Сподели логовете",
"installErrorDialogTitle": "Грешка",
"installErrorDialogText1": "Инсталиране с root не е възможно с настоящият избор на модификации.\nМодифицирайте приложението наново или изберете опция без root.",
"installErrorDialogText2": "Инсталиране без root не е възможно с настоящият избор на модификации.\nМодифицирайте приложението наново или изберете опция с root, ако устройството ви има такъв.",
"installErrorDialogText3": "Инсталиране с root не е възможно понеже АРК файла бе избран от хранилището.\nИзберете инсталирано приложение или опция без root.",
"noExit": "Инсталаторът все още работи, не може да излезе..."
},
"settingsView": {
"widgetTitle": "Настройки",
"appearanceSectionTitle": "Облик",
"teamSectionTitle": "Екип",
"infoSectionTitle": "Информация",
"advancedSectionTitle": "Разширени",
"logsSectionTitle": "Логове",
"darkThemeLabel": "Тъмен режим",
"darkThemeHint": "Добре дошъл на тъмната страна",
"dynamicThemeLabel": "Материална Тема",
"dynamicThemeHint": "Насладете се на преживяване по-близо до устройството си",
"languageLabel": "Език",
"englishOption": "Английски",
"sourcesLabel": "Източници",
"sourcesLabelHint": "Конфигурирайте собствени източници",
"hostRepositoryLabel": "API на хранилището",
"orgPatchesLabel": "Организация на модификациите",
"sourcesPatchesLabel": "Източник на модификациите",
"orgIntegrationsLabel": "Организация на интеграциите",
"sourcesIntegrationsLabel": "Източник на интеграциите",
"sourcesResetDialogTitle": "Нулиране",
"sourcesResetDialogText": "Искате ли да възстановите източниците до стойностите им по подразбиране?",
"apiURLResetDialogText": "Искате ли да възстановите АРI URL до стойността му по подразбиране?",
"contributorsLabel": "Хора, които допринесоха",
"contributorsHint": "Списък с хората, допринесли за ReVanced",
"logsLabel": "Логове",
"logsHint": "Сподели логовете на мениджъра",
"apiURLLabel": "API URL",
"apiURLHint": "Конфигурирайте собствен API URL",
"selectApiURL": "API URL",
"experimentalUniversalPatchesLabel": "Поддръжка на експериментални модификации",
"experimentalUniversalPatchesHint": "Показване на всички приложения за използване с универсални модификации, зареждането на списъкът с приложения може да е по-бавно",
"experimentalPatchesLabel": "Поддръжка на експериментални модификации",
"experimentalPatchesHint": "Разрешете използването на неподдържани модификации във всяка версия на приложението",
"enabledExperimentalPatches": "Поддръжката на експериментални модификации е активирана",
"exportSectionTitle": "Импортиране и експортиране",
"aboutLabel": "Относно",
"snackbarMessage": "Копирано",
"sentryLabel": "Sentry логване",
"sentryHint": "Пращайте анонимни логове за да ни помогнете да подобрим ReVanced Manager",
"restartAppForChanges": "Рестартирайте приложението, за да се приложат промените",
"deleteKeystoreLabel": "Изтриване на keystore",
"deleteKeystoreHint": "Изтриване на keystore използван за подписване на приложението",
"deletedKeystore": "Keystore изтрит",
"deleteTempDirLabel": "Изтриване на временни файлове",
"deleteTempDirHint": "Изтриване на неизползвани временни файлове",
"deletedTempDir": "Временните файлове са изтрити",
"exportPatchesLabel": "Експортиране на избраните модификации",
"exportPatchesHint": "Експортиране на избраните модификации като JSON файл",
"exportedPatches": "Избраните модификации са експортирани",
"noExportFileFound": "Няма избрани модификации за експортиране",
"importPatchesLabel": "Импортиране на избраните модификации",
"importPatchesHint": "Импортиране на избраните модификации от JSON файл",
"importedPatches": "Избраните модификации са импортирани",
"resetStoredPatchesLabel": "Нулиране на модификациите",
"resetStoredPatchesHint": "Нулиране на избраните запазени модификации",
"resetStoredPatches": "Избраните модификации са нулирани",
"jsonSelectorErrorMessage": "Избраният JSON файл не може да се изплозва",
"deleteLogsLabel": "Изтриване на логовете",
"deleteLogsHint": "Изтриване на събраните логове на мениджърът",
"deletedLogs": "Логовете са изтрити"
},
"appInfoView": {
"widgetTitle": "Информация за приложението",
"openButton": "Отвори",
"uninstallButton": "Деинсталирай",
"patchButton": "Модифицирайте",
"unpatchButton": "Премахнете модификации",
"unpatchDialogText": "Сигурни ли сте че искате да премахнете модификациите?",
"rootDialogTitle": "Грешка",
"rootDialogText": "Приложението е инсталирано с superuser разрешения, но в момента ReVanced Manager няма разрешения. Моля, първо дайте superuser разрешения.",
"packageNameLabel": "Име на пакета",
"originalPackageNameLabel": "Оригинално име на пакета",
"installTypeLabel": "Тип инсталация",
"rootTypeLabel": "Вариант с root достъп",
"nonRootTypeLabel": "Без root",
"patchedDateLabel": "Дата на модификацията",
"patchedDateHint": "на {date} в {time}",
"appliedPatchesLabel": "Приложени модификации",
"appliedPatchesHint": "{quantity} приложени модификации",
"updateNotImplemented": "Тази функция все още не е внедрена"
},
"contributorsView": {
"widgetTitle": "Хора, които допринесоха",
"patcherContributors": "Допринесли към пачърът",
"patchesContributors": "Допринесли към модификациите",
"integrationsContributors": "Допринесли към интеграциите",
"cliContributors": "Допринесли към CLI",
"managerContributors": "Допринесли към мениджъра"
}
}

196
assets/i18n/bn_BD.json Normal file
View File

@ -0,0 +1,196 @@
{
"okButton": "ঠিক আছে",
"cancelButton": "বাতিল",
"enabledLabel": "সক্রিয়",
"disabledLabel": "নিষ্ক্রিয়",
"yesButton": "হ্যাঁ",
"noButton": "না",
"warning": "সতর্কতা",
"navigationView": {
"dashboardTab": "ড্যাশবোর্ড",
"patcherTab": "প্যাচার",
"settingsTab": "সেটিংস"
},
"homeView": {
"widgetTitle": "ড্যাশবোর্ড",
"updatesSubtitle": "আপডেটসমূহ",
"patchedSubtitle": "প্যাচড অ্যাপ্লিকেশনগুলো",
"updatesAvailable": "আপডেট পাওয়া যাচ্ছে",
"noUpdates": "কোন আপডেট পাওয়া যায়নি",
"WIP": "কাজ চলছে...",
"noInstallations": "কোন প্যাচড অ্যাপ্লিকেশন ইনস্টল করা হয়নি",
"installed": "ইনস্টল করা",
"updateDialogTitle": "Manager আপডেট করুন",
"updateDialogText": "আপনি কি নিশ্চিত আপনি ReVanced Manager ডাউনলোড এবং আপডেট করতে চান?",
"notificationTitle": "আপডেট ডাউনলোড হয়েছে",
"notificationText": "আপডেট ইনস্টল করতে ট্যাপ করুন",
"downloadingMessage": "আপডেট ডাউনলোড হচ্ছে...",
"installingMessage": "আপডেট ইনস্টল করা হচ্ছে...",
"errorDownloadMessage": "আপডেট ডাউনলোড করতে সফল হয় নি",
"errorInstallMessage": "আপডেট ইনস্টল করতে সফল হয় নি",
"noConnection": "কোনো ইন্টারনেট সংযোগ নেই",
"updatesDisabled": "প্যাচ করা অ্যাপকে আপডেট করা বর্তমানে সম্ভব নয়। অ্যাপটি পুনরায় প্যাচ করুন।"
},
"applicationItem": {
"patchButton": "প্যাচ",
"infoButton": "তথ্য",
"changelogLabel": "পরিবর্তনসমূহ"
},
"latestCommitCard": {
"loadingLabel": "লোড হচ্ছে...",
"timeagoLabel": "{time} আগে",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Manager আপডেট করুন"
},
"patcherView": {
"widgetTitle": "প্যাচার",
"patchButton": "প্যাচ",
"patchDialogText": "আপনি রিসোর্স প্যাচ নির্বাচন করেছেন এবং একটি split APK সনাক্ত হয়েছে, তাই প্যাচিং ত্রুটিপূর্ণ হতে পারে।\nআপনি কি নিশ্চিতভাবে সামনে এগিয়ে যেতে চান??"
},
"appSelectorCard": {
"widgetTitle": "একটি অ্যাপ্লিকেশন নির্বাচন করুন",
"widgetTitleSelected": "নির্বাচিত অ্যাপ্লিকেশন",
"widgetSubtitle": "কোনো অ্যাপ্লিকেশন নির্বাচন করা হয়নি",
"noAppsLabel": "কোন অ্যাপ্লিকেশন পাওয়া যায়নি",
"currentVersion": "বর্তমান",
"recommendedVersion": "প্রস্তাবিত",
"anyVersion": "যেকোনো সংস্করণ"
},
"patchSelectorCard": {
"widgetTitle": "প্যাচ নির্বাচন করুন",
"widgetTitleSelected": "নির্বাচিত প্যাচসমূহ",
"widgetSubtitle": "প্রথমে একটি অ্যাপ্লিকেশন নির্বাচন করুন",
"widgetEmptySubtitle": "কোন প্যাচ নির্বাচন করা হয়নি"
},
"socialMediaCard": {
"widgetTitle": "সামাজিক যোগাযোগ মাধ্যম",
"widgetSubtitle": "আমরা অনলাইনে!"
},
"appSelectorView": {
"viewTitle": "একটি অ্যাপ্লিকেশন নির্বাচন করুন",
"searchBarHint": "অ্যাপ্লিকেশনগুলি খুঁজুন",
"storageButton": "স্টোরেজ",
"errorMessage": "নির্বাচিত অ্যাপ্লিকেশনটি ব্যবহার করা সম্ভব নয়"
},
"patchesSelectorView": {
"viewTitle": "প্যাচ নির্বাচন করুন",
"searchBarHint": "প্যাচ খুঁজুন",
"doneButton": "সম্পন্ন হয়েছে",
"recommended": "প্রস্তাবিত",
"all": "সবগুলো",
"none": "একটিও না",
"loadPatchesSelection": "নির্বাচিত প্যাচ লোড করুন",
"noSavedPatches": "নির্বাচিত অ্যাপের জন্য কোন সংরক্ষিত প্যাচ নেই\nবর্তমানে নির্বাচিত প্যাচ সংরক্ষণ করতে সম্পন্ন হয়েছে চাপুন",
"noPatchesFound": "নির্বাচিত অ্যাপের জন্য কোনো প্যাচ পাওয়া যায়নি",
"selectAllPatchesWarningContent": "আপনি সকল প্যাচ নির্বাচন করতে যাচ্ছেন, যার মধ্যে কিছু অপ্রস্তাবিত প্যাচও রয়েছে যা অনাকাঙ্ক্ষিত আচরণ করতে পারে।"
},
"patchItem": {
"unsupportedDialogText": "এই প্যাচটি নির্বাচন করলে প্যাচিং ত্রুটিপূর্ণ হতে পারে।\n\nঅ্যাপ সংস্করণ: {packageVersion}\nসমর্থিত সংস্করণ:\n{supportedVersions}",
"unsupportedPatchVersion": "এই অ্যাপ সংস্করণের জন্য প্যাচ সমর্থিত নয়। এগিয়ে যেতে সেটিংসে পরীক্ষামূলক টগল সক্ষম করুন৷"
},
"installerView": {
"widgetTitle": "ইনস্টলার",
"installButton": "ইনস্টল করুন",
"installRootButton": "রুট হিসেবে ইন্সটল করুন",
"openButton": "অ্যাপ খুলুন",
"shareButton": "ফাইল শেয়ার করুন",
"notificationTitle": "ReVanced Manager প্যাচ করছে",
"notificationText": "ইনস্টলারে ফিরে যেতে ট্যাপ করুন",
"shareApkMenuOption": "APK শেয়ার করুন",
"exportApkMenuOption": "APK রপ্তানি করুন",
"shareLogMenuOption": "লগ শেয়ার করুন",
"installErrorDialogTitle": "ত্রুটি দেখা দিয়েছে",
"installErrorDialogText1": "বর্তমানে নির্বাচিত প্যাচগুলো দিয়ে রুট ইনস্টল সম্ভব নয়।\nঅ্যাপটি পুনরায় প্যাচ করুন অথবা নন-রুট ইনস্টল নির্বাচন করুন।",
"installErrorDialogText2": "বর্তমানে নির্বাচিত প্যাচগুলো দিয়ে নন-রুট ইনস্টল সম্ভব নয়।\nঅ্যাপটি পুনরায় প্যাচ করুন অথবা আপনার ডিভাইস রুট করা থাকলে রুট ইনস্টল নির্বাচন করুন।",
"installErrorDialogText3": "রুট ইনস্টল সম্ভব নয় কারণ মূল APK ফোনের স্টোরেজ থেকে নির্বাচন করা হয়েছে।\nএকটি ইনস্টলড অ্যাপ নির্বাচন করুন অথবা নন-রুট ইন্সটল নির্বাচন করুন।",
"noExit": "ইনস্টলার এখনো চলমান, বের হওয়া সম্ভব নয়..."
},
"settingsView": {
"widgetTitle": "সেটিংস",
"appearanceSectionTitle": "রূপ",
"teamSectionTitle": "দল",
"infoSectionTitle": "তথ্য",
"advancedSectionTitle": "উন্নত",
"logsSectionTitle": "লগ",
"darkThemeLabel": "অন্ধকার মোড",
"darkThemeHint": "অন্ধকার রাজ্যে স্বাগতম",
"dynamicThemeLabel": "ম্যাটেরিয়াল ইউ",
"dynamicThemeHint": "আপনার ডিভাইসের লুকের কাছাকাছি অভিজ্ঞতা নিন",
"languageLabel": "ভাষা",
"englishOption": "English",
"sourcesLabel": "উৎস",
"sourcesLabelHint": "আপনার নিজস্ব উৎস সেট করুন",
"orgPatchesLabel": "প্যাচ এর উদ্ভাবক",
"sourcesPatchesLabel": "প্যাচ এর উৎস",
"orgIntegrationsLabel": "ইন্ট্রিগেশনের উদ্ভাবক",
"sourcesIntegrationsLabel": "ইন্ট্রিগেশনের উৎস",
"sourcesResetDialogTitle": "পুনরায় সেট করুন",
"sourcesResetDialogText": "আপনি কি আপনার নিজস্ব উৎসগুলোকে তাদের মূল উৎসে পুনরায় সেট করতে চান?",
"apiURLResetDialogText": "আপনি কি API URL কে তার মূল ভ্যালুতে পুনরায় সেট করতে চান?",
"contributorsLabel": "অবদানকারীগণ",
"contributorsHint": "ReVanced-এ অবদানকারীদের তালিকা",
"logsLabel": "লগ",
"logsHint": "Manager লগ শেয়ার করুন",
"apiURLLabel": "API URL",
"apiURLHint": "আপনার নিজস্ব API URL সেট করুন",
"selectApiURL": "API URL",
"experimentalPatchesLabel": "পরীক্ষামূলক প্যাচ সমর্থন",
"experimentalPatchesHint": "যেকোন অ্যাপ সংস্করণে অসমর্থিত প্যাচ ব্যবহার করতে সক্ষম করুন",
"enabledExperimentalPatches": "পরীক্ষামূলক প্যাচ সমর্থন সক্রিয় হয়েছে",
"exportSectionTitle": "আমদানি ও রপ্তানি",
"aboutLabel": "সম্পর্কিত",
"snackbarMessage": "ক্লিপবোর্ডে কপি করা হয়েছে",
"sentryLabel": "সেন্ট্রি লগিং",
"sentryHint": "ReVanced Manager উন্নত করতে আমাদের সাহায্য করতে বেনামী লগ পাঠান",
"restartAppForChanges": "পরিবর্তনগুলি প্রয়োগ করতে অ্যাপটি পুনরায় চালু করুন",
"deleteKeystoreLabel": "কীস্টোর মুছুন",
"deleteKeystoreHint": "প্যাচড অ্যাপ সাইন করতে ব্যবহৃত কীস্টোরটি মুছুন",
"deletedKeystore": "কীস্টোর মুছে ফেলা হয়েছে",
"deleteTempDirLabel": "অস্থায়ী ফাইল মুছুন",
"deleteTempDirHint": "অব্যবহৃত অস্থায়ী ফাইল মুছুন",
"deletedTempDir": "অস্থায়ী ফাইল মুছে ফেলা হয়েছে",
"exportPatchesLabel": "নির্বাচিত প্যাচ রপ্তানি করুন",
"exportPatchesHint": "নির্বাচিত প্যাচ একটি JSON ফাইলে রপ্তানি করুন",
"exportedPatches": "নির্বাচিত প্যাচ রপ্তানি করা হয়েছে",
"noExportFileFound": "রপ্তানি করার জন্য কোন প্যাচ নির্বাচন করা হয়নি",
"importPatchesLabel": "নির্বাচিত প্যাচ আমদানি করুন",
"importPatchesHint": "একটি JOSN ফাইল থেকে প্যাচ আমদানি করুন",
"importedPatches": "নির্বাচিত প্যাচ আমদানি করা হয়েছে",
"resetStoredPatchesLabel": "প্যাচ পুনরায় সেট করুন",
"resetStoredPatchesHint": "সংরক্ষিত নির্বাচিত প্যাচ পুনঃসেট করুন",
"resetStoredPatches": "নির্বাচিত প্যাচ পুনঃসেট করা হয়েছে",
"jsonSelectorErrorMessage": "নির্বাচিত JSON ফাইল ব্যবহার করা সম্ভব নয়",
"deleteLogsLabel": "লগ মুছুন",
"deleteLogsHint": "Manager এর সংগৃহীত লগ মুছুন",
"deletedLogs": "লগ মুছে ফেলা হয়েছে"
},
"appInfoView": {
"widgetTitle": "অ্যাপের তথ্য",
"openButton": "খুলুন",
"uninstallButton": "আনইন্সটল করুন",
"patchButton": "প্যাচ",
"unpatchButton": "আনপ্যাচ",
"unpatchDialogText": "আপনি কি অ্যাপটি আনপ্যাচ করার ব্যপারে নিশ্চিত?",
"rootDialogTitle": "ত্রুটি দেখা দিয়েছে",
"rootDialogText": "অ্যাপটি Superuser অনুমতি নিয়ে ইনস্টল করা হয়েছে, কিন্তু বর্তমানে ReVanced Manager এর Superuser অনুমতি নেই। অনুগ্রহপূর্বক প্রথমে Superuser অনুমতি দিন।",
"packageNameLabel": "প্যাকেজের নাম",
"originalPackageNameLabel": "প্যাকেজের মূল নাম",
"installTypeLabel": "ইনস্টলের ধরন",
"rootTypeLabel": "রুট",
"nonRootTypeLabel": "নন-রুট",
"patchedDateLabel": "প্যাচ করার তারিখ",
"patchedDateHint": "{date} তারিখে {time} টায়",
"appliedPatchesLabel": "ব্যবহৃত প্যাচ",
"appliedPatchesHint": "{quantity} টি প্যাচ ব্যবহৃত",
"updateNotImplemented": "এই ফিচারটি এখনো কার্যকর করা হয়নি"
},
"contributorsView": {
"widgetTitle": "অবদানকারীগণ",
"patcherContributors": "প্যাচার অবদানকারী",
"patchesContributors": "প্যাচসমূহে অবদানকারী",
"integrationsContributors": "ইন্টিগ্রেশন্স অবদানকারী",
"cliContributors": "CLI অবদানকারী",
"managerContributors": "Manager অবদানকারী"
}
}

196
assets/i18n/cs_CZ.json Normal file
View File

@ -0,0 +1,196 @@
{
"okButton": "OK",
"cancelButton": "Zrušit",
"enabledLabel": "Zapnuto",
"disabledLabel": "Vypnuto",
"yesButton": "Ano",
"noButton": "Ne",
"warning": "Varování",
"navigationView": {
"dashboardTab": "Řídící panel",
"patcherTab": "Záplatovač",
"settingsTab": "Nastavení"
},
"homeView": {
"widgetTitle": "Řídící panel",
"updatesSubtitle": "Aktualizace",
"patchedSubtitle": "Záplatované aplikace",
"updatesAvailable": "Jsou dostupné aktualizace",
"noUpdates": "Nejsou dostupné žádné aktualizace",
"WIP": "Zpracovává se...",
"noInstallations": "Nejsou nainstalovány žádné záplatované aplikace",
"installed": "Nainstalováno",
"updateDialogTitle": "Správce aktualizací",
"updateDialogText": "Opravdu chcete stáhnout a aktualizovat ReVanced Manager?",
"notificationTitle": "Aktualizace byla stažena",
"notificationText": "Klepnutím nainstalujte aktualizaci",
"downloadingMessage": "Stahování aktualizace...",
"installingMessage": "Instalace aktualizace...",
"errorDownloadMessage": "Nelze stáhnout aktualizaci",
"errorInstallMessage": "Aktualizace se nepodařilo nainstalovat",
"noConnection": "Žádné připojení k internetu",
"updatesDisabled": "Aktualizace záplatované aplikace je momentálně zakázána. Znovu záplatujte aplikaci."
},
"applicationItem": {
"patchButton": "Záplata",
"infoButton": "Info",
"changelogLabel": "Seznam změn"
},
"latestCommitCard": {
"loadingLabel": "Načítání...",
"timeagoLabel": "před {time}",
"patcherLabel": "Záplatovač: ",
"managerLabel": "Manager: ",
"updateButton": "Aktualizovat Manager"
},
"patcherView": {
"widgetTitle": "Záplatovač",
"patchButton": "Záplatovat",
"patchDialogText": "Vybrali jste záplatu a byla zjištěna \"split-APK\" instalace, takže se mohou vyskytnout chyby.\nJste si jisti, že chcete pokračovat?"
},
"appSelectorCard": {
"widgetTitle": "Vyberte aplikaci",
"widgetTitleSelected": "Vybraná aplikace",
"widgetSubtitle": "Nebyla vybrána žádná aplikace",
"noAppsLabel": "Nebyly nalezeny žádné aplikace",
"currentVersion": "Aktuální",
"recommendedVersion": "Doporučeno",
"anyVersion": "jakákoliv"
},
"patchSelectorCard": {
"widgetTitle": "Vybrat záplaty",
"widgetTitleSelected": "Vybrané záplaty",
"widgetSubtitle": "Nejprve vyberte aplikaci",
"widgetEmptySubtitle": "Nejsou vybrány žádné záplaty"
},
"socialMediaCard": {
"widgetTitle": "Sociální sítě",
"widgetSubtitle": "Jsme online!"
},
"appSelectorView": {
"viewTitle": "Vyberte aplikaci",
"searchBarHint": "Hledat aplikace",
"storageButton": "Uložiště",
"errorMessage": "Vybranou aplikaci nelze použít"
},
"patchesSelectorView": {
"viewTitle": "Vybrat záplaty",
"searchBarHint": "Vyhledat záplaty",
"doneButton": "Hotovo",
"recommended": "Doporučeno",
"all": "Vše",
"none": "Žádné",
"loadPatchesSelection": "Načíst výběr záplat",
"noSavedPatches": "Žádné uložené záplaty pro vybranou aplikaci\nStiskněte Hotovo pro uložení aktuálního výběru",
"noPatchesFound": "Pro vybranou aplikaci nebyly nalezeny žádné záplaty",
"selectAllPatchesWarningContent": "Chystáte se vybrat všechny záplaty, které obsahují nedoporučené záplaty a mohou způsobit nežádoucí chování."
},
"patchItem": {
"unsupportedDialogText": "Výběrem této záplaty může dojít k chybám.\n\nVerze aplikace: {packageVersion}\nAktuálně podporované verze:\n{supportedVersions}",
"unsupportedPatchVersion": "Pro tuto verzi aplikace není podporována záplata. Chcete-li pokračovat, povolte přepínač experimentálních nastavení."
},
"installerView": {
"widgetTitle": "Instalátor",
"installButton": "Instalovat",
"installRootButton": "Instalovat jako root",
"openButton": "Otevřít",
"shareButton": "Sdílet soubor",
"notificationTitle": "ReVanced Manager záplatuje",
"notificationText": "Klepnutím se vrátíte do instalátoru",
"shareApkMenuOption": "Sdílet APK",
"exportApkMenuOption": "Exportovat APK",
"shareLogMenuOption": "Sdílet záznam",
"installErrorDialogTitle": "Chyba",
"installErrorDialogText1": "Root instalace není možná při výběru aktuálních záplat.\nZnovu záplatujte aplikaci nebo zvolte non-root instalaci.",
"installErrorDialogText2": "Non-root instalace není možná s vybranými záplaty.\nZnova záplatujte vaší aplikaci, nebo zvolte root instalaci, jestli máte zařízení s rootem.",
"installErrorDialogText3": "Root instalace není možná, protože původní APK byla vybrána z uložiště.\nVyberte nainstalovanou aplikaci nebo zvolte non-root instalaci.",
"noExit": "Instalační program je stále spuštěn, nelze ukončit..."
},
"settingsView": {
"widgetTitle": "Nastavení",
"appearanceSectionTitle": "Vzhled",
"teamSectionTitle": "Tým",
"infoSectionTitle": "Info",
"advancedSectionTitle": "Pokročilé",
"logsSectionTitle": "Logy",
"darkThemeLabel": "Tmavý motiv",
"darkThemeHint": "Vítejte na temné straně",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Vychutnejte si zážitek blíže k vašemu zařízení",
"languageLabel": "Jazyk",
"englishOption": "Angličtina",
"sourcesLabel": "Zdroje",
"sourcesLabelHint": "Konfigurace vlastních zdrojů",
"orgPatchesLabel": "Organizace záplat",
"sourcesPatchesLabel": "Zdroj záplat",
"orgIntegrationsLabel": "Autor integrace",
"sourcesIntegrationsLabel": "Zdroj integrace",
"sourcesResetDialogTitle": "Obnovit",
"sourcesResetDialogText": "Jste si jisti, že chcete obnovit vlastní zdroje na jejich výchozí hodnoty?",
"apiURLResetDialogText": "Jste si jisti, že chcete resetovat API URL na výchozí hodnotu?",
"contributorsLabel": "Přispěvatelé",
"contributorsHint": "Seznam přispěvatelů ReVanced",
"logsLabel": "Logy",
"logsHint": "Sdílet logy správce",
"apiURLLabel": "API URL",
"apiURLHint": "Konfigurace vlastního API URL",
"selectApiURL": "API URL",
"experimentalPatchesLabel": "Podpora experimentálních záplat",
"experimentalPatchesHint": "Povolit použití nepodporovaných záplat v jakékoli verzi aplikace",
"enabledExperimentalPatches": "Podpora experimentálních záplat",
"exportSectionTitle": "Import a export",
"aboutLabel": "O aplikaci",
"snackbarMessage": "Zkopírováno do schránky",
"sentryLabel": "Log Sentry",
"sentryHint": "Odeslat anonymní protokoly, které nám pomohou zlepšit ReVanced Manager",
"restartAppForChanges": "Pro aplikování změn restartuj aplikaci",
"deleteKeystoreLabel": "Vymazat úložiště klíčů",
"deleteKeystoreHint": "Smazat úložiště klíčů používané k podpisu aplikace",
"deletedKeystore": "Úložiště klíčů bylo smazáno",
"deleteTempDirLabel": "Odstranit dočasné soubory",
"deleteTempDirHint": "Odstranit nepoužité dočasné soubory",
"deletedTempDir": "Dočasné soubory byly smazány",
"exportPatchesLabel": "Exportovat vybrané záplaty",
"exportPatchesHint": "Exportovat výběr záplat do souboru JSON",
"exportedPatches": "Výběr záplat exportován",
"noExportFileFound": "Žádné záplaty k exportu",
"importPatchesLabel": "Načíst výběr záplat",
"importPatchesHint": "Importovat výběr záplat ze souboru JSON",
"importedPatches": "Výběr záplat importován",
"resetStoredPatchesLabel": "Resetovat záplaty",
"resetStoredPatchesHint": "Resetovat výběr uložených záplat",
"resetStoredPatches": "Výběr záplat byl resetován",
"jsonSelectorErrorMessage": "Vybraný JSON soubor nelze použít",
"deleteLogsLabel": "Smazat logy",
"deleteLogsHint": "Odstranit shromážděné logy správce",
"deletedLogs": "Logy smazány"
},
"appInfoView": {
"widgetTitle": "Informace o aplikaci",
"openButton": "Otevřít",
"uninstallButton": "Odinstalovat",
"patchButton": "Záplatovat",
"unpatchButton": "Odebrat záplaty",
"unpatchDialogText": "Jste si jisti, že chcete odzáplatovat tuto aplikaci?",
"rootDialogTitle": "Chyba",
"rootDialogText": "Aplikace byla nainstalována s oprávněním superuser, ale aktuálně ReVanced Manager nemá žádná oprávnění.\nProsím nejprve udělte oprávnění superuser.",
"packageNameLabel": "Název balíčku",
"originalPackageNameLabel": "Původní název souboru",
"installTypeLabel": "Typ instalace",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Non-root",
"patchedDateLabel": "Datum záplaty",
"patchedDateHint": "{date} v {time}",
"appliedPatchesLabel": "Použité záplaty",
"appliedPatchesHint": "{quantity} použitých záplat",
"updateNotImplemented": "Tato funkce ještě není implementována"
},
"contributorsView": {
"widgetTitle": "Přispěvatelé",
"patcherContributors": "Zobrazit přispěvatele",
"patchesContributors": "Zobrazit přispěvatele",
"integrationsContributors": "Přispěvatelé integrace",
"cliContributors": "Přispěvatelé CLI",
"managerContributors": "Přispěvatelé správce"
}
}

200
assets/i18n/da_DK.json Normal file
View File

@ -0,0 +1,200 @@
{
"okButton": "OK",
"cancelButton": "Afbryd",
"updateButton": "Opdatér",
"enabledLabel": "Aktiveret",
"disabledLabel": "Deaktiveret",
"yesButton": "Ja",
"noButton": "Nej",
"warning": "Advarsel",
"navigationView": {
"dashboardTab": "Oversigt",
"patcherTab": "Patcher",
"settingsTab": "Indstillinger"
},
"homeView": {
"widgetTitle": "Oversigt",
"updatesSubtitle": "Opdateringer",
"patchedSubtitle": "Patchede applikationer",
"updatesAvailable": "Opdateringer tilgængelige",
"noUpdates": "Ingen tilgængelige opdateringer",
"WIP": "Under udvikling...",
"noInstallations": "Ingen patchede apps installeret",
"installed": "Installeret",
"updateDialogTitle": "Opdater Manager",
"updateChangelogTitle": "Ændringslog",
"notificationTitle": "Opdatering downloadet",
"notificationText": "Tryk for at installere opdateringen",
"downloadingMessage": "Downloader opdatering...",
"installingMessage": "Installerer opdatering...",
"errorDownloadMessage": "Kunne ikke downloade opdateringen",
"errorInstallMessage": "Kunne ikke installere opdateringen",
"noConnection": "Ingen Internetforbindelse",
"updatesDisabled": "Opdatering af en patchet app er i øjeblikket deaktiveret. Repatch appen igen."
},
"applicationItem": {
"patchButton": "Patch",
"infoButton": "Info",
"changelogLabel": "Ændringslog"
},
"latestCommitCard": {
"loadingLabel": "Indlæser...",
"timeagoLabel": "{time} siden",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Opdater Manager"
},
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "Patch",
"patchDialogText": "Du har valgt en ressource-patch, og en split APK-installation er blevet opdaget, så patch-fejl kan forekomme.\nEr du sikker på at du vil fortsætte?"
},
"appSelectorCard": {
"widgetTitle": "Vælg en applikation",
"widgetTitleSelected": "Valgt applikation",
"widgetSubtitle": "Ingen applikation valgt",
"noAppsLabel": "Ingen applikationer fundet",
"currentVersion": "Nuværende",
"recommendedVersion": "Anbefalet",
"anyVersion": "enhver"
},
"patchSelectorCard": {
"widgetTitle": "Vælg patches",
"widgetTitleSelected": "Valgte patches",
"widgetSubtitle": "Vælg først en applikation",
"widgetEmptySubtitle": "Ingen patches valgt"
},
"socialMediaCard": {
"widgetTitle": "Sociale medier",
"widgetSubtitle": "Vi er online!"
},
"appSelectorView": {
"viewTitle": "Vælg en applikation",
"searchBarHint": "Søg efter applikationer",
"storageButton": "Lager",
"errorMessage": "Kunne ikke bruge valgte applikation"
},
"patchesSelectorView": {
"viewTitle": "Vælg patches",
"searchBarHint": "Søg efter patches",
"doneButton": "Udført",
"recommended": "Anbefalet",
"all": "Alle",
"none": "Ingen",
"loadPatchesSelection": "Indlæs patches udvælgelse",
"noSavedPatches": "Ingen gemte patches til den valgte app.\nTryk på Udført for at gemme det aktuelle valg.",
"noPatchesFound": "Ingen patches fundet til den valgte app",
"selectAllPatchesWarningContent": "Du er ved at vælge alle patches, der inkluderer ikke-anbefalede patches, og kan forårsage uønsket adfærd."
},
"patchItem": {
"unsupportedDialogText": "Valg af denne patch kan medføre patching-fejl.\n\nApp version: {packageVersion}\nUnderstøttede versioner:\n{supportedVersions}",
"unsupportedPatchVersion": "Patch er ikke understøttet for denne app-version. Aktivér den eksperimentelle indstilling i indstillinger for at fortsætte."
},
"installerView": {
"widgetTitle": "Installationsprogram",
"installButton": "Installér",
"installRootButton": "Installér som Root",
"openButton": "Åbn",
"shareButton": "Del fil",
"notificationTitle": "ReVanced Manager patcher",
"notificationText": "Tryk for at gå tilbage til installationsprogrammet",
"shareApkMenuOption": "Del APK",
"exportApkMenuOption": "Eksportér APK",
"shareLogMenuOption": "Del log",
"installErrorDialogTitle": "Fejl",
"installErrorDialogText1": "Root-installation er ikke muligt med de nuværende valgte patches.\nRepatch din app eller vælg ikke-root installation.",
"installErrorDialogText2": "Ikke-root installation er ikke muligt med de nuværende valgte patches.\nRepatch din app eller vælg root-installation hvis du har din enhed rooted.",
"installErrorDialogText3": "Root-installation er ikke muligt, da den oprindelige APK blev valgt fra lager.\nVælg en installeret app eller vælg ikke-root installation.",
"noExit": "Installationen kører stadig, kan ikke afslutte..."
},
"settingsView": {
"widgetTitle": "Indstillinger",
"appearanceSectionTitle": "Udseende",
"teamSectionTitle": "Holdet",
"infoSectionTitle": "Info",
"advancedSectionTitle": "Avanceret",
"logsSectionTitle": "Logfiler",
"darkThemeLabel": "Mørk tilstand",
"darkThemeHint": "Velkommen til den mørke side",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Nyd en oplevelse tættere på din enhed",
"languageLabel": "Sprog",
"englishOption": "Engelsk",
"sourcesLabel": "Kilder",
"sourcesLabelHint": "Konfigurér dine brugerdefinerede kilder",
"hostRepositoryLabel": "Repository API",
"orgPatchesLabel": "Organisation for Patches",
"sourcesPatchesLabel": "Kilde til Patches",
"orgIntegrationsLabel": "Organisation for Integrationer",
"sourcesIntegrationsLabel": "Kilde til Integrationer",
"sourcesResetDialogTitle": "Nulstil",
"sourcesResetDialogText": "Er du sikker på, at du vil nulstille brugerdefinerede kilder til deres standardværdier?",
"apiURLResetDialogText": "Er du sikker på, at du vil nulstille API URL til dens standardværdi?",
"contributorsLabel": "Medvirkende",
"contributorsHint": "En liste over medvirkende til ReVanced",
"logsLabel": "Logfiler",
"logsHint": "Del Manager's logfiler",
"apiURLLabel": "API URL",
"apiURLHint": "Konfigurer din brugerdefineret API URL",
"selectApiURL": "API URL",
"experimentalUniversalPatchesLabel": "Understøttelse af eksperimentelle universale patches",
"experimentalUniversalPatchesHint": "Vis alle applikationer der skal bruges med universelle patches, indlæsningslisten over apps kan være langsommere",
"experimentalPatchesLabel": "Understøttelse af eksperimentelle patches",
"experimentalPatchesHint": "Aktiver brugen af ikke-understøttede patches i enhver app version",
"enabledExperimentalPatches": "Understøttelse af eksperimentelle patches aktiveret",
"exportSectionTitle": "Import & eksport",
"aboutLabel": "Om",
"snackbarMessage": "Kopieret til udklipsholder",
"sentryLabel": "Sentry logning",
"sentryHint": "Send anonyme logfiler for at hjælpe os med at forbedre ReVanced Manager",
"restartAppForChanges": "Genstart appen for at anvende ændringer",
"deleteKeystoreLabel": "Slet keystore",
"deleteKeystoreHint": "Slet keystore der bruges til at signere appen",
"deletedKeystore": "Keystore slettet",
"deleteTempDirLabel": "Slet midlertidige filer",
"deleteTempDirHint": "Slet ubrugte midlertidige filer",
"deletedTempDir": "Midlertidige filer slettet",
"exportPatchesLabel": "Eksportér valgte patches",
"exportPatchesHint": "Eksportér valgte patches til en JSON-fil",
"exportedPatches": "Valgte patches eksporteret",
"noExportFileFound": "Ingen patches valgt til eksport",
"importPatchesLabel": "Importér valgte patches",
"importPatchesHint": "Importér valgte patches fra en JSON-fil",
"importedPatches": "Valgte patches importeret",
"resetStoredPatchesLabel": "Nulstil patches",
"resetStoredPatchesHint": "Nulstil den gemte patches udvælgelse",
"resetStoredPatches": "Patches udvægelse er blevet nulstillet",
"jsonSelectorErrorMessage": "Kan ikke bruge den valgte JSON-fil",
"deleteLogsLabel": "Slet logfiler",
"deleteLogsHint": "Slet indsamlede manager-logfiler",
"deletedLogs": "Logfiler slettet"
},
"appInfoView": {
"widgetTitle": "Appinfo",
"openButton": "Åbn",
"uninstallButton": "Afinstallér",
"patchButton": "Patch",
"unpatchButton": "Unpatch",
"unpatchDialogText": "Er du sikker på du vil unpatche denne app?",
"rootDialogTitle": "Fejl",
"rootDialogText": "App blev installeret med superbruger tilladelser, men i øjeblikket har ReVanced Manager ingen tilladelser.\nGiv superbruger tilladelser først.",
"packageNameLabel": "Pakkenavn",
"originalPackageNameLabel": "Oprindeligt pakkenavn",
"installTypeLabel": "Installationstype",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Ikke-root",
"patchedDateLabel": "Dato for patching",
"patchedDateHint": "{date} kl. {time}",
"appliedPatchesLabel": "Anvendte patches",
"appliedPatchesHint": "{quantity} anvendte patches",
"updateNotImplemented": "Denne funktion er ikke implementeret endnu"
},
"contributorsView": {
"widgetTitle": "Medvirkende",
"patcherContributors": "Patcher bidragere",
"patchesContributors": "Patches bidragere",
"integrationsContributors": "Integrationer bidragere",
"cliContributors": "CLI bidragere",
"managerContributors": "Manager bidragere"
}
}

200
assets/i18n/de_DE.json Normal file
View File

@ -0,0 +1,200 @@
{
"okButton": "OK",
"cancelButton": "Abbrechen",
"updateButton": "Aktualisieren",
"enabledLabel": "Aktiviert",
"disabledLabel": "Deaktiviert",
"yesButton": "Ja",
"noButton": "Nein",
"warning": "Warnung",
"navigationView": {
"dashboardTab": "Übersicht",
"patcherTab": "Patcher",
"settingsTab": "Einstellungen"
},
"homeView": {
"widgetTitle": "Übersicht",
"updatesSubtitle": "Aktualisierungen",
"patchedSubtitle": "Gepatchte Apps",
"updatesAvailable": "Aktualisierungen verfügbar",
"noUpdates": "Keine Aktualisierungen verfügbar",
"WIP": "In Bearbeitung...",
"noInstallations": "Keine gepatchten Apps installiert",
"installed": "Installiert",
"updateDialogTitle": "Manager aktualisieren",
"updateChangelogTitle": "Änderungsverlauf",
"notificationTitle": "Update heruntergeladen",
"notificationText": "Tippen um Update zu installieren",
"downloadingMessage": "Aktualisierung wird heruntergeladen...",
"installingMessage": "Update wird installiert...",
"errorDownloadMessage": "Aktualisierung konnte nicht heruntergeladen werden",
"errorInstallMessage": "Aktualisierung konnte nicht installiert werden",
"noConnection": "Keine Internetverbindung",
"updatesDisabled": "Das Aktualisieren einer gepatchten App ist derzeit deaktiviert. Patche die App erneut."
},
"applicationItem": {
"patchButton": "Patchen",
"infoButton": "Info",
"changelogLabel": "Änderungsverlauf"
},
"latestCommitCard": {
"loadingLabel": "Lädt...",
"timeagoLabel": "vor {time}",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Manager aktualisieren"
},
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "Patchen",
"patchDialogText": "Du hast einen Patch ausgewählt und eine geteilte APK-Installation wurde entdeckt, daher können Fehler beim Patchen auftreten.\nMöchtest du wirklich die geteilte APK patchen?"
},
"appSelectorCard": {
"widgetTitle": "Wähle eine App aus",
"widgetTitleSelected": "Ausgewählte App",
"widgetSubtitle": "Keine App ausgewählt",
"noAppsLabel": "Keine Apps gefunden",
"currentVersion": "Aktuell",
"recommendedVersion": "Empfohlen",
"anyVersion": "beliebig"
},
"patchSelectorCard": {
"widgetTitle": "Patches auswählen",
"widgetTitleSelected": "Ausgewählte Patches",
"widgetSubtitle": "Wähle zuerst eine App",
"widgetEmptySubtitle": "Keine Patches ausgewählt"
},
"socialMediaCard": {
"widgetTitle": "Soziale Netzwerke",
"widgetSubtitle": "Wir sind online!"
},
"appSelectorView": {
"viewTitle": "Wähle eine App aus",
"searchBarHint": "Apps suchen",
"storageButton": "Speicher",
"errorMessage": "Ausgewählte App kann nicht verwendet werden"
},
"patchesSelectorView": {
"viewTitle": "Patches auswählen",
"searchBarHint": "Patches suchen",
"doneButton": "Fertig",
"recommended": "Empfohlen",
"all": "Alle",
"none": "Keine",
"loadPatchesSelection": "Patchauswahl laden",
"noSavedPatches": "Keine gespeicherten Patches für die ausgewählte App. Drücke „Fertig” zum Speichern der aktuellen Auswahl.",
"noPatchesFound": "Keine Patches für die ausgewählte App gefunden",
"selectAllPatchesWarningContent": "Du bist dabei alle Patches auszuwählen, dies beinhaltet nicht empfohlene Patches und kann zu unerwünschtem Verhalten führen."
},
"patchItem": {
"unsupportedDialogText": "Die Auswahl dieses Patches kann zu Fehlern beim Patchen führen.\n\nApp-Version: {packageVersion}\nUnterstützte Versionen:\n{supportedVersions}",
"unsupportedPatchVersion": "Der Patch unterstützt diese Version der App nicht. Aktiviere in den Einstellungen die experimentellen Funktionen, um fortzufahren."
},
"installerView": {
"widgetTitle": "Installer",
"installButton": "Installieren",
"installRootButton": "Als Root installieren",
"openButton": "Öffnen",
"shareButton": "Datei teilen",
"notificationTitle": "ReVanced Manager patcht",
"notificationText": "Tippen, um zum Installer zurückzukehren",
"shareApkMenuOption": "APK teilen",
"exportApkMenuOption": "APK exportieren",
"shareLogMenuOption": "Protokoll teilen",
"installErrorDialogTitle": "Fehler",
"installErrorDialogText1": "Installation per Root ist mit den aktuell ausgewählten Patches nicht möglich.\nPatche die App erneut oder installiere sie ohne Root.",
"installErrorDialogText2": "Installation ohne Root-Rechte ist mit den aktuell ausgewählten Patches nicht möglich.\nPatche die App erneut oder installiere sie mit Root-Rechten, wenn dein Gerät gerooted ist.",
"installErrorDialogText3": "Root-Installation ist nicht möglich, da die ursprüngliche APK aus dem Speicher ausgewählt wurde.\nWähle eine installierte App oder wähle die Installation ohne Root.",
"noExit": "Der Installer wird noch ausgeführt, kann nicht beendet werden..."
},
"settingsView": {
"widgetTitle": "Einstellungen",
"appearanceSectionTitle": "Darstellung",
"teamSectionTitle": "Team",
"infoSectionTitle": "Informationen",
"advancedSectionTitle": "Erweitert",
"logsSectionTitle": "Logs",
"darkThemeLabel": "Dunkler Modus",
"darkThemeHint": "Willkommen auf der dunklen Seite",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Genieße ein Erlebnis näher an deinem Gerät",
"languageLabel": "Sprache",
"englishOption": "Englisch",
"sourcesLabel": "Quellen",
"sourcesLabelHint": "Konfiguriere deine eigenen Quellen",
"hostRepositoryLabel": "Repository-API",
"orgPatchesLabel": "Patches Organisation",
"sourcesPatchesLabel": "Quelle für Patche",
"orgIntegrationsLabel": "Integrationen Organisation",
"sourcesIntegrationsLabel": "Quelle für Integrationen",
"sourcesResetDialogTitle": "Zurücksetzen",
"sourcesResetDialogText": "Bist du dir sicher, dass du die benutzerdefinierten Quellen auf ihre Standardwerte zurücksetzen möchtest?",
"apiURLResetDialogText": "Bist du dir sicher, dass du die API-URL auf ihren Standardwert zurücksetzen möchtest?",
"contributorsLabel": "Mitwirkende",
"contributorsHint": "Eine Liste der Mitwirkenden von ReVanced",
"logsLabel": "Protokolle",
"logsHint": "Manager-Protokolle teilen",
"apiURLLabel": "API-URL",
"apiURLHint": "Konfiguriere deine eigene API-URL",
"selectApiURL": "API URL",
"experimentalUniversalPatchesLabel": "Unterstützung für universelle Patches (experimentell)",
"experimentalUniversalPatchesHint": "Zeigt alle Apps zur Verwendung mit universellen Patches, dadurch lädt die App-Liste evtl. langsamer",
"experimentalPatchesLabel": "Experimentelle Patches aktiviert",
"experimentalPatchesHint": "Erlaubt die Benutzung von nicht unterstützten Patches mit jeder App Version",
"enabledExperimentalPatches": "Experimentelle Patches Unterstützung aktiviert",
"exportSectionTitle": "Import und Export",
"aboutLabel": "Über",
"snackbarMessage": "In die Zwischenablage kopiert",
"sentryLabel": "Sentry-Protokollierung",
"sentryHint": "Sende anonyme Protokolle, um den ReVanced Manager zu verbessern",
"restartAppForChanges": "Starte die App neu um die Änderungen zu übernehmen",
"deleteKeystoreLabel": "Den Schlüsselspeicher löschen",
"deleteKeystoreHint": "Löschen des Schlüsselspeichers, der zum Signieren der Anwendung verwendet wurde",
"deletedKeystore": "Schlüsselspeicher gelöscht",
"deleteTempDirLabel": "Lösche temporäre Dateien",
"deleteTempDirHint": "Unbenutzte temporäre Dateien löschen",
"deletedTempDir": "Temporäre Dateien gelöscht",
"exportPatchesLabel": "Patchauswahl exportieren",
"exportPatchesHint": "Patchauswahl als JSON-Datei exportieren",
"exportedPatches": "Patchauswahl exportiert",
"noExportFileFound": "Keine Patches zum Exportieren ausgewählt",
"importPatchesLabel": "Patchauswahl importieren",
"importPatchesHint": "Patchauswahl aus JSON-Datei importieren",
"importedPatches": "Patchauswahl importiert",
"resetStoredPatchesLabel": "Patches zurücksetzen",
"resetStoredPatchesHint": "Gespeicherte Auswahl der Patches zurücksetzen",
"resetStoredPatches": "Patchauswahl wurde zurückgesetzt",
"jsonSelectorErrorMessage": "Ausgewählte JSON-Datei kann nicht verwendet werden",
"deleteLogsLabel": "Logs löschen",
"deleteLogsHint": "Lösche gesammelte Logs von dem Manager",
"deletedLogs": "Logs gelöscht"
},
"appInfoView": {
"widgetTitle": "App Info",
"openButton": "Öffnen",
"uninstallButton": "Deinstallieren",
"patchButton": "Patchen",
"unpatchButton": "Patches entfernen",
"unpatchDialogText": "Bist du sicher, dass du die Patches dieser App entfernen möchtest?",
"rootDialogTitle": "Fehler",
"rootDialogText": "Die App wurde mit Superuser-Berechtigungen installiert, aber derzeit hat ReVanced Manager keine Berechtigungen.\nBitte erteile zuerst Superuser-Berechtigungen.",
"packageNameLabel": "Paketname",
"originalPackageNameLabel": "Ursprünglicher Paketname",
"installTypeLabel": "Installationsart",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Nicht gerooted",
"patchedDateLabel": "Patch-Datum",
"patchedDateHint": "{date} um {time}",
"appliedPatchesLabel": "Angewandte Patches",
"appliedPatchesHint": "{quantity} angewandte Patches",
"updateNotImplemented": "Diese Funktion ist noch nicht implementiert"
},
"contributorsView": {
"widgetTitle": "Mitwirkende",
"patcherContributors": "Patcher Mitwirkende",
"patchesContributors": "Patches Mitwirkende",
"integrationsContributors": "Integrations Mitwirkende",
"cliContributors": "CLI mitwirkende",
"managerContributors": "Manager mitwirkende"
}
}

200
assets/i18n/el_GR.json Normal file
View File

@ -0,0 +1,200 @@
{
"okButton": "Εντάξει",
"cancelButton": "Ακύρωση",
"updateButton": "Ενημέρωση",
"enabledLabel": "Ενεργό",
"disabledLabel": "Ανενεργό",
"yesButton": "Ναι",
"noButton": "Όχι",
"warning": "Προειδοποίηση",
"navigationView": {
"dashboardTab": "Πίνακας Ελέγχου",
"patcherTab": "Τροποποιητής",
"settingsTab": "Ρυθμίσεις"
},
"homeView": {
"widgetTitle": "Πίνακας Ελέγχου",
"updatesSubtitle": "Ενημερώσεις",
"patchedSubtitle": "Τροποποιημένες Εφαρμογές",
"updatesAvailable": "Διαθέσιμες ενημερώσεις",
"noUpdates": "Δεν υπάρχουν διαθέσιμες ενημερώσεις",
"WIP": "Υπό κατασκευή...",
"noInstallations": "Δεν έχουν εγκατασταθεί τροποποιημένες εφαρμογές",
"installed": "Εγκατεστημένες",
"updateDialogTitle": "Ενημέρωση του Manager",
"updateChangelogTitle": "Τι νέο υπάρχει",
"notificationTitle": "Η λήψη της ενημέρωσης ολοκληρώθηκε",
"notificationText": "Πατήστε για την εγκατάσταση της ενημέρωσης",
"downloadingMessage": "Λήψη ενημέρωσης...",
"installingMessage": "Εγκατάσταση ενημέρωσης...",
"errorDownloadMessage": "Αδυναμία λήψης ενημέρωσης",
"errorInstallMessage": "Αδυναμία εγκατάστασης ενημέρωσης",
"noConnection": "Δεν υπάρχει σύνδεση στο διαδίκτυο",
"updatesDisabled": "Η ενημέρωση τροποποιημένης εφαρμογής είναι ανενεργή προς το παρόν. Τροποποιήστε την εφαρμογή εκ νέου."
},
"applicationItem": {
"patchButton": "Τροποποίηση",
"infoButton": "Πληροφορίες",
"changelogLabel": "Τι νέο υπάρχει"
},
"latestCommitCard": {
"loadingLabel": "Φόρτωση...",
"timeagoLabel": "{time} πριν",
"patcherLabel": "Τροποποιητής: ",
"managerLabel": "Manager: ",
"updateButton": "Ενημέρωση του Manager"
},
"patcherView": {
"widgetTitle": "Τροποποιητής",
"patchButton": "Τροποποίηση",
"patchDialogText": "Έχετε επιλέξει κάποια τροποποίηση ενώ έχει εντοπιστεί εγκατάσταση split APK, μπορεί να εμφανιστούν σφάλματα κατά την τροποποίηση.\nΕίστε βέβαιοι ότι θέλετε να προχωρήσετε με την τροποποίηση ενός split base APK;"
},
"appSelectorCard": {
"widgetTitle": "Επιλέξτε μια εφαρμογή",
"widgetTitleSelected": "Επιλεγμένη εφαρμογή",
"widgetSubtitle": "Δεν έχει επιλεχθεί εφαρμογή",
"noAppsLabel": "Δεν βρέθηκαν εφαρμογές",
"currentVersion": "Τρέχουσα",
"recommendedVersion": "Προτεινόμενη",
"anyVersion": "οποιαδήποτε"
},
"patchSelectorCard": {
"widgetTitle": "Επιλέξτε τροποποιήσεις",
"widgetTitleSelected": "Επιλεγμένες τροποποιήσεις",
"widgetSubtitle": "Επιλέξτε πρώτα μια εφαρμογή",
"widgetEmptySubtitle": "Δεν επιλέχθηκαν τροποποιήσεις"
},
"socialMediaCard": {
"widgetTitle": "Κοινωνικά Δίκτυα",
"widgetSubtitle": "Είμαστε ενεργοί!"
},
"appSelectorView": {
"viewTitle": "Επιλέξτε μια εφαρμογή",
"searchBarHint": "Αναζήτηση εφαρμογών",
"storageButton": "Αποθηκευτικός χώρος",
"errorMessage": "Αδυναμία χρήσης της επιλεγμένης εφαρμογής"
},
"patchesSelectorView": {
"viewTitle": "Επιλέξτε τροποποιήσεις",
"searchBarHint": "Αναζήτηση τροποποιήσεων",
"doneButton": "Τέλος",
"recommended": "Προτεινόμενα",
"all": "Όλα",
"none": "Κανένα",
"loadPatchesSelection": "Φόρτωση επιλεγμένων τροποποιήσεων",
"noSavedPatches": "Δεν υπάρχουν αποθηκευμένες τροποποιήσεις για την εφαρμογή που επιλέξατε.\nΠατήστε «Τέλος» για να αποθηκεύσετε τις τωρινές επιλογές σας.",
"noPatchesFound": "Δε βρέθηκαν τροποποιήσεις για την επιλεγμένη εφαρμογή",
"selectAllPatchesWarningContent": "Πρόκειται να επιλέξτε όλες τις μη συνιστώμενες τροποποιήσεις, μπορεί να προκληθεί ανεπιθύμητη συμπεριφορά."
},
"patchItem": {
"unsupportedDialogText": "Η επιλογή αυτής της τροποποίησης μπορεί να επιφέρει σφάλματα τροποποίησης.\n\nΈκδοση εφαρμογής: {packageVersion}\nΥποστηριζόμενες εκδόσεις: {supportedVersions}",
"unsupportedPatchVersion": "Η τροποποίηση δεν είναι διαθέσιμη για αυτή την έκδοση της εφαρμογής. Ενεργοποιήστε την «Πειραματική Υποστήριξη Τροποποιήσεων» στις ρυθμίσεις για να συνεχίσετε."
},
"installerView": {
"widgetTitle": "Πρόγραμμα Εγκατάστασης",
"installButton": "Εγκατάσταση",
"installRootButton": "Εγκατάσταση με πρόσβαση root",
"openButton": "Άνοιγμα",
"shareButton": "Κοινοποίηση αρχείου",
"notificationTitle": "Το ReVanced Manager πραγματοποιεί τροποποίηση",
"notificationText": "Πατήστε για να επιστρέψετε στο πρόγραμμα εγκατάστασης",
"shareApkMenuOption": "Κοινοποίηση Αρχείου APK",
"exportApkMenuOption": "Εξαγωγή APK",
"shareLogMenuOption": "Κοινοποίηση αρχείου καταγραφής",
"installErrorDialogTitle": "Σφάλμα",
"installErrorDialogText1": "Η εγκατάσταση με χρήση πρόσβασης root δεν είναι δυνατή με την τρέχουσα επιλογή τροποποιήσεων.\nΤροποποιήστε ξανά την εφαρμογή σας ή επιλέξτε εγκατάσταση χωρίς πρόσβαση root.",
"installErrorDialogText2": "Η εγκατάσταση χωρίς πρόσβαση root δεν είναι δυνατή με την τρέχουσα επιλογή τροποποιήσεων.\nΕπιλέξτε άλλες τροποποιήσεις για την εφαρμογή σας ή επιλέξτε εγκατάσταση με πρόσβαση root αν έχετε πρόσβαση root στη συσκευή σας.",
"installErrorDialogText3": "Η εγκατάσταση με πρόσβαση root δεν είναι δυνατή διότι το αρχικό APK επιλέχθηκε από το χώρο αποθήκευσης.\nΕπιλέξτε μια εγκατεστημένη εφαρμογή ή επιλέξτε εγκατάσταση χωρίς πρόσβαση root.",
"noExit": "Το πρόγραμμα εγκατάστασης εκτελείται ακόμη, αδυναμία εξόδου..."
},
"settingsView": {
"widgetTitle": "Ρυθμίσεις",
"appearanceSectionTitle": "Εμφάνιση",
"teamSectionTitle": "Ομάδα",
"infoSectionTitle": "Πληροφορίες",
"advancedSectionTitle": "Για Προχωρημένους",
"logsSectionTitle": "Αρχεία καταγραφής",
"darkThemeLabel": "Σκουρόχρωμη λειτουργία",
"darkThemeHint": "Καλώς ήλθατε στη σκοτεινή πλευρά",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Εμφάνιση που ταιριάζει με τη δική σας συσκευή",
"languageLabel": "Γλώσσα",
"englishOption": "Αγγλικά",
"sourcesLabel": "Πηγές",
"sourcesLabelHint": "Διαμορφώστε τις δικές σας προσαρμοσμένες πηγές",
"hostRepositoryLabel": "Αποθετήριο API",
"orgPatchesLabel": "Οργάνωση τροποποιήσεων",
"sourcesPatchesLabel": "Πηγή τροποποιήσεων",
"orgIntegrationsLabel": "Οργάνωση ενσωματώσεων",
"sourcesIntegrationsLabel": "Πηγή ενσωματώσεων",
"sourcesResetDialogTitle": "Επαναφορά",
"sourcesResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τις προσαρμοσμένες πηγές στις προεπιλεγμένες τιμές τους;",
"apiURLResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε το API URL στην προεπιλεγμένη τιμή του;",
"contributorsLabel": "Συνεισφέροντες",
"contributorsHint": "Λίστα με όσους έχουν συμβάλει στο ReVanced",
"logsLabel": "Αρχεία καταγραφής",
"logsHint": "Κοινή χρήση αρχείων καταγραφής του ReVanced Manager",
"apiURLLabel": "API URL",
"apiURLHint": "Διαμορφώστε το δικό σας προσαρμοσμένο API URL",
"selectApiURL": "Διεύθυνση URL API",
"experimentalUniversalPatchesLabel": "Υποστήριξη γενικευμένων πειραματικών τροποποιήσεων",
"experimentalUniversalPatchesHint": "Εμφάνιση όλων των εφαρμογών (για χρήση τροποποιήσεων που λειτουργούν σε κάθε εφαρμογή), η φόρτωση της λίστας εφαρμογών μπορεί να καθυστερεί περισσότερο",
"experimentalPatchesLabel": "Πειραματική υποστήριξη τροποποιήσεων",
"experimentalPatchesHint": "Ενεργοποιήστε το για χρήση μη υποστηριζόμενων τροποποιήσεων, ανεξαρτήτως έκδοσης εφαρμογής",
"enabledExperimentalPatches": "Πειραματική υποστήριξη τροποποιήσεων ενεργή",
"exportSectionTitle": "Εισαγωγή & εξαγωγή",
"aboutLabel": "Σχετικά με",
"snackbarMessage": "Αντιγράφηκε στο πρόχειρο",
"sentryLabel": "Αρχεία καταγραφής «Sentry»",
"sentryHint": "Στείλτε ανώνυμα αρχεία καταγραφής για να μας βοηθήσετε να βελτιώσουμε το ReVanced Manager",
"restartAppForChanges": "Επανεκκινήστε την εφαρμογή για να εφαρμόσετε αλλαγές",
"deleteKeystoreLabel": "Διαγραφή κλειδιών",
"deleteKeystoreHint": "Διαγράψτε το κλειδί που χρησιμοποιείται για την υπογραφή της εφαρμογής",
"deletedKeystore": "Το κλειδί διαγράφηκε",
"deleteTempDirLabel": "Διαγραφή προσωρινών αρχείων",
"deleteTempDirHint": "Διαγραφή των αχρησιμοποίητων προσωρινών αρχείων",
"deletedTempDir": "Τα προσωρινά αρχεία διαγράφηκαν",
"exportPatchesLabel": "Εξαγωγή των επιλεγμένων τροποποιήσεων",
"exportPatchesHint": "Εξαγωγή των επιλεγμένων τροποποιήσεων σε ένα αρχείο JSON",
"exportedPatches": "Η εξαγωγή των επιλεγμένων τροποποιήσεων ολοκληρώθηκε",
"noExportFileFound": "Δεν υπάρχει επιλογή τροποποιήσεων για εξαγωγή",
"importPatchesLabel": "Εισαγωγή των επιλεγμένων τροποποιήσεων",
"importPatchesHint": "Εισαγωγή των επιλεγμένων τροποποιήσεων από ένα αρχείο JSON",
"importedPatches": "Η εισαγωγή των επιλεγμένων τροποποιήσεων ολοκληρώθηκε",
"resetStoredPatchesLabel": "Επαναφορά τροποποιήσεων",
"resetStoredPatchesHint": "Επαναφορά των αποθηκευμένων επιλογών τροποποιήσεων",
"resetStoredPatches": "Η επαναφορά των επιλεγμένων τροποποιήσεων ολοκληρώθηκε",
"jsonSelectorErrorMessage": "Αδυναμία χρήσης του συγκεκριμένου αρχείου JSON",
"deleteLogsLabel": "Διαγραφή αρχείων καταγραφής",
"deleteLogsHint": "Διαγραφή των αρχείων καταγραφής που έχει συλλέξει το ReVanced Manager",
"deletedLogs": "Τα αρχεία καταγραφής έχουν διαγραφεί"
},
"appInfoView": {
"widgetTitle": "Πληροφορίες εφαρμογής",
"openButton": "Άνοιγμα",
"uninstallButton": "Απεγκατάσταση",
"patchButton": "Τροποποίηση",
"unpatchButton": "Κατάργηση Τροποποιήσεων",
"unpatchDialogText": "Είστε βέβαιοι ότι θέλετε να καταργήσετε τις τροποποιήσεις για αυτήν την εφαρμογή;",
"rootDialogTitle": "Σφάλμα",
"rootDialogText": "Η εφαρμογή εγκαταστάθηκε με πρόσβαση root, αλλά αυτή τη στιγμή το ReVanced Manager δεν έχει πρόσβαση root.\nΠαρακαλώ παραχωρήστε πρόσβαση root.",
"packageNameLabel": "Όνομα πακέτου",
"originalPackageNameLabel": "Αρχικό όνομα πακέτου",
"installTypeLabel": "Τύπος εγκατάστασης",
"rootTypeLabel": "Μέσω root",
"nonRootTypeLabel": "Χωρίς root",
"patchedDateLabel": "Ημερομηνία τροποποίησης",
"patchedDateHint": "{date} στις {time}",
"appliedPatchesLabel": "Τροποποιήσεις που έχουν εφαρμοστεί",
"appliedPatchesHint": "{quantity} εφαρμοσμένες τροποποιήσεις",
"updateNotImplemented": "Αυτή η δυνατότητα δεν είναι ακόμα διαθέσιμη"
},
"contributorsView": {
"widgetTitle": "Συνεισφέροντες",
"patcherContributors": "Συνεισφέροντες του τροποποιητή",
"patchesContributors": "Συνεισφέροντες των τροποποιήσεων",
"integrationsContributors": "Συνεισφέροντες των ενσωματώσεων",
"cliContributors": "Συνεισφέροντες του CLI",
"managerContributors": "Συνεισφέροντες του Manager"
}
}

200
assets/i18n/en_US.json Normal file
View File

@ -0,0 +1,200 @@
{
"okButton": "OK",
"cancelButton": "Cancel",
"updateButton": "Update",
"enabledLabel": "Enabled",
"disabledLabel": "Disabled",
"yesButton": "Yes",
"noButton": "No",
"warning": "Warning",
"navigationView": {
"dashboardTab": "Dashboard",
"patcherTab": "Patcher",
"settingsTab": "Settings"
},
"homeView": {
"widgetTitle": "Dashboard",
"updatesSubtitle": "Updates",
"patchedSubtitle": "Patched applications",
"updatesAvailable": "Updates available",
"noUpdates": "No updates available",
"WIP": "Work in progress...",
"noInstallations": "No patched applications installed",
"installed": "Installed",
"updateDialogTitle": "Update Manager",
"updateChangelogTitle": "Changelog",
"notificationTitle": "Update downloaded",
"notificationText": "Tap to install the update",
"downloadingMessage": "Downloading update...",
"installingMessage": "Installing update...",
"errorDownloadMessage": "Unable to download update",
"errorInstallMessage": "Unable to install update",
"noConnection": "No internet connection",
"updatesDisabled": "Updating a patched app is currently disabled. Repatch the app again."
},
"applicationItem": {
"patchButton": "Patch",
"infoButton": "Info",
"changelogLabel": "Changelog"
},
"latestCommitCard": {
"loadingLabel": "Loading...",
"timeagoLabel": "{time} ago",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Update Manager"
},
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "Patch",
"patchDialogText": "You have selected a resource patch and a split APK installation has been detected, so patching errors may occur.\nAre you sure you want to proceed?"
},
"appSelectorCard": {
"widgetTitle": "Select an application",
"widgetTitleSelected": "Selected application",
"widgetSubtitle": "No application selected",
"noAppsLabel": "No applications found",
"currentVersion": "Current",
"recommendedVersion": "Recommended",
"anyVersion": "any"
},
"patchSelectorCard": {
"widgetTitle": "Select patches",
"widgetTitleSelected": "Selected patches",
"widgetSubtitle": "Select an application first",
"widgetEmptySubtitle": "No patches selected"
},
"socialMediaCard": {
"widgetTitle": "Socials",
"widgetSubtitle": "We are online!"
},
"appSelectorView": {
"viewTitle": "Select an application",
"searchBarHint": "Search applications",
"storageButton": "Storage",
"errorMessage": "Unable to use selected application"
},
"patchesSelectorView": {
"viewTitle": "Select patches",
"searchBarHint": "Search patches",
"doneButton": "Done",
"recommended": "Recommended",
"all": "All",
"none": "None",
"loadPatchesSelection": "Load patches selection",
"noSavedPatches": "No saved patches for the selected app.\nPress Done to save current selection.",
"noPatchesFound": "No patches found for the selected app",
"selectAllPatchesWarningContent": "You are about to select all patches, that includes unrecommended patches and can cause unwanted behavior."
},
"patchItem": {
"unsupportedDialogText": "Selecting this patch may result in patching errors.\n\nApp version: {packageVersion}\nSupported versions:\n{supportedVersions}",
"unsupportedPatchVersion": "Patch is not supported for this app version. Enable the experimental toggle in settings to proceed."
},
"installerView": {
"widgetTitle": "Installer",
"installButton": "Install",
"installRootButton": "Install as Root",
"openButton": "Open",
"shareButton": "Share file",
"notificationTitle": "ReVanced Manager is patching",
"notificationText": "Tap to return to the installer",
"shareApkMenuOption": "Share APK",
"exportApkMenuOption": "Export APK",
"shareLogMenuOption": "Share log",
"installErrorDialogTitle": "Error",
"installErrorDialogText1": "Root install is not possible with the current patches selection.\nRepatch your app or choose non-root install.",
"installErrorDialogText2": "Non-root install is not possible with the current patches selection.\nRepatch your app or choose root install if you have your device rooted.",
"installErrorDialogText3": "Root install is not possible as the original APK was selected from storage.\nSelect an installed app or choose non-root install.",
"noExit": "Installer is still running, cannot exit..."
},
"settingsView": {
"widgetTitle": "Settings",
"appearanceSectionTitle": "Appearance",
"teamSectionTitle": "Team",
"infoSectionTitle": "Info",
"advancedSectionTitle": "Advanced",
"logsSectionTitle": "Logs",
"darkThemeLabel": "Dark mode",
"darkThemeHint": "Welcome to the dark side",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Enjoy an experience closer to your device",
"languageLabel": "Language",
"englishOption": "English",
"sourcesLabel": "Sources",
"sourcesLabelHint": "Configure your custom sources",
"hostRepositoryLabel": "Repository API",
"orgPatchesLabel": "Patches organization",
"sourcesPatchesLabel": "Patches source",
"orgIntegrationsLabel": "Integrations organization",
"sourcesIntegrationsLabel": "Integrations source",
"sourcesResetDialogTitle": "Reset",
"sourcesResetDialogText": "Are you sure you want to reset custom sources to their default values?",
"apiURLResetDialogText": "Are you sure you want to reset API URL to its default value?",
"contributorsLabel": "Contributors",
"contributorsHint": "A list of contributors of ReVanced",
"logsLabel": "Logs",
"logsHint": "Share Manager's logs",
"apiURLLabel": "API URL",
"apiURLHint": "Configure your custom API URL",
"selectApiURL": "API URL",
"experimentalUniversalPatchesLabel": "Experimental universal patches support",
"experimentalUniversalPatchesHint": "Display all applications to use with universal patches, loading list of apps may be slower",
"experimentalPatchesLabel": "Experimental patches support",
"experimentalPatchesHint": "Enable usage of unsupported patches in any app version",
"enabledExperimentalPatches": "Experimental patches support enabled",
"exportSectionTitle": "Import & export",
"aboutLabel": "About",
"snackbarMessage": "Copied to clipboard",
"sentryLabel": "Sentry logging",
"sentryHint": "Send anonymous logs to help us improve ReVanced Manager",
"restartAppForChanges": "Restart the app to apply changes",
"deleteKeystoreLabel": "Delete keystore",
"deleteKeystoreHint": "Delete the keystore used to sign the app",
"deletedKeystore": "Keystore deleted",
"deleteTempDirLabel": "Delete temporary files",
"deleteTempDirHint": "Delete unused temporary files",
"deletedTempDir": "Temporary files deleted",
"exportPatchesLabel": "Export patches selection",
"exportPatchesHint": "Export patches selection to a JSON file",
"exportedPatches": "Patches selection exported",
"noExportFileFound": "No patches selection to export",
"importPatchesLabel": "Import patches selection",
"importPatchesHint": "Import patches selection from a JSON file",
"importedPatches": "Patches selection imported",
"resetStoredPatchesLabel": "Reset patches",
"resetStoredPatchesHint": "Reset the stored patches selection",
"resetStoredPatches": "Patches selection has been reset",
"jsonSelectorErrorMessage": "Unable to use selected JSON file",
"deleteLogsLabel": "Delete logs",
"deleteLogsHint": "Delete collected manager logs",
"deletedLogs": "Logs deleted"
},
"appInfoView": {
"widgetTitle": "App info",
"openButton": "Open",
"uninstallButton": "Uninstall",
"patchButton": "Patch",
"unpatchButton": "Unpatch",
"unpatchDialogText": "Are you sure you want to unpatch this app?",
"rootDialogTitle": "Error",
"rootDialogText": "App was installed with superuser permissions, but currently ReVanced Manager has no permissions.\nPlease grant superuser permissions first.",
"packageNameLabel": "Package name",
"originalPackageNameLabel": "Original package name",
"installTypeLabel": "Installation type",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Non-root",
"patchedDateLabel": "Patched date",
"patchedDateHint": "{date} at {time}",
"appliedPatchesLabel": "Applied patches",
"appliedPatchesHint": "{quantity} applied patches",
"updateNotImplemented": "This feature has not been implemented yet"
},
"contributorsView": {
"widgetTitle": "Contributors",
"patcherContributors": "Patcher contributors",
"patchesContributors": "Patches contributors",
"integrationsContributors": "Integrations contributors",
"cliContributors": "CLI contributors",
"managerContributors": "Manager contributors"
}
}

200
assets/i18n/es_ES.json Normal file
View File

@ -0,0 +1,200 @@
{
"okButton": "OK",
"cancelButton": "Cancelar",
"updateButton": "Actualizar",
"enabledLabel": "Activado",
"disabledLabel": "Desactivado",
"yesButton": "Sí",
"noButton": "No",
"warning": "Advertencia",
"navigationView": {
"dashboardTab": "Panel de control",
"patcherTab": "Parcheador",
"settingsTab": "Configuración"
},
"homeView": {
"widgetTitle": "Panel",
"updatesSubtitle": "Actualizaciones",
"patchedSubtitle": "Aplicaciones parcheadas",
"updatesAvailable": "Actualizaciones disponibles",
"noUpdates": "No hay actualizaciones disponibles",
"WIP": "Trabajo en progreso...",
"noInstallations": "No hay aplicaciones parcheadas instaladas",
"installed": "Instalado",
"updateDialogTitle": "Actualizar Manager",
"updateChangelogTitle": "Registro de cambios",
"notificationTitle": "Actualización descargada",
"notificationText": "Toca para instalar la actualización",
"downloadingMessage": "Descargando actualización...",
"installingMessage": "Instalando actualización...",
"errorDownloadMessage": "No se pudo descargar la actualización",
"errorInstallMessage": "No se pudo instalar la actualización",
"noConnection": "No hay conexión a Internet",
"updatesDisabled": "La actualización de una app parcheada está deshabilitada. Re-parchea la app de nuevo."
},
"applicationItem": {
"patchButton": "Parchear",
"infoButton": "Información",
"changelogLabel": "Historial de cambios"
},
"latestCommitCard": {
"loadingLabel": "Cargando...",
"timeagoLabel": "Hace {time}",
"patcherLabel": "Parcheador: ",
"managerLabel": "Manager: ",
"updateButton": "Actualizar Manager"
},
"patcherView": {
"widgetTitle": "Parcheador",
"patchButton": "Parchear",
"patchDialogText": "Acaba de seleccionar un parche de recursos y un \"Split APK\" ha sido detectado, así que pueden ocurrir algunos errores en el proceso de parcheo.\n¿Está seguro de que quiere continuar el parcheo de un \"Split APK\"?"
},
"appSelectorCard": {
"widgetTitle": "Selecciona una aplicación",
"widgetTitleSelected": "Aplicación seleccionada",
"widgetSubtitle": "Ninguna aplicación seleccionada",
"noAppsLabel": "No se encontraron aplicaciones",
"currentVersion": "Versión actual",
"recommendedVersion": "Versión recomendada",
"anyVersion": "cualquiera"
},
"patchSelectorCard": {
"widgetTitle": "Seleccionar parches",
"widgetTitleSelected": "Parches seleccionados",
"widgetSubtitle": "Seleccioné una aplicación antes",
"widgetEmptySubtitle": "Ningún parche seleccionado"
},
"socialMediaCard": {
"widgetTitle": "Redes sociales",
"widgetSubtitle": "¡Estamos en la red!"
},
"appSelectorView": {
"viewTitle": "Selecciona una aplicación",
"searchBarHint": "Buscar aplicaciones",
"storageButton": "Almacenamiento",
"errorMessage": "No se puede usar la aplicación seleccionada"
},
"patchesSelectorView": {
"viewTitle": "Seleccionar parches",
"searchBarHint": "Buscar parches",
"doneButton": "Listo",
"recommended": "Recomendados",
"all": "Todos",
"none": "Ninguno",
"loadPatchesSelection": "Cargar selección de parches",
"noSavedPatches": "No hay parches guardados para la app seleccionada\nPresione Hecho para guardar la selección actual.",
"noPatchesFound": "No se encontraron parches para la aplicación seleccionada",
"selectAllPatchesWarningContent": "Está a punto de seleccionar todos los parches incluyendo parches no recomendados, lo cual puede causar comportamientos inesperados."
},
"patchItem": {
"unsupportedDialogText": "Seleccionar este parche puede causar errores.\n\nVersión de la app: {packageVersion}\nVersiones compatibles:\n{supportedVersions}",
"unsupportedPatchVersion": "El parche no es compatible con esta versión de la app. Habilita la opción experimental en los ajustes para continuar."
},
"installerView": {
"widgetTitle": "Instalador",
"installButton": "Instalar",
"installRootButton": "Instalar como Root",
"openButton": "Abrir",
"shareButton": "Compartir archivo",
"notificationTitle": "ReVanced Manager está parcheando",
"notificationText": "Toque para volver al instalador",
"shareApkMenuOption": "Compartir APK",
"exportApkMenuOption": "Exportar APK",
"shareLogMenuOption": "Compartir registros",
"installErrorDialogTitle": "Error",
"installErrorDialogText1": "La instalación como root no es posible con la selección actual de parches.\nVuelva a parchear la aplicación o elija una instalación no-root.",
"installErrorDialogText2": "La instalación sin root no es posible con la selección actual de parches.\nVuelva a parchear la app o elija una instalación root.",
"installErrorDialogText3": "La instalación como root no es posible porque la APK original fue seleccionada desde el almacenamiento.\nSeleccione una app ya instalada o utilice una instalación sin root.",
"noExit": "El instalador todavía se está ejecutando, no se puede salir..."
},
"settingsView": {
"widgetTitle": "Configuración",
"appearanceSectionTitle": "Apariencia",
"teamSectionTitle": "Equipo",
"infoSectionTitle": "Info",
"advancedSectionTitle": "Avanzado",
"logsSectionTitle": "Registros",
"darkThemeLabel": "Modo oscuro",
"darkThemeHint": "Bienvenido al lado oscuro",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Disfrute de una experiencia más acorde a su dispositivo",
"languageLabel": "Idioma",
"englishOption": "Inglés",
"sourcesLabel": "Fuentes",
"sourcesLabelHint": "Configure sus fuentes personalizadas",
"hostRepositoryLabel": "Repositorio API",
"orgPatchesLabel": "Organización de los parches",
"sourcesPatchesLabel": "Fuente de los parches",
"orgIntegrationsLabel": "Organización de integraciones",
"sourcesIntegrationsLabel": "Fuente de las integraciones",
"sourcesResetDialogTitle": "Restablecer",
"sourcesResetDialogText": "¿Está seguro de que desea restablecer las fuentes personalizadas a sus valores predeterminados?",
"apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de la API a su valor predeterminado?",
"contributorsLabel": "Contribuidores",
"contributorsHint": "Una lista de contribuidores de ReVanced",
"logsLabel": "Registros",
"logsHint": "Compartir registros del Manager",
"apiURLLabel": "URL de la API",
"apiURLHint": "Configure su URL personalizada para la API",
"selectApiURL": "URL de la API",
"experimentalUniversalPatchesLabel": "Soporte experimental para parches universales",
"experimentalUniversalPatchesHint": "Mostrar todas las aplicaciones a usar con parches universales, la carga de la lista de aplicaciones puede ser más lenta",
"experimentalPatchesLabel": "Soporte para parches experimentales",
"experimentalPatchesHint": "Habilite el uso de parches no compatibles en cualquier versión de la app",
"enabledExperimentalPatches": "Soporte para parches experimentales activado",
"exportSectionTitle": "Importar y Exportar",
"aboutLabel": "Acerca de",
"snackbarMessage": "Copiado al portapapeles",
"sentryLabel": "Registro Sentry",
"sentryHint": "Enviar registros anónimos para ayudarnos a mejorar ReVanced Manager",
"restartAppForChanges": "Reinicie la app para aplicar los cambios",
"deleteKeystoreLabel": "Eliminar keystore",
"deleteKeystoreHint": "Eliminar el keystore usado para firmar la app",
"deletedKeystore": "Keystore eliminado",
"deleteTempDirLabel": "Borrar archivos temporales",
"deleteTempDirHint": "Eliminar archivos temporales no utilizados",
"deletedTempDir": "Archivos temporales eliminados",
"exportPatchesLabel": "Exportar la selección de parches",
"exportPatchesHint": "Exportar selección de parches a un archivo JSON",
"exportedPatches": "Selección de parches exportados",
"noExportFileFound": "No hay selección de parches para exportar",
"importPatchesLabel": "Importar la selección de parches",
"importPatchesHint": "Importar selección de parches desde un archivo JSON",
"importedPatches": "Selección de parches importados",
"resetStoredPatchesLabel": "Restablecer parches",
"resetStoredPatchesHint": "Restablece la selección de parches almacenados",
"resetStoredPatches": "La selección de parches ha sido restablecida",
"jsonSelectorErrorMessage": "No se puede utilizar el archivo JSON seleccionado",
"deleteLogsLabel": "Eliminar registros",
"deleteLogsHint": "Borrar los registros del Manager recopilados",
"deletedLogs": "Registros eliminados"
},
"appInfoView": {
"widgetTitle": "Información de la app",
"openButton": "Abrir",
"uninstallButton": "Desinstalar",
"patchButton": "Parchear",
"unpatchButton": "Desparchear",
"unpatchDialogText": "¿Está seguro de que desea desparchear esta aplicación?",
"rootDialogTitle": "Error",
"rootDialogText": "La app se instaló con permisos de superusuario, pero actualmente ReVanced Manager no tiene permisos.\nPor favor, concede permisos de superusuario primero.",
"packageNameLabel": "Nombre del paquete",
"originalPackageNameLabel": "Nombre del paquete original",
"installTypeLabel": "Tipo de instalación",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "No-Root",
"patchedDateLabel": "Fecha del parche",
"patchedDateHint": "{date} a las {time}",
"appliedPatchesLabel": "Parches aplicados",
"appliedPatchesHint": "{quantity} parches aplicados",
"updateNotImplemented": "Esta función no se ha implementado aún"
},
"contributorsView": {
"widgetTitle": "Contribuidores",
"patcherContributors": "Contribuidores de los parches",
"patchesContributors": "Contribuidores de los parches",
"integrationsContributors": "Contribuidores de las integraciones",
"cliContributors": "Contribuidores del CLI",
"managerContributors": "Contribuidores del Manager"
}
}

196
assets/i18n/es_MX.json Normal file
View File

@ -0,0 +1,196 @@
{
"okButton": "Ok",
"cancelButton": "Cancelar",
"enabledLabel": "Activado",
"disabledLabel": "Desactivado",
"yesButton": "Si",
"noButton": "No",
"warning": "Advertencia",
"navigationView": {
"dashboardTab": "Panel de control",
"patcherTab": "Aplicador de parches",
"settingsTab": "Ajustes"
},
"homeView": {
"widgetTitle": "Panel de control",
"updatesSubtitle": "Actualizaciones",
"patchedSubtitle": "Aplicaciones parcheadas",
"updatesAvailable": "Actualizaciones disponibles",
"noUpdates": "No hay actualizaciones disponibles",
"WIP": "Trabajo en curso...",
"noInstallations": "No hay aplicaciones parcheadas instaladas",
"installed": "Instaladas",
"updateDialogTitle": "Actualizar administrador",
"updateDialogText": "¿Estás seguro de que quieres descargar y actualizar ReVanced Manager?",
"notificationTitle": "Actualización descargada",
"notificationText": "Toca para instalar la actualización",
"downloadingMessage": "Descargando actualización...",
"installingMessage": "Instalando actualización...",
"errorDownloadMessage": "No se pudo descargar la actualización",
"errorInstallMessage": "Error al instalar la actualización",
"noConnection": "Sin conexión a internet",
"updatesDisabled": "La actualización de una aplicación parcheada está deshabilitada. Vuelve a parchear la aplicación."
},
"applicationItem": {
"patchButton": "Parchear",
"infoButton": "Información",
"changelogLabel": "Registro de cambios"
},
"latestCommitCard": {
"loadingLabel": "Cargando...",
"timeagoLabel": "hace {time}",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Actualizar ReVanced Manager"
},
"patcherView": {
"widgetTitle": "Parcheador",
"patchButton": "Parchear",
"patchDialogText": "Seleccionaste un parche de recursos y se ha detectado una instalación de APK dividida, por lo que pueden ocurrir errores de parcheado.\n¿Estás seguro de que deseas continuar?"
},
"appSelectorCard": {
"widgetTitle": "Selecciona una aplicación",
"widgetTitleSelected": "Aplicación seleccionada",
"widgetSubtitle": "Ninguna aplicación seleccionada",
"noAppsLabel": "No se encontraron aplicaciones",
"currentVersion": "Versión actual",
"recommendedVersion": "Versión recomendada",
"anyVersion": "Cualquier versión"
},
"patchSelectorCard": {
"widgetTitle": "Seleccionar parches",
"widgetTitleSelected": "Parches seleccionados",
"widgetSubtitle": "Seleccione primero una aplicación",
"widgetEmptySubtitle": "Ningún parche seleccionado"
},
"socialMediaCard": {
"widgetTitle": "Redes sociales",
"widgetSubtitle": "¡Estamos en línea!"
},
"appSelectorView": {
"viewTitle": "Selecciona una aplicación",
"searchBarHint": "Buscar aplicaciones",
"storageButton": "Almacenamiento",
"errorMessage": "No se puede usar la aplicación seleccionada"
},
"patchesSelectorView": {
"viewTitle": "Selecciona parches",
"searchBarHint": "Buscar parches",
"doneButton": "Completado",
"recommended": "Recomendados",
"all": "Todos",
"none": "Ninguno",
"loadPatchesSelection": "Cargar parches seleccionados",
"noSavedPatches": "No hay parches guardados para la aplicacion seleccionada\nPresiona Listo para guardar la seleccion actual",
"noPatchesFound": "No se encontraron parches para la aplicación seleccionada",
"selectAllPatchesWarningContent": "Estás seleccionando todos los parches, esto incluye algunos que no están recomendados y podrían causar comportamientos inadecuados."
},
"patchItem": {
"unsupportedDialogText": "Seleccionar este parche puede causar errores.\n\nVersión de la app: {packageVersion}\nVersiones compatibles:\n{supportedVersions}",
"unsupportedPatchVersion": "El parche no es compatible con esta versión de la aplicación. Activa la opción experimental en la configuración para continuar."
},
"installerView": {
"widgetTitle": "Instalador",
"installButton": "Instalar",
"installRootButton": "Instalar como Root",
"openButton": "Abrir",
"shareButton": "Compartir archivo",
"notificationTitle": "ReVanced Manager está parcheando",
"notificationText": "Pulsa para volver al instalador",
"shareApkMenuOption": "Compartir APK",
"exportApkMenuOption": "Exportar APK",
"shareLogMenuOption": "Compartir registro",
"installErrorDialogTitle": "Error",
"installErrorDialogText1": "La instalación de root no es posible con la selección de parches actual.\nVuelva a parchar su aplicación o elija una instalación sin-root.",
"installErrorDialogText2": "La instalación sin-root no es posible con la selección de parches actual.\nVuelva a parchar su aplicación o elija una instalación con root, si tu dispositivo cuenta con ello.",
"installErrorDialogText3": "La instalación con Root no es posible ya que la APK fue seleccionada desde el almacenamiento.\nSelecciona una aplicación instalada o elige la opcion no-root.",
"noExit": "El instalador se está ejecutando, no puedes salir..."
},
"settingsView": {
"widgetTitle": "Ajustes",
"appearanceSectionTitle": "Apariencia",
"teamSectionTitle": "Equipo",
"infoSectionTitle": "Información",
"advancedSectionTitle": "Avanzado",
"logsSectionTitle": "Registros",
"darkThemeLabel": "Modo oscuro",
"darkThemeHint": "Bienvenido al lado oscuro",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Disfruta de una experiencia más cercana a tu dispositivo",
"languageLabel": "Idioma",
"englishOption": "Inglés",
"sourcesLabel": "Fuentes",
"sourcesLabelHint": "Configura tus fuentes personalizadas",
"orgPatchesLabel": "Organización de parches",
"sourcesPatchesLabel": "Fuente de los parches",
"orgIntegrationsLabel": "Organización de integraciones",
"sourcesIntegrationsLabel": "Fuente de integraciones",
"sourcesResetDialogTitle": "Reiniciar",
"sourcesResetDialogText": "¿Esta seguro de reiniciar las fuentes personalizadas a su valor predeterminado?",
"apiURLResetDialogText": "¿Esta seguro de restablecer la URL de la API a su valor predeterminado?",
"contributorsLabel": "Contribuidores",
"contributorsHint": "Lista de contribuidores de ReVanced",
"logsLabel": "Registros",
"logsHint": "Compartir registros de la aplicación",
"apiURLLabel": "URL API",
"apiURLHint": "Configure la URL personalizada de la API",
"selectApiURL": "URL de la API",
"experimentalPatchesLabel": "Soporte a parches experimentales",
"experimentalPatchesHint": "Habilite el uso de parches no compatibles en cualquier versión de la aplicación",
"enabledExperimentalPatches": "Soporte a parches experimentales activado",
"exportSectionTitle": "Importar y Exportar",
"aboutLabel": "Acerca de",
"snackbarMessage": "Copiado al portapapeles",
"sentryLabel": "Registro centinela",
"sentryHint": "Enviar registros anónimos para ayudarnos a mejorar ReVanced Manager",
"restartAppForChanges": "Reinicie la aplicación para aplicar los cambios",
"deleteKeystoreLabel": "Eliminar keystore",
"deleteKeystoreHint": "Eliminar el keystore usado para firmar la app",
"deletedKeystore": "Keystore eliminado",
"deleteTempDirLabel": "Borrar archivos temporales",
"deleteTempDirHint": "Eliminar archivos temporales sin utilizar",
"deletedTempDir": "Archivos temporales eliminados",
"exportPatchesLabel": "Exportar la selección de parches",
"exportPatchesHint": "Exportar selección de parches a un archivo JSON",
"exportedPatches": "Selección de parches exportada",
"noExportFileFound": "No hay selección de parches para exportar",
"importPatchesLabel": "Importar selección de parches",
"importPatchesHint": "Importar selección de parches desde un archivo JSON",
"importedPatches": "Selección de parches importada",
"resetStoredPatchesLabel": "Restablecer parches",
"resetStoredPatchesHint": "Restablecer la selección de parches almacenados",
"resetStoredPatches": "Se ha restablecido la selección de parches",
"jsonSelectorErrorMessage": "No se puede utilizar el archivo JSON seleccionado",
"deleteLogsLabel": "Eliminar registros",
"deleteLogsHint": "Borrar los registros del administrador",
"deletedLogs": "Registros eliminados"
},
"appInfoView": {
"widgetTitle": "Informacion de la applicacion",
"openButton": "Abrir",
"uninstallButton": "Desinstalar",
"patchButton": "Parchar",
"unpatchButton": "Desparchar",
"unpatchDialogText": "¿Estás seguro que quieres remover el parche?",
"rootDialogTitle": "Error",
"rootDialogText": "La aplicación se instaló con permisos de superusuario, pero actualmente ReVanced Manager no tiene permisos.\nPor favor, conceda primero los permisos de superusuario.",
"packageNameLabel": "Nombre del paquete",
"originalPackageNameLabel": "Original package name",
"installTypeLabel": "Installation type",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Sin-Root",
"patchedDateLabel": "Fecha de parcheo",
"patchedDateHint": "{date} a las {time}",
"appliedPatchesLabel": "Parches aplicados",
"appliedPatchesHint": "{quantity} parches aplicados",
"updateNotImplemented": "Esta función aún no se ha implementado"
},
"contributorsView": {
"widgetTitle": "Contribuidores",
"patcherContributors": "Colaboradores del parcheador",
"patchesContributors": "Colaboradores de parches",
"integrationsContributors": "Colaboradores de la integración",
"cliContributors": "Colaboradores de la CLI",
"managerContributors": "Colaboradores del administrador"
}
}

196
assets/i18n/fi_FI.json Normal file
View File

@ -0,0 +1,196 @@
{
"okButton": "OK",
"cancelButton": "Peruuta",
"enabledLabel": "Käytössä",
"disabledLabel": "Poistettu käytöstä",
"yesButton": "Kyllä",
"noButton": "Ei",
"warning": "Varoitus",
"navigationView": {
"dashboardTab": "Hallinta",
"patcherTab": "Patcher",
"settingsTab": "Asetukset"
},
"homeView": {
"widgetTitle": "Hallintapaneeli",
"updatesSubtitle": "Päivitykset",
"patchedSubtitle": "Paikatut sovellukset",
"updatesAvailable": "Päivityksiä on saatavilla",
"noUpdates": "Päivityksiä ei ole saatavilla",
"WIP": "Työn alla...",
"noInstallations": "Paikattuja sovelluksia ei ole asennettu",
"installed": "Asennettu",
"updateDialogTitle": "Päivitä Manager",
"updateDialogText": "Haluatko varmasti ladata ja päivittää ReVanced Managerin?",
"notificationTitle": "Päivitys ladattu",
"notificationText": "Asenna päivitys napauttamalla",
"downloadingMessage": "Ladataan päivitystä...",
"installingMessage": "Asennetaan päivitystä...",
"errorDownloadMessage": "Päivityksen lataus epäonnistui",
"errorInstallMessage": "Päivityksen asennus epäonnistui",
"noConnection": "Ei internetyhteyttä",
"updatesDisabled": "Paikatun sovelluksen päivitys ei tällä hetkellä ole käytössä. Paikkaa sovellus uudelleen."
},
"applicationItem": {
"patchButton": "Paikkaa",
"infoButton": "Info",
"changelogLabel": "Muutosloki"
},
"latestCommitCard": {
"loadingLabel": "Ladataan...",
"timeagoLabel": "{time} sitten",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Päivitä Manager"
},
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "Paikkaa",
"patchDialogText": "Olet valinnut resurssipaikkauksen ja havaittu asennus on ns. split APK -tyyppinen, joten paikkausvirheet ovat mahdollisia.\nHaluatko varmasti jatkaa ja paikata split APK -asennuksen?"
},
"appSelectorCard": {
"widgetTitle": "Valitse sovellus",
"widgetTitleSelected": "Valittu sovellus",
"widgetSubtitle": "Sovellusta ei ole valittu",
"noAppsLabel": "Sovelluksia ei löytynyt",
"currentVersion": "Nykyinen",
"recommendedVersion": "Suositeltu",
"anyVersion": "mikä tahansa"
},
"patchSelectorCard": {
"widgetTitle": "Valitse paikkaukset",
"widgetTitleSelected": "Valitut paikkaukset",
"widgetSubtitle": "Valitse ensin sovellus",
"widgetEmptySubtitle": "Paikkauksia ei ole valittu"
},
"socialMediaCard": {
"widgetTitle": "Somet",
"widgetSubtitle": "Löydymme täältä!"
},
"appSelectorView": {
"viewTitle": "Valitse sovellus",
"searchBarHint": "Hae sovelluksia",
"storageButton": "Tallennustila",
"errorMessage": "Valittua sovellusta ei voida käyttää"
},
"patchesSelectorView": {
"viewTitle": "Valitse paikkaukset",
"searchBarHint": "Etsi paikkauksia",
"doneButton": "Valmis",
"recommended": "Suositellut",
"all": "Kaikki",
"none": "Ei mitään",
"loadPatchesSelection": "Lataa paikkausvalikoima",
"noSavedPatches": "Paikkauksia ei ole tallennettu valitulle sovellukselle\nTallenna nykyinen valikoima paunamalla Valmis",
"noPatchesFound": "Valitulle sovellukselle ei löytynyt paikkauksia",
"selectAllPatchesWarningContent": "Olet valitsemassa kaikki paikkaukset ja näihin sisältyy myös ei suositeltavia paikkauksia, jotka saattavat aiheuttaa ei toivottua toimintaa."
},
"patchItem": {
"unsupportedDialogText": "Tämän paikkauksen valinta voi aiheuttaa virheitä.\n\nSovelluksen versio: {packageVersion}\nTuetut versiot: \n{supportedVersions}",
"unsupportedPatchVersion": "Tämän sovellusversion paikkausta ei tueta. Jos haluat jatkaa, ota kokeellinen paikkaustuki käyttöön asetuksista."
},
"installerView": {
"widgetTitle": "Asennusohjelma",
"installButton": "Asenna",
"installRootButton": "Asenna root-oikeuksilla",
"openButton": "Avaa",
"shareButton": "Jaa tiedosto",
"notificationTitle": "ReVanced Manager suorittaa paikkauksia",
"notificationText": "Napauta palataksesi hallintasovellukseen",
"shareApkMenuOption": "Jaa APK",
"exportApkMenuOption": "Vie APK",
"shareLogMenuOption": "Jaa loki",
"installErrorDialogTitle": "Virhe",
"installErrorDialogText1": "Root-asennus ei ole mahdollista nykyisillä paikkausvalinnoilla.\nPaikkaa sovellus uudelleen tai valitse normaali asennus.",
"installErrorDialogText2": "Nykyisten paikkausvalintojen normaali asennus ei ole mahdollista.\nPaikkaa sovellus uudelleen tai valitse root-asennus, jos laitteesi on rootattu.",
"installErrorDialogText3": "Root-asennus ei ole mahdollista, koska tallennusmedialta valittiin alkuperäinen APK.\nValitse asennettu sovellus tai valitse normaali asennus.",
"noExit": "Asennus on vielä kesken, eikä poistuminen ole mahdollista..."
},
"settingsView": {
"widgetTitle": "Asetukset",
"appearanceSectionTitle": "Ulkoasu",
"teamSectionTitle": "Tiimi",
"infoSectionTitle": "Tiedot",
"advancedSectionTitle": "Lisäasetukset",
"logsSectionTitle": "Lokitiedot",
"darkThemeLabel": "Tumma tila",
"darkThemeHint": "Tervetuloa pimeälle puolelle",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Nauti kokemuksesta, joka on lähempänä laitettasi",
"languageLabel": "Kieli",
"englishOption": "Englanti",
"sourcesLabel": "Lähteet",
"sourcesLabelHint": "Määritä mukautetut lähteet",
"orgPatchesLabel": "Paikkauksien organisaatio",
"sourcesPatchesLabel": "Paikkauksien lähde",
"orgIntegrationsLabel": "Integraatioiden organisaatio",
"sourcesIntegrationsLabel": "Integraatioiden lähde",
"sourcesResetDialogTitle": "Palauta",
"sourcesResetDialogText": "Haluatko varmasti palauttaa nämä asetukset oletusarvoihin?",
"apiURLResetDialogText": "Haluatko varmasti palauttaa API URL-osoitteen oletusarvoon?",
"contributorsLabel": "Osallistujat",
"contributorsHint": "Listaus ReVancedin kehitykseen osallistuneista",
"logsLabel": "Lokit",
"logsHint": "Jaa Managerin lokitiedot",
"apiURLLabel": "API URL",
"apiURLHint": "Määritä oma API URL-osoite",
"selectApiURL": "API:n URL-osoite",
"experimentalPatchesLabel": "Kokeellinen paikkaustuki",
"experimentalPatchesHint": "Mahdollistaa paikkausten asennuksen myös ei tuettuihin sovellusversiohin",
"enabledExperimentalPatches": "Kokeellinen paikkaustuki on käytössä",
"exportSectionTitle": "Tuonti/vienti",
"aboutLabel": "Tietoja",
"snackbarMessage": "Kopioitu leikepöydälle",
"sentryLabel": "Sentry-lokikirjaus",
"sentryHint": "Lähetä nimettömiä tietoja auttaaksesi ReVanced Managerin kehityksessä",
"restartAppForChanges": "Käynnistä sovellus uudestaan muutosten käyttöönottamiseksi",
"deleteKeystoreLabel": "Poista avainsäilö",
"deleteKeystoreHint": "Poista sovelluksen allekirjoitukseen käytetty avainsäilö",
"deletedKeystore": "Avainsäilö poistettiin",
"deleteTempDirLabel": "Poista väliaikaistiedostot",
"deleteTempDirHint": "Poista käyttämättömät väliaikaistiedostot",
"deletedTempDir": "Väliaikaistiedostot poistettiin",
"exportPatchesLabel": "Vie paikkausvalikoima",
"exportPatchesHint": "Vie paikkausvalikoima JSON-tiedostona",
"exportedPatches": "Paikkausvalikoima vietiin",
"noExportFileFound": "Vietävää paikkausvalikoimaa ei ole",
"importPatchesLabel": "Tuo paikkausvalikoima",
"importPatchesHint": "Tuo paikkausvalikoima JSON-tiedostosta",
"importedPatches": "Paikkausvalikoima tuotiin",
"resetStoredPatchesLabel": "Palauta paikkaukset",
"resetStoredPatchesHint": "Palauta tallennettu paikkausvalikoima",
"resetStoredPatches": "Paikkausvalikoima palautettiin",
"jsonSelectorErrorMessage": "Valittua JSON-tiedostoa ei voida käyttää",
"deleteLogsLabel": "Poista lokitiedot",
"deleteLogsHint": "Poista kerätyt Managerin lokitiedot",
"deletedLogs": "Lokitiedot on poistettu"
},
"appInfoView": {
"widgetTitle": "Sovelluksen tiedot",
"openButton": "Avaa",
"uninstallButton": "Poista asennus",
"patchButton": "Paikkaa",
"unpatchButton": "Poista paikkaus",
"unpatchDialogText": "Haluatko varmasti poistaa sovelluksen paikkauksen?",
"rootDialogTitle": "Virhe",
"rootDialogText": "Sovellus on asennettu superuser-käyttöoikeudella, mutta ReVanced Managerilla ei tällä hetkellä ole käyttöoikeutta.\nMyönnä superuser-käyttöoikeus ensin.",
"packageNameLabel": "Paketin nimi",
"originalPackageNameLabel": "Paketin alkuperäinen nimi",
"installTypeLabel": "Asennustyyppi",
"rootTypeLabel": "Rootattu",
"nonRootTypeLabel": "Normaali",
"patchedDateLabel": "Paikkausaika",
"patchedDateHint": "{date} klo {time}",
"appliedPatchesLabel": "Suoritetut paikkaukset",
"appliedPatchesHint": "{quantity} suoritettua paikkausta",
"updateNotImplemented": "Toimintoa ei ole toteutettu vielä"
},
"contributorsView": {
"widgetTitle": "Osallistujat",
"patcherContributors": "Patcheriin osallistuneet",
"patchesContributors": "Paikkauksiin osallistuneet",
"integrationsContributors": "Integrointeihin osallistuneet",
"cliContributors": "Komentoriviin osallistuneet",
"managerContributors": "Manageriin osallistuneet"
}
}

200
assets/i18n/fr_FR.json Normal file
View File

@ -0,0 +1,200 @@
{
"okButton": "OK",
"cancelButton": "Annuler",
"updateButton": "Mise à jour",
"enabledLabel": "Activé",
"disabledLabel": "Désactivé",
"yesButton": "Oui",
"noButton": "Non",
"warning": "Avertissement",
"navigationView": {
"dashboardTab": "Tableau de bord",
"patcherTab": "Patcheur",
"settingsTab": "Paramètres"
},
"homeView": {
"widgetTitle": "Tableau de bord",
"updatesSubtitle": "Mises à jour",
"patchedSubtitle": "Applications patchées",
"updatesAvailable": "Mises à jour disponibles",
"noUpdates": "Aucune mise à jour disponible",
"WIP": "Bientôt disponible...",
"noInstallations": "Aucune application patchée n'est installée",
"installed": "Installée",
"updateDialogTitle": "Mettre à jour le Manager",
"updateChangelogTitle": "Liste des changements",
"notificationTitle": "Mise à jour téléchargée",
"notificationText": "Appuyez sur pour installer la mise à jour",
"downloadingMessage": "Téléchargement de la mise à jour...",
"installingMessage": "Installation de la mise à jour...",
"errorDownloadMessage": "Impossible de télécharger la mise à jour",
"errorInstallMessage": "Impossible d'installer la mise à jour",
"noConnection": "Aucune connexion Internet",
"updatesDisabled": "Mettre à jour une application patchée est actuellement désactivé. Réappliquez à nouveau le patch."
},
"applicationItem": {
"patchButton": "Patch",
"infoButton": "Info",
"changelogLabel": "Liste des changements"
},
"latestCommitCard": {
"loadingLabel": "Chargement...",
"timeagoLabel": "Il y a {time}",
"patcherLabel": "Patcheur:",
"managerLabel": "Manager: ",
"updateButton": "Mettre à jour le Manager"
},
"patcherView": {
"widgetTitle": "Patcheur",
"patchButton": "Patch",
"patchDialogText": "Vous avez sélectionné un emplacement de ressource et une installation d'un APK divisé a été détecté, donc le patch pourrait entrainer des erreurs.\nÊtes-vous sûr de vouloir continuer?"
},
"appSelectorCard": {
"widgetTitle": "Sélectionner une application",
"widgetTitleSelected": "Application sélectionnée",
"widgetSubtitle": "Aucune application sélectionnée",
"noAppsLabel": "Aucune application trouvée",
"currentVersion": "Version actuelle",
"recommendedVersion": "Version recommandée",
"anyVersion": "n'importe laquelle"
},
"patchSelectorCard": {
"widgetTitle": "Sélectionner les patchs",
"widgetTitleSelected": "Patchs sélectionnés",
"widgetSubtitle": "Choisissez d'abord une application",
"widgetEmptySubtitle": "Aucun patch n'est sélectionné"
},
"socialMediaCard": {
"widgetTitle": "Réseaux sociaux",
"widgetSubtitle": "Nous sommes en ligne !"
},
"appSelectorView": {
"viewTitle": "Sélectionner une application",
"searchBarHint": "Rechercher une application",
"storageButton": "Stockage",
"errorMessage": "Impossible d'utiliser l'application sélectionnée"
},
"patchesSelectorView": {
"viewTitle": "Sélectionner les patchs",
"searchBarHint": "Rechercher des patchs",
"doneButton": "Terminé",
"recommended": "Recommandé",
"all": "Tout",
"none": "Aucun",
"loadPatchesSelection": "Charger les patchs sélectionnés",
"noSavedPatches": "Aucun patch enregistré pour l'application sélectionnée.\nAppuyez sur Terminé pour enregistrer la sélection actuelle.",
"noPatchesFound": "Aucun patch n'a été trouvé pour l'application sélectionnée",
"selectAllPatchesWarningContent": "Vous êtes sur le point de sélectionner tous les patchs, cela inclut des patchs non recommandés et peut causer des comportements indésirables."
},
"patchItem": {
"unsupportedDialogText": "La sélection de ce patch peut entraîner des erreurs.\n\nVersion de l'application : {packageVersion}\nVersions prises en charge :\n{supportedVersions}",
"unsupportedPatchVersion": "Le correctif n'est pas pris en charge pour cette version de l'application. Activez le bouton expérimental dans les paramètres pour continuer."
},
"installerView": {
"widgetTitle": "Installateur",
"installButton": "Installer",
"installRootButton": "Installer en tant que Root",
"openButton": "Ouvrir",
"shareButton": "Partager le fichier",
"notificationTitle": "ReVanced Manager est en train de patcher",
"notificationText": "Appuyer pour revenir à linstallateur",
"shareApkMenuOption": "Partager le fichier APK",
"exportApkMenuOption": "Exporter l'APK",
"shareLogMenuOption": "Partager le journal",
"installErrorDialogTitle": "Erreur",
"installErrorDialogText1": "L'installation Root n'est pas possible avec la sélection actuelle de patchs.\nRe-patchez votre application ou choisissez une installation non root.",
"installErrorDialogText2": "L'installation Non-root n'est pas possible avec la sélection actuelle de patchs.\nRe-patchez votre application ou choisissez une installation en tant que Root.",
"installErrorDialogText3": "L'installation root n'est pas possible car l'APK original a été sélectionné à partir du stockage.\nSélectionnez une application installée ou choisissez une installation non root.",
"noExit": "L'installateur est toujours en fonctionnement, impossible de quitter..."
},
"settingsView": {
"widgetTitle": "Réglages",
"appearanceSectionTitle": "Apparence",
"teamSectionTitle": "Équipe",
"infoSectionTitle": "Info",
"advancedSectionTitle": "Avancé",
"logsSectionTitle": "Journaux",
"darkThemeLabel": "Mode sombre",
"darkThemeHint": "Bienvenue dans le côté obscur",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Profitez d'une expérience plus proche de votre appareil",
"languageLabel": "Langue",
"englishOption": "Anglais",
"sourcesLabel": "Sources",
"sourcesLabelHint": "Configurer vos sources personnalisées",
"hostRepositoryLabel": "Dépôt de l'API",
"orgPatchesLabel": "Organisation des patchs",
"sourcesPatchesLabel": "Source des patches",
"orgIntegrationsLabel": "Organisme d'intégration",
"sourcesIntegrationsLabel": "Source des intégrations",
"sourcesResetDialogTitle": "Réinitialiser",
"sourcesResetDialogText": "Êtes-vous sûr de vouloir réinitialiser les sources personnalisées à leur valeur par défaut ?",
"apiURLResetDialogText": "Êtes-vous sûr de vouloir réinitialiser l'URL d'API à sa valeur par défaut ?",
"contributorsLabel": "Contributeurs",
"contributorsHint": "Liste des contributeurs de ReVanced",
"logsLabel": "Journal",
"logsHint": "Partager les journaux du Manager",
"apiURLLabel": "URL de l'API",
"apiURLHint": "Configurez l'URL de votre API personnalisée",
"selectApiURL": "URL de l'API",
"experimentalUniversalPatchesLabel": "Support expérimental des patchs universels",
"experimentalUniversalPatchesHint": "Afficher toutes les applications à utiliser avec les patchs universels, le chargement de la liste des applications pourrait être lent",
"experimentalPatchesLabel": "Support des patchs expérimentaux",
"experimentalPatchesHint": "Activer l'utilisation des patchs non supportés dans n'importe quelle version de l'application",
"enabledExperimentalPatches": "Support pour les patchs expérimentaux activé",
"exportSectionTitle": "Importer & exporter",
"aboutLabel": "À propos",
"snackbarMessage": "Copié dans le presse-papier",
"sentryLabel": "Journal sentinel",
"sentryHint": "Envoyer des journaux anonymes pour nous aider à améliorer ReVanced Manager",
"restartAppForChanges": "Redémarrez l'application pour appliquer les changements",
"deleteKeystoreLabel": "Supprimer le magasin de clés",
"deleteKeystoreHint": "Supprimer le magasin de clés utilisé pour signer l'application",
"deletedKeystore": "Magasin de clés supprimé",
"deleteTempDirLabel": "Supprimer les fichiers temporaires",
"deleteTempDirHint": "Supprimer les fichiers temporaires inutilisés",
"deletedTempDir": "Fichiers temporaires supprimés",
"exportPatchesLabel": "Exporter la sélection de patchs",
"exportPatchesHint": "Exporter la sélection de patchs vers un fichier JSON",
"exportedPatches": "Sélection de patchs exportée",
"noExportFileFound": "Aucune sélection de patchs à exporter",
"importPatchesLabel": "Importer une sélection de patchs",
"importPatchesHint": "Importer une sélection de patchs depuis un fichier JSON",
"importedPatches": "Sélection de patchs importée",
"resetStoredPatchesLabel": "Réinitialiser les patches",
"resetStoredPatchesHint": "Réinitialiser la sélection des patches sauvegardés",
"resetStoredPatches": "La sélection des patches a été réinitialisée",
"jsonSelectorErrorMessage": "Impossible d'utiliser le fichier JSON sélectionné",
"deleteLogsLabel": "Supprimer les journaux",
"deleteLogsHint": "Supprimer les journaux du gestionnaire collectés",
"deletedLogs": "Journaux supprimés"
},
"appInfoView": {
"widgetTitle": "Infos concernant l'application",
"openButton": "Ouvrir",
"uninstallButton": "Désinstaller",
"patchButton": "Patcher",
"unpatchButton": "Dépatcher",
"unpatchDialogText": "Êtes-vous sûr de vouloir dépatcher cette application?",
"rootDialogTitle": "Erreur",
"rootDialogText": "L'application a été installée avec les permissions d'accès à la racine, mais ReVanced Manager n'a actuellement aucune permissions.\nVeuillez d'abord accorder l'accès à la racine.",
"packageNameLabel": "Nom du paquet",
"originalPackageNameLabel": "Nom originel du paquet",
"installTypeLabel": "Type d'installation",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Non-root",
"patchedDateLabel": "Date du patch",
"patchedDateHint": "le {date} à {time}",
"appliedPatchesLabel": "Patchs appliqués",
"appliedPatchesHint": "{quantity} patchs appliqués",
"updateNotImplemented": "Cette fonction n'a pas encore été implémentée"
},
"contributorsView": {
"widgetTitle": "Contributeurs",
"patcherContributors": "Contributeurs du patcheur",
"patchesContributors": "Contributeurs des patchs",
"integrationsContributors": "Contributeurs des intégrations",
"cliContributors": "Contributeurs de la CLI",
"managerContributors": "Contributeurs du Manager"
}
}

196
assets/i18n/hi_IN.json Normal file
View File

@ -0,0 +1,196 @@
{
"okButton": "ठीक है",
"cancelButton": "रद्द करें",
"enabledLabel": "सक्रिय",
"disabledLabel": "निष्क्रिय",
"yesButton": "हाँ",
"noButton": "नहीं",
"warning": "चेतावनी",
"navigationView": {
"dashboardTab": "नियंत्रण-पट्ट",
"patcherTab": "पैचर",
"settingsTab": "सेटिंग्स"
},
"homeView": {
"widgetTitle": "नियंत्रण पट्ट",
"updatesSubtitle": "अपडेट",
"patchedSubtitle": "पैच किए हुए एप्लीकेशन",
"updatesAvailable": "अपडेट उपलब्ध है",
"noUpdates": "कोई अपडेट उपलब्ध नहीं",
"WIP": "कार्य प्रगति पर है।",
"noInstallations": "कोई पैबंद किये हुआ अनुप्रयोग नहीं है।",
"installed": "इंस्टॉल किया हुआ",
"updateDialogTitle": "अपडेट Manager",
"updateDialogText": "क्या आप ReVanced Manager को डाउनलोड और अपडेट करना चाहते है?",
"notificationTitle": "अपडेट डाउनलोड हो चुका है",
"notificationText": "अपडेट को इंस्टॉल करने हेतु यहाँ टैप करें",
"downloadingMessage": "अपडेट डाउनलोड हो रहा है",
"installingMessage": "अपडेट इंस्टॉल हो रहा है",
"errorDownloadMessage": "अपडेट डाउनलोड करने मे असफल",
"errorInstallMessage": "अपडेट इंस्टॉल करने में असफल",
"noConnection": "कोई इंटरनेट कनेक्शन नहीं",
"updatesDisabled": "पैच किए गए ऐप को अपडेट करना वर्तमान में अक्षम है।\nएप को फिर से पैच करें।"
},
"applicationItem": {
"patchButton": "पैबंद",
"infoButton": "जानकारी",
"changelogLabel": "परिवर्तन पत्र"
},
"latestCommitCard": {
"loadingLabel": "लोड हो रहा है...",
"timeagoLabel": "{time} पहले",
"patcherLabel": "पैबंद: ",
"managerLabel": "Manager: ",
"updateButton": "Manager अपडेट करे"
},
"patcherView": {
"widgetTitle": "पैचर",
"patchButton": "पैबंद",
"patchDialogText": "आपने एक रिसोर्स पैच चुना है और स्प्लिट APK के इंस्टॉल का पता चला है इसलिए पैचिंग त्रुटियां हो सकती हैं।\nक्या आप स्प्लिट APK के साथ आगे बढ़ना चाहते है?"
},
"appSelectorCard": {
"widgetTitle": "एप्लिकेशन का चयन करें",
"widgetTitleSelected": "चुना हुआ ऐप्लकैशन",
"widgetSubtitle": "कोई ऐप्लकैशन चुना हुआ नहीं",
"noAppsLabel": "कोई एप्लिकेशन नहीं मिला।",
"currentVersion": "वर्तमान",
"recommendedVersion": "अनुशंसित",
"anyVersion": "कोई"
},
"patchSelectorCard": {
"widgetTitle": "पैच चुने",
"widgetTitleSelected": "चुने हुए पैच",
"widgetSubtitle": "पहले किसी एप्लिकेशन को चुने",
"widgetEmptySubtitle": "कोई पैच चुना हुआ नहीं"
},
"socialMediaCard": {
"widgetTitle": "सामाजिक",
"widgetSubtitle": "हम ऑनलाइन है"
},
"appSelectorView": {
"viewTitle": "एप्लिकेशन का चयन करें",
"searchBarHint": "ऐप्लकैशन खोजे",
"storageButton": "स्टोरेज",
"errorMessage": "चुने हुए ऐप्लकैशन को उपयोग करने मे असमर्थ"
},
"patchesSelectorView": {
"viewTitle": "पैच चुने",
"searchBarHint": "पैच खोजे",
"doneButton": "पूर्ण",
"recommended": "अनुशंसित",
"all": "सभी",
"none": "कोई भी नहीं",
"loadPatchesSelection": "चयन किए गए पैच लोड करें",
"noSavedPatches": "चयनित ऐप के लिए कोई सहेजा पैच नहीं है\nवर्तमान चयन को सेव करने के लिए \"डन\" दबाएं",
"noPatchesFound": "चुने हुए ऐप्लकैशन के लिए कोई पैच नहीं मिले",
"selectAllPatchesWarningContent": "आप सभी पैच का चयन करने वाले हैं, जिसमें अनुशंसित पैच शामिल हैं और अवांछित व्यवहार का कारण बन सकते हैं।"
},
"patchItem": {
"unsupportedDialogText": "इस पैच को चुनने से पैचिंग मे त्रुटि हो सकती है। \n\nएप वर्ज़न: {packageVersion}\nसमर्थित वर्ज़न:\n{supportedVersions}",
"unsupportedPatchVersion": "इस ऐप संस्करण के लिए पैच समर्थित नहीं है। आगे बढ़ने के लिए सेटिंग में प्रयोगात्मक टॉगल सक्षम करें."
},
"installerView": {
"widgetTitle": "इंस्टॉल कर्ता",
"installButton": "इंस्टॉल करे",
"installRootButton": "रूट के रूप मे इंस्टॉल करे",
"openButton": "खोलें",
"shareButton": "फाइल शेयर करे",
"notificationTitle": "ReVanced Manager पैच कर रहा है",
"notificationText": "इंस्टॉल कर्ता पर जाने के लिए टैप करे",
"shareApkMenuOption": "APK शेयर करे",
"exportApkMenuOption": "निर्यात APK",
"shareLogMenuOption": "लॉग शेयर करें",
"installErrorDialogTitle": "त्रुटि",
"installErrorDialogText1": "वर्तमान पैच चयन के साथ रूट इंस्टॉल संभव नहीं है।\nअपने ऐप को रीपैच करें या नॉन-रूट इंस्टॉल चुनें।",
"installErrorDialogText2": "वर्तमान पैच चयन के साथ नॉन-रूट इंस्टॉल संभव नहीं है।\nयदि आपने अपना डिवाइस रूट किया है तो अपने ऐप को रीपैच करें या रूट इंस्टॉल चुनें।",
"installErrorDialogText3": "रूट इंस्टॉल संभव नहीं है क्योंकि मूल APK को स्टोरेज से चुना गया था।\nएक इंस्टॉल किया गया ऐप चुनें या नॉन-रूट इंस्टॉल चुनें।",
"noExit": "इंस्टॉल कर्ता अब भी चल रहा है, बाहर नहीं निकल सकते"
},
"settingsView": {
"widgetTitle": "सेटिंग्स",
"appearanceSectionTitle": "स्वरूप",
"teamSectionTitle": "टीम",
"infoSectionTitle": "जानकारी",
"advancedSectionTitle": "एडवांसड",
"logsSectionTitle": "लॉग्स",
"darkThemeLabel": "अंधकार करें",
"darkThemeHint": "अंधेर नगरी में स्वागत है।",
"dynamicThemeLabel": "मेटीरियल यू",
"dynamicThemeHint": "अपने डिवाइस के करीब एक अनुभव का आनंद लें",
"languageLabel": "भाषा",
"englishOption": "अंग्रेज़ी",
"sourcesLabel": "स्रोत",
"sourcesLabelHint": "अपने कस्टम साधन कॉन्फ़िगर करे",
"orgPatchesLabel": "पैच संगठन",
"sourcesPatchesLabel": "पैच स्रोत",
"orgIntegrationsLabel": "एकीकरण संगठन",
"sourcesIntegrationsLabel": "एकीकरण स्रोत",
"sourcesResetDialogTitle": "रीसेट करें",
"sourcesResetDialogText": "क्या आप वाकई कस्टम साधन को डिफ़ॉल्ट वैल्यू पर रीसेट करना चाहते हैं?",
"apiURLResetDialogText": "क्या आप वाकई कस्टम API URL को डिफ़ॉल्ट वैल्यू पर रीसेट करना चाहते हैं?",
"contributorsLabel": "योगदानकर्ता",
"contributorsHint": "ReVanced के योगदानकर्ताओ की सूची",
"logsLabel": "लॉग्स",
"logsHint": "मैनेजर के लॉग को शेयर करे",
"apiURLLabel": "API URL",
"apiURLHint": "अपनी कस्टम API URL कॉन्फ़िगर करे",
"selectApiURL": "API URL",
"experimentalPatchesLabel": "प्रायोगिक पैच समर्थन",
"experimentalPatchesHint": "किसी भी ऐप संस्करण में असमर्थित पैच का उपयोग करने में सक्षम करें",
"enabledExperimentalPatches": "प्रायोगिक पैच समर्थन इनेबल्ड",
"exportSectionTitle": "आयात और निर्यात",
"aboutLabel": "विवरण",
"snackbarMessage": "क्लिपबोर्ड में कॉपी हो गया है",
"sentryLabel": "संतरी लॉगिंग",
"sentryHint": "उन्नत प्रबंधक को बेहतर बनाने में हमारी सहायता करने के लिए अनाम लॉग भेजें",
"restartAppForChanges": "Restart the app to apply changes",
"deleteKeystoreLabel": "कीस्टोर मिटाएं",
"deleteKeystoreHint": "ऐप पर हस्ताक्षर करने के लिए उपयोग की जाने वाली कीस्टोर हटाएं",
"deletedKeystore": "कीस्टोर हटा दिया गया",
"deleteTempDirLabel": "अस्थाई फ़ाइलें मिटायें",
"deleteTempDirHint": "अप्रयुक्त अस्थाई फ़ाइलें मिटायें",
"deletedTempDir": "क्षणिक फ़ाईल मिटाए गए।",
"exportPatchesLabel": "चयन किए गए पैच एक्सपोर्ट करें",
"exportPatchesHint": "चयन किए गए पैच को JSON फाइल में एक्सपोर्ट करें",
"exportedPatches": "चयन किए गए पैच एक्सपोर्ट सफल",
"noExportFileFound": "कोई पैच एक्सपोर्ट के लिए चयन नहीं है",
"importPatchesLabel": "चयन किए गए पैच इम्पोर्ट करें",
"importPatchesHint": "चयन किए गए पैच को JSON फाइल से इम्पोर्ट करें",
"importedPatches": "चयन किए गए पैच इम्पोर्ट सफल",
"resetStoredPatchesLabel": "पैच रीसेट करें",
"resetStoredPatchesHint": "संग्रहित चयन किए गए पैच रीसेट करें",
"resetStoredPatches": "चयन किए गए पैच रीसेट सफल",
"jsonSelectorErrorMessage": "चुने हुए JSON फाइल को उपयोग करने मे असमर्थ",
"deleteLogsLabel": "लॉग हटाएं",
"deleteLogsHint": "एकत्रित प्रबंधक लॉग हटाएं",
"deletedLogs": "लॉग हटा दिए गए"
},
"appInfoView": {
"widgetTitle": "ऐप की जानकारी",
"openButton": "खोलें",
"uninstallButton": "अनइंस्टॉल करें",
"patchButton": "पैच",
"unpatchButton": "अनपैच करे",
"unpatchDialogText": "क्या वाकई आप इस एप को अनपैच करना चाहते हैं?",
"rootDialogTitle": "त्रुटि",
"rootDialogText": "एप्प superuser परमिशन के साथ इनस्टॉल हुआ था, परन्तु ReVanced मैनेजर के पास कोई परमिशन नहीं है। पहले superuser परमिशन इनेबल करे।",
"packageNameLabel": "पैकेज का नाम",
"originalPackageNameLabel": "मूल पैकेज का नाम",
"installTypeLabel": "इंस्टॉल का प्रकार",
"rootTypeLabel": "रूट",
"nonRootTypeLabel": "नॉन-रूट",
"patchedDateLabel": "पैच करने की तिथि",
"patchedDateHint": "{date} {time} पर",
"appliedPatchesLabel": "लागू किए हुआ पैच",
"appliedPatchesHint": "{quantity} लागू किए हुआ पैच",
"updateNotImplemented": "यह फीचर फिलहाल इम्प्लीमेंट नहीं हुआ है"
},
"contributorsView": {
"widgetTitle": "योगदानकर्ता",
"patcherContributors": "पैचर योगदानकर्ता",
"patchesContributors": "पैच योगदानकर्ता",
"integrationsContributors": "एकीकरण योगदानकर्ता",
"cliContributors": "CLI योगदानकर्ता",
"managerContributors": "प्रबंधक योगदानकर्ता"
}
}

196
assets/i18n/hu_HU.json Normal file
View File

@ -0,0 +1,196 @@
{
"okButton": "Rendben",
"cancelButton": "Mégse",
"enabledLabel": "Engedélyezve",
"disabledLabel": "Letiltva",
"yesButton": "Igen",
"noButton": "Nem",
"warning": "Figyelmeztetés",
"navigationView": {
"dashboardTab": "Irányítópult",
"patcherTab": "Patchelő",
"settingsTab": "Beállítások"
},
"homeView": {
"widgetTitle": "Irányítópult",
"updatesSubtitle": "Frissítések",
"patchedSubtitle": "Patchelt alkalmazások",
"updatesAvailable": "Frissítések",
"noUpdates": "Nincs elérhető frissítés",
"WIP": "Fejlesztés alatt...",
"noInstallations": "Nincs telepítve patchelt alkalmazás",
"installed": "Telepítve",
"updateDialogTitle": "Frissítéskezelő",
"updateDialogText": "Biztosan le akarod tölteni és frissíteni a ReVanced Manager-t?",
"notificationTitle": "Frissítés letöltve",
"notificationText": "Érintse meg a frissítés telepítéséhez",
"downloadingMessage": "Frissítés letöltése...",
"installingMessage": "Frissítés telepítése...",
"errorDownloadMessage": "Frissítés letöltése sikertelen",
"errorInstallMessage": "Frissítés telepítése sikertelen",
"noConnection": "Nincs internetkapcsolat",
"updatesDisabled": "A patchelt alkalmazások frissítése jelenleg nem lehetséges, ehelyett újra kell patchelni."
},
"applicationItem": {
"patchButton": "Patch",
"infoButton": "Infó",
"changelogLabel": "Újdonságok"
},
"latestCommitCard": {
"loadingLabel": "Betöltés...",
"timeagoLabel": "{time} ideje",
"patcherLabel": "Patchelő: ",
"managerLabel": "Manager: ",
"updateButton": "Manager frissitése"
},
"patcherView": {
"widgetTitle": "Patchelő",
"patchButton": "Patch",
"patchDialogText": "Kiválasztottál egy TODO(resource) patchet, de a kiválasztott alkalmazás több komponensből áll, ez pedig hibákat okozhat patchelés közben.\nBiztos folytatni szeretnéd?"
},
"appSelectorCard": {
"widgetTitle": "Alkalmazás kiválasztása",
"widgetTitleSelected": "Kiválasztott alkalmazás",
"widgetSubtitle": "Nincs kiválasztott alkalmazás",
"noAppsLabel": "Nem találhatóak alkalmazások",
"currentVersion": "Jelenlegi",
"recommendedVersion": "Ajánlott",
"anyVersion": "bármely"
},
"patchSelectorCard": {
"widgetTitle": "Patchek kiválasztása",
"widgetTitleSelected": "Kiválasztott patchek",
"widgetSubtitle": "Először válassz egy alkalmazást",
"widgetEmptySubtitle": "Nem választottál patch-et"
},
"socialMediaCard": {
"widgetTitle": "Közösségi oldalak",
"widgetSubtitle": "Online vagyunk!"
},
"appSelectorView": {
"viewTitle": "Válasszon egy alkalmazást",
"searchBarHint": "Alkalmazások keresése",
"storageButton": "Tárhely",
"errorMessage": "A kiválasztott alkalmazás nem használható"
},
"patchesSelectorView": {
"viewTitle": "Patchek kiválasztása",
"searchBarHint": "Patchek keresése",
"doneButton": "Kész",
"recommended": "Ajánlott",
"all": "Összes",
"none": "Semmi",
"loadPatchesSelection": "Korábbi kiválasztás betöltése",
"noSavedPatches": "Ehhez az alkalmazáshoz nem tartozik egy mentett kiválasztás sem\nNyomd meg a Kész gombot hogy elmentsd a jelenlegi listát",
"noPatchesFound": "A kiválasztott alkalmazáshoz nem találhatóak patchek",
"selectAllPatchesWarningContent": "Az összes patchet készülsz kiválasztani, ami nem ajánlott patcheket is tartalmaz, melyek váratlan hibákhoz vezethetnek."
},
"patchItem": {
"unsupportedDialogText": "Ezt a patchet nem biztos hogy sikerül alkalmazni, mert más verzióhoz készült.\n\nAlkalmazás verzió: {packageVersion}\nJelenleg támogatott verziók:\n{supportedVersions}",
"unsupportedPatchVersion": "Nem támogatott verzió. Engedélyezd a kísérleti jellegű patchelést a beállításokban ha mégis alkalmaznád."
},
"installerView": {
"widgetTitle": "Telepítő",
"installButton": "Telepítés",
"installRootButton": "Telepítés root jogosultsággal",
"openButton": "Megnyitás",
"shareButton": "Fájl megosztása",
"notificationTitle": "A ReVanced Manager jelenleg patchel",
"notificationText": "Koppints a telepítőhöz való visszalépéshez",
"shareApkMenuOption": "APK megosztása",
"exportApkMenuOption": "APK exportálása",
"shareLogMenuOption": "Napló megosztása",
"installErrorDialogTitle": "Hiba",
"installErrorDialogText1": "Root telepítés nem lehetséges a jelenleg kiválasztott patchekkel.\nPatcheld újra az appod vagy válaszd a root nélküli telepítést.",
"installErrorDialogText2": "A non-root telepítés nem lehetséges a jelenleg kiválasztott patchekkel.\nPatcheld újra az appod vagy válaszd a root telepítést, ha az eszközöd rootolt.",
"installErrorDialogText3": "A root telepítés nem lehetséges, mert az eredeti APK a tárhelyről lett kiválasztva. Válassz egy telepített alkalmazást vagy válaszd a root nélküli telepítést.",
"noExit": "A telepítő még fut, most nem lehet visszalépni..."
},
"settingsView": {
"widgetTitle": "Beállítások",
"appearanceSectionTitle": "Megjelenés",
"teamSectionTitle": "Csapat",
"infoSectionTitle": "Infó",
"advancedSectionTitle": "Haladó",
"logsSectionTitle": "Naplók",
"darkThemeLabel": "Sötét mód",
"darkThemeHint": "Üdvözlünk a sötét oldalon",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Élvezd az eszközödhöz közelibb élményt",
"languageLabel": "Nyelv",
"englishOption": "Angol (English)",
"sourcesLabel": "Források",
"sourcesLabelHint": "Állítsd be egyedi forrásaid",
"orgPatchesLabel": "Patchek - szervezet",
"sourcesPatchesLabel": "Patchek - forrás",
"orgIntegrationsLabel": "Integrációk - szervezet",
"sourcesIntegrationsLabel": "Integrációk - forrás",
"sourcesResetDialogTitle": "Visszaállítás",
"sourcesResetDialogText": "Biztos, hogy visszaállítod az egyéni forrásokat az alap értékekre?",
"apiURLResetDialogText": "Biztos, hogy visszaállítod az API URL-t az eredeti értékre?",
"contributorsLabel": "Közreműködők",
"contributorsHint": "A ReVanced közreműködőinek listája",
"logsLabel": "Naplók",
"logsHint": "Manager naplófájlok megosztása",
"apiURLLabel": "API URL",
"apiURLHint": "Itt állíthatod be az API címét",
"selectApiURL": "API címe",
"experimentalPatchesLabel": "Kísérleti patchelés",
"experimentalPatchesHint": "A patcheket nem támogatott verziókra is lehessen alkalmazni",
"enabledExperimentalPatches": "Kísérleti patchelés engedélyezve",
"exportSectionTitle": "Importálás & exportálás",
"aboutLabel": "Rólunk",
"snackbarMessage": "Vágólapra másolva",
"sentryLabel": "Sentry naplózás",
"sentryHint": "Névtelen használati adatok küldésével hozzájárulhatsz, hogy a ReVanced Manager még jobb legyen",
"restartAppForChanges": "Indítsd újra az alkalmazást a változások alkalmazásához",
"deleteKeystoreLabel": "Kulcstartó törlése",
"deleteKeystoreHint": "Törli az alkalmazás aláírásához használt kulcstartót",
"deletedKeystore": "Kulcstartó törölve",
"deleteTempDirLabel": "Ideiglenes fájlok törlése",
"deleteTempDirHint": "Felesleges átmeneti fájlok törlése",
"deletedTempDir": "Ideiglenes fájlok törölve",
"exportPatchesLabel": "Kiválasztások exportálása",
"exportPatchesHint": "Az összes korábbi kiválasztás mentáse JSON fájlba",
"exportedPatches": "Sikeres exportálás",
"noExportFileFound": "Nincs mit exportálni",
"importPatchesLabel": "Kiválasztások importálása",
"importPatchesHint": "Korábban kiválasztott lista betöltése JSON fájlból",
"importedPatches": "Sikeres importálás",
"resetStoredPatchesLabel": "Korábbi kiválasztások törlése",
"resetStoredPatchesHint": "Minden korábban mentett kiválasztást töröl",
"resetStoredPatches": "A kiválasztott patchek listája alaphelyzetbe állítva",
"jsonSelectorErrorMessage": "A kiválasztott JSON nem hasznalható",
"deleteLogsLabel": "Naplók törlése",
"deleteLogsHint": "A managerben összegyűjtott naplófájlok törlése",
"deletedLogs": "Naplók törölve"
},
"appInfoView": {
"widgetTitle": "Alkalmazás információ",
"openButton": "Megnyitás",
"uninstallButton": "Eltávolítás",
"patchButton": "Patch",
"unpatchButton": "Patch törlése",
"unpatchDialogText": "Biztos, hogy törölni akarod a patcheket?",
"rootDialogTitle": "Hiba",
"rootDialogText": "A patchelt alkalmazás root jogosultsággal lett telepítve, de a Managernek már nincs ilyen jogosultsága.\nKérlek, engedélyezd a root hozzáférést a Managernek.",
"packageNameLabel": "Csomagnév",
"originalPackageNameLabel": "Eredeti csomagnév",
"installTypeLabel": "Telepítés módja",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Non-root",
"patchedDateLabel": "Patchelve",
"patchedDateHint": "{date} {time}-kor",
"appliedPatchesLabel": "Alkalmazott patchek",
"appliedPatchesHint": "{quantity} alkalmazott patch",
"updateNotImplemented": "Ez a funkció még nem készült el"
},
"contributorsView": {
"widgetTitle": "Közreműködők",
"patcherContributors": "Patcher közreműködők",
"patchesContributors": "Patchek közreműködői",
"integrationsContributors": "Integrációk közreműködői",
"cliContributors": "CLI közreműködők",
"managerContributors": "Manager közreműködők"
}
}

200
assets/i18n/id_ID.json Normal file
View File

@ -0,0 +1,200 @@
{
"okButton": "Oke",
"cancelButton": "Batal",
"updateButton": "Perbarui",
"enabledLabel": "Aktif",
"disabledLabel": "Nonaktif",
"yesButton": "Ya",
"noButton": "Tidak",
"warning": "Peringatan",
"navigationView": {
"dashboardTab": "Dasbor",
"patcherTab": "Pemodifikasi",
"settingsTab": "Pengaturan"
},
"homeView": {
"widgetTitle": "Dasbor",
"updatesSubtitle": "Pembaruan",
"patchedSubtitle": "Aplikasi yang dimodifikasi",
"updatesAvailable": "Pembaruan tersedia",
"noUpdates": "Pembaruan tidak tersedia",
"WIP": "Sedang dalam pengerjaan...",
"noInstallations": "Tidak ada aplikasi termodifikasi yang terpasang",
"installed": "Terpasang",
"updateDialogTitle": "Perbarui Manager",
"updateChangelogTitle": "Catatan perubahan",
"notificationTitle": "Pembaruan sudah diunduh",
"notificationText": "Ketuk untuk memasang pembaharuan",
"downloadingMessage": "Mengunduh pembaruan...",
"installingMessage": "Memasang pembaruan...",
"errorDownloadMessage": "Tidak dapat mengunduh pembaruan",
"errorInstallMessage": "Tidak dapat memasang pembaruan",
"noConnection": "Tidak ada koneksi internet",
"updatesDisabled": "Memperbarui aplikasi yang dimodifikasi saat ini dinonaktifkan. Pasang ulang aplikasi lagi."
},
"applicationItem": {
"patchButton": "Modifikasi",
"infoButton": "Info",
"changelogLabel": "Catatan perubahan"
},
"latestCommitCard": {
"loadingLabel": "Memuat...",
"timeagoLabel": "{time} yang lalu",
"patcherLabel": "Pemodifikasi: ",
"managerLabel": "Manager: ",
"updateButton": "Perbarui Manager"
},
"patcherView": {
"widgetTitle": "Pemodifikasi",
"patchButton": "Modifikasi",
"patchDialogText": "Anda telah memilih sumber modifikasi dan pemasangan split APK terdeteksi sehingga kesalahan pemodifikasi dapat terjadi.\nApakah Anda yakin ingin melanjutkan pemasangan split base APK?"
},
"appSelectorCard": {
"widgetTitle": "Pilih aplikasi",
"widgetTitleSelected": "Aplikasi terpilih",
"widgetSubtitle": "Tidak ada aplikasi yang dipilih",
"noAppsLabel": "Aplikasi tidak ditemukan",
"currentVersion": "Saat ini",
"recommendedVersion": "Rekomendasi",
"anyVersion": "semua"
},
"patchSelectorCard": {
"widgetTitle": "Pilih Modifikasi",
"widgetTitleSelected": "Modifikasi terpilih",
"widgetSubtitle": "Pilih aplikasi terlebih dahulu",
"widgetEmptySubtitle": "Tidak ada modifikasi yang terpilih"
},
"socialMediaCard": {
"widgetTitle": "Media Sosial",
"widgetSubtitle": "Ikuti kami!"
},
"appSelectorView": {
"viewTitle": "Pilih aplikasi",
"searchBarHint": "Cari aplikasi",
"storageButton": "Penyimpanan",
"errorMessage": "Tidak dapat menggunakan aplikasi yang dipilih"
},
"patchesSelectorView": {
"viewTitle": "Pilih modifikasi",
"searchBarHint": "Cari modifikasi",
"doneButton": "Selesai",
"recommended": "Direkomendasikan",
"all": "Semua",
"none": "Tidak ada",
"loadPatchesSelection": "Tidak ada modifikasi yang terpilih",
"noSavedPatches": "Tidak ada tambalan tersimpan untuk aplikasi terpilih.\nTekan \"Sudah\" untuk menyimpan seleksi saat ini.",
"noPatchesFound": "Modifikasi tidak ditemukan untuk aplikasi terpilih",
"selectAllPatchesWarningContent": "Anda akan memilih semua modifikasi, termasuk modifikasi yang tidak direkomendasikan dan dapat mengakibatkan hal yang tidak diinginkan."
},
"patchItem": {
"unsupportedDialogText": "Menggunakan modifikasi ini dapat menyebabkan error pada saat memodifikasi aplikasi\n\nVersi aplikasi: {packageVersion}\nVersi yang mendukung:\n{supportedVersions}",
"unsupportedPatchVersion": "Patch tidak didukung untuk versi aplikasi ini. Aktifkan tombol eksperimental di pengaturan untuk melanjutkan."
},
"installerView": {
"widgetTitle": "Pemasang",
"installButton": "Pasang",
"installRootButton": "Pasang sebagai Root",
"openButton": "Buka",
"shareButton": "Bagikan file",
"notificationTitle": "ReVanced Manager sedang memodifikasi",
"notificationText": "Ketuk untuk kembali ke pemasang",
"shareApkMenuOption": "Bagikan APK",
"exportApkMenuOption": "Ekspor APK",
"shareLogMenuOption": "Bagikan log",
"installErrorDialogTitle": "Kesalahan",
"installErrorDialogText1": "Pemasangan root tidak mungkin dengan pilihan modifikasi sekarang.\nModifikasi ulang aplikasi Anda atau pilih pemasangan non-root.",
"installErrorDialogText2": "Pemasangan non-root tidak mungkin dengan pilihan modifikasi sekarang.\nModifikasi ulang aplikasi Anda atau pilih pemasangan root jika perangkat Anda memiliki root.",
"installErrorDialogText3": "Pemasangan root tidak memungkinkan karena APK dipilih dari penyimpanan.\nPilih aplikasi terpasang atau pilih pemasangan non-root.",
"noExit": "Pemasangan masih berjalan, tidak bisa keluar..."
},
"settingsView": {
"widgetTitle": "Pengaturan",
"appearanceSectionTitle": "Tampilan",
"teamSectionTitle": "Tim",
"infoSectionTitle": "Info",
"advancedSectionTitle": "Lanjutan",
"logsSectionTitle": "Log",
"darkThemeLabel": "Mode gelap",
"darkThemeHint": "Selamat datang di sisi gelap",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Nikmati pengalaman lebih dekat ke perangkat Anda",
"languageLabel": "Bahasa",
"englishOption": "Inggris",
"sourcesLabel": "Sumber",
"sourcesLabelHint": "Konfigurasi sumber kustom Anda",
"hostRepositoryLabel": "API Repositori",
"orgPatchesLabel": "Organisasi Modifikasi",
"sourcesPatchesLabel": "Sumber Modifikasi",
"orgIntegrationsLabel": "Organisasi Intergrasi",
"sourcesIntegrationsLabel": "Sumber Integrasi",
"sourcesResetDialogTitle": "Atur ulang",
"sourcesResetDialogText": "Apakah Anda yakin ingin mengatur ulang sumber kustom ke bawaannya?",
"apiURLResetDialogText": "Apakah Anda yakin ingin mengatur ulang URL API ke bawaan?",
"contributorsLabel": "Kontributor",
"contributorsHint": "Daftar kontributor ReVanced",
"logsLabel": "Log",
"logsHint": "Bagikan log manager",
"apiURLLabel": "URL API",
"apiURLHint": "Konfigurasi URL API kustom Anda",
"selectApiURL": "URL API",
"experimentalUniversalPatchesLabel": "Dukungan tambalan universal eksperimental",
"experimentalUniversalPatchesHint": "Menampilkan semua aplikasi yang digunakan tambalan universal, pemuatan daftar aplikasi akan membuat lambat",
"experimentalPatchesLabel": "Dukungan Modifikasi Eksperimental",
"experimentalPatchesHint": "Aktifkan untuk menggunakan modifikasi yang tidak didukung di versi aplikasi apa pun",
"enabledExperimentalPatches": "Modifikasi eksperimental diaktifkan",
"exportSectionTitle": "Impor & Ekspor",
"aboutLabel": "Tentang",
"snackbarMessage": "Disalin ke papan klip",
"sentryLabel": "Log sentry",
"sentryHint": "Kirim log anonim untuk membantu kami meningkatkan ReVanced Manager",
"restartAppForChanges": "Mulai ulang aplikasi untuk menerapkan perubahan",
"deleteKeystoreLabel": "Hapus penyimpanan kunci",
"deleteKeystoreHint": "Hapus penyimpanan kunci yang digunakan untuk menandatangani aplikasi",
"deletedKeystore": "Penyimpanan kunci dihapus",
"deleteTempDirLabel": "Hapus berkas sementara",
"deleteTempDirHint": "Hapus berkas sementara yang tidak dipakai",
"deletedTempDir": "Berkas sementara dihapus",
"exportPatchesLabel": "Ekspor modifikasi terpilih",
"exportPatchesHint": "Ekspor modifikasi terpilih ke file JSON",
"exportedPatches": "Modifikasi terpilih telah diekspor",
"noExportFileFound": "Tidak ada modifikasi terpilih untuk diekspor",
"importPatchesLabel": "Impor modifikasi terpilih",
"importPatchesHint": "Impor modifikasi terpilih dari file JSON",
"importedPatches": "Modifikasi terpilih telah diimpor",
"resetStoredPatchesLabel": "Kembalikan modifikasi",
"resetStoredPatchesHint": "Kembalikan modifikasi terpilih yang telah disimpan",
"resetStoredPatches": "Modifikasi terpilih telah dikembalikan",
"jsonSelectorErrorMessage": "Tidak bisa menggunakan berkas JSON tersebut",
"deleteLogsLabel": "Hapus log",
"deleteLogsHint": "Hapus log pengelola yang terkumpul",
"deletedLogs": "Log dihapus"
},
"appInfoView": {
"widgetTitle": "Info aplikasi",
"openButton": "Buka",
"uninstallButton": "Copot",
"patchButton": "Modifikasi",
"unpatchButton": "Memulihkan",
"unpatchDialogText": "Apakah Anda yakin ingin memulihkan aplikasi ini?",
"rootDialogTitle": "Kesalahan",
"rootDialogText": "App telah diinstal dengan izin superuser, tapi saat ini ReVanced Manager tidak memiliki izin. Mohon izinkan superuser.",
"packageNameLabel": "Nama paket",
"originalPackageNameLabel": "Nama Paket Asli",
"installTypeLabel": "Tipe pemasangan",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Non-root",
"patchedDateLabel": "Tanggal Termodifikasi",
"patchedDateHint": "{date} pukul {time}",
"appliedPatchesLabel": "Modifikasi Terpasang",
"appliedPatchesHint": "{quantity} modifikasi terpasang",
"updateNotImplemented": "Fitur ini belum diimplementasikan"
},
"contributorsView": {
"widgetTitle": "Kontributor",
"patcherContributors": "Kontributor Pemodifikasi",
"patchesContributors": "Kontributor Pemodifikasi",
"integrationsContributors": "Kontributor Integrasi",
"cliContributors": "Kontributor CLI",
"managerContributors": "Kontributor Manager"
}
}

200
assets/i18n/it_IT.json Normal file
View File

@ -0,0 +1,200 @@
{
"okButton": "OK",
"cancelButton": "Annulla",
"updateButton": "Aggiorna",
"enabledLabel": "Attivo",
"disabledLabel": "Disattivato",
"yesButton": "Sì",
"noButton": "No",
"warning": "Attenzione",
"navigationView": {
"dashboardTab": "Gestione",
"patcherTab": "Patcher",
"settingsTab": "Impostazioni"
},
"homeView": {
"widgetTitle": "Gestione",
"updatesSubtitle": "Aggiornamenti",
"patchedSubtitle": "Applicazioni Patchate",
"updatesAvailable": "Aggiornamenti disponibili",
"noUpdates": "Nessun aggiornamento disponibile",
"WIP": "Lavori in corso...",
"noInstallations": "Non è stata installata nessuna applicazione modificata",
"installed": "Installate",
"updateDialogTitle": "Aggiorna Manager",
"updateChangelogTitle": "Changelog",
"notificationTitle": "Aggiornamento scaricato",
"notificationText": "Tocca per installare l'aggiornamento",
"downloadingMessage": "Sto scaricando l'aggiornamento...",
"installingMessage": "Sto installando l'aggiornamento...",
"errorDownloadMessage": "Impossibile scaricare l'aggiornamento",
"errorInstallMessage": "Impossibile installare l'aggiornamento",
"noConnection": "Nessuna connessione internet",
"updatesDisabled": "L'aggiornamento di un'app patchata è attualmente disabilitato. Applica nuovamente la patch."
},
"applicationItem": {
"patchButton": "Patch",
"infoButton": "Info",
"changelogLabel": "Novità"
},
"latestCommitCard": {
"loadingLabel": "Caricamento...",
"timeagoLabel": "{time} fa",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Aggiorna Manager"
},
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "Applica",
"patchDialogText": "Hai selezionato una patch di risorse ed è stato rilevato un file di installazione diviso (Split APK), quindi potrebbero verificarsi errori di patching.\nSei sicuro di voler procedere?"
},
"appSelectorCard": {
"widgetTitle": "Seleziona un'applicazione",
"widgetTitleSelected": "Applicazione selezionata",
"widgetSubtitle": "Nessuna applicazione selezionata",
"noAppsLabel": "Nessuna applicazione trovata",
"currentVersion": "Attuale",
"recommendedVersion": "Consigliata",
"anyVersion": "qualsiasi"
},
"patchSelectorCard": {
"widgetTitle": "Seleziona patch",
"widgetTitleSelected": "Patch selezionate",
"widgetSubtitle": "Seleziona prima un'applicazione",
"widgetEmptySubtitle": "Nessuna patch selezionata"
},
"socialMediaCard": {
"widgetTitle": "Social",
"widgetSubtitle": "Seguici sui nostri canali!"
},
"appSelectorView": {
"viewTitle": "Seleziona un'applicazione",
"searchBarHint": "Cerca applicazioni",
"storageButton": "Archiviazione",
"errorMessage": "Impossibile utilizzare l'applicazione selezionata"
},
"patchesSelectorView": {
"viewTitle": "Seleziona patch",
"searchBarHint": "Cerca patch",
"doneButton": "Fatto",
"recommended": "Raccomandati",
"all": "Tutte",
"none": "Nessuna",
"loadPatchesSelection": "Carica selezione patch",
"noSavedPatches": "Nessuna patch salvata per l'app selezionata.\nPremi Fatto per salvare la selezione corrente.",
"noPatchesFound": "Nessuna patch trovata per l'applicazione selezionata",
"selectAllPatchesWarningContent": "Stai per selezionare tutte le patch, incluse patch non consigliate che potrebbero causare comportamenti indesiderati."
},
"patchItem": {
"unsupportedDialogText": "La selezione di questa patch potrebbe causare degli errori.\n\nVersione dell'app: {packageVersion}\nVersioni supportate:\n{supportedVersions}",
"unsupportedPatchVersion": "La patch non è supportata per questa versione dell'app. Abilitare l'impostazione sperimentale per procedere."
},
"installerView": {
"widgetTitle": "Installer",
"installButton": "Installa",
"installRootButton": "Installa come Root",
"openButton": "Apri",
"shareButton": "Condividi file",
"notificationTitle": "ReVanced Manager è in fase di patch",
"notificationText": "Tocca per tornare all'installer",
"shareApkMenuOption": "Condividi APK",
"exportApkMenuOption": "Esporta APK",
"shareLogMenuOption": "Condividi log",
"installErrorDialogTitle": "Errore",
"installErrorDialogText1": "Impossibile installare come root con le patch selezionate. Modifica le patch della tua app o scegli la modalità di installazione non-root.",
"installErrorDialogText2": "Impossibile installare come non-root con le patch selezionate. Modifica le patch della tua app o scegli la modalità di installazione root.",
"installErrorDialogText3": "Impossibile eseguire l'installazione come root perché l'APK originale è stato selezionato dall'archiviazione.\nSeleziona un'app già installata o scegli l'installazione non-root.",
"noExit": "Installer ancora in esecuzione, impossibile uscire..."
},
"settingsView": {
"widgetTitle": "Impostazioni",
"appearanceSectionTitle": "Aspetto",
"teamSectionTitle": "Team",
"infoSectionTitle": "Info",
"advancedSectionTitle": "Avanzate",
"logsSectionTitle": "Log",
"darkThemeLabel": "Modalità scura",
"darkThemeHint": "Benvenuto nel lato oscuro",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Goditi un'esperienza più in armonia con il tuo dispositivo",
"languageLabel": "Lingua",
"englishOption": "English",
"sourcesLabel": "Sorgenti",
"sourcesLabelHint": "Configura le tue sorgenti personalizzate",
"hostRepositoryLabel": "Repository API",
"orgPatchesLabel": "Organizzazione Patch",
"sourcesPatchesLabel": "Sorgente Patch",
"orgIntegrationsLabel": "Organizzazione Integrazioni",
"sourcesIntegrationsLabel": "Sorgente Integrazioni",
"sourcesResetDialogTitle": "Reimposta",
"sourcesResetDialogText": "Sei sicuro di voler reimpostare le sorgenti personalizzate ai valori predefiniti?",
"apiURLResetDialogText": "Sei sicuro di voler ripristinare l'URL delle API al suo valore predefinito?",
"contributorsLabel": "Contributori",
"contributorsHint": "Lista dei contributori di ReVanced",
"logsLabel": "Log",
"logsHint": "Condividi i log del manager",
"apiURLLabel": "URL API",
"apiURLHint": "Configura il tuo URL delle API personalizzato",
"selectApiURL": "URL API",
"experimentalUniversalPatchesLabel": "Supporto per patch universali sperimentali",
"experimentalUniversalPatchesHint": "Visualizza tutte le applicazioni da utilizzare con le patch universali, il caricamento dell'elenco delle app potrebbe essere più lento",
"experimentalPatchesLabel": "Supporto per patch sperimentali",
"experimentalPatchesHint": "Abilita l'utilizzo di patch non supportate in qualsiasi versione dell'app",
"enabledExperimentalPatches": "Supporto patch sperimentali abilitato",
"exportSectionTitle": "Importa / Esporta",
"aboutLabel": "Informazioni",
"snackbarMessage": "Copiato negli appunti",
"sentryLabel": "Log di Sentry",
"sentryHint": "Invia log anonimi per aiutarci a migliorare ReVanced Manager",
"restartAppForChanges": "Riavvia l'app per applicare le modifiche",
"deleteKeystoreLabel": "Elimina keystore",
"deleteKeystoreHint": "Elimina il keystore usato per firmare l'applicazione",
"deletedKeystore": "Keystore eliminato",
"deleteTempDirLabel": "Elimina file temporanei",
"deleteTempDirHint": "Elimina i file temporanei non utilizzati",
"deletedTempDir": "File temporanei eliminati",
"exportPatchesLabel": "Esporta patch selezionate",
"exportPatchesHint": "Esporta le patch selezionate in un file JSON",
"exportedPatches": "Patch selezionate esportate",
"noExportFileFound": "Nessuna patch selezionata da esportare",
"importPatchesLabel": "Importa patch selezionate",
"importPatchesHint": "Importa le patch selezionate da un file JSON",
"importedPatches": "Patch selezionate importate",
"resetStoredPatchesLabel": "Ripristina le patch",
"resetStoredPatchesHint": "Resetta la selezione delle patch memorizzate",
"resetStoredPatches": "La selezione delle patch è stata resettata",
"jsonSelectorErrorMessage": "Impossibile utilizzare il file json selezionato",
"deleteLogsLabel": "Cancella log",
"deleteLogsHint": "Elimina i log del manager raccolti",
"deletedLogs": "Log cancellati"
},
"appInfoView": {
"widgetTitle": "Info app",
"openButton": "Apri",
"uninstallButton": "Disinstalla",
"patchButton": "Patch",
"unpatchButton": "Ripristina",
"unpatchDialogText": "Sei sicuro di voler ripristinare questa applicazione?",
"rootDialogTitle": "Errore",
"rootDialogText": "L'app è stata installata con i permessi di root, ma attualmente ReVanced Manager non ha nessun permesso.\nSi prega di concedere prima i permessi di root.",
"packageNameLabel": "Nome pacchetto",
"originalPackageNameLabel": "Nome originale del pacchetto",
"installTypeLabel": "Tipo di installazione",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Non-root",
"patchedDateLabel": "Data di patch",
"patchedDateHint": "{date} alle {time}",
"appliedPatchesLabel": "Patch applicate",
"appliedPatchesHint": "{quantity} patch applicate",
"updateNotImplemented": "Questa funzionalità non è stata ancora implementata"
},
"contributorsView": {
"widgetTitle": "Contributori",
"patcherContributors": "Collaboratori patcher",
"patchesContributors": "Collaboratori patch",
"integrationsContributors": "Collaboratori integrazioni",
"cliContributors": "Collaboratori CLI",
"managerContributors": "Contributori Manager"
}
}

196
assets/i18n/ko_KR.json Normal file
View File

@ -0,0 +1,196 @@
{
"okButton": "확인",
"cancelButton": "취소",
"enabledLabel": "활성화됨",
"disabledLabel": "비활성화됨",
"yesButton": "네",
"noButton": "아니요",
"warning": "경고",
"navigationView": {
"dashboardTab": "대시보드",
"patcherTab": "패처",
"settingsTab": "설정"
},
"homeView": {
"widgetTitle": "대시보드",
"updatesSubtitle": "업데이트",
"patchedSubtitle": "패치된 앱",
"updatesAvailable": "새 업데이트가 있습니다",
"noUpdates": "새 업데이트가 없습니다",
"WIP": "개발 중 입니다...",
"noInstallations": "패치된 앱이 설치되지 않았습니다.",
"installed": "설치됨",
"updateDialogTitle": "매니저 업데이트",
"updateDialogText": "ReVanced Manager를 다운로드하고 업데이트 하시겠습니까?",
"notificationTitle": "업데이트 다운로드됨",
"notificationText": "탭하여 업데이트 설치",
"downloadingMessage": "업데이트 다운로드 중...",
"installingMessage": "업데이트 설치 중...",
"errorDownloadMessage": "업데이트 다운로드 실패",
"errorInstallMessage": "업데이트 설치 실패",
"noConnection": "인터넷이 연결되지 않음",
"updatesDisabled": "패치된 앱 업데이트는 현재 비활성화 되어 있습니다. 앱을 다시 패치하세요."
},
"applicationItem": {
"patchButton": "패치",
"infoButton": "정보",
"changelogLabel": "변경사항"
},
"latestCommitCard": {
"loadingLabel": "로딩 중...",
"timeagoLabel": "{time} 전",
"patcherLabel": "패처: ",
"managerLabel": "매니저: ",
"updateButton": "매니저 업데이트"
},
"patcherView": {
"widgetTitle": "패처",
"patchButton": "패치",
"patchDialogText": "리소스 패치가 선택되어 있으며 분할 APK 설치가 감지되었습니다. 패치 도중 에러가 발생할 수 있습니다.\n계속 진행하시겠습니까?"
},
"appSelectorCard": {
"widgetTitle": "앱을 선택하세요",
"widgetTitleSelected": "선택된 앱",
"widgetSubtitle": "선택된 앱 없음",
"noAppsLabel": "앱이 발견되지 않음",
"currentVersion": "현재 버전",
"recommendedVersion": "권장 버전",
"anyVersion": "모든 버전"
},
"patchSelectorCard": {
"widgetTitle": "패치를 선택하세요",
"widgetTitleSelected": "선택된 패치",
"widgetSubtitle": "앱을 먼저 선택하세요.",
"widgetEmptySubtitle": "선택된 패치가 없습니다."
},
"socialMediaCard": {
"widgetTitle": "소셜",
"widgetSubtitle": "SNS에서 저희를 만나보세요!"
},
"appSelectorView": {
"viewTitle": "앱을 선택하세요",
"searchBarHint": "앱 찾기",
"storageButton": "저장소",
"errorMessage": "선택한 앱을 사용할 수 없음"
},
"patchesSelectorView": {
"viewTitle": "패치 선택",
"searchBarHint": "패치 찾기",
"doneButton": "완료",
"recommended": "권장",
"all": "모두",
"none": "없음",
"loadPatchesSelection": "패치 선택사항 불러오기",
"noSavedPatches": "선택된 앱에 적용할 패치가 저장되지 않았습니다\n완료를 눌어 현재 선택사항을 저장하세요",
"noPatchesFound": "선택된 앱에 대한 패치를 찾을 수 없습니다.",
"selectAllPatchesWarningContent": "권장하지 않는 패치를 포함한 모든 패치를 선택하려 하고 있습니다. 이 패치는 원치 않는 문제를 유발할 수 있습니다."
},
"patchItem": {
"unsupportedDialogText": "이 패치는 오류를 발생시킬 수 있습니다.\n\n앱 버전: {packageVersion}\n지원되는 버전:\n{supportedVersions}",
"unsupportedPatchVersion": "이 버전의 앱은 현재 패치가 지원되지 않습니다. 설정에서 실험적 기능을 켜고 진행하세요."
},
"installerView": {
"widgetTitle": "인스톨러",
"installButton": "설치",
"installRootButton": "루트 권한으로 설치",
"openButton": "열기",
"shareButton": "공유하기",
"notificationTitle": "ReVanced Manager가 패치 중입니다.",
"notificationText": "탭하여 인스톨러로 돌아가기",
"shareApkMenuOption": "APK 공유",
"exportApkMenuOption": "APK 내보내기",
"shareLogMenuOption": "로그 공유",
"installErrorDialogTitle": "오류",
"installErrorDialogText1": "현재 선택된 패치로는 루트 설치가 불가능합니다.\n앱을 다시 패치하거나 논루트 설치를 선택하세요.",
"installErrorDialogText2": "현재 선택된 패치로는 논루트 설치가 불가능합니다.\n앱을 다시 패치하거나 폰이 루팅되어 있다면 루트 설치를 선택하세요.",
"installErrorDialogText3": "오리지널 APK가 저장 공간에서 선택되었기 때문에 루트 설치가 불가능합니다.\n설치된 앱을 선택하거나 논루트 설치를 선택하세요.",
"noExit": "인스톨러가 실행 중이므로 중단할 수 없습니다..."
},
"settingsView": {
"widgetTitle": "설정",
"appearanceSectionTitle": "모양",
"teamSectionTitle": "팀",
"infoSectionTitle": "정보",
"advancedSectionTitle": "고급 설정",
"logsSectionTitle": "로그",
"darkThemeLabel": "다크 모드",
"darkThemeHint": "다크 사이드로 오신 것을 환영합니다",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "당신의 디바이스에 더 맞는 경험을 즐겨보세요",
"languageLabel": "언어",
"englishOption": "영어",
"sourcesLabel": "소스",
"sourcesLabelHint": "커스텀 소스 설정",
"orgPatchesLabel": "패치 구성",
"sourcesPatchesLabel": "패치 소스",
"orgIntegrationsLabel": "통합 기능 구성",
"sourcesIntegrationsLabel": "통합 기능 소스",
"sourcesResetDialogTitle": "초기화",
"sourcesResetDialogText": "정말 모든 커스텀 소스를 기본값으로 복구하시겠습니까?",
"apiURLResetDialogText": "정말 API URL을 기본값으로 되돌릴까요?",
"contributorsLabel": "기여자",
"contributorsHint": "ReVanced 기여자들",
"logsLabel": "로그",
"logsHint": "매니저의 로그 공유하기",
"apiURLLabel": "API URL",
"apiURLHint": "커스텀 API URL 설정",
"selectApiURL": "API URL",
"experimentalPatchesLabel": "실험적 패치 활성화",
"experimentalPatchesHint": "지원되지 않는 패치를 앱의 모든 버전에 적용할 수 있도록 활성화",
"enabledExperimentalPatches": "실험적 패치 활성화됨",
"exportSectionTitle": "가져오기 & 내보내기",
"aboutLabel": "정보",
"snackbarMessage": "클립보드에 복사됨",
"sentryLabel": "Sentry 로깅",
"sentryHint": "익명의 로그를 보내 ReVanced Manager를 개선할 수 있도록 도와주세요",
"restartAppForChanges": "변경 사항을 적용하려면 앱을 다시 시작하세요",
"deleteKeystoreLabel": "키스토어 제거",
"deleteKeystoreHint": "앱을 서명하기 위해 사용되는 키스토어를 제거합니다.",
"deletedKeystore": "키스토어 제거됨",
"deleteTempDirLabel": "임시 파일 삭제",
"deleteTempDirHint": "사용되지 않은 임시 파일 삭제",
"deletedTempDir": "임시 파일 삭제됨",
"exportPatchesLabel": "패치 선택목록 내보내기",
"exportPatchesHint": "패치 선택목록을 JSON 파일로 내보내기",
"exportedPatches": "패치 선택목록을 내보냈음",
"noExportFileFound": "내보낼 패치 선택목록이 없습니다",
"importPatchesLabel": "패치 선택목록 불러오기",
"importPatchesHint": "패치 선택목록을 JSON 파일에서 불러오기",
"importedPatches": "패치 선택목록을 불러옴",
"resetStoredPatchesLabel": "패치 초기화",
"resetStoredPatchesHint": "저장된 패치 선택사항 초기화",
"resetStoredPatches": "패치 선택사항이 초기화 되었습니다",
"jsonSelectorErrorMessage": "선택한 JSON 파일을 사용할 수 없음",
"deleteLogsLabel": "로그 삭제",
"deleteLogsHint": "수집된 매니저 로그 삭제",
"deletedLogs": "제거된 로그"
},
"appInfoView": {
"widgetTitle": "앱 정보",
"openButton": "열기",
"uninstallButton": "삭제",
"patchButton": "패치",
"unpatchButton": "패치 제거",
"unpatchDialogText": "정말 이 앱의 패치를 제거할까요?",
"rootDialogTitle": "오류",
"rootDialogText": "앱이 슈퍼유저 권한으로 설치되었으나 현재 ReVanced Manager에게 권한이 없습니다. 슈퍼유저 권한을 부여해주세요.",
"packageNameLabel": "패키지 이름",
"originalPackageNameLabel": "원본 패키지 이름",
"installTypeLabel": "설치 타입",
"rootTypeLabel": "루트",
"nonRootTypeLabel": "루트 아님",
"patchedDateLabel": "패치된 날짜",
"patchedDateHint": "{date} {time}",
"appliedPatchesLabel": "적용된 패치",
"appliedPatchesHint": "{quantity}개의 패치 적용됨",
"updateNotImplemented": "이 기능은 아직 구현되지 않았습니다"
},
"contributorsView": {
"widgetTitle": "기여자",
"patcherContributors": "패쳐 기여자",
"patchesContributors": "패치 기여자",
"integrationsContributors": "통합 기능 기여자",
"cliContributors": "CLI 기여자",
"managerContributors": "Manager 기여자"
}
}

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

@ -0,0 +1,200 @@
{
"okButton": "Gerai",
"cancelButton": "Atšaukti",
"updateButton": "Atnaujinti",
"enabledLabel": "Įjungta",
"disabledLabel": "Išjungta",
"yesButton": "Taip",
"noButton": "Ne",
"warning": "Įspėjimas",
"navigationView": {
"dashboardTab": "Valdymo skydas",
"patcherTab": "Patcher",
"settingsTab": "Nustatymai"
},
"homeView": {
"widgetTitle": "Valdymo skydas",
"updatesSubtitle": "Atnaujinimai",
"patchedSubtitle": "Modifikuotos programos",
"updatesAvailable": "Galimi atnaujinimai",
"noUpdates": "Atnaujinimų nėra",
"WIP": "Vykdomi darbai...",
"noInstallations": "Nėra įdiegtų modifikuotų programų",
"installed": "Įdiegta",
"updateDialogTitle": "Atnaujinti Manager",
"updateChangelogTitle": "Pakeitimų sąrašas",
"notificationTitle": "Atnaujinimas atsiųstas",
"notificationText": "Paspauskite, kad įdiegtumėte naujinimą",
"downloadingMessage": "Atsiunčiamas atnaujinimas...",
"installingMessage": "Įdiegiamas atnaujinimas...",
"errorDownloadMessage": "Nepavyksta atsisiųsti atnaujinimo",
"errorInstallMessage": "Nepavyksta įdiegti atnaujinimo",
"noConnection": "Nėra interneto ryšio",
"updatesDisabled": "Modifikuotų programų atnaujinimas šiuo metu išjungtas. Vėl modifikuokite programą."
},
"applicationItem": {
"patchButton": "Modifikuoti",
"infoButton": "Info",
"changelogLabel": "Pakeitimai"
},
"latestCommitCard": {
"loadingLabel": "Kraunama...",
"timeagoLabel": "Prieš {time}",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Atnaujinti Manager"
},
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "Modifikuoti",
"patchDialogText": "Jūs pasirinkote resource modifikaciją ir padalinta APK instaliacija buvo aptikta, tai modifikavimo klaidos gali atsitikti.\nAr esate tikri kad norite tęsti modifikuoti padalytą APK?"
},
"appSelectorCard": {
"widgetTitle": "Pasirinkite programą",
"widgetTitleSelected": "Pasirinkta programa",
"widgetSubtitle": "Nepasirinkta programa",
"noAppsLabel": "Nerastos jokios programos",
"currentVersion": "Dabartinė",
"recommendedVersion": "Rekomenduojama",
"anyVersion": "bet kokia"
},
"patchSelectorCard": {
"widgetTitle": "Pasirinkite modifikacijas",
"widgetTitleSelected": "Pasirinktos modifikacijos",
"widgetSubtitle": "Pirmiausia pasirinkite programą",
"widgetEmptySubtitle": "Nepasirinkta jokių modifikacijų"
},
"socialMediaCard": {
"widgetTitle": "Socialiniai tinklai",
"widgetSubtitle": "Mes esame internete!"
},
"appSelectorView": {
"viewTitle": "Pasirinkite programą",
"searchBarHint": "Ieškoti programų",
"storageButton": "Saugykla",
"errorMessage": "Neina naudoti parinktos programos"
},
"patchesSelectorView": {
"viewTitle": "Pasirinkti modifikacijas",
"searchBarHint": "Ieškoti modifikacijų",
"doneButton": "Atlikta",
"recommended": "Rekomenduojama",
"all": "Visi",
"none": "Nėra",
"loadPatchesSelection": "Įkelti modifikacijų pasirinkimą",
"noSavedPatches": "Nėra išsaugotų pasirinktos programos modifikacijų.\nPaspauskite Atlikta, kad išsaugotumėte dabartinį pasirinkimą.",
"noPatchesFound": "Nerasta modifikacijų pasirinktai programai",
"selectAllPatchesWarningContent": "Jūs pasirinksite visas modifikacijas, tai įskaito ir nerekomenduojamas modifikacijas ir tai gali sukelti nepageidaujama elgesį."
},
"patchItem": {
"unsupportedDialogText": "Šios modifikacijos pasirinkimas gali sukelti modifikavimo klaidų.\n\nProgramos versija: {packageVersion}\npalaikomos versijos:\n{supportedVersions}",
"unsupportedPatchVersion": "Modifikacija nepalaikoma šios programos versijai. Norėdami tęsti, nustatymuose įjunkite eksperimentinį jungiklį."
},
"installerView": {
"widgetTitle": "Įdiegėjas",
"installButton": "Įdiegti",
"installRootButton": "Įdiegti kaip Root",
"openButton": "Atidaryti",
"shareButton": "Bendrinti failą",
"notificationTitle": "ReVanced Manager modifikuoja programą",
"notificationText": "Paspauskite sugrįžti į įdiegėją",
"shareApkMenuOption": "Bendrinti APK",
"exportApkMenuOption": "Eksportuoti APK",
"shareLogMenuOption": "Bendrinti įrašus",
"installErrorDialogTitle": "Klaida",
"installErrorDialogText1": "Root instaliacija negalima su dabartinėm pasirinktom modifikacijom.\nPer modifikuok programą arba pasirink ne root instaliaciją.",
"installErrorDialogText2": "Ne root instaliacija negalima su dabartinėm pasirinktom modifikacijom.\nPer modifikuok programą arba pasirink root instaliaciją jei tavo įrenginys turi root.",
"installErrorDialogText3": "Root instaliacija negalima nes originalus APK buvo pasirinktas iš saugyklos.\nPasirink jau instaliuotą programą arba pasirink ne root instaliaciją.",
"noExit": "Diegimo programa vis dar veikia, negalima išeiti..."
},
"settingsView": {
"widgetTitle": "Nustatymai",
"appearanceSectionTitle": "Išvaizda",
"teamSectionTitle": "Komanda",
"infoSectionTitle": "Info",
"advancedSectionTitle": "Išplėstiniai nustatymai",
"logsSectionTitle": "Įrašai",
"darkThemeLabel": "Tamsus rėžimas",
"darkThemeHint": "Sveikas atvykęs į tamsiąją pusę",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Mėgaukis patirtimi artimiau tavo įrenginiui",
"languageLabel": "Kalba",
"englishOption": "Anglų",
"sourcesLabel": "Šaltiniai",
"sourcesLabelHint": "Sukonfigūruoti tavo nurodytus šaltinius",
"hostRepositoryLabel": "API saugykla",
"orgPatchesLabel": "Modifikacijų organizacija",
"sourcesPatchesLabel": "Modifikacijų šaltinis",
"orgIntegrationsLabel": "Integracijų organizacija",
"sourcesIntegrationsLabel": "Integracijų šaltinis",
"sourcesResetDialogTitle": "Nustatyti iš naujo",
"sourcesResetDialogText": "Ar esi tikras kad nori iš naujo nustatyti šaltinius į jų numatytas reikšmes?",
"apiURLResetDialogText": "Ar esi tikras kad nori iš naujo nustatyti API URL adresą į numatytą reikšmę?",
"contributorsLabel": "Prisidėjusieji žmonės",
"contributorsHint": "Žmonės prisidėję prie ReVanced",
"logsLabel": "Įrašai",
"logsHint": "Bendrinti Manager įrašus",
"apiURLLabel": "API URL",
"apiURLHint": "Sukonfigūruoti tavo nurodytus API URL",
"selectApiURL": "API URL",
"experimentalUniversalPatchesLabel": "Eksperimentinių universalių modifikacijų palaikymas",
"experimentalUniversalPatchesHint": "Rodyti visas programas, skirtas naudoti su universaliom modifikacijom, krovimas programų sąrašo gali būti lėtesnis",
"experimentalPatchesLabel": "Eksperimentinių modifikacijų palaikymas",
"experimentalPatchesHint": "Įgalinti naudoti nepalaikomas modifikacijas bet kurioje programos versijoje",
"enabledExperimentalPatches": "Eksperimentinių modifikacijų palaikymas įjungtas",
"exportSectionTitle": "Importuoti ir eksportuoti",
"aboutLabel": "Apie",
"snackbarMessage": "Nukopijuota į iškarpinę",
"sentryLabel": "Klaidų rinkimo įrankio įrašai",
"sentryHint": "Siųsti anoniminius įrašus, kad padėtumėte mums tobulinti ReVanced Manager",
"restartAppForChanges": "Iš naujo paleiskite programą, kad modifikacijos įsigaliotų",
"deleteKeystoreLabel": "Ištrinti keystore",
"deleteKeystoreHint": "Ištrinti keystore kuris naudojamas pasirašyti programą",
"deletedKeystore": "Keystore ištrintas",
"deleteTempDirLabel": "Ištrinti laikinus failus",
"deleteTempDirHint": "Ištrinti nenaudojamus laikinus failus",
"deletedTempDir": "Laikini failai ištrinti",
"exportPatchesLabel": "Eksportuoti modifikacijų pasirinkimą",
"exportPatchesHint": "Eksportuoti modifikacijų pasirinkimą į JSON failą",
"exportedPatches": "Modifikacijų pasirinkimai eksportuoti",
"noExportFileFound": "Nėra pasirinktų modifikacijų eksportuoti",
"importPatchesLabel": "Įkelti modifikacijų pasirinkimą",
"importPatchesHint": "Įkelti modifikacijų pasirinkimą iš JSON failo",
"importedPatches": "Modifikacijų pasirinkimai įkelti",
"resetStoredPatchesLabel": "Atstatyti modifikacijas",
"resetStoredPatchesHint": "Atstatyti išsaugotą modifikacijų pasirinkimą",
"resetStoredPatches": "Modifikacijų pasirinkimas buvo atstatytas",
"jsonSelectorErrorMessage": "Neina naudoti pasirinkto JSON failo",
"deleteLogsLabel": "Ištrinti įrašus",
"deleteLogsHint": "Ištrinti surinktus Manager įrašus",
"deletedLogs": "Įrašai ištrinti"
},
"appInfoView": {
"widgetTitle": "Programos informacija",
"openButton": "Atidaryti",
"uninstallButton": "Išdiegti",
"patchButton": "Modifikuoti",
"unpatchButton": "Išimti modifikacijas",
"unpatchDialogText": "Ar esi tikras kad nori išimti modifikacijas iš šios programos?",
"rootDialogTitle": "Klaida",
"rootDialogText": "Programa buvo įdiegta su supervartotojo leidimais, bet ReVanced Manager neturi leidimų.\nPirmiausia suteikite supervartotojo leidimus.",
"packageNameLabel": "Paketo pavadinimas",
"originalPackageNameLabel": "Originalus paketo pavadinimas",
"installTypeLabel": "Įdiegimo tipas",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Ne root",
"patchedDateLabel": "Modifikavimo data",
"patchedDateHint": "{date} {time}",
"appliedPatchesLabel": "Uždėtos modifikacijos",
"appliedPatchesHint": "{quantity} uždėtos modifikacijos",
"updateNotImplemented": "Ši funkcija dar neįgyvendinta"
},
"contributorsView": {
"widgetTitle": "Prisidėjusieji žmonės",
"patcherContributors": "Prisidėjusieji prie Patcher",
"patchesContributors": "Prisidėjusieji prie Patcher",
"integrationsContributors": "Prisidėjusieji prie integracijų",
"cliContributors": "Prisidėjusieji prie CLI",
"managerContributors": "Prisidėjusieji prie Manager"
}
}

196
assets/i18n/ms_MY.json Normal file
View File

@ -0,0 +1,196 @@
{
"okButton": "OK",
"cancelButton": "Batal",
"enabledLabel": "Diaktifkan",
"disabledLabel": "Dimatikan",
"yesButton": "Ya",
"noButton": "Tidak",
"warning": "Amaran",
"navigationView": {
"dashboardTab": "Papan Pemuka",
"patcherTab": "Pemodifikasi",
"settingsTab": "Tetapan"
},
"homeView": {
"widgetTitle": "Papan Pemuka",
"updatesSubtitle": "Kemas Kini",
"patchedSubtitle": "Aplikasi Yang Telah Dimodifikasi",
"updatesAvailable": "Kemas kini tersedia",
"noUpdates": "Tiada kemas kini tersedia",
"WIP": "Kerja Masih Berjalan...",
"noInstallations": "Tiada aplikasi dimodifikasi yang telah dipasang",
"installed": "Dipasang",
"updateDialogTitle": "Kemas Kini Manager",
"updateDialogText": "Adakah anda ingin memuat turun dan mengemas kini ReVanced Manager?",
"notificationTitle": "Kemaskini dimuat turun",
"notificationText": "Tap untuk memuat masuk kemas kini",
"downloadingMessage": "Memuat turun pengemaskinian...",
"installingMessage": "Memasang pengemaskinian...",
"errorDownloadMessage": "Tidak dapat memuat turun pengemaskinian",
"errorInstallMessage": "Tidak dapat memasang pengemaskinian",
"noConnection": "Tiada sambungan internet",
"updatesDisabled": "Kemas kini aplikasi yang telah dimodifikasi kini sedang dinyah aktif. Modifikasi semula aplikasi."
},
"applicationItem": {
"patchButton": "Modifikasi",
"infoButton": "Maklumat",
"changelogLabel": "Log perubahan"
},
"latestCommitCard": {
"loadingLabel": "Memuatkan...",
"timeagoLabel": "{time} lepas",
"patcherLabel": "Pemodifikasi: ",
"managerLabel": "Manager: ",
"updateButton": "Kemas Kini Manager"
},
"patcherView": {
"widgetTitle": "Pemodifikasi",
"patchButton": "Modifikasi",
"patchDialogText": "Anda telah memilih modifikasi dan APK dipasang secara split telah dikesan jadi ralat mungkin terjadi ketika memodifikasi.\nAdakah anda pasti untuk teruskan modifikasi secara split base APK?"
},
"appSelectorCard": {
"widgetTitle": "Pilih aplikasi",
"widgetTitleSelected": "Aplikasi dipilih",
"widgetSubtitle": "Tiada aplikasi dipilih",
"noAppsLabel": "Tiada aplikasi ditemui",
"currentVersion": "Semasa",
"recommendedVersion": "Disyorkan",
"anyVersion": "mana-mana"
},
"patchSelectorCard": {
"widgetTitle": "Pilih modifikasi",
"widgetTitleSelected": "Modifikasi pilihan",
"widgetSubtitle": "Pilih aplikasi dahulu",
"widgetEmptySubtitle": "Tiada modifikasi terpilih"
},
"socialMediaCard": {
"widgetTitle": "Sosial",
"widgetSubtitle": "Ikuti kami!"
},
"appSelectorView": {
"viewTitle": "Pilih aplikasi",
"searchBarHint": "Cari aplikasi",
"storageButton": "Storan",
"errorMessage": "Tidak dapat menggunakan aplikasi yang dipilih"
},
"patchesSelectorView": {
"viewTitle": "Pilih modifikasi",
"searchBarHint": "Cari modifikasi",
"doneButton": "Selesai",
"recommended": "Disyorkan",
"all": "Semua",
"none": "Tiada",
"loadPatchesSelection": "Memuat pilihan modifikasi",
"noSavedPatches": "Tiada modifkasi disimpan untuk aplikasi dipilih\nTekan Selesai untuk menyimpan pilihan semasa",
"noPatchesFound": "Tiada modifikasi dijumpai untuk apl pilihan",
"selectAllPatchesWarningContent": "Anda telah memilih untuk menggunakan kesemua modifikasi, termasuk modifikasi yang tidak disyorkan dan boleh mengakibatkan kesan yang tidak dijangka."
},
"patchItem": {
"unsupportedDialogText": "Memilih modifikasi mungkin menyebabkan ralat ketika modifikasi.\n\nVersi aplikasi: {packageVersion}\nVersi disokong:\n{supportedVersions}",
"unsupportedPatchVersion": "Patch tidak disokong untuk versi apl ini. Benarkan punat percubaan di ruang tetapan untuk teruskan."
},
"installerView": {
"widgetTitle": "Pemasang",
"installButton": "Pasang",
"installRootButton": "Pasang sebagai Root",
"openButton": "Buka",
"shareButton": "Kongsi fail",
"notificationTitle": "Revanced Manager sedang memodifikasi",
"notificationText": "Tap untuk kembali ke pemasang",
"shareApkMenuOption": "Kongsi APK",
"exportApkMenuOption": "Eksport APK",
"shareLogMenuOption": "Kongsi Log",
"installErrorDialogTitle": "Ralat",
"installErrorDialogText1": "Pemasangan root adalah mustahil menggunakan modifikasi terpilih.\nModifikasi semula apl anda atau pilih pemasangan tanpa root.",
"installErrorDialogText2": "Pemasangan tanpa root adalah mustahil menggunakan modifikasi tepilih.\nModifikasi semula apl anda atau pilih pemasangan root jika peranti anda telah root.",
"installErrorDialogText3": "Pemasangan sebagai root adalah mustahil kerana APK asal dipilih dari storan.\nSila pilih aplikasi yang telah dipasang atau pilih pemasangan tanpa root.",
"noExit": "Pemasang masih dijalankan, jangan keluar..."
},
"settingsView": {
"widgetTitle": "Tetapan",
"appearanceSectionTitle": "Penampilan",
"teamSectionTitle": "Pasukan",
"infoSectionTitle": "Maklumat",
"advancedSectionTitle": "Lanjutan",
"logsSectionTitle": "Log",
"darkThemeLabel": "Mod Gelap",
"darkThemeHint": "Selamat datang ke Kegelapan",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Nikmati tema yang lebih serasi dengan anda",
"languageLabel": "Bahasa",
"englishOption": "Inggeris",
"sourcesLabel": "Sumber",
"sourcesLabelHint": "Tetapkan sumber khas",
"orgPatchesLabel": "Pengarang Modifikasi",
"sourcesPatchesLabel": "Sumber Modifikasi",
"orgIntegrationsLabel": "Pengarang Integrasi",
"sourcesIntegrationsLabel": "Sumber Integrasi",
"sourcesResetDialogTitle": "Set semula",
"sourcesResetDialogText": "Adakah anda pasti untuk tetapkan semula sumber khas kepada tetapan asal?",
"apiURLResetDialogText": "Adakah anda pasti untuk tetapkan semula URL API kepada tetapan asal?",
"contributorsLabel": "Penyumbang",
"contributorsHint": "Senarai penyokong ReVanced",
"logsLabel": "Log",
"logsHint": "Kongsi log Manager",
"apiURLLabel": "URL API",
"apiURLHint": "Tetapkan URL API khas",
"selectApiURL": "URL API",
"experimentalPatchesLabel": "Sokongan modifikasi percubaan",
"experimentalPatchesHint": "Benarkan untuk menggunakan patch yang tidak disokong untuk mana-mana versi apl",
"enabledExperimentalPatches": "Sokongan modifikasi percubaan dibenarkan",
"exportSectionTitle": "Import & Eksport",
"aboutLabel": "Tentang",
"snackbarMessage": "Disalin ke papan klip",
"sentryLabel": "Rekod Sentry",
"sentryHint": "Hantarkan log anonymous untuk bantu kami menambah baik Revanced Manager",
"restartAppForChanges": "Mulakan semula apl untuk menggunakan tetapan",
"deleteKeystoreLabel": "Buang keystore",
"deleteKeystoreHint": "Buang keystore yang digunakan untuk mengesahkan apl",
"deletedKeystore": "Keystore dibuang",
"deleteTempDirLabel": "Buang fail sementara",
"deleteTempDirHint": "Buang fail sementara yang tidak digunakan",
"deletedTempDir": "Fail sementara dibuang",
"exportPatchesLabel": "Eksport pilihan modifikasi",
"exportPatchesHint": "Eksport pilihan modifikasi ke fail JSON",
"exportedPatches": "Pilihan modifikasi telah dieksport",
"noExportFileFound": "Tiada pilihan modifikasi untuk dieksport",
"importPatchesLabel": "Import pilihan modifikasi",
"importPatchesHint": "Import pilihan modifikasi dari fail JSON",
"importedPatches": "Pilihan modifikasi telah diimport",
"resetStoredPatchesLabel": "Set semula modifikasi",
"resetStoredPatchesHint": "Set semula pilihan modifikasi tersimpan",
"resetStoredPatches": "Pilihan modifikasi telah diset semula",
"jsonSelectorErrorMessage": "Tidak dapat menggunakan fail JSON yang dipilih",
"deleteLogsLabel": "Padam log",
"deleteLogsHint": "Padam log manager terkumpul",
"deletedLogs": "Log telah dipadam"
},
"appInfoView": {
"widgetTitle": "Maklumat apl",
"openButton": "Buka",
"uninstallButton": "Nyah pasang",
"patchButton": "Modifikasi",
"unpatchButton": "Nyah modifikasi",
"unpatchDialogText": "Adakah anda pasti untuk nyah modifikasi aplikasi ini?",
"rootDialogTitle": "Ralat",
"rootDialogText": "Aplikasi telah dipasang dengan kebenaran superuser, tetapi ReVanced Manager sekarang tidak ada kebeneran.\nMinta membenarkan kebenaran superuser dahulu.",
"packageNameLabel": "Nama pakej",
"originalPackageNameLabel": "Nama asal pakej",
"installTypeLabel": "Jenis Pemasangan",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Tanpa root",
"patchedDateLabel": "Tarikh Modifikasi",
"patchedDateHint": "{date} pada {time}",
"appliedPatchesLabel": "Modifikasi Digunakan",
"appliedPatchesHint": "{quantity} modifikasi digunakan",
"updateNotImplemented": "Ciri ini masih belum dilaksanakan"
},
"contributorsView": {
"widgetTitle": "Penyumbang",
"patcherContributors": "Penyumpang pemodifikasi",
"patchesContributors": "Penyumbang Modifikasi",
"integrationsContributors": "Penyumbang Integrasi",
"cliContributors": "Penyumbang CLI",
"managerContributors": "Penyumbang Manager"
}
}

View File

@ -1,79 +0,0 @@
// ignore_for_file: avoid_print
import 'dart:convert';
import 'dart:io';
T? removeBlankEntries<T>(T? json) {
// This function is protected by BSD 3-Clause License
// Changes made to this section are allow removing of '' values from JSON
/*
https://pub.dev/documentation/swiss_knife/latest/swiss_knife/removeEmptyEntries.html
Copyright 2014, the Dart project authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
if (json == null) {
return null;
}
if (json is List) {
json.removeWhere((e) => e == null);
json.forEach(removeBlankEntries);
} else if (json is Map) {
json.removeWhere(
(key, value) => key == null || value == null || value == '',
);
json.values.forEach(removeBlankEntries);
}
return json;
}
Future<void> processJsonFiles() async {
final Directory directory = Directory.current;
final List<FileSystemEntity> files = directory.listSync();
for (final file in files) {
try {
if (file is File && file.path.endsWith('.json')) {
final String contents = await file.readAsString();
final dynamic json = jsonDecode(contents);
final dynamic processedJson = removeBlankEntries(json);
file.writeAsString(
const JsonEncoder.withIndent(' ').convert(processedJson),
);
print('🥞 Task successful on: ${file.path}');
}
} catch (e) {
print('💥 Task failed on: ${file.path}: $e');
}
}
}
void main() async {
processJsonFiles();
}

200
assets/i18n/pl_PL.json Normal file
View File

@ -0,0 +1,200 @@
{
"okButton": "OK",
"cancelButton": "Anuluj",
"updateButton": "Aktualizuj",
"enabledLabel": "Włączone",
"disabledLabel": "Wyłączone",
"yesButton": "Tak",
"noButton": "Nie",
"warning": "Ostrzeżenie",
"navigationView": {
"dashboardTab": "Panel główny",
"patcherTab": "Patcher",
"settingsTab": "Ustawienia"
},
"homeView": {
"widgetTitle": "Panel główny",
"updatesSubtitle": "Aktualizacje",
"patchedSubtitle": "Zaktualizowane aplikacje",
"updatesAvailable": "Dostępne aktualizacje",
"noUpdates": "Brak dostępnych aktualizacji",
"WIP": "Prace w toku...",
"noInstallations": "Nie zainstalowano żadnych zmodyfikowanych aplikacji",
"installed": "Zainstalowane",
"updateDialogTitle": "Zaktualizuj Managera",
"updateChangelogTitle": "Lista zmian",
"notificationTitle": "Pobrano aktualizacje",
"notificationText": "Kliknij, aby zainstalować aktualizację",
"downloadingMessage": "Pobieranie aktualizacji...",
"installingMessage": "Instalowanie aktualizacji...",
"errorDownloadMessage": "Nie udało się pobrać aktualizacji",
"errorInstallMessage": "Nie udało się zainstalować aktualizacji",
"noConnection": "Brak połączenia z internetem",
"updatesDisabled": "Aktualizowanie załatanej aplikacji jest obecnie niemożliwe. Spróbuj załatać aplikację jeszcze raz."
},
"applicationItem": {
"patchButton": "Łataj",
"infoButton": "Info",
"changelogLabel": "Lista zmian"
},
"latestCommitCard": {
"loadingLabel": "Ładowanie...",
"timeagoLabel": "{time} temu",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Zaktualizuj Menedżera"
},
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "Łataj",
"patchDialogText": "Wykryto instalację split APK, więc mogą wystąpić błędy podczas aktualizacji.\nCzy na pewno chcesz kontynuować?"
},
"appSelectorCard": {
"widgetTitle": "Wybierz aplikację",
"widgetTitleSelected": "Wybrana aplikacja",
"widgetSubtitle": "Nie wybrano aplikacji",
"noAppsLabel": "Nie znaleziono aplikacji",
"currentVersion": "Aktualna",
"recommendedVersion": "Zalecana",
"anyVersion": "dowolna"
},
"patchSelectorCard": {
"widgetTitle": "Wybierz łatki",
"widgetTitleSelected": "Wybrane łatki",
"widgetSubtitle": "Najpierw wybierz aplikację",
"widgetEmptySubtitle": "Nie wybrano żadnych łatek"
},
"socialMediaCard": {
"widgetTitle": "Media społecznościowe",
"widgetSubtitle": "Jesteśmy online!"
},
"appSelectorView": {
"viewTitle": "Wybierz aplikację",
"searchBarHint": "Wyszukaj aplikacje",
"storageButton": "Pamięć",
"errorMessage": "Nie można użyć wybranej aplikacji"
},
"patchesSelectorView": {
"viewTitle": "Wybierz łatki",
"searchBarHint": "Wyszukaj łatki",
"doneButton": "Gotowe",
"recommended": "Zalecane",
"all": "Wszystkie",
"none": "Żadne",
"loadPatchesSelection": "Załaduj wybrane łatki",
"noSavedPatches": "Brak zapisanych łatek dla wybranej aplikacji.\nNaciśnij Gotowe, aby zapisać bieżący wybór.",
"noPatchesFound": "Nie znaleziono żadnych łatek dla wybranej aplikacji",
"selectAllPatchesWarningContent": "Zamierzasz wybrać wszystkie łatki, włącznie z tymi niezalecanymi, które mogą powodować niepożądane zachowania."
},
"patchItem": {
"unsupportedDialogText": "Wybranie tej łatki może spowodować błędy podczas modyfikowania.\n\nWersja aplikacji: {packageVersion}\nAktualnie wspierana wersja:\n{supportedVersions}",
"unsupportedPatchVersion": "Łatka nie jest obsługiwana dla tej wersji aplikacji. Włącz opcje eksperymentalne w ustawieniach, aby kontynuować."
},
"installerView": {
"widgetTitle": "Instalator",
"installButton": "Zainstaluj",
"installRootButton": "Zainstaluj jako Root",
"openButton": "Otwórz",
"shareButton": "Udostępnij plik",
"notificationTitle": "ReVanced Manager patchuje",
"notificationText": "Dotknij, aby powrócić do instalatora",
"shareApkMenuOption": "Udostępnij plik APK",
"exportApkMenuOption": "Eksportuj APK",
"shareLogMenuOption": "Udostępnij logi",
"installErrorDialogTitle": "Błąd",
"installErrorDialogText1": "Instalacja za pomocą roota nie jest możliwa przy obecnym wyborze łatek.\nZałataj aplikacje ponownie lub wybierz instalacje bez roota.",
"installErrorDialogText2": "Instalacja bez roota nie jest możliwa przy obecnym wyborze łatek.\nZałataj aplikacje ponownie lub wybierz instalacje za pomocą roota, jeśli masz zrootowane urządzenie.",
"installErrorDialogText3": "Instalacja jako root nie jest możliwa, ponieważ oryginalny plik APK został wybrany z pamięci.\nWybierz zainstalowaną aplikację lub wybierz instalację bez używania roota.",
"noExit": "Instalator jest nadal uruchomiony, nie można zakończyć jego działania..."
},
"settingsView": {
"widgetTitle": "Ustawienia",
"appearanceSectionTitle": "Wygląd",
"teamSectionTitle": "Zespół",
"infoSectionTitle": "Informacje",
"advancedSectionTitle": "Zaawansowane",
"logsSectionTitle": "Logi",
"darkThemeLabel": "Tryb ciemny",
"darkThemeHint": "Witamy na ciemnej stronie mocy",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Ciesz się wrażeniami bliższymi twojemu urządzeniu",
"languageLabel": "Język",
"englishOption": "Angielski",
"sourcesLabel": "Źródła",
"sourcesLabelHint": "Skonfiguruj własne źródła",
"hostRepositoryLabel": "Repozytorium API",
"orgPatchesLabel": "Organizacja łatek",
"sourcesPatchesLabel": "Źródło łatek",
"orgIntegrationsLabel": "Organizacja integracji",
"sourcesIntegrationsLabel": "Źródło integracji",
"sourcesResetDialogTitle": "Zresetuj",
"sourcesResetDialogText": "Czy na pewno chcesz przywrócić niestandardowe źródła do wartości domyślnych?",
"apiURLResetDialogText": "Czy jesteś pewien, że chcesz przywrócić wszystkie adresy API do domyślnych wartości?",
"contributorsLabel": "Współtwórcy",
"contributorsHint": "Lista współtwórców ReVanced",
"logsLabel": "Logi",
"logsHint": "Udostępnij logi menedżera",
"apiURLLabel": "Adres API",
"apiURLHint": "Ustaw własny adres API",
"selectApiURL": "Adres API",
"experimentalUniversalPatchesLabel": "Wsparcie dla uniwersalnych eksperymentalnych łatek",
"experimentalUniversalPatchesHint": "Wyświetl wszystkie aplikacje do użycia z uniwersalnymi łatkami, ładowanie listy aplikacji może być wolniejsze",
"experimentalPatchesLabel": "Wsparcie dla eksperymentalnych łatek",
"experimentalPatchesHint": "Włącz użycie nieobsługiwanych łatek w dowolnej wersji aplikacji",
"enabledExperimentalPatches": "Włączone wsparcie dla eksperymentalnych łatek",
"exportSectionTitle": "Import i eksport",
"aboutLabel": "O Aplikacji",
"snackbarMessage": "Skopiowano do schowka",
"sentryLabel": "Zapisywanie logów",
"sentryHint": "Wysyłaj anonimowe logi, aby pomóc nam ulepszyć ReVanced Manager",
"restartAppForChanges": "Zrestartuj aplikację, aby zastosować zmiany",
"deleteKeystoreLabel": "Usuń klucz",
"deleteKeystoreHint": "Usuń klucz używany do podpisywania aplikacji",
"deletedKeystore": "Klucz usunięty",
"deleteTempDirLabel": "Usuń pliki tymczasowe",
"deleteTempDirHint": "Usuń nieużywane pliki tymczasowe",
"deletedTempDir": "Pliki tymczasowe zostały usunięte",
"exportPatchesLabel": "Eksportuj wybrane łatki",
"exportPatchesHint": "Eksportuj wybrane łatki do pliku JSON",
"exportedPatches": "Wyeksportowano wybór łatek",
"noExportFileFound": "Brak wybranych łatek do wyeksportowania",
"importPatchesLabel": "Importuj wybrane łatki",
"importPatchesHint": "Importuj wybrane łatki z pliku JSON",
"importedPatches": "Zaimportowano wybrane łatki",
"resetStoredPatchesLabel": "Resetuj łatki",
"resetStoredPatchesHint": "Zresetuj wybrane przechowywane łatki",
"resetStoredPatches": "Wybrane łatki zostały zresetowane",
"jsonSelectorErrorMessage": "Nie można użyć wybranego pliku JSON",
"deleteLogsLabel": "Usuń logi",
"deleteLogsHint": "Usuń logi zebrane przez menadżera",
"deletedLogs": "Logi usunięte"
},
"appInfoView": {
"widgetTitle": "Informacje o aplikacji",
"openButton": "Otwórz",
"uninstallButton": "Odinstaluj",
"patchButton": "Aktualizuj",
"unpatchButton": "Usuń aktualizację",
"unpatchDialogText": "Czy na pewno chcesz usunąć łatki z tej aplikacji?",
"rootDialogTitle": "Błąd",
"rootDialogText": "Aplikacja została zainstalowana z uprawnieniami superużytkownika, ale obecnie ReVanced Manager nie ma uprawnień.\nProszę najpierw przyznać uprawnienia superużytkownika.",
"packageNameLabel": "Nazwa pakietu",
"originalPackageNameLabel": "Oryginalna nazwa pakietu",
"installTypeLabel": "Typ instalacji",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Bez roota",
"patchedDateLabel": "Data modyfikacji",
"patchedDateHint": "{date} o godzinie {time}",
"appliedPatchesLabel": "Zastosowane łatki",
"appliedPatchesHint": "Zastosowano {quantity} łatek",
"updateNotImplemented": "Ta funkcja nie została jeszcze zaimplementowana"
},
"contributorsView": {
"widgetTitle": "Współtwórcy",
"patcherContributors": "Współtwórcy patcher'a",
"patchesContributors": "Współtwórcy łatek",
"integrationsContributors": "Współtwórcy integracji",
"cliContributors": "Współtwórcy CLI",
"managerContributors": "Współtwórcy menedżera"
}
}

196
assets/i18n/pt_BR.json Normal file
View File

@ -0,0 +1,196 @@
{
"okButton": "Aceitar",
"cancelButton": "Cancelar",
"enabledLabel": "Ativado",
"disabledLabel": "Desativado",
"yesButton": "Sim",
"noButton": "Não",
"warning": "Atenção",
"navigationView": {
"dashboardTab": "Painel",
"patcherTab": "Patcher",
"settingsTab": "Configurações"
},
"homeView": {
"widgetTitle": "Painel",
"updatesSubtitle": "Atualizações",
"patchedSubtitle": "Aplicativos modificados",
"updatesAvailable": "Atualizações disponíveis",
"noUpdates": "Nenhuma atualização disponível",
"WIP": "Em desenvolvimento...",
"noInstallations": "Nenhum aplicativo modificado instalado",
"installed": "Instalado",
"updateDialogTitle": "Atualizar o Manager",
"updateDialogText": "Tem certeza que deseja baixar e atualizar o ReVanced Manager?",
"notificationTitle": "Atualização baixada",
"notificationText": "Toque para instalar a atualização",
"downloadingMessage": "Baixando atualização...",
"installingMessage": "Instalando atualização...",
"errorDownloadMessage": "Não foi possível baixar a atualização",
"errorInstallMessage": "Não foi possível instalar a atualização",
"noConnection": "Sem conexão com a internet",
"updatesDisabled": "A opção de atualização de um aplicativo modificado está temporariamente desabilitada. Refaça o \"patch\" do aplicativo e tente novamente."
},
"applicationItem": {
"patchButton": "Patch",
"infoButton": "Info",
"changelogLabel": "Registro de alterações"
},
"latestCommitCard": {
"loadingLabel": "Carregando...",
"timeagoLabel": "há {time}",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Atualizar Manager"
},
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "Patch",
"patchDialogText": "Você selecionou um recurso de patch e uma instalação dividida de APK foi detectada, então erros no patch podem ocorrer.\nVocê tem certeza que quer continuar?"
},
"appSelectorCard": {
"widgetTitle": "Selecione um app",
"widgetTitleSelected": "Aplicativo selecionado",
"widgetSubtitle": "Nenhum aplicativo selecionado",
"noAppsLabel": "Nenhum app foi encontrado",
"currentVersion": "Atual",
"recommendedVersion": "Recomendado",
"anyVersion": "todos"
},
"patchSelectorCard": {
"widgetTitle": "Selecionar patches",
"widgetTitleSelected": "Patches selecionados",
"widgetSubtitle": "Escolha um aplicativo primeiro",
"widgetEmptySubtitle": "Nenhum patch selecionado"
},
"socialMediaCard": {
"widgetTitle": "Mídias sociais",
"widgetSubtitle": "Nós estamos online!"
},
"appSelectorView": {
"viewTitle": "Selecione um app",
"searchBarHint": "Procurar aplicativos",
"storageButton": "Armazenamento",
"errorMessage": "Não foi possível usar o app selecionado"
},
"patchesSelectorView": {
"viewTitle": "Selecionar patches",
"searchBarHint": "Buscar patches",
"doneButton": "Concluído",
"recommended": "Recomendado",
"all": "Todos",
"none": "Nenhum",
"loadPatchesSelection": "Carregar seleção de patches",
"noSavedPatches": "Sem patches salvados para o app selecionado\nAperte Feito para salvar a seleção atual",
"noPatchesFound": "Nenhum patch encontrado para o aplicativo selecionado",
"selectAllPatchesWarningContent": "Você está prestes a selecionar todos os 'patchs', isso inclui 'patchs' não-recomendados e isso pode causar comportamentos inesperados."
},
"patchItem": {
"unsupportedDialogText": "Selecionar esse patch pode resultar em erros de patcheamento.\n\nVersão do app: {packageVersion}\nVersões suportadas:\n{supportedVersions}",
"unsupportedPatchVersion": "O patch não é suportado para essa versão do app. Habilite a opção experimental nas configurações para continuar."
},
"installerView": {
"widgetTitle": "Instalador",
"installButton": "Instalar",
"installRootButton": "Instalar como root",
"openButton": "Abrir",
"shareButton": "Compartilhar arquivo",
"notificationTitle": "ReVanced manager está aplicando os patches",
"notificationText": "Toque para voltar ao instalador",
"shareApkMenuOption": "Compartilhar APK",
"exportApkMenuOption": "Exportar APK",
"shareLogMenuOption": "Compartilhar registros",
"installErrorDialogTitle": "Erro",
"installErrorDialogText1": "A instalação como superusuário não é possível com a seleção de patches atual.\nRefaça o patch do aplicativo ou escolha a instalação não-superusuário.",
"installErrorDialogText2": "A instalação sem root não é possível com a seleção de patches atual.\nRefaça os patches do aplicativo ou escolha a instalação com root se seu dispositivo for rooteado.",
"installErrorDialogText3": "A instalação com root não é possível porque o APK original foi selecionado do armazenamento.\nSelecione um aplicativo instalado ou escolha a instalação sem root.",
"noExit": "O instalador ainda está trabalhando, não é possível sair..."
},
"settingsView": {
"widgetTitle": "Configurações",
"appearanceSectionTitle": "Aparência",
"teamSectionTitle": "Time",
"infoSectionTitle": "Info",
"advancedSectionTitle": "Avançado",
"logsSectionTitle": "Registros",
"darkThemeLabel": "Modo escuro",
"darkThemeHint": "Bem-vindo ao lado negro",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Aproveite uma experiência mais próxima do tema de seu dispositivo",
"languageLabel": "Idioma",
"englishOption": "Inglês",
"sourcesLabel": "Fontes",
"sourcesLabelHint": "Configure sua URL de API customizada",
"orgPatchesLabel": "Organização de Patches",
"sourcesPatchesLabel": "Fonte dos Patches",
"orgIntegrationsLabel": "Organização das Integrações",
"sourcesIntegrationsLabel": "Fonte das Integrações",
"sourcesResetDialogTitle": "Redefinir",
"sourcesResetDialogText": "Você tem certeza que quer resetar as fontes personalizadas para o padrão?",
"apiURLResetDialogText": "Tem certeza de que deseja redefinir a URL da API para seu valor padrão?",
"contributorsLabel": "Contribuidores",
"contributorsHint": "Uma lista de contribuidores do ReVanced",
"logsLabel": "Registros",
"logsHint": "Compartilhar logs do Manager",
"apiURLLabel": "URL da API",
"apiURLHint": "Configure sua URL de API customizada",
"selectApiURL": "URL da API",
"experimentalPatchesLabel": "Suporte de Patches Experimentais",
"experimentalPatchesHint": "Habilitar o uso de patches não suportados em qualquer versão do app",
"enabledExperimentalPatches": "Suporte a patches experimentais ativado",
"exportSectionTitle": "Importar & Exportar",
"aboutLabel": "Sobre",
"snackbarMessage": "Copiado para a área de transferência",
"sentryLabel": "Registro do sentinela de erros",
"sentryHint": "Envie registros anônimos para nos ajudar a melhorar o ReVanced Manager",
"restartAppForChanges": "Reinicie o app para aplicar as mudanças",
"deleteKeystoreLabel": "Apagar registro de chaves",
"deleteKeystoreHint": "Apagar o registro de chaves usado para assinar o app",
"deletedKeystore": "Registro de chaves apagado",
"deleteTempDirLabel": "Apagar arquivos temporários",
"deleteTempDirHint": "Apagar os arquivos temporários inutilizados",
"deletedTempDir": "Arquivos temporários apagados",
"exportPatchesLabel": "Exportar seleção de patches",
"exportPatchesHint": "Exportar a seleção de patches para um arquivo JSON",
"exportedPatches": "Seleção de patches exportadas",
"noExportFileFound": "Nenhuma seleção de patches para exportar",
"importPatchesLabel": "Importar seleção de patches",
"importPatchesHint": "Importar a seleção de patches de um arquivo JSON",
"importedPatches": "Seleção de patches importadas",
"resetStoredPatchesLabel": "Redefinir patches",
"resetStoredPatchesHint": "Redefinir a seleção de patches armazenados",
"resetStoredPatches": "A seleção de patches foi redefinida",
"jsonSelectorErrorMessage": "Não é possível usar o arquivo JSON selecionado",
"deleteLogsLabel": "Apagar registros",
"deleteLogsHint": "Apagar registros coletados pelo administrador",
"deletedLogs": "Registros apagados"
},
"appInfoView": {
"widgetTitle": "Inform. do app",
"openButton": "Abrir",
"uninstallButton": "Desisntalar",
"patchButton": "Patch",
"unpatchButton": "Remover patches",
"unpatchDialogText": "Você tem certeza que deseja remover os patches deste aplicativo?",
"rootDialogTitle": "Erro",
"rootDialogText": "O aplicativo foi instalado com permissões de superusuário, mas atualmente o ReVanced Manager não tem permissões.\nPor favor, conceda permissões de superusuário primeiro.",
"packageNameLabel": "Nome do pacote",
"originalPackageNameLabel": "Nome original do pacote",
"installTypeLabel": "Tipo de instalação",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Não-root",
"patchedDateLabel": "Data de patcheamento",
"patchedDateHint": "{date} às {time}",
"appliedPatchesLabel": "Patches aplicados",
"appliedPatchesHint": "{quantity} patches aplicados",
"updateNotImplemented": "Esta função ainda não foi implementada"
},
"contributorsView": {
"widgetTitle": "Contribuidores",
"patcherContributors": "Contribuidores do Patcher",
"patchesContributors": "Contribuidores de patches",
"integrationsContributors": "Contribuidores de integrações",
"cliContributors": "Contribuidores CLI",
"managerContributors": "Contribuidores do Manager"
}
}

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

@ -0,0 +1,200 @@
{
"okButton": "OK",
"cancelButton": "Cancelar",
"updateButton": "Atualizar",
"enabledLabel": "Ativado",
"disabledLabel": "Desativado",
"yesButton": "Sim",
"noButton": "Não",
"warning": "Aviso",
"navigationView": {
"dashboardTab": "Painel de controlo",
"patcherTab": "Patcher",
"settingsTab": "Definições"
},
"homeView": {
"widgetTitle": "Painel de controlo",
"updatesSubtitle": "Atualizações",
"patchedSubtitle": "Aplicações Modificadas",
"updatesAvailable": "Atualizações disponíveis",
"noUpdates": "Nenhuma atualização disponível",
"WIP": "Em desenvolvimento...",
"noInstallations": "Nenhuma aplicação modificada instalada",
"installed": "Instalado",
"updateDialogTitle": "Atualizar Manager",
"updateChangelogTitle": "Alterações",
"notificationTitle": "Atualização transferida",
"notificationText": "Toque para instalar a atualização",
"downloadingMessage": "A transferir a atualização...",
"installingMessage": "A instalar atualização...",
"errorDownloadMessage": "Não é possível transferir a atualização",
"errorInstallMessage": "Não foi possível instalar a atualização",
"noConnection": "Sem ligação à Internet",
"updatesDisabled": "Atualizar uma aplicação modificada está atualmente desabilitado. Volta a modificar a aplicação."
},
"applicationItem": {
"patchButton": "Modificar",
"infoButton": "Informação",
"changelogLabel": "Alterações"
},
"latestCommitCard": {
"loadingLabel": "A carregar...",
"timeagoLabel": "há {time}",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Atualizar Manager"
},
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "Modificar",
"patchDialogText": "Selecionou uma modificação de recurso e uma instalação dividida de APK foi detetada, logo podem ocorrer erros de modificação.\nTem a certeza que deseja prosseguir?"
},
"appSelectorCard": {
"widgetTitle": "Selecione uma aplicação",
"widgetTitleSelected": "Aplicação selecionada",
"widgetSubtitle": "Nenhuma aplicação selecionada",
"noAppsLabel": "Não foram encontradas aplicações",
"currentVersion": "Atual",
"recommendedVersion": "Recomendada",
"anyVersion": "qualquer"
},
"patchSelectorCard": {
"widgetTitle": "Selecionar modificações",
"widgetTitleSelected": "Modificações selecionadas",
"widgetSubtitle": "Selecione uma aplicação primeiro",
"widgetEmptySubtitle": "Nenhuma modificação selecionada"
},
"socialMediaCard": {
"widgetTitle": "Redes sociais",
"widgetSubtitle": "Estamos online!"
},
"appSelectorView": {
"viewTitle": "Selecione uma aplicação",
"searchBarHint": "Procurar aplicações",
"storageButton": "Armazenamento",
"errorMessage": "Não é possível usar a aplicação selecionada"
},
"patchesSelectorView": {
"viewTitle": "Selecionar modificações",
"searchBarHint": "Procurar modificações",
"doneButton": "Concluído",
"recommended": "Recomendadas",
"all": "Todas",
"none": "Nenhuma",
"loadPatchesSelection": "Carregar seleção de modificações",
"noSavedPatches": "Nenhuma correção salva para o aplicativo selecionado.\nPressione \"Concluir\" para salvar a seleção atual.",
"noPatchesFound": "Nenhuma modificação encontrada para a aplicação selecionada",
"selectAllPatchesWarningContent": "Está prestes a selecionar todos os patches que incluem correções não recomendadas e podem causar comportamentos indesejados."
},
"patchItem": {
"unsupportedDialogText": "Selecionar esta modificação pode resultar em erros.\n\nVersão da aplicação: {packageVersion}\nVersões suportadas:\n{supportedVersions}",
"unsupportedPatchVersion": "Modificar não é suportado para esta versão da aplicação. Ativa a opção experimental nas definições para proceder."
},
"installerView": {
"widgetTitle": "Instalador",
"installButton": "Instalar",
"installRootButton": "Instalar como Root",
"openButton": "Abrir",
"shareButton": "Partilhar ficheiro",
"notificationTitle": "O ReVanced Manager está a fazer as modificações",
"notificationText": "Toca para voltar ao instalador",
"shareApkMenuOption": "Partilhar APK",
"exportApkMenuOption": "Exportar APK",
"shareLogMenuOption": "Partilhar registo",
"installErrorDialogTitle": "Erro",
"installErrorDialogText1": "A instalação com root não é possível com a seleção de modificações atuais.\nVolta a fazer a modificação da tua aplicação ou escolhe uma instalação sem root.",
"installErrorDialogText2": "A instalação sem root não é possível com a seleção de modificações atuais.\nVolta a fazer a modificação da tua aplicação ou escolhe uma instalação com root se o teu dispositivo estiver rooted.",
"installErrorDialogText3": "Não é possível instalar com root, pois o APK original foi selecionado do armazenamento.\nSelecione uma aplicação instalada ou escolha uma instalação sem root.",
"noExit": "O instalador ainda está em execução, não é possível sair..."
},
"settingsView": {
"widgetTitle": "Definições",
"appearanceSectionTitle": "Aparência",
"teamSectionTitle": "Equipa",
"infoSectionTitle": "Informação",
"advancedSectionTitle": "Opções avançadas",
"logsSectionTitle": "Registos",
"darkThemeLabel": "Modo escuro",
"darkThemeHint": "Bem-vindo ao lado negro",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Aproveite uma experiência mais próxima do tema do seu dispositivo",
"languageLabel": "Idioma",
"englishOption": "Inglês",
"sourcesLabel": "Fontes",
"sourcesLabelHint": "Configure as suas fontes personalizadas",
"hostRepositoryLabel": "API do Repositório",
"orgPatchesLabel": "Organização de Modificações",
"sourcesPatchesLabel": "Fonte das Modificações",
"orgIntegrationsLabel": "Organização de Integrações",
"sourcesIntegrationsLabel": "Fonte das Integrações",
"sourcesResetDialogTitle": "Repor",
"sourcesResetDialogText": "Tem certeza que deseja redefinir as fontes personalizadas para os seus valores padrão?",
"apiURLResetDialogText": "Tem certeza de que deseja repor o URL da API para o seu valor padrão?",
"contributorsLabel": "Contribuidores",
"contributorsHint": "Uma lista de contribuidores do ReVanced",
"logsLabel": "Registos",
"logsHint": "Compartilhar registos do Manager",
"apiURLLabel": "URL da API",
"apiURLHint": "Configura a tua URL de API personalizada",
"selectApiURL": "URL da API",
"experimentalUniversalPatchesLabel": "Suporte experimental para modificações universais",
"experimentalUniversalPatchesHint": "Mostrar todas as aplicações a usar com as modificações universais, a lista de carregamento de apps pode ser mais lenta",
"experimentalPatchesLabel": "Suporte para modificações experimentais",
"experimentalPatchesHint": "Ativa o uso de modificações não suportadas em qualquer versão das aplicações",
"enabledExperimentalPatches": "Suporte para modificações experimentais ativo",
"exportSectionTitle": "Importar e exportar",
"aboutLabel": "Sobre",
"snackbarMessage": "Copiado para a área de transferência",
"sentryLabel": "Registo do coletor de erros",
"sentryHint": "Enviar registos anónimos para nos ajudar a melhorar o ReVanced Manager",
"restartAppForChanges": "Reinicia a aplicação para aplicar as alterações",
"deleteKeystoreLabel": "Excluir keystore",
"deleteKeystoreHint": "Excluir a keystore usada para assinar a aplicação",
"deletedKeystore": "Keystore excluída",
"deleteTempDirLabel": "Apagar arquivos temporários",
"deleteTempDirHint": "Apagar arquivos temporários não utilizados",
"deletedTempDir": "Arquivos temporários apagados",
"exportPatchesLabel": "Exportar seleção de modificações",
"exportPatchesHint": "Exporta a seleção de modificações para um arquivo JSON",
"exportedPatches": "Seleção de modificações exportada",
"noExportFileFound": "Nenhuma seleção de modificações para exportar",
"importPatchesLabel": "Importar seleção de modificações",
"importPatchesHint": "Importa a seleção de modificações de um arquivo JSON",
"importedPatches": "Seleção de modificações importada",
"resetStoredPatchesLabel": "Redefinir modificações",
"resetStoredPatchesHint": "Redefinir a seleção de modificações armazenada",
"resetStoredPatches": "A seleção de modificações foi redefinida",
"jsonSelectorErrorMessage": "Não é possível usar o arquivo JSON selecionado",
"deleteLogsLabel": "Eliminar registos",
"deleteLogsHint": "Exclui registos do manager coletados",
"deletedLogs": "Registos excluídos"
},
"appInfoView": {
"widgetTitle": "Informações da aplicação",
"openButton": "Abrir",
"uninstallButton": "Desinstalar",
"patchButton": "Modificar",
"unpatchButton": "Desalterar",
"unpatchDialogText": "Tens a certeza que queres desalterar esta app?",
"rootDialogTitle": "Erro",
"rootDialogText": "A aplicação foi instalada com permissões de superutilizador, mas atualmente o ReVanced Manager não tem permissões.\nPor favor, conceda permissões de superutilizador primeiro.",
"packageNameLabel": "Nome do pacote",
"originalPackageNameLabel": "Nome original do pacote",
"installTypeLabel": "Tipo de instalação",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Sem root",
"patchedDateLabel": "Data da Modificação",
"patchedDateHint": "{date} às {time}",
"appliedPatchesLabel": "Modificações aplicadas",
"appliedPatchesHint": "{quantity} modificação/ões aplicada/s",
"updateNotImplemented": "Este recurso ainda não foi implementado"
},
"contributorsView": {
"widgetTitle": "Contribuidores",
"patcherContributors": "Contribuidores do Modificador",
"patchesContributors": "Contribuidores das Modificações",
"integrationsContributors": "Contribuidores das Integrações",
"cliContributors": "Contribuidores do CLI",
"managerContributors": "Contribuidores do Manager"
}
}

200
assets/i18n/ro_RO.json Normal file
View File

@ -0,0 +1,200 @@
{
"okButton": "OK",
"cancelButton": "Anulează",
"updateButton": "Actualizare",
"enabledLabel": "Activat",
"disabledLabel": "Dezactivat",
"yesButton": "Da",
"noButton": "Nu",
"warning": "Avertizare",
"navigationView": {
"dashboardTab": "Panou de administrare",
"patcherTab": "Patcher",
"settingsTab": "Setări"
},
"homeView": {
"widgetTitle": "Panou de administrare",
"updatesSubtitle": "Actualizări",
"patchedSubtitle": "Aplicații Patch-uite",
"updatesAvailable": "Actualizări disponibile",
"noUpdates": "Nu există actualizări disponibile",
"WIP": "Lucru în curs...",
"noInstallations": "Nu sunt instalate aplicații patch-uite",
"installed": "Instalat",
"updateDialogTitle": "Manager Actualizări",
"updateChangelogTitle": "Istoric schimbări",
"notificationTitle": "Actualizare descărcată",
"notificationText": "Apăsați pentru a instala actualizarea",
"downloadingMessage": "Se descarcă actualizarea...",
"installingMessage": "Se instalează actualizarea...",
"errorDownloadMessage": "Nu s-a putut descărca actualizarea",
"errorInstallMessage": "Nu s-a putut instala actualizarea",
"noConnection": "Nu există conexiune la internet",
"updatesDisabled": "Actualizarea aplicației patch-uite este dezactivată la moment.\nRepatch-uiți aplicația din nou."
},
"applicationItem": {
"patchButton": "Patch",
"infoButton": "Informații",
"changelogLabel": "Istoric schimbări"
},
"latestCommitCard": {
"loadingLabel": "Se încarcă...",
"timeagoLabel": "În urmă cu {time}",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Manager Actualizări"
},
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "Patch",
"patchDialogText": "Ați selectat un patch de resurse și a fost detectată o instalare a unui split APK, astfel că anumite erori ar putea apărea în momentul efectuării patch-ului.\nSunteți sigur că doriți să continuați?"
},
"appSelectorCard": {
"widgetTitle": "Selectați o aplicație",
"widgetTitleSelected": "Aplicația selectată",
"widgetSubtitle": "Nicio aplicație selectată",
"noAppsLabel": "Nu s-au găsit aplicații",
"currentVersion": "Actual",
"recommendedVersion": "Recomandat",
"anyVersion": "oricare"
},
"patchSelectorCard": {
"widgetTitle": "Selectați patch-urile",
"widgetTitleSelected": "Patch-uri selectate",
"widgetSubtitle": "Selectați mai întâi o aplicație",
"widgetEmptySubtitle": "Nici un patch selectat"
},
"socialMediaCard": {
"widgetTitle": "Rețele de socializare",
"widgetSubtitle": "Suntem online!"
},
"appSelectorView": {
"viewTitle": "Selectați o aplicație",
"searchBarHint": "Căutați aplicații",
"storageButton": "Stocare",
"errorMessage": "Aplicația selectată nu poate fi utilizată"
},
"patchesSelectorView": {
"viewTitle": "Selectați patch-urile",
"searchBarHint": "Căutați patch-uri",
"doneButton": "Finalizat",
"recommended": "Recomandat",
"all": "Toate",
"none": "Niciunul",
"loadPatchesSelection": "Încărcați selecția de patch-uri",
"noSavedPatches": "Nu există patch-uri salvate pentru aplicația selectată.\nApăsați Terminat pentru a salva selecția curentă.",
"noPatchesFound": "Nu s-au găsit patch-uri pentru aplicația selectată",
"selectAllPatchesWarningContent": "Urmează să selectați toate patch-urile, acestea incluzând patch-uri nerecomandate care pot cauza funcționarea necorespunzătoare a aplicației."
},
"patchItem": {
"unsupportedDialogText": "Selectarea acestui patch poate rezulta în erori de patch-uire.\n\nVersiunea aplicației: {packageVersion}\nVersiuni compatibile:\n{supportedVersions}",
"unsupportedPatchVersion": "Patch-ul nu este compatibil cu această versiune a aplicației. Activați comutatorul experimental din setări pentru a continua."
},
"installerView": {
"widgetTitle": "Instalator",
"installButton": "Instalează",
"installRootButton": "Instalează ca Root",
"openButton": "Deschide",
"shareButton": "Distribuie fișierul",
"notificationTitle": "ReVanced Manager efectuează patch-uirea",
"notificationText": "Apăsați pentru a reveni la instalator",
"shareApkMenuOption": "Distribuie APK-ul",
"exportApkMenuOption": "Exportă APK-ul",
"shareLogMenuOption": "Distribuie log-ul",
"installErrorDialogTitle": "Eroare",
"installErrorDialogText1": "Instalarea root nu este posibilă cu selecția curentă de patch-uri.\nReluați procesul de aplicare a patch-urilor sau selectați instalarea non-root.",
"installErrorDialogText2": "Instalarea non-root nu este posibilă cu selecția curentă de patch-uri.\nReluați procesul de aplicare a patch-urilor sau selectați instalarea root, dacă aveți dispozitivul rootat.",
"installErrorDialogText3": "Instalarea root nu este posibilă, deoarece fișierul APK original a fost selectat din stocarea internă.\nSelectați o aplicație deja instalată pe dispozitiv sau alegeți instalarea non-root.",
"noExit": "Instalarea este încă în funcțiune, nu se poate ieși..."
},
"settingsView": {
"widgetTitle": "Setări",
"appearanceSectionTitle": "Aspect",
"teamSectionTitle": "Echipă",
"infoSectionTitle": "Informații",
"advancedSectionTitle": "Setări avansate",
"logsSectionTitle": "Log-uri",
"darkThemeLabel": "Mod întunecat",
"darkThemeHint": "Bun venit în partea întunecată",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Bucură-te de o experiență mai apropiată de dispozitivul tău",
"languageLabel": "Limbă",
"englishOption": "Engleză",
"sourcesLabel": "Surse",
"sourcesLabelHint": "Configurați-vă sursele personalizate",
"hostRepositoryLabel": "Repository API",
"orgPatchesLabel": "Organizarea patch-urilor",
"sourcesPatchesLabel": "Sursă patch-uri",
"orgIntegrationsLabel": "Organizare integrări",
"sourcesIntegrationsLabel": "Sursă integrări",
"sourcesResetDialogTitle": "Resetează",
"sourcesResetDialogText": "Ești sigur că dorești să resetezi sursele personalizate la valorile lor implicite?",
"apiURLResetDialogText": "Ești sigur că dorești să resetezi API URL la valorile sale inițiale?",
"contributorsLabel": "Contribuitori",
"contributorsHint": "O listă cu contribuitorii ReVanced",
"logsLabel": "Log-uri",
"logsHint": "Partajează jurnalele managerului",
"apiURLLabel": "API URL",
"apiURLHint": "Configurați-vă API URL-ul personalizat",
"selectApiURL": "API URL",
"experimentalUniversalPatchesLabel": "Suport pentru patch-uri experimentale universale",
"experimentalUniversalPatchesHint": "Afișează toate aplicațiile de utilizat cu patch-uri universale, lista de aplicații poate fi mai lentă",
"experimentalPatchesLabel": "Suport pentru patch-uri experimentale",
"experimentalPatchesHint": "Activați utilizarea de patch-uri nesuportate în orice versiune a aplicației",
"enabledExperimentalPatches": "Suport pentru patch-uri experimentale",
"exportSectionTitle": "Importă & exportă",
"aboutLabel": "Despre",
"snackbarMessage": "Copiat în clipboard",
"sentryLabel": "Logging de Santinelă",
"sentryHint": "Trimite log-uri anonime pentru a ne ajuta să îmbunătățim ReVanced Manager",
"restartAppForChanges": "Reporniți aplicația pentru a aplica modificările",
"deleteKeystoreLabel": "Ștergeți keystore-ul",
"deleteKeystoreHint": "Ștergeți keystore-ul utilizat pentru a însemna aplicația",
"deletedKeystore": "Keystore șters",
"deleteTempDirLabel": "Ștergeți fișierele temporare",
"deleteTempDirHint": "Șterge fișierele temporare neutilizate",
"deletedTempDir": "Fișierele temporare au fost șterse",
"exportPatchesLabel": "Exportă selecția patch-urilor",
"exportPatchesHint": "Exportă selecția patch-urilor într-un fișier JSON",
"exportedPatches": "Selecția patch-urilor a fost exportată",
"noExportFileFound": "Nicio selecție a patch-urilor de exportat",
"importPatchesLabel": "Importă selecția patch-urilor",
"importPatchesHint": "Importă selecția patch-urilor dintr-un fișier JSON",
"importedPatches": "Selecția patch-urilor a fost importată",
"resetStoredPatchesLabel": "Resetați patch-uri",
"resetStoredPatchesHint": "Resetează selecția de patch-uri salvată",
"resetStoredPatches": "Selecția de patch-uri a fost resetată",
"jsonSelectorErrorMessage": "Imposibil de folosit fișierul JSON selectat",
"deleteLogsLabel": "Ștergeți log-urile",
"deleteLogsHint": "Ștergeți log-urile de manager colectate",
"deletedLogs": "Log-urile au fost șterse"
},
"appInfoView": {
"widgetTitle": "Informații despre aplicație",
"openButton": "Deschide",
"uninstallButton": "Dezinstalează",
"patchButton": "Patch",
"unpatchButton": "Unpatch",
"unpatchDialogText": "Sunteți sigur că vreți să unpatch-uiți această aplicație?",
"rootDialogTitle": "Eroare",
"rootDialogText": "Aplicația a fost instalată cu permisiuni de superuser, dar momentan ReVanced Manager nu are permisiuni.\nVă rugăm să acordați mai întâi permisiuni superuser.",
"packageNameLabel": "Numele pachetului",
"originalPackageNameLabel": "Numele original al pachetului",
"installTypeLabel": "Tipul instalării",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Non-root",
"patchedDateLabel": "Data patch-uirii",
"patchedDateHint": "{date} la {time}",
"appliedPatchesLabel": "Patch-uri aplicate",
"appliedPatchesHint": "{quantity} patch-uri aplicate",
"updateNotImplemented": "Această funcție nu a fost încă implementată"
},
"contributorsView": {
"widgetTitle": "Contribuitori",
"patcherContributors": "Contribuitori ai patcher-ului",
"patchesContributors": "Contribuitori ai patch-urilor",
"integrationsContributors": "Contribuitori ai integrărilor",
"cliContributors": "Contribuitori ai CLI",
"managerContributors": "Contribuitori ai manager-ului"
}
}

200
assets/i18n/ru_RU.json Normal file
View File

@ -0,0 +1,200 @@
{
"okButton": "ОК",
"cancelButton": "Отмена",
"updateButton": "Обновить",
"enabledLabel": "Включено",
"disabledLabel": "Выключено",
"yesButton": "Да",
"noButton": "Нет",
"warning": "Внимание",
"navigationView": {
"dashboardTab": "Главная",
"patcherTab": "Патчер",
"settingsTab": "Настройки"
},
"homeView": {
"widgetTitle": "Главная",
"updatesSubtitle": "Обновления",
"patchedSubtitle": "Пропатченные приложения",
"updatesAvailable": "Доступны обновления",
"noUpdates": "Нет доступных обновлений",
"WIP": "В разработке...",
"noInstallations": "Не установлено пропатченных приложений",
"installed": "Установлено",
"updateDialogTitle": "Обновить Manager",
"updateChangelogTitle": "Список изменений",
"notificationTitle": "Обновление загружено",
"notificationText": "Нажмите, чтобы установить обновление",
"downloadingMessage": "Скачивается обновление...",
"installingMessage": "Устанавливается обновление...",
"errorDownloadMessage": "Не удалось загрузить обновление",
"errorInstallMessage": "Не удалось установить обновление",
"noConnection": "Нет подключения к интернету",
"updatesDisabled": "Обновление пропатченных приложений в настоящее время отключено. Пожалуйста, пропатчьте приложение заново."
},
"applicationItem": {
"patchButton": "Пропатчить",
"infoButton": "Инфо",
"changelogLabel": "Список изменений"
},
"latestCommitCard": {
"loadingLabel": "Загрузка...",
"timeagoLabel": "{time} назад",
"patcherLabel": "Патчер: ",
"managerLabel": "Manager: ",
"updateButton": "Обновить Manager"
},
"patcherView": {
"widgetTitle": "Патчер",
"patchButton": "Пропатчить",
"patchDialogText": "Вы выбрали патч ресурсов, и была обнаружена установка разделённого APK, поэтому могут возникнуть ошибки.\nВы уверены, что хотите продолжить?"
},
"appSelectorCard": {
"widgetTitle": "Выберите приложение",
"widgetTitleSelected": "Выбранное приложение",
"widgetSubtitle": "Не выбрано приложение",
"noAppsLabel": "Приложения не найдены",
"currentVersion": "Текущая",
"recommendedVersion": "Рекомендуемая",
"anyVersion": "любая"
},
"patchSelectorCard": {
"widgetTitle": "Выберите патчи",
"widgetTitleSelected": "Выбранные патчи",
"widgetSubtitle": "Сначала выберите приложение",
"widgetEmptySubtitle": "Не выбраны патчи"
},
"socialMediaCard": {
"widgetTitle": "Соцсети",
"widgetSubtitle": "Мы онлайн!"
},
"appSelectorView": {
"viewTitle": "Выберите приложение",
"searchBarHint": "Искать приложения",
"storageButton": "Хранилище",
"errorMessage": "Невозможно использовать выбранное приложение"
},
"patchesSelectorView": {
"viewTitle": "Выберите патчи",
"searchBarHint": "Искать патчи",
"doneButton": "Готово",
"recommended": "Рекомендуется",
"all": "Все",
"none": "Никакие",
"loadPatchesSelection": "Загрузить выбор патчей",
"noSavedPatches": "Нет сохранённых патчей для выбранного приложения.\nНажмите «Готово» для сохранения текущего выбора.",
"noPatchesFound": "Для выбранного приложения не найдены патчи",
"selectAllPatchesWarningContent": "Вы собираетесь выбрать все патчи, в том числе и нерекомендуемые патчи, которые могут вызвать нежелательное поведение."
},
"patchItem": {
"unsupportedDialogText": "Выбор этого патча может привести к ошибкам во время патча.\n\nВерсия приложения: {packageVersion}\nПоддерживаемые версии:\n{supportedVersions}",
"unsupportedPatchVersion": "Патч не поддерживается для этой версии приложения. Чтобы продолжить, включите опцию экспериментальной поддержки в настройках."
},
"installerView": {
"widgetTitle": "Установщик",
"installButton": "Установить",
"installRootButton": "Установить как Root",
"openButton": "Открыть",
"shareButton": "Поделиться файлом",
"notificationTitle": "ReVanced Manager патчит",
"notificationText": "Нажмите, чтобы вернуться к установщику",
"shareApkMenuOption": "Поделиться APK",
"exportApkMenuOption": "Экспорт APK",
"shareLogMenuOption": "Отправить лог",
"installErrorDialogTitle": "Ошибка",
"installErrorDialogText1": "Root-установка невозможна с выбранными патчами.\nПерепатчите приложение или выберите non-root установку.",
"installErrorDialogText2": "Non-root установка невозможна с выбранными патчами.\nПерепатчите приложение, или выберите root-установку, если на вашем устройстве есть root.",
"installErrorDialogText3": "Root-установка невозможна, так как оригинальный APK был выбран из хранилища.\nВыберите установленное приложение, или выберите non-root установку.",
"noExit": "Установщик все еще запущен, выход невозможен..."
},
"settingsView": {
"widgetTitle": "Настройки",
"appearanceSectionTitle": "Оформление",
"teamSectionTitle": "Команда",
"infoSectionTitle": "Инфо",
"advancedSectionTitle": "Дополнительные",
"logsSectionTitle": "Логи",
"darkThemeLabel": "Тёмный режим",
"darkThemeHint": "Добро пожаловать на тёмную сторону",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Наслаждайтесь темой вашего устройства",
"languageLabel": "Язык",
"englishOption": "Английский",
"sourcesLabel": "Источники",
"sourcesLabelHint": "Настройте свои источники",
"hostRepositoryLabel": "API репозитория",
"orgPatchesLabel": "Организация патчей",
"sourcesPatchesLabel": "Репозиторий патчей",
"orgIntegrationsLabel": "Организация интеграций",
"sourcesIntegrationsLabel": "Репозиторий интеграций",
"sourcesResetDialogTitle": "Сброс",
"sourcesResetDialogText": "Вы уверены, что хотите сбросить пользовательские источники к значениям по умолчанию?",
"apiURLResetDialogText": "Вы уверены, что хотите сбросить API-ссылку к значению по умолчанию?",
"contributorsLabel": "Участники проекта",
"contributorsHint": "Список соучастников ReVanced",
"logsLabel": "Логи",
"logsHint": "Поделиться логами Manager-а",
"apiURLLabel": "API-ссылка",
"apiURLHint": "Настройте свою API-ссылку",
"selectApiURL": "API-ссылка",
"experimentalUniversalPatchesLabel": "Экспериментальная поддержка универсальных патчей",
"experimentalUniversalPatchesHint": "Отображать все приложения, поддерживающие универсальные патчи; загрузка списка приложений может быть медленнее",
"experimentalPatchesLabel": "Экспериментальная поддержка патчей",
"experimentalPatchesHint": "Разрешить использование несовместимых патчей в любой версии приложения",
"enabledExperimentalPatches": "Экспериментальная поддержка патчей включена",
"exportSectionTitle": "Импорт и экспорт",
"aboutLabel": "Информация",
"snackbarMessage": "Скопировано в буфер обмена",
"sentryLabel": "Логирование Sentry",
"sentryHint": "Отправлять анонимные логи для улучшения ReVanced Manager-а",
"restartAppForChanges": "Перезапустите приложение для применения изменений",
"deleteKeystoreLabel": "Удалить хранилище ключей",
"deleteKeystoreHint": "Удалить хранилище ключей, использованных для подписи приложения",
"deletedKeystore": "Хранилище ключей удалено",
"deleteTempDirLabel": "Удалить временные файлы",
"deleteTempDirHint": "Удалить неиспользуемые временные файлы",
"deletedTempDir": "Временные файлы удалены",
"exportPatchesLabel": "Экспорт выбора патчей",
"exportPatchesHint": "Экспорт выбора патчей в JSON-файл",
"exportedPatches": "Выбор патчей экспортирован",
"noExportFileFound": "Нет выбора патчей для экспорта",
"importPatchesLabel": "Импорт выбора патчей",
"importPatchesHint": "Импорт выбора патчей из JSON-файла",
"importedPatches": "Выбор патчей импортирован",
"resetStoredPatchesLabel": "Сбросить патчи",
"resetStoredPatchesHint": "Сбросить выбор сохраненных патчей",
"resetStoredPatches": "Выбор патчей был сброшен",
"jsonSelectorErrorMessage": "Невозможно использовать выбранный JSON-файл",
"deleteLogsLabel": "Удалить логи",
"deleteLogsHint": "Удалить собранные Manager-ом логи",
"deletedLogs": "Логи удалены"
},
"appInfoView": {
"widgetTitle": "О приложении",
"openButton": "Открыть",
"uninstallButton": "Удалить",
"patchButton": "Пропатчить",
"unpatchButton": "Удалить патчи",
"unpatchDialogText": "Вы уверены, что хотите удалить патчи у этого приложения?",
"rootDialogTitle": "Ошибка",
"rootDialogText": "Приложение было установлено с правами суперпользователя, но сейчас ReVanced Manager не имеет прав.\nПожалуйста, сначала предоставьте права суперпользователя.",
"packageNameLabel": "Название пакета",
"originalPackageNameLabel": "Исходное название пакета",
"installTypeLabel": "Тип установки",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Non-root",
"patchedDateLabel": "Дата применения патчей",
"patchedDateHint": "{date} в {time}",
"appliedPatchesLabel": "Применённые патчи",
"appliedPatchesHint": "{quantity} применённых патчей",
"updateNotImplemented": "Эта возможность ещё не реализована"
},
"contributorsView": {
"widgetTitle": "Участники проекта",
"patcherContributors": "Соучастники патчера",
"patchesContributors": "Соучастники патчей",
"integrationsContributors": "Соучастники интеграций",
"cliContributors": "Соучастники CLI",
"managerContributors": "Соучастники Manager-а"
}
}

200
assets/i18n/sk_SK.json Normal file
View File

@ -0,0 +1,200 @@
{
"okButton": "OK",
"cancelButton": "Zrušiť",
"updateButton": "Aktualizovať",
"enabledLabel": "Zapnuté",
"disabledLabel": "Vypnuté",
"yesButton": "Áno",
"noButton": "Nie",
"warning": "Upozornenie",
"navigationView": {
"dashboardTab": "Hlavný panel",
"patcherTab": "Zaplátač",
"settingsTab": "Nastavenia"
},
"homeView": {
"widgetTitle": "Hlavný panel",
"updatesSubtitle": "Aktualizácie",
"patchedSubtitle": "Zaplátané aplikácie",
"updatesAvailable": "Dostupné aktualizácie",
"noUpdates": "Žiadne dostupné aktualizácie",
"WIP": "Rozpracované...",
"noInstallations": "Žiadne zaplátané aplikácie nie sú nainštalované",
"installed": "Nainštalované",
"updateDialogTitle": "Aktualizovať Manažéra",
"updateChangelogTitle": "Zoznam zmien",
"notificationTitle": "Aktualizácia bola stiahnutá",
"notificationText": "Klepnutím nainštalujete aktualizáciu",
"downloadingMessage": "Sťahovanie aktualizácie...",
"installingMessage": "Inštalujú sa aktualizácie...",
"errorDownloadMessage": "Nepodarilo sa stiahnuť aktualizáciu",
"errorInstallMessage": "Nepodarilo sa nainštalovať aktualizáciu",
"noConnection": "Žiadne pripojenie na internet",
"updatesDisabled": "Aktualizácia zaplátanej aplikácie je v súčasnosti zakázaná. Znovu zaplátajte aplikáciu."
},
"applicationItem": {
"patchButton": "Zaplátať",
"infoButton": "Informácie",
"changelogLabel": "Zoznam zmien"
},
"latestCommitCard": {
"loadingLabel": "Načítava sa...",
"timeagoLabel": "Pred {time}",
"patcherLabel": "Zaplátač: ",
"managerLabel": "Manažér: ",
"updateButton": "Aktualizovať Manažéra"
},
"patcherView": {
"widgetTitle": "Zaplátač",
"patchButton": "Záplata",
"patchDialogText": "Vybrali ste záplatu zdroja a bol detegovaný inštalátor rozdelený na viac súborov, takže môže dôjsť k chybám pri záplatovaní.\nNaozaj chcete pokračovať?"
},
"appSelectorCard": {
"widgetTitle": "Vyberte aplikáciu",
"widgetTitleSelected": "Vybraná aplikácia",
"widgetSubtitle": "Nie je vybraná žiadna aplikácia",
"noAppsLabel": "Nebola nájdená žiadna aplikácia",
"currentVersion": "Aktuálne",
"recommendedVersion": "Odporúčané",
"anyVersion": "akákoľvek"
},
"patchSelectorCard": {
"widgetTitle": "Vyberte záplaty",
"widgetTitleSelected": "Zvolené záplaty",
"widgetSubtitle": "Najskôr vyberte aplikáciu",
"widgetEmptySubtitle": "Nie sú vybrané žiadne záplaty"
},
"socialMediaCard": {
"widgetTitle": "Sociálne siete",
"widgetSubtitle": "Sme opäť online!"
},
"appSelectorView": {
"viewTitle": "Vyberte aplikáciu",
"searchBarHint": "Vyhľadať aplikáciu",
"storageButton": "Úložisko",
"errorMessage": "Nie je možné použiť vybranú aplikáciu"
},
"patchesSelectorView": {
"viewTitle": "Vyberte záplaty",
"searchBarHint": "Vyhľadajte záplaty",
"doneButton": "Hotovo",
"recommended": "Odporúčané",
"all": "Všetky",
"none": "Žiadne",
"loadPatchesSelection": "Načítať výber záplat",
"noSavedPatches": "Žiadne uložené záplaty pre vybranú aplikáciu\nStlačením tlačidla Hotovo uložíte aktuálny výber.",
"noPatchesFound": "Neboli nájdené žiadne záplaty pre zvolenú aplikáciu",
"selectAllPatchesWarningContent": "Týmto vyberiete všetky záplaty, aj tie ktoré nie sú odporúčané. Toto môže viesť k nežiadúcim účinkom."
},
"patchItem": {
"unsupportedDialogText": "Výber tejto záplaty môže spôsobiť chyby.\n\nVerzia aplikácie: {packageVersion}\nPodporované verzie:\n{supportedVersions}",
"unsupportedPatchVersion": "Záplata nie je pre túto verziu aplikácie podporovaná. Ak chcete pokračovať, povoľte v nastaveniach experimentálny prepínač."
},
"installerView": {
"widgetTitle": "Inštalátor",
"installButton": "Inštalovať",
"installRootButton": "Nainštalovať ako root",
"openButton": "Otvoriť",
"shareButton": "Zdieľať súbor",
"notificationTitle": "ReVanced manažér zapláta",
"notificationText": "Stlačte pre vrátenie na inštalátor",
"shareApkMenuOption": "Zdielať APK",
"exportApkMenuOption": "Exportovať APK",
"shareLogMenuOption": "Zdieľať záznamy",
"installErrorDialogTitle": "Chyba",
"installErrorDialogText1": "Root inštalácia nie je možná so súčasne vybranými záplatami. Prosím znovu zaplátajte aplikáciu, alebo skúste inštaláciu bez rootu.",
"installErrorDialogText2": "Inštalácia bez rootu nie je možná vzhľadom na vybrané záplaty. Prosím znovu zaplátajte aplikáciu, alebo vyberte root inštaláciu, ak máte túto možnosť.",
"installErrorDialogText3": "Root inštalácia nie je možná, pretože zaplátaná aplikácia bola vybraná z úložiska. Vyberte prosím inštalovanú aplikáciu, alebo použite inštaláciu bez rootu.",
"noExit": "Inštalátor je stále spustený, nedá sa ukončiť..."
},
"settingsView": {
"widgetTitle": "Nastavenia",
"appearanceSectionTitle": "Vzhľad",
"teamSectionTitle": "Tím",
"infoSectionTitle": "Informácie",
"advancedSectionTitle": "Pokročilé",
"logsSectionTitle": "Záznamy",
"darkThemeLabel": "Tmavý režim",
"darkThemeHint": "Vitaj na temnej strane",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Užite si tému bližíe prispôsobenú vášmu zariadeniu",
"languageLabel": "Jazyk",
"englishOption": "Anglicky",
"sourcesLabel": "Zdroje",
"sourcesLabelHint": "Nastavte vlastné zdroje",
"hostRepositoryLabel": "API repozitára",
"orgPatchesLabel": "Autor záplaty",
"sourcesPatchesLabel": "Zdroj záplaty",
"orgIntegrationsLabel": "Autor integrácie",
"sourcesIntegrationsLabel": "Zdroj integrácie",
"sourcesResetDialogTitle": "Resetovať",
"sourcesResetDialogText": "Ste si istý, že chcete obnoviť základné nastavenie vlastných zdrojov?",
"apiURLResetDialogText": "Ste si istý, že chcete obnoviť základné nastavenie API URL?",
"contributorsLabel": "Prispievatelia",
"contributorsHint": "Zoznam prispievateľov projektu ReVanced",
"logsLabel": "Záznamy",
"logsHint": "Zdieľať záznamy manažéra",
"apiURLLabel": "API URL",
"apiURLHint": "Nastaviť vlastnú API URL",
"selectApiURL": "API URL",
"experimentalUniversalPatchesLabel": "Experimentálna podpora univerzálnych záplat",
"experimentalUniversalPatchesHint": "Zobrazenie všetkých aplikácií na použitie s univerzálnymi záplatami, načítanie zoznamu aplikácií môže byť pomalšie",
"experimentalPatchesLabel": "Podpora experimentálnych záplat",
"experimentalPatchesHint": "Povoliť používanie nepodporovaných záplat v akejkoľvek verzii aplikácie",
"enabledExperimentalPatches": "Podpora experimentálnych záplat povolená",
"exportSectionTitle": "Import a export",
"aboutLabel": "Informácie",
"snackbarMessage": "Skopírované do schránky",
"sentryLabel": "Log Sentry",
"sentryHint": "Odoslať anonymné protokoly, ktoré nám pomôžu zlepšiť ReVanced Manager",
"restartAppForChanges": "Ak chcete použiť zmeny, reštartujte aplikáciu",
"deleteKeystoreLabel": "Odstrániť úložisko kľúčov",
"deleteKeystoreHint": "Odstrániť úložisko kľúčov použité na podpísanie aplikácie",
"deletedKeystore": "Úložisko kľúčov odstránené",
"deleteTempDirLabel": "Odstrániť dočasné súbory",
"deleteTempDirHint": "Odstrániť nepoužívané dočasné súbory",
"deletedTempDir": "Dočasné súbory odstránené",
"exportPatchesLabel": "Exportovať vybrané záplaty",
"exportPatchesHint": "Exportovať výber záplat do súboru JSON",
"exportedPatches": "Výber záplat exportovaný",
"noExportFileFound": "Žiadne záplaty na export",
"importPatchesLabel": "Načítať výber záplat",
"importPatchesHint": "Importovať výber záplat zo súboru JSON",
"importedPatches": "Výber záplat importovaný",
"resetStoredPatchesLabel": "Resetovať záplaty",
"resetStoredPatchesHint": "Resetovať výber uložených záplat",
"resetStoredPatches": "Výber záplat bol zresetovaný",
"jsonSelectorErrorMessage": "Nie je možné použiť vybraný JSON súbor",
"deleteLogsLabel": "Odstrániť záznamy",
"deleteLogsHint": "Odstrániť zozbieranané záznamy manažéra",
"deletedLogs": "Záznamy odstránené"
},
"appInfoView": {
"widgetTitle": "Informácie o aplikácii",
"openButton": "Otvoriť",
"uninstallButton": "Odinštalovať",
"patchButton": "Zaplátať",
"unpatchButton": "Odstrániť záplaty",
"unpatchDialogText": "Určite chcete odstrániť záplaty z tejto aplikácie?",
"rootDialogTitle": "Chyba",
"rootDialogText": "Aplikácia bola nainštalovaná s oprávneniami superpoužívateľa, ale v súčasnosti ReVanced Manažér nemá žiadne oprávnenia. Najskôr mu udeľte oprávnenia superužívateľa.",
"packageNameLabel": "Názov balíka",
"originalPackageNameLabel": "Pôvodný názov balíka",
"installTypeLabel": "Spôsob inštalácie",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Bez rootu",
"patchedDateLabel": "Dátum záplaty",
"patchedDateHint": "{date} o {time}",
"appliedPatchesLabel": "Použité záplaty",
"appliedPatchesHint": "{quantity} použitých záplat",
"updateNotImplemented": "Táto funkcia ešte nebola implementovaná"
},
"contributorsView": {
"widgetTitle": "Prispievatelia",
"patcherContributors": "Prispievatelia Zaplátača",
"patchesContributors": "Prispievatelia Záplat",
"integrationsContributors": "Prispievatelia integrácií",
"cliContributors": "Prispievatelia CLI",
"managerContributors": "Prispievatelia Manažéra"
}
}

196
assets/i18n/sr_CS.json Normal file
View File

@ -0,0 +1,196 @@
{
"okButton": "U redu",
"cancelButton": "Otkaži",
"enabledLabel": "Omogućeno",
"disabledLabel": "Onemogućeno",
"yesButton": "Da",
"noButton": "Ne",
"warning": "Upozorenje",
"navigationView": {
"dashboardTab": "Komandna tabla",
"patcherTab": "Patcher",
"settingsTab": "Podešavanja"
},
"homeView": {
"widgetTitle": "Komandna tabla",
"updatesSubtitle": "Ažuriranja",
"patchedSubtitle": "Pečovane aplikacije",
"updatesAvailable": "Dostupna ažuriranja",
"noUpdates": "Nema dostupnih ažuriranja",
"WIP": "Rad u toku...",
"noInstallations": "Nema instaliranih pečovanih aplikacija",
"installed": "Instalirano",
"updateDialogTitle": "Ažuriraj Manager",
"updateDialogText": "Da li ste sigurni da želite da preuzmete i ažurirate ReVanced Manager?",
"notificationTitle": "Ažuriranje je preuzeto",
"notificationText": "Dodirnite da biste instalirali ažuriranje",
"downloadingMessage": "Preuzimanje ažuriranja...",
"installingMessage": "Instaliranje ažuriranja...",
"errorDownloadMessage": "Nije moguće preuzeti ažuriranje",
"errorInstallMessage": "Nije moguće instalirati ažuriranje",
"noConnection": "Nema internet veze",
"updatesDisabled": "Ažuriranje pečovane aplikacije je trenutno onemogućeno.\nPonovo pečujte aplikaciju."
},
"applicationItem": {
"patchButton": "Pečuj",
"infoButton": "Informacije",
"changelogLabel": "Evidencija promena"
},
"latestCommitCard": {
"loadingLabel": "Učitavanje...",
"timeagoLabel": "pre {time}",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Ažuriraj Manager"
},
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "Pečuj",
"patchDialogText": "Izabrali ste resursni peč i otkrivena je podeljena APK instalacija, tako da može doći do grešaka prilikom pečovanja.\nDa li ste sigurni da želite da nastavite?"
},
"appSelectorCard": {
"widgetTitle": "Izaberite aplikaciju",
"widgetTitleSelected": "Izabrana aplikacija",
"widgetSubtitle": "Nijedna aplikacija nije izabrana",
"noAppsLabel": "Nijedna aplikacija nije pronađena",
"currentVersion": "Trenutna",
"recommendedVersion": "Preporučena",
"anyVersion": "bilo koja"
},
"patchSelectorCard": {
"widgetTitle": "Izaberite pečeve",
"widgetTitleSelected": "Izabrani pečevi",
"widgetSubtitle": "Prvo izaberite aplikaciju",
"widgetEmptySubtitle": "Nema izabranih pečeva"
},
"socialMediaCard": {
"widgetTitle": "Društvene mreže",
"widgetSubtitle": "Na mreži smo!"
},
"appSelectorView": {
"viewTitle": "Izaberite aplikaciju",
"searchBarHint": "Pretražite aplikacije",
"storageButton": "Skladište",
"errorMessage": "Nije moguće koristiti izabranu aplikaciju"
},
"patchesSelectorView": {
"viewTitle": "Izaberite pečeve",
"searchBarHint": "Pretražite pečeve",
"doneButton": "Gotovo",
"recommended": "Preporučeno",
"all": "Sve",
"none": "Nijedan",
"loadPatchesSelection": "Učitajte izbor pečeva",
"noSavedPatches": "Nema sačuvanih pečeva za izabranu aplikaciju\nPritisnite „Gotovo” da sačuvate trenutni izbor",
"noPatchesFound": "Nisu pronađeni pečevi za izabranu aplikaciju",
"selectAllPatchesWarningContent": "Upravo ćete izabrati sve pečeve, koji uključuju nepreporučene pečeve i oni mogu izazvati neželjeno ponašanje."
},
"patchItem": {
"unsupportedDialogText": "Izborom ovog peča može doći do grešaka prilikom pečovanja.\n\nVerzija aplikacije: {packageVersion}\nPodržane verzije:\n{supportedVersions}",
"unsupportedPatchVersion": "Peč nije podržan za ovu verziju aplikacije. Omogućite podršku za eksperimentalne pečeve u podešavanjima da biste nastavili."
},
"installerView": {
"widgetTitle": "Program za instalaciju",
"installButton": "Instaliraj",
"installRootButton": "Instaliraj kao Root",
"openButton": "Otvori",
"shareButton": "Deli datoteku",
"notificationTitle": "ReVanced Manager pečuje",
"notificationText": "Dodirnite da biste se vratili na program za instalaciju",
"shareApkMenuOption": "Deli APK",
"exportApkMenuOption": "Izvezi APK",
"shareLogMenuOption": "Deli evidenciju",
"installErrorDialogTitle": "Greška",
"installErrorDialogText1": "Root instalacija nije moguća sa trenutnim izborom pečeva.\nPonovo pečujte aplikaciju ili izaberite non-root instalaciju.",
"installErrorDialogText2": "Non-root instalacija nije moguća sa trenutnim izborom pečeva.\nPonovo pečujte aplikaciju ili izaberite root instalaciju ukoliko je vaš uređaj rootovan.",
"installErrorDialogText3": "Root instalacija nije moguća jer je originalna APK datoteka izabrana iz skladišta.\nIzaberite instaliranu aplikaciju ili izaberite non-root instalaciju.",
"noExit": "Program za instalaciju je još uvek otvoren, nije moguće izaći..."
},
"settingsView": {
"widgetTitle": "Podešavanja",
"appearanceSectionTitle": "Izgled",
"teamSectionTitle": "Tim",
"infoSectionTitle": "Informacije",
"advancedSectionTitle": "Napredno",
"logsSectionTitle": "Evidencije",
"darkThemeLabel": "Tamni režim",
"darkThemeHint": "Dobro došli na tamnu stranu",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Uživajte u iskustvu prilagođenom vašem uređaju",
"languageLabel": "Jezik",
"englishOption": "English",
"sourcesLabel": "Izvori",
"sourcesLabelHint": "Podesite svoje prilagođene izvore",
"orgPatchesLabel": "Organizacija za pečeve",
"sourcesPatchesLabel": "Izvor pečeva",
"orgIntegrationsLabel": "Organizacija za integracije",
"sourcesIntegrationsLabel": "Izvor integracija",
"sourcesResetDialogTitle": "Resetuj",
"sourcesResetDialogText": "Da li ste sigurni da želite da resetujete prilagođene izvore na njihove podrazumevane vrednosti?",
"apiURLResetDialogText": "Da li ste sigurni da želite da resetujete API URL na njegovu podrazumevanu vrednost?",
"contributorsLabel": "Saradnici",
"contributorsHint": "Lista saradnika ReVanced",
"logsLabel": "Evidencije",
"logsHint": "Deli Manager evidencije",
"apiURLLabel": "API URL",
"apiURLHint": "Podesite svoj prilagođeni API URL",
"selectApiURL": "API URL",
"experimentalPatchesLabel": "Podrška za eksperimentalne pečeve",
"experimentalPatchesHint": "Omogućite korišćenje nepodržanih pečeva u bilo kojoj verziji aplikacije",
"enabledExperimentalPatches": "Podrška za eksperimentalne pečeve je omogućena",
"exportSectionTitle": "Uvoz i izvoz",
"aboutLabel": "O aplikaciji",
"snackbarMessage": "Kopirano u privremenu memoriju",
"sentryLabel": "Sentry prikupljanje grešaka",
"sentryHint": "Pošaljite anonimnu evidenciju da biste nam pomogli da poboljšamo ReVanced Manager",
"restartAppForChanges": "Ponovo pokrenite aplikaciju da biste primenili promene",
"deleteKeystoreLabel": "Izbrišite skladište ključeva",
"deleteKeystoreHint": "Izbrišite skladište ključeva korišćeno za potpisivanje aplikacije",
"deletedKeystore": "Skladište ključeva je izbrisano",
"deleteTempDirLabel": "Izbrišite privremene datoteke",
"deleteTempDirHint": "Izbrišite nekorišćene privremene datoteke",
"deletedTempDir": "Privremene datoteke su izbrisane",
"exportPatchesLabel": "Izvezite izbor pečeva",
"exportPatchesHint": "Izvezite izbor pečeva u JSON datoteku",
"exportedPatches": "Izbor pečeva je izvezen",
"noExportFileFound": "Nema izbora pečeva za izvoz",
"importPatchesLabel": "Uvezite izbor pečeva",
"importPatchesHint": "Uvezite izbor pečeva iz JSON datoteke",
"importedPatches": "Izbor pečeva je uvezen",
"resetStoredPatchesLabel": "Resetujte pečeve",
"resetStoredPatchesHint": "Resetujte izbor sačuvanih pečeva",
"resetStoredPatches": "Izbor pečeva je resetovan",
"jsonSelectorErrorMessage": "Nije moguće koristiti izabranu JSON datoteku",
"deleteLogsLabel": "Izbrišite evidencije",
"deleteLogsHint": "Izbrišite prikupljene Manager evidencije",
"deletedLogs": "Evidencije su izbrisane"
},
"appInfoView": {
"widgetTitle": "Informacije o aplikaciji",
"openButton": "Otvori",
"uninstallButton": "Deinstaliraj",
"patchButton": "Pečuj",
"unpatchButton": "Ukloni peč",
"unpatchDialogText": "Da li ste sigurni da želite da uklonite peč za ovu aplikaciju?",
"rootDialogTitle": "Greška",
"rootDialogText": "Aplikacija je instalirana sa dozvolama superkorisnika, ali trenutno ReVanced Manager nema dozvole.\nPrvo dodelite dozvole superkorisnika.",
"packageNameLabel": "Naziv paketa",
"originalPackageNameLabel": "Originalni naziv paketa",
"installTypeLabel": "Tip instalacije",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Non-root",
"patchedDateLabel": "Datum pečovanja",
"patchedDateHint": "{date} u {time}",
"appliedPatchesLabel": "Primenjeni pečevi",
"appliedPatchesHint": "{quantity} primenjenih pečeva",
"updateNotImplemented": "Ova funkcija još uvek nije implementirana"
},
"contributorsView": {
"widgetTitle": "Saradnici",
"patcherContributors": "Saradnici za Patcher",
"patchesContributors": "Saradnici za pečeve",
"integrationsContributors": "Saradnici za integracije",
"cliContributors": "Saradnici za CLI",
"managerContributors": "Saradnici za Manager"
}
}

196
assets/i18n/sr_SP.json Normal file
View File

@ -0,0 +1,196 @@
{
"okButton": "У реду",
"cancelButton": "Откажи",
"enabledLabel": "Омогућено",
"disabledLabel": "Онемогућено",
"yesButton": "Да",
"noButton": "Не",
"warning": "Упозорење",
"navigationView": {
"dashboardTab": "Командна табла",
"patcherTab": "Patcher",
"settingsTab": "Подешавања"
},
"homeView": {
"widgetTitle": "Командна табла",
"updatesSubtitle": "Ажурирања",
"patchedSubtitle": "Печоване апликације",
"updatesAvailable": "Доступна ажурирања",
"noUpdates": "Нема доступних ажурирања",
"WIP": "Рад у току...",
"noInstallations": "Нема инсталираних печованих апликација",
"installed": "Инсталирано",
"updateDialogTitle": "Ажурирај Manager",
"updateDialogText": "Да ли сте сигурни да желите да преузмете и ажурирате ReVanced Manager?",
"notificationTitle": "Ажурирање је преузето",
"notificationText": "Додирните да бисте инсталирали ажурирање",
"downloadingMessage": "Преузимање ажурирања...",
"installingMessage": "Инсталирање ажурирања...",
"errorDownloadMessage": "Није могуће преузети ажурирање",
"errorInstallMessage": "Није могуће инсталирати ажурирање",
"noConnection": "Нема интернет везе",
"updatesDisabled": "Ажурирање печоване апликације је тренутно онемогућено.\nПоново печујте апликацију."
},
"applicationItem": {
"patchButton": "Печуј",
"infoButton": "Информације",
"changelogLabel": "Евиденција промена"
},
"latestCommitCard": {
"loadingLabel": "Учитавање...",
"timeagoLabel": "пре {time}",
"patcherLabel": "Patcher: ",
"managerLabel": "Manager: ",
"updateButton": "Ажурирај Manager"
},
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "Печуј",
"patchDialogText": "Изабрали сте ресурсни печ и откривена је подељена APK инсталација, тако да може доћи до грешака приликом печовања.\nДа ли сте сигурни да желите да наставите?"
},
"appSelectorCard": {
"widgetTitle": "Изаберите апликацију",
"widgetTitleSelected": "Изабрана апликација",
"widgetSubtitle": "Ниједна апликација није изабрана",
"noAppsLabel": "Ниједна апликација није пронађена",
"currentVersion": "Тренутна",
"recommendedVersion": "Препоручена",
"anyVersion": "било која"
},
"patchSelectorCard": {
"widgetTitle": "Изаберите печеве",
"widgetTitleSelected": "Изабрани печеви",
"widgetSubtitle": "Прво изаберите апликацију",
"widgetEmptySubtitle": "Нема изабраних печева"
},
"socialMediaCard": {
"widgetTitle": "Друштвене мреже",
"widgetSubtitle": "На мрежи смо!"
},
"appSelectorView": {
"viewTitle": "Изаберите апликацију",
"searchBarHint": "Претражите апликације",
"storageButton": "Складиште",
"errorMessage": "Није могуће користити изабрану апликацију"
},
"patchesSelectorView": {
"viewTitle": "Изаберите печеве",
"searchBarHint": "Претражите печеве",
"doneButton": "Готово",
"recommended": "Препоручено",
"all": "Све",
"none": "Ниједан",
"loadPatchesSelection": "Учитајте избор печева",
"noSavedPatches": "Нема сачуваних печева за изабрану апликацију\nПритисните „Готово” да сачувате тренутни избор",
"noPatchesFound": "Нису пронађени печеви за изабрану апликацију",
"selectAllPatchesWarningContent": "Управо ћете изабрати све печеве, који укључују непрепоручене печеве и они могу изазвати нежељено понашање."
},
"patchItem": {
"unsupportedDialogText": "Избором овог печа може доћи до грешака приликом печовања.\n\nВерзија апликације: {packageVersion}\nПодржане верзије:\n{supportedVersions}",
"unsupportedPatchVersion": "Печ није подржан за ову верзију апликације. Омогућите подршку за експерименталне печеве у подешавањима да бисте наставили."
},
"installerView": {
"widgetTitle": "Програм за инсталацију",
"installButton": "Инсталирај",
"installRootButton": "Инсталирај као Root",
"openButton": "Отвори",
"shareButton": "Дели датотеку",
"notificationTitle": "ReVanced Manager печује",
"notificationText": "Додирните да бисте се вратили на програм за инсталацију",
"shareApkMenuOption": "Дели APK",
"exportApkMenuOption": "Извези APK",
"shareLogMenuOption": "Дели евиденцију",
"installErrorDialogTitle": "Грешка",
"installErrorDialogText1": "Root инсталација није могућа са тренутним избором печева.\nПоново печујте апликацију или изаберите non-root инсталацију.",
"installErrorDialogText2": "Non-root инсталација није могућа са тренутним избором печева.\nПоново печујте апликацију или изаберите root инсталацију уколико је ваш уређај рутован.",
"installErrorDialogText3": "Root инсталација није могућа јер је оригинална АРК датотека изабрана из складишта.\nИзаберите инсталирану апликацију или изаберите non-root инсталацију.",
"noExit": "Програм за инсталацију је још увек отворен, није могуће изаћи..."
},
"settingsView": {
"widgetTitle": "Подешавања",
"appearanceSectionTitle": "Изглед",
"teamSectionTitle": "Тим",
"infoSectionTitle": "Информације",
"advancedSectionTitle": "Напредно",
"logsSectionTitle": "Евиденције",
"darkThemeLabel": "Тамни режим",
"darkThemeHint": "Добро дошли на тамну страну",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Уживајте у искуству прилагођеном вашем уређају",
"languageLabel": "Језик",
"englishOption": "English",
"sourcesLabel": "Извори",
"sourcesLabelHint": "Подесите своје прилагођене изворе",
"orgPatchesLabel": "Организација за печеве",
"sourcesPatchesLabel": "Извор печева",
"orgIntegrationsLabel": "Организација за интеграције",
"sourcesIntegrationsLabel": "Извор интеграција",
"sourcesResetDialogTitle": "Ресетуј",
"sourcesResetDialogText": "Да ли сте сигурни да желите да ресетујете прилагођене изворе на њихове подразумеване вредности?",
"apiURLResetDialogText": "Да ли сте сигурни да желите да ресетујете АPI URL на његову подразумевану вредност?",
"contributorsLabel": "Сарадници",
"contributorsHint": "Листа сарадника ReVanced",
"logsLabel": "Евиденције",
"logsHint": "Дели Manager евиденције",
"apiURLLabel": "API URL",
"apiURLHint": "Подесите свој прилагођени API URL",
"selectApiURL": "API URL",
"experimentalPatchesLabel": "Подршка за експерименталне печеве",
"experimentalPatchesHint": "Омогућите коришћење неподржаних печева у било којој верзији апликације",
"enabledExperimentalPatches": "Подршка за експерименталне печеве је омогућена",
"exportSectionTitle": "Увоз и извоз",
"aboutLabel": "О апликацији",
"snackbarMessage": "Копирано у привремену меморију",
"sentryLabel": "Sentry прикупљање грешака",
"sentryHint": "Пошаљите анонимну евиденцију да бисте нам помогли да побољшамо ReVanced Manager",
"restartAppForChanges": "Поново покрените апликацију да бисте применили промене",
"deleteKeystoreLabel": "Избришите складиште кључева",
"deleteKeystoreHint": "Избришите складиште кључева коришћено за потписивање апликације",
"deletedKeystore": "Складиште кључева је избрисано",
"deleteTempDirLabel": "Избришите привремене датотеке",
"deleteTempDirHint": "Избришите некоришћене привремене датотеке",
"deletedTempDir": "Привремене датотеке су избрисане",
"exportPatchesLabel": "Извезите избор печева",
"exportPatchesHint": "Извезите избор печева у JSON датотеку",
"exportedPatches": "Избор печева је извезен",
"noExportFileFound": "Нема избора печева за извоз",
"importPatchesLabel": "Увезите избор печева",
"importPatchesHint": "Увезите избор печева из JSON датотеке",
"importedPatches": "Избор печева је увезен",
"resetStoredPatchesLabel": "Ресетујте печеве",
"resetStoredPatchesHint": "Ресетујте избор сачуваних печева",
"resetStoredPatches": "Избор печева је ресетован",
"jsonSelectorErrorMessage": "Није могуће користити изабрану JSON датотеку",
"deleteLogsLabel": "Избришите евиденције",
"deleteLogsHint": "Избришите прикупљене Manager евиденције",
"deletedLogs": "Евиденције су избрисане"
},
"appInfoView": {
"widgetTitle": "Информације о апликацији",
"openButton": "Отвори",
"uninstallButton": "Деинсталирај",
"patchButton": "Печуј",
"unpatchButton": "Уклони печ",
"unpatchDialogText": "Да ли сте сигурни да желите да уклоните печ за ову апликацију?",
"rootDialogTitle": "Грешка",
"rootDialogText": "Апликација је инсталирана са дозволама суперкорисника, али тренутно ReVanced Manager нема дозволе.\nПрво доделите дозволе суперкорисника.",
"packageNameLabel": "Назив пакета",
"originalPackageNameLabel": "Оригинални назив пакета",
"installTypeLabel": "Тип инсталације",
"rootTypeLabel": "Root",
"nonRootTypeLabel": "Non-root",
"patchedDateLabel": "Датум печовања",
"patchedDateHint": "{date} у {time}",
"appliedPatchesLabel": "Примењени печеви",
"appliedPatchesHint": "{quantity} примењених печева",
"updateNotImplemented": "Ова функција још увек није имплементирана"
},
"contributorsView": {
"widgetTitle": "Сарадници",
"patcherContributors": "Сарадници за Patcher",
"patchesContributors": "Сарадници за печеве",
"integrationsContributors": "Сарадници за интеграције",
"cliContributors": "Сарадници за CLI",
"managerContributors": "Сарадници за Manager"
}
}

View File

@ -1,298 +0,0 @@
{
"okButton": "OK",
"cancelButton": "Cancel",
"dismissButton": "Dismiss",
"quitButton": "Quit",
"updateButton": "Update",
"suggested": "Suggested: ${version}",
"yesButton": "Yes",
"noButton": "No",
"warning": "Warning",
"notice": "Notice",
"noShowAgain": "Don't show this again",
"add": "Add",
"remove": "Remove",
"showChangelogButton": "Show changelog",
"showUpdateButton": "Show update",
"navigationView": {
"dashboardTab": "Dashboard",
"patcherTab": "Patcher",
"settingsTab": "Settings"
},
"homeView": {
"refreshSuccess": "Refreshed successfully",
"widgetTitle": "Dashboard",
"updatesSubtitle": "Updates",
"lastPatchedAppSubtitle": "Last patched app",
"patchedSubtitle": "Installed apps",
"changeLaterSubtitle": "You can change this in the settings at a later time.",
"noSavedAppFound": "No app found",
"noInstallations": "No patched apps installed",
"installUpdate": "Continue to install the update?",
"updateSheetTitle": "Update ReVanced Manager",
"updateDialogTitle": "New update available",
"updatePatchesSheetTitle": "Update ReVanced Patches",
"updateChangelogTitle": "Changelog",
"updateDialogText": "A new update is available for ${file}.\n\nThe currently installed version is ${version}.",
"downloadConsentDialogTitle": "Download necessary files?",
"downloadConsentDialogText": "ReVanced Manager needs to download necessary files to work properly.",
"downloadConsentDialogText2": "This will connect you to ${url}.",
"downloadingMessage": "Downloading update...",
"downloadedMessage": "Update downloaded",
"installingMessage": "Installing update...",
"errorDownloadMessage": "Unable to download update",
"errorInstallMessage": "Unable to install update",
"noConnection": "No internet connection"
},
"applicationItem": {
"infoButton": "Info"
},
"latestCommitCard": {
"loadingLabel": "Loading...",
"timeagoLabel": "${time} ago"
},
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "Patch",
"incompatibleArchWarningDialogText": "Patching on this architecture is not yet supported and might fail. Continue anyways?",
"removedPatchesWarningDialogText": "Removed patches since the last time you patched this app:\n\n${patches}\n\n${newPatches}Continue anyways?",
"addedPatchesDialogText": "Added patches since the last time you patched this app:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Some patch options have to be set."
},
"appSelectorCard": {
"widgetTitle": "Select an app",
"widgetTitleSelected": "Selected app",
"widgetSubtitle": "No app selected",
"noAppsLabel": "No applications found",
"anyVersion": "Any version"
},
"patchSelectorCard": {
"widgetTitle": "Select patches",
"widgetTitleSelected": "Selected patches",
"widgetSubtitle": "Select an application first",
"widgetEmptySubtitle": "No patches selected"
},
"socialMediaCard": {
"widgetTitle": "Socials",
"widgetSubtitle": "We are online!"
},
"appSelectorView": {
"viewTitle": "Select an app",
"searchBarHint": "Search app",
"storageButton": "Storage",
"selectFromStorageButton": "Select from storage",
"errorMessage": "Unable to use selected application",
"downloadToast": "Download function is not available yet",
"requireSuggestedAppVersionDialogText": "The version of the app you have selected does not match the suggested version which can lead to unexpected issues. Please use the suggested version.\n\nSelected version: ${selected}\nSuggested version: ${suggested}\n\nTo continue anyway, disable \"Require suggested app version\" in the settings.",
"featureNotAvailable": "Feature not implemented",
"featureNotAvailableText": "This app is a split APK and can only be patched and installed reliably by mounting with root permissions. However, you can patch and install a full APK by selecting it from storage."
},
"patchesSelectorView": {
"viewTitle": "Select patches",
"searchBarHint": "Search patches",
"universalPatches": "Universal patches",
"newPatches": "New patches",
"patches": "Patches",
"doneButton": "Done",
"defaultChip": "Default",
"defaultTooltip": "Select all default patches",
"noneChip": "None",
"noneTooltip": "Deselect all patches",
"loadPatchesSelection": "Load patch selection",
"noSavedPatches": "No saved patch selection for the selected app.\nPress Done to save the current selection.",
"noPatchesFound": "No patches found for the selected app",
"setRequiredOption": "Some patches require options to be set:\n\n${patches}\n\nPlease set them before continuing."
},
"patchOptionsView": {
"customValue": "Custom value",
"setToNull": "Set to null",
"nullValue": "This option value is currently null",
"viewTitle": "Patch options",
"saveOptions": "Save",
"unselectPatch": "Unselect patch",
"tooltip": "More input options",
"selectFilePath": "Select file path",
"selectFolder": "Select folder",
"requiredOption": "Setting this option is required",
"unsupportedOption": "This option is not supported",
"requiredOptionNull": "The following options have to be set:\n\n${options}"
},
"patchItem": {
"unsupportedDialogText": "Selecting this patch may result in patching errors.\n\nApp version: ${packageVersion}\nSupported versions:\n${supportedVersions}",
"unsupportedPatchVersion": "Patch is not supported for this app version.",
"unsupportedRequiredOption": "This patch contains a required option that is not supported by this app",
"patchesChangeWarningDialogText": "It is recommended to use the default patch selection and options. Changing them may result in unexpected issues.\n\nYou'll need to turn on \"Allow changing patch selection\" in the settings before changing any patch selection.",
"patchesChangeWarningDialogButton": "Use default selection"
},
"installerView": {
"installType": "Select install type",
"installTypeDescription": "Select the installation type to continue with.",
"installButton": "Install",
"installRootType": "Mount",
"installNonRootType": "Regular",
"warning": "Disable auto updates for the patched app to avoid unexpected issues.",
"pressBackAgain": "Press back again to cancel",
"openButton": "Open",
"notificationTitle": "ReVanced Manager is patching",
"notificationText": "Tap to return to the installer",
"exportApkButtonTooltip": "Export patched APK",
"exportLogButtonTooltip": "Export log",
"screenshotDetected": "A screenshot has been detected. If you are trying to share the log, please share a text copy instead.\n\nCopy log to clipboard?",
"copiedToClipboard": "Copied log to clipboard",
"noExit": "Installer is still running, cannot exit..."
},
"settingsView": {
"widgetTitle": "Settings",
"appearanceSectionTitle": "Appearance",
"teamSectionTitle": "Team",
"debugSectionTitle": "Debugging",
"advancedSectionTitle": "Advanced",
"exportSectionTitle": "Import & export",
"dataSectionTitle": "Data sources",
"themeModeLabel": "App theme",
"systemThemeLabel": "System",
"lightThemeLabel": "Light",
"darkThemeLabel": "Dark",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Enjoy an experience closer to your device",
"languageLabel": "Language",
"languageUpdated": "Language updated",
"sourcesLabel": "Alternative sources",
"sourcesLabelHint": "Configure the alternative sources for ReVanced Patches",
"useAlternativeSources": "Use alternative sources",
"useAlternativeSourcesHint": "Use alternative sources for ReVanced Patches instead of the API",
"sourcesResetDialogTitle": "Reset",
"sourcesResetDialogText": "Are you sure you want to reset your sources to their default values?",
"apiURLResetDialogText": "Are you sure you want to reset your API URL to its default value?",
"sourcesUpdateNote": "Note: This will automatically download ReVanced Patches from the alternative sources.\n\nThis will connect you to the alternative source.",
"apiURLLabel": "API URL",
"apiURLHint": "Configure the API URL of ReVanced Manager",
"selectApiURL": "API URL",
"orgPatchesLabel": "Patches organization",
"sourcesPatchesLabel": "Patches source",
"contributorsLabel": "Contributors",
"contributorsHint": "A list of contributors of ReVanced",
"logsLabel": "Share logs",
"logsHint": "Share ReVanced Manager logs",
"enablePatchesSelectionLabel": "Allow changing patch selection",
"enablePatchesSelectionHint": "Do not prevent selecting or deselecting patches",
"enablePatchesSelectionWarningText": "Changing the selection of patches may cause unexpected issues.\n\nEnable anyways?",
"disablePatchesSelectionWarningText": "You are about to disable changing the selection of patches.\nThe default selection of patches will be restored.\n\nDisable anyways?",
"autoUpdatePatchesLabel": "Auto update patches",
"autoUpdatePatchesHint": "Automatically update patches to the latest version",
"showUpdateDialogLabel": "Show update dialog",
"showUpdateDialogHint": "Show a dialog when a new update is available",
"universalPatchesLabel": "Show universal patches",
"universalPatchesHint": "Display all apps and universal patches (may slow down the app list)",
"lastPatchedAppLabel": "Save patched app",
"lastPatchedAppHint": "Save the last patch to install or export later",
"versionCompatibilityCheckLabel": "Version compatibility check",
"versionCompatibilityCheckHint": "Prevent selecting patches that are not compatible with the selected app version",
"requireSuggestedAppVersionLabel": "Require suggested app version",
"requireSuggestedAppVersionHint": "Prevent selecting an app with a version that is not the suggested",
"requireSuggestedAppVersionDialogText": "Selecting an app that is not the suggested version may cause unexpected issues.\n\nDo you want to proceed anyways?",
"aboutLabel": "About",
"snackbarMessage": "Copied to clipboard",
"restartAppForChanges": "Restart the app to apply changes",
"deleteTempDirLabel": "Delete temporary files",
"deleteTempDirHint": "Delete unused temporary files",
"deletedTempDir": "Temporary files deleted",
"exportSettingsLabel": "Export settings",
"exportSettingsHint": "Export settings to a JSON file",
"exportedSettings": "Settings exported",
"importSettingsLabel": "Import settings",
"importSettingsHint": "Import settings from a JSON file",
"importedSettings": "Settings imported",
"exportPatchesLabel": "Export patch selection",
"exportPatchesHint": "Export patch selection to a JSON file",
"exportedPatches": "Patch selection exported",
"noExportFileFound": "No patch selection to export",
"importPatchesLabel": "Import patch selection",
"importPatchesHint": "Import patch selection from a JSON file",
"importedPatches": "Patch selection imported",
"resetStoredPatchesLabel": "Reset patch selection",
"resetStoredPatchesHint": "Reset the stored patch selection",
"resetStoredPatchesDialogTitle": "Reset patch selection?",
"resetStoredPatchesDialogText": "The default selection of patches will be restored.",
"resetStoredPatches": "Patch selection has been reset",
"resetStoredOptionsLabel": "Reset patch options",
"resetStoredOptionsHint": "Reset all patch options",
"resetStoredOptionsDialogTitle": "Reset patch options?",
"resetStoredOptionsDialogText": "Resetting patch options will remove all saved options.",
"resetStoredOptions": "Options have been reset",
"deleteLogsLabel": "Clear logs",
"deleteLogsHint": "Delete collected ReVanced Manager logs",
"deletedLogs": "Logs deleted",
"regenerateKeystoreLabel": "Regenerate keystore",
"regenerateKeystoreHint": "Regenerate the keystore used to sign apps",
"regenerateKeystoreDialogTitle": "Regenerate keystore?",
"regenerateKeystoreDialogText": "Patched apps signed with the old keystore will no longer be able to be updated.",
"regeneratedKeystore": "Keystore regenerated",
"exportKeystoreLabel": "Export keystore",
"exportKeystoreHint": "Export the keystore used to sign apps",
"exportedKeystore": "Keystore exported",
"noKeystoreExportFileFound": "No keystore to export",
"importKeystoreLabel": "Import keystore",
"importKeystoreHint": "Import a keystore used to sign apps",
"importedKeystore": "Keystore imported",
"selectKeystorePassword": "Keystore password",
"selectKeystorePasswordHint": "Select keystore password used to sign apps",
"jsonSelectorErrorMessage": "Unable to use selected JSON file",
"keystoreSelectorErrorMessage": "Unable to use selected keystore file"
},
"appInfoView": {
"widgetTitle": "App info",
"openButton": "Open",
"installButton": "Install",
"uninstallButton": "Uninstall",
"unmountButton": "Unmount",
"exportButton": "Export",
"deleteButton": "Delete",
"rootDialogTitle": "Error",
"lastPatchedAppDescription": "This is a backup of the app that was last patched.",
"unmountDialogText": "Are you sure you want to unmount this app?",
"uninstallDialogText": "Are you sure you want to uninstall this app?",
"rootDialogText": "App was installed with superuser permissions, but currently ReVanced Manager has no permissions.\nPlease grant superuser permissions first.",
"removeAppDialogTitle": "Delete app?",
"removeAppDialogText": "Are you sure you want to delete this backup?",
"packageNameLabel": "Package name",
"installTypeLabel": "Installation type",
"mountTypeLabel": "Mount",
"regularTypeLabel": "Regular",
"patchedDateLabel": "Patched date",
"appliedPatchesLabel": "Applied patches",
"sizeLabel": "File size",
"patchedDateHint": "${date} at ${time}",
"appliedPatchesHint": "${quantity} applied patches",
"updateNotImplemented": "This feature has not been implemented yet"
},
"contributorsView": {
"widgetTitle": "Contributors"
},
"installErrorDialog": {
"mount_version_mismatch": "Version mismatch",
"mount_no_root": "No root access",
"mount_missing_installation": "Installation not found",
"status_failure_blocked": "Installation blocked",
"install_failed_verification_failure": "Verification failed",
"status_failure_invalid": "Installation invalid",
"install_failed_version_downgrade": "Can't downgrade",
"status_failure_conflict": "Installation conflict",
"status_failure_storage": "Installation storage issue",
"status_failure_incompatible": "Installation incompatible",
"status_failure_timeout": "Installation timeout",
"status_unknown": "Installation failed",
"mount_version_mismatch_description": "The installation failed due to the installed app being a different version than the patched app.\n\nInstall the version of the app you are mounting and try again.",
"mount_no_root_description": "The installation failed due to root access not being granted.\n\nGrant root access to ReVanced Manager and try again.",
"mount_missing_installation_description": "The installation failed due to the unpatched app not being installed on this device in order to mount over it.\n\nInstall the unpatched app before mounting and try again.",
"status_failure_timeout_description": "The installation took too long to finish.\n\nWould you like to try again?",
"status_failure_storage_description": "The installation failed due to insufficient storage.\n\nFree up some space and try again.",
"status_failure_invalid_description": "The installation failed due to the patched app being invalid.\n\nUninstall the app and try again?",
"status_failure_incompatible_description": "The app is incompatible with this device.\n\nUse an APK that is supported by this device and try again.",
"status_failure_conflict_description": "The installation was prevented by an existing installation of the app.\n\nUninstall the installed app and try again?",
"status_failure_blocked_description": "The installation was blocked by ${packageName}.\n\nAdjust your security settings and try again.",
"install_failed_verification_failure_description": "The installation failed due to a verification issue.\n\nAdjust your security settings and try again.",
"install_failed_version_downgrade_description": "The installation failed due to the patched app being a lower version than the installed app.\n\nUninstall the app and try again?",
"status_unknown_description": "The installation failed due to an unknown reason. Please try again."
}
}

View File

@ -1,19 +0,0 @@
{
"navigationView": {},
"homeView": {},
"applicationItem": {},
"latestCommitCard": {},
"patcherView": {},
"appSelectorCard": {},
"patchSelectorCard": {},
"socialMediaCard": {},
"appSelectorView": {},
"patchesSelectorView": {},
"patchOptionsView": {},
"patchItem": {},
"installerView": {},
"settingsView": {},
"appInfoView": {},
"contributorsView": {},
"installErrorDialog": {}
}

View File

@ -1,19 +0,0 @@
{
"navigationView": {},
"homeView": {},
"applicationItem": {},
"latestCommitCard": {},
"patcherView": {},
"appSelectorCard": {},
"patchSelectorCard": {},
"socialMediaCard": {},
"appSelectorView": {},
"patchesSelectorView": {},
"patchOptionsView": {},
"patchItem": {},
"installerView": {},
"settingsView": {},
"appInfoView": {},
"contributorsView": {},
"installErrorDialog": {}
}

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