mirror of
https://github.com/ReVanced/revanced-manager.git
synced 2026-01-17 16:23:57 +00:00
Compare commits
375 Commits
feat/trans
...
fix/buildt
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f6194edde9 | ||
|
|
fc96137567 | ||
|
|
244674a603 | ||
|
|
47e4ed8336 | ||
|
|
486ed5967f | ||
|
|
789f9ec867 | ||
|
|
b51d1ee47a | ||
|
|
7148ee66f8 | ||
|
|
f7a4ae5791 | ||
|
|
cb2dbbee24 | ||
|
|
578dcce9b6 | ||
|
|
8c6c0f3c76 | ||
|
|
979a2dc410 | ||
|
|
baa9122a88 | ||
|
|
b70fc03bc7 | ||
|
|
81a4ebd327 | ||
|
|
5fc54eb53b | ||
|
|
88b0b8c078 | ||
|
|
7959c36e71 | ||
|
|
e9542c6cf0 | ||
|
|
0992e63c28 | ||
|
|
aebad0b0e2 | ||
|
|
c0d7cf7c2c | ||
|
|
2c1ff4d2cd | ||
|
|
7c5552f93f | ||
|
|
1c5373ff61 | ||
|
|
e629d2df0c | ||
|
|
7ca003a30d | ||
|
|
70a695017e | ||
|
|
9b2c99da05 | ||
|
|
07158ae1d1 | ||
|
|
2b380b0d7c | ||
|
|
5153e5e0cb | ||
|
|
a1f5dd3c26 | ||
|
|
2b0784865a | ||
|
|
d7c0913277 | ||
|
|
18199bb968 | ||
|
|
9d329e0f54 | ||
|
|
e9fcb4a383 | ||
|
|
68f74f1651 | ||
|
|
6264800a05 | ||
|
|
658699dd81 | ||
|
|
222089a7ec | ||
|
|
eff5c4860b | ||
|
|
d4e60acbaa | ||
|
|
1ab74acf1d | ||
|
|
28aad879ba | ||
|
|
9f44541bbd | ||
|
|
02d2153195 | ||
|
|
39e821738f | ||
|
|
7863fbb604 | ||
|
|
94ab6996ae | ||
|
|
1319a03651 | ||
|
|
f93085f782 | ||
|
|
40a4317993 | ||
|
|
8095a1f963 | ||
|
|
90c7600586 | ||
|
|
105492bfa5 | ||
|
|
ce63b799e6 | ||
|
|
2fe2d46c72 | ||
|
|
bc3888da79 | ||
|
|
52b982d81f | ||
|
|
ab48672621 | ||
|
|
0027c90ed3 | ||
|
|
b6ad686a26 | ||
|
|
f59d57499d | ||
|
|
5f65c12ec1 | ||
|
|
65e44dc5a8 | ||
|
|
e6ed4a88c9 | ||
|
|
390e3533c9 | ||
|
|
c1ff2f9924 | ||
|
|
d084925c0f | ||
|
|
3cf540f190 | ||
|
|
5514c75061 | ||
|
|
ca147cc6dc | ||
|
|
3c3e995f31 | ||
|
|
67809700c7 | ||
|
|
32c7eddb48 | ||
|
|
756e3a815f | ||
|
|
f8f915563e | ||
|
|
2733ce4915 | ||
|
|
04a78fabff | ||
|
|
94e26ba053 | ||
|
|
1704947c52 | ||
|
|
e027f8cc9c | ||
|
|
37e612febc | ||
|
|
374531237f | ||
|
|
abe5a20c4a | ||
|
|
0a29ff48ca | ||
|
|
95cffcc0a0 | ||
|
|
45ff64f26e | ||
|
|
7973b367ec | ||
|
|
641f6af6da | ||
|
|
6d142e72a6 | ||
|
|
e812f69740 | ||
|
|
df79e3d13a | ||
|
|
207b005d56 | ||
|
|
4a1695a766 | ||
|
|
737e709287 | ||
|
|
4727e8243c | ||
|
|
5e0ba77f4a | ||
|
|
a76a58d6ee | ||
|
|
4ebc33cd2a | ||
|
|
89a1a3026e | ||
|
|
16f16e859b | ||
|
|
83eb1a9fd7 | ||
|
|
9a336aa3ef | ||
|
|
d0b8cba2bf | ||
|
|
7436d99532 | ||
|
|
c982babaeb | ||
|
|
211f7d2fa2 | ||
|
|
d432ffbbe0 | ||
|
|
500cd63507 | ||
|
|
9404c3c297 | ||
|
|
f2f89aa185 | ||
|
|
d6e931a876 | ||
|
|
260964c633 | ||
|
|
87addbff55 | ||
|
|
5ff5298e0e | ||
|
|
0bb08c7afc | ||
|
|
a0e67a42e0 | ||
|
|
585d54a8a8 | ||
|
|
abdae89434 | ||
|
|
c7c4da54fb | ||
|
|
2dacfce61d | ||
|
|
f8da11e684 | ||
|
|
f384c66dd6 | ||
|
|
1a9031193c | ||
|
|
dc743021c3 | ||
|
|
a81913c2f7 | ||
|
|
494197b5dd | ||
|
|
285c55228d | ||
|
|
aedc6e9970 | ||
|
|
3ed2c87f45 | ||
|
|
d5b22258a6 | ||
|
|
e6361118a7 | ||
|
|
edf2f28eca | ||
|
|
b5abe1bbc3 | ||
|
|
8654da0dfe | ||
|
|
c48698334c | ||
|
|
f53299b2a6 | ||
|
|
8c1b8e1ee1 | ||
|
|
500e0ad9b7 | ||
|
|
0d6ee98609 | ||
|
|
231cf52f30 | ||
|
|
994cb6c4b0 | ||
|
|
7365fc241a | ||
|
|
e2f02ebf22 | ||
|
|
5150adeaff | ||
|
|
92612f9aec | ||
|
|
44b5f7b3bc | ||
|
|
46bd2f48a8 | ||
|
|
3ac2062992 | ||
|
|
95be465b39 | ||
|
|
226d9c9c23 | ||
|
|
dabf16a436 | ||
|
|
ff0bf43c7d | ||
|
|
016de8bb0d | ||
|
|
b6c02b7be1 | ||
|
|
9e7b26b1c8 | ||
|
|
05eb0d7457 | ||
|
|
4b0706f8b0 | ||
|
|
9c6f0c324b | ||
|
|
c98ca70e08 | ||
|
|
424fe25dfb | ||
|
|
666deda0b5 | ||
|
|
5e4510eed5 | ||
|
|
a9147ed0c0 | ||
|
|
bd7c4aa554 | ||
|
|
9d0f3a3605 | ||
|
|
093a4ebf49 | ||
|
|
17cc9f9e9e | ||
|
|
bd85b254e4 | ||
|
|
1460fd7be2 | ||
|
|
bc3fe3f0f2 | ||
|
|
bdc0fc89c3 | ||
|
|
aeefe644c2 | ||
|
|
48604804f9 | ||
|
|
03ccea46e2 | ||
|
|
b4bc14e4ed | ||
|
|
6dcbe271a7 | ||
|
|
3317fd5649 | ||
|
|
c9eb3ffa14 | ||
|
|
fe1e65ce9c | ||
|
|
f7426309b4 | ||
|
|
7f67a86413 | ||
|
|
a22ef4d9b8 | ||
|
|
ada99e80f9 | ||
|
|
111d8b6543 | ||
|
|
15599dbb21 | ||
|
|
24cd2dca75 | ||
|
|
c48f5b2488 | ||
|
|
06d4485032 | ||
|
|
73fdf92780 | ||
|
|
0fda344952 | ||
|
|
9c0665acb2 | ||
|
|
6bafa23bb4 | ||
|
|
8387ada245 | ||
|
|
048ba12703 | ||
|
|
1b6a77a463 | ||
|
|
ff9d021a2b | ||
|
|
6ac4819478 | ||
|
|
4b5e2e97f7 | ||
|
|
7a4b0bd7c8 | ||
|
|
205650865a | ||
|
|
39ff42db01 | ||
|
|
62f5acee1a | ||
|
|
67ecc13a28 | ||
|
|
ad10a19acd | ||
|
|
a35c62a99d | ||
|
|
8450243ddc | ||
|
|
d239efcf14 | ||
|
|
691b615b02 | ||
|
|
3f34407741 | ||
|
|
da4153039c | ||
|
|
1de59f420b | ||
|
|
464aa753f4 | ||
|
|
0cf49998e0 | ||
|
|
991a8cb5d1 | ||
|
|
ac75d1da27 | ||
|
|
5907659cc8 | ||
|
|
d8d2478d0f | ||
|
|
4ad3c3fb72 | ||
|
|
0e00b9f526 | ||
|
|
88f3701a6c | ||
|
|
a15924617e | ||
|
|
db04672d72 | ||
|
|
977345e5aa | ||
|
|
76e5731eb8 | ||
|
|
99bfd84e03 | ||
|
|
edb387e1a8 | ||
|
|
80ff6711f4 | ||
|
|
cadbb3f46d | ||
|
|
e1742fd4c0 | ||
|
|
c2c4895a29 | ||
|
|
ffe5c058e0 | ||
|
|
59ddd9f393 | ||
|
|
57ba3ad374 | ||
|
|
6fed17705b | ||
|
|
f915b544c4 | ||
|
|
11a383a13a | ||
|
|
4b178d947c | ||
|
|
f2e7661b5c | ||
|
|
e33862f436 | ||
|
|
51dc429330 | ||
|
|
5a41cc1162 | ||
|
|
28ab79d962 | ||
|
|
8f2c18585f | ||
|
|
2f533d12b9 | ||
|
|
44cec48a7f | ||
|
|
395da595a2 | ||
|
|
18ea6adb20 | ||
|
|
daeb534692 | ||
|
|
0b2ddbe0bf | ||
|
|
3c3ff64b18 | ||
|
|
43befa8713 | ||
|
|
3c820405a8 | ||
|
|
d65e830467 | ||
|
|
154b23202c | ||
|
|
91e0d48721 | ||
|
|
ae5eef0f2c | ||
|
|
382c068a03 | ||
|
|
cfaf874326 | ||
|
|
97d25b5602 | ||
|
|
cde470f867 | ||
|
|
1ad3e3423c | ||
|
|
d62f0a96fb | ||
|
|
d4ee3334e0 | ||
|
|
384fb19ddf | ||
|
|
ab04ef99c3 | ||
|
|
c812ce2011 | ||
|
|
fa8f154d65 | ||
|
|
af03eec4b5 | ||
|
|
da66b43497 | ||
|
|
e302ea9f9e | ||
|
|
6aa3b6c4b0 | ||
|
|
5cb887ebe6 | ||
|
|
4cd00c122d | ||
|
|
5744bdda80 | ||
|
|
89e373f98c | ||
|
|
ecd4b01108 | ||
|
|
08686252bb | ||
|
|
ab1dd8862d | ||
|
|
c4abf8a324 | ||
|
|
05adb78932 | ||
|
|
3ae1d3374a | ||
|
|
067f8adf4b | ||
|
|
83f6d287b3 | ||
|
|
3dde82fc18 | ||
|
|
de0af4c489 | ||
|
|
f98386dcc8 | ||
|
|
49209ca562 | ||
|
|
d68e7f71e9 | ||
|
|
fffdb314a1 | ||
|
|
ee41e315fb | ||
|
|
cd3d654318 | ||
|
|
3bd1ef3de7 | ||
|
|
ba1a152231 | ||
|
|
55573eb94f | ||
|
|
80e78f544b | ||
|
|
7572944c9e | ||
|
|
f5e9826dfb | ||
|
|
c8ac94d82d | ||
|
|
d9ff833100 | ||
|
|
7150fb4435 | ||
|
|
34c331f39b | ||
|
|
1ff76cf584 | ||
|
|
1de0e87983 | ||
|
|
93b2dd6176 | ||
|
|
f3e2435fef | ||
|
|
b42d8842d5 | ||
|
|
c052a0c0f5 | ||
|
|
34cf91d4b6 | ||
|
|
f99504d3e4 | ||
|
|
3ec1df9650 | ||
|
|
871a34df23 | ||
|
|
b65ec4560f | ||
|
|
0eaeb5d5ea | ||
|
|
060f39fb9b | ||
|
|
722dfadb3c | ||
|
|
6567be40cb | ||
|
|
9539d23c12 | ||
|
|
d0d0a17a55 | ||
|
|
d2e965f056 | ||
|
|
cda0e127d9 | ||
|
|
fea11dfef6 | ||
|
|
dcc4477e3e | ||
|
|
6eb21e1fab | ||
|
|
b8902d04d7 | ||
|
|
99efdb130f | ||
|
|
5177cd3083 | ||
|
|
ff4b9ab960 | ||
|
|
ad998ac22d | ||
|
|
881d2430c3 | ||
|
|
b07ae90c86 | ||
|
|
8e6519cfb0 | ||
|
|
bb90cc6e81 | ||
|
|
fd02e0799c | ||
|
|
f07204460c | ||
|
|
66be0f96e0 | ||
|
|
a1ca19b289 | ||
|
|
af779153d5 | ||
|
|
78966e13c4 | ||
|
|
8bdcf76832 | ||
|
|
05ecbde6c2 | ||
|
|
e558a47204 | ||
|
|
61de7568cb | ||
|
|
2e7f8457d3 | ||
|
|
332bad699d | ||
|
|
0b5ab33b3e | ||
|
|
5b4242d28b | ||
|
|
0c76ed3af0 | ||
|
|
39d698e545 | ||
|
|
18e91e7cbc | ||
|
|
14dfe07795 | ||
|
|
8e011a5d6b | ||
|
|
fc5f97e54b | ||
|
|
78728c1f2a | ||
|
|
90c95c0669 | ||
|
|
fbd1e221da | ||
|
|
c35c776ce2 | ||
|
|
f275f57c11 | ||
|
|
520b86df0a | ||
|
|
8991827ac7 | ||
|
|
0871180dcc | ||
|
|
7103bd2ec1 | ||
|
|
e5029c7d2c | ||
|
|
a512af50b5 | ||
|
|
cc59d60dfd | ||
|
|
4d894e908e | ||
|
|
77b499ef29 | ||
|
|
0142b85ede | ||
|
|
d9633906f5 | ||
|
|
3dd14fd34b | ||
|
|
0b19a9865d |
4
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
4
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@@ -1,7 +1,3 @@
|
||||
name: ⭐ Feature request
|
||||
description: Create a detailed request for a new feature.
|
||||
title: 'feat: '
|
||||
labels: ['Feature request']
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
|
||||
2
.github/workflows/build_pull_request.yml
vendored
2
.github/workflows/build_pull_request.yml
vendored
@@ -13,6 +13,8 @@ jobs:
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Cache Gradle
|
||||
uses: burrunan/gradle-cache-action@v1
|
||||
|
||||
43
.github/workflows/pull_strings.yml
vendored
43
.github/workflows/pull_strings.yml
vendored
@@ -1,43 +0,0 @@
|
||||
name: Pull strings
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: "0 0 * * 0"
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
pull:
|
||||
name: Pull strings
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
with:
|
||||
ref: dev
|
||||
clean: true
|
||||
|
||||
- name: Pull strings
|
||||
uses: crowdin/github-action@v2
|
||||
with:
|
||||
config: crowdin.yml
|
||||
upload_sources: false
|
||||
download_translations: true
|
||||
skip_ref_checkout: true
|
||||
localization_branch_name: feat/translations
|
||||
create_pull_request: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
|
||||
- name: Open pull request
|
||||
if: github.event_name == 'workflow_dispatch'
|
||||
uses: repo-sync/pull-request@v2
|
||||
with:
|
||||
source_branch: feat/translations
|
||||
destination_branch: dev
|
||||
pr_title: "chore: Sync translations"
|
||||
pr_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)"
|
||||
26
.github/workflows/push_strings.yml
vendored
26
.github/workflows/push_strings.yml
vendored
@@ -1,26 +0,0 @@
|
||||
name: Push strings
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
push:
|
||||
branches:
|
||||
- dev
|
||||
paths:
|
||||
- app/src/main/res/values/strings.xml
|
||||
|
||||
jobs:
|
||||
push:
|
||||
name: Push strings
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Push strings
|
||||
uses: crowdin/github-action@v2
|
||||
with:
|
||||
config: crowdin.yml
|
||||
upload_sources: true
|
||||
env:
|
||||
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
24
.github/workflows/release.yml
vendored
24
.github/workflows/release.yml
vendored
@@ -12,13 +12,14 @@ jobs:
|
||||
name: Release
|
||||
permissions:
|
||||
contents: write
|
||||
packages: write
|
||||
id-token: write
|
||||
attestations: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Java
|
||||
uses: actions/setup-java@v4
|
||||
@@ -27,11 +28,10 @@ jobs:
|
||||
java-version: '17'
|
||||
|
||||
- name: Cache Gradle
|
||||
uses: burrunan/gradle-cache-action@v3
|
||||
uses: burrunan/gradle-cache-action@v1
|
||||
|
||||
- name: Build
|
||||
env:
|
||||
GITHUB_ACTOR: ${{ github.actor }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
run: ./gradlew assembleRelease
|
||||
|
||||
@@ -55,26 +55,18 @@ jobs:
|
||||
run: |
|
||||
echo "${{ secrets.KEYSTORE }}" | base64 --decode > "app/keystore.jks"
|
||||
|
||||
- name: Release API
|
||||
run: npx multi-semantic-release --tag-format 'api@${version}' --ignore-packages app
|
||||
- name: Semantic Release
|
||||
uses: cycjimmy/semantic-release-action@v4
|
||||
id: semantic
|
||||
env:
|
||||
GITHUB_ACTOR: ${{ github.actor }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Release
|
||||
id: release
|
||||
run: |
|
||||
echo "NEW_TAG=$(npx multi-semantic-release --tag-format 'v${version}' --ignore-packages api | tee | grep 'Created tag ' | sed -E 's/.*Created tag ([^ ]+).*/\1/')" >> $GITHUB_OUTPUT
|
||||
env:
|
||||
GITHUB_ACTOR: ${{ github.actor }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
|
||||
KEYSTORE_ENTRY_ALIAS: ${{ secrets.KEYSTORE_ENTRY_ALIAS }}
|
||||
KEYSTORE_ENTRY_PASSWORD: ${{ secrets.KEYSTORE_ENTRY_PASSWORD }}
|
||||
|
||||
- name: Attest
|
||||
if: steps.release.outputs.NEW_TAG != ''
|
||||
if: steps.semantic.outputs.new_release_published == 'true'
|
||||
uses: actions/attest-build-provenance@v2
|
||||
with:
|
||||
subject-name: 'ReVanced Manager ${{ steps.release.outputs.NEW_TAG }}'
|
||||
subject-name: 'ReVanced Manager ${{ steps.release.outputs.new_release_git_tag }}'
|
||||
subject-path: app/build/outputs/apk/release/revanced-manager*.apk
|
||||
|
||||
@@ -8,8 +8,7 @@
|
||||
],
|
||||
"plugins": [
|
||||
[
|
||||
"@semantic-release/commit-analyzer",
|
||||
{
|
||||
"@semantic-release/commit-analyzer", {
|
||||
"releaseRules": [
|
||||
{ "type": "build", "scope": "Needs bump", "release": "patch" }
|
||||
]
|
||||
@@ -23,7 +22,7 @@
|
||||
{
|
||||
"assets": [
|
||||
"CHANGELOG.md",
|
||||
"gradle.properties"
|
||||
"gradle.properties",
|
||||
],
|
||||
"message": "chore: Release v${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
|
||||
}
|
||||
@@ -33,17 +32,17 @@
|
||||
{
|
||||
"assets": [
|
||||
{
|
||||
"path": "build/outputs/apk/release/revanced-manager*.apk?(.asc)"
|
||||
}
|
||||
"path": "app/build/outputs/apk/release/revanced-manager*.apk?(.asc)"
|
||||
},
|
||||
],
|
||||
"successComment": false
|
||||
successComment: false
|
||||
}
|
||||
],
|
||||
[
|
||||
"@saithodev/semantic-release-backmerge",
|
||||
{
|
||||
"backmergeBranches": [{"from": "main", "to": "dev"}],
|
||||
"clearWorkspace": true
|
||||
backmergeBranches: [{"from": "main", "to": "dev"}],
|
||||
clearWorkspace: true
|
||||
}
|
||||
]
|
||||
]
|
||||
@@ -1,8 +0,0 @@
|
||||
{
|
||||
"info": "This is verification file for ads.fund project",
|
||||
"project": {
|
||||
"name": "ReVanced Manager",
|
||||
"walletAddress": "0x7ab4091e00363654bf84B34151225742cd92FCE5",
|
||||
"tokenAddress": "0xadf954bc6f509b3a32fb5e97ed4ba6c000e37155"
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
{
|
||||
"branches": [
|
||||
"main",
|
||||
{
|
||||
"name": "dev",
|
||||
"prerelease": true
|
||||
}
|
||||
],
|
||||
"plugins": [
|
||||
[
|
||||
"@semantic-release/commit-analyzer",
|
||||
{
|
||||
"releaseRules": [
|
||||
{ "type": "build", "scope": "Needs bump", "release": "patch" }
|
||||
]
|
||||
}
|
||||
],
|
||||
"@semantic-release/release-notes-generator",
|
||||
"@semantic-release/changelog",
|
||||
"gradle-semantic-release-plugin",
|
||||
[
|
||||
"@semantic-release/git",
|
||||
{
|
||||
"assets": [
|
||||
"CHANGELOG.md",
|
||||
"gradle.properties"
|
||||
],
|
||||
"message": "chore: Release API v${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
|
||||
}
|
||||
],
|
||||
[
|
||||
"@saithodev/semantic-release-backmerge",
|
||||
{
|
||||
"backmergeBranches": [{"from": "main", "to": "dev"}],
|
||||
"clearWorkspace": true
|
||||
}
|
||||
]
|
||||
]
|
||||
}
|
||||
@@ -24,6 +24,14 @@ public final class app/revanced/manager/plugin/downloader/DownloadUrl : android/
|
||||
public final fun writeToParcel (Landroid/os/Parcel;I)V
|
||||
}
|
||||
|
||||
public final class app/revanced/manager/plugin/downloader/DownloadUrl$Creator : android/os/Parcelable$Creator {
|
||||
public fun <init> ()V
|
||||
public final fun createFromParcel (Landroid/os/Parcel;)Lapp/revanced/manager/plugin/downloader/DownloadUrl;
|
||||
public synthetic fun createFromParcel (Landroid/os/Parcel;)Ljava/lang/Object;
|
||||
public final fun newArray (I)[Lapp/revanced/manager/plugin/downloader/DownloadUrl;
|
||||
public synthetic fun newArray (I)[Ljava/lang/Object;
|
||||
}
|
||||
|
||||
public final class app/revanced/manager/plugin/downloader/Downloader {
|
||||
public static final field $stable I
|
||||
}
|
||||
@@ -77,6 +85,14 @@ public final class app/revanced/manager/plugin/downloader/Package : android/os/P
|
||||
public final fun writeToParcel (Landroid/os/Parcel;I)V
|
||||
}
|
||||
|
||||
public final class app/revanced/manager/plugin/downloader/Package$Creator : android/os/Parcelable$Creator {
|
||||
public fun <init> ()V
|
||||
public final fun createFromParcel (Landroid/os/Parcel;)Lapp/revanced/manager/plugin/downloader/Package;
|
||||
public synthetic fun createFromParcel (Landroid/os/Parcel;)Ljava/lang/Object;
|
||||
public final fun newArray (I)[Lapp/revanced/manager/plugin/downloader/Package;
|
||||
public synthetic fun newArray (I)[Ljava/lang/Object;
|
||||
}
|
||||
|
||||
public abstract interface annotation class app/revanced/manager/plugin/downloader/PluginHostApi : java/lang/annotation/Annotation {
|
||||
}
|
||||
|
||||
@@ -143,6 +159,14 @@ public abstract class app/revanced/manager/plugin/downloader/webview/IWebViewEve
|
||||
public fun onTransact (ILandroid/os/Parcel;Landroid/os/Parcel;I)Z
|
||||
}
|
||||
|
||||
public final class app/revanced/manager/plugin/downloader/webview/WebViewActivity$Parameters$Creator : android/os/Parcelable$Creator {
|
||||
public fun <init> ()V
|
||||
public final fun createFromParcel (Landroid/os/Parcel;)Lapp/revanced/manager/plugin/downloader/webview/WebViewActivity$Parameters;
|
||||
public synthetic fun createFromParcel (Landroid/os/Parcel;)Ljava/lang/Object;
|
||||
public final fun newArray (I)[Lapp/revanced/manager/plugin/downloader/webview/WebViewActivity$Parameters;
|
||||
public synthetic fun newArray (I)[Ljava/lang/Object;
|
||||
}
|
||||
|
||||
public abstract interface class app/revanced/manager/plugin/downloader/webview/WebViewCallbackScope : app/revanced/manager/plugin/downloader/Scope {
|
||||
public abstract fun finish (Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
public abstract fun load (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||
import java.io.IOException
|
||||
|
||||
plugins {
|
||||
alias(libs.plugins.android.library)
|
||||
@@ -19,16 +19,47 @@ dependencies {
|
||||
implementation(libs.appcompat)
|
||||
}
|
||||
|
||||
kotlin {
|
||||
jvmToolchain(17)
|
||||
compilerOptions {
|
||||
jvmTarget = JvmTarget.JVM_17
|
||||
fun String.runCommand(): String {
|
||||
val process = ProcessBuilder(split("\\s".toRegex()))
|
||||
.redirectErrorStream(true)
|
||||
.directory(rootDir)
|
||||
.start()
|
||||
|
||||
val output = StringBuilder()
|
||||
val reader = process.inputStream.bufferedReader()
|
||||
|
||||
val thread = Thread {
|
||||
reader.forEachLine {
|
||||
output.appendLine(it)
|
||||
}
|
||||
}
|
||||
thread.start()
|
||||
|
||||
if (!process.waitFor(10, TimeUnit.SECONDS)) {
|
||||
process.destroy()
|
||||
throw IOException("Command timed out: $this")
|
||||
}
|
||||
|
||||
thread.join()
|
||||
return output.toString().trim()
|
||||
}
|
||||
|
||||
val projectPath: String = projectDir.relativeTo(rootDir).path
|
||||
val lastTag = "git describe --tags --abbrev=0".runCommand()
|
||||
val hasChangesInThisModule = "git diff --name-only $lastTag..HEAD".runCommand().lineSequence().any {
|
||||
it.startsWith(projectPath)
|
||||
}
|
||||
|
||||
tasks.matching { it.name.startsWith("publish") }.configureEach {
|
||||
onlyIf {
|
||||
hasChangesInThisModule
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "app.revanced.manager.plugin.downloader"
|
||||
compileSdk = 36
|
||||
compileSdk = 35
|
||||
buildToolsVersion = "35.0.1"
|
||||
|
||||
defaultConfig {
|
||||
minSdk = 26
|
||||
@@ -51,6 +82,10 @@ android {
|
||||
targetCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
aidl = true
|
||||
}
|
||||
@@ -113,4 +148,4 @@ publishing {
|
||||
signing {
|
||||
useGpgCmd()
|
||||
sign(publishing.publications["Api"])
|
||||
}
|
||||
}
|
||||
1
api/gradlew
vendored
1
api/gradlew
vendored
@@ -1 +0,0 @@
|
||||
../gradlew
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "api",
|
||||
"private": false,
|
||||
"devDependencies": {
|
||||
"@anolilab/multi-semantic-release": "^1.1.10",
|
||||
"@saithodev/semantic-release-backmerge": "^4.0.1",
|
||||
"@semantic-release/changelog": "^6.0.3",
|
||||
"@semantic-release/git": "^10.0.1",
|
||||
"gradle-semantic-release-plugin": "^1.10.1"
|
||||
}
|
||||
}
|
||||
413
app/CHANGELOG.md
413
app/CHANGELOG.md
@@ -1,413 +0,0 @@
|
||||
# app [1.26.0-dev.20](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.19...v1.26.0-dev.20) (2026-01-09)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Save FAB freaking out in select patches screen ([4c0b6b0](https://github.com/ReVanced/revanced-manager/commit/4c0b6b02e95a8d6f655bcf5c25493b1f9a4a4dcd))
|
||||
|
||||
# app [1.26.0-dev.19](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.18...v1.26.0-dev.19) (2026-01-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **locales:** use buildconfig instead of generating kt file ([72b1db9](https://github.com/ReVanced/revanced-manager/commit/72b1db9a2f33ab5d5fffd8ba83c05901eff19bea))
|
||||
|
||||
# app [1.26.0-dev.18](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.17...v1.26.0-dev.18) (2026-01-08)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Prevent trailing comma when no locales are generated ([b16931c](https://github.com/ReVanced/revanced-manager/commit/b16931ca79d5ce4d17c75f6dd3bf6f976b8ff7be))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Add language settings ([#2913](https://github.com/ReVanced/revanced-manager/issues/2913)) ([df31b39](https://github.com/ReVanced/revanced-manager/commit/df31b39cc8c1fbf00bc3301468e8e7e4b283caf2))
|
||||
|
||||
# app [1.26.0-dev.17](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.16...v1.26.0-dev.17) (2026-01-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* allow updating patches on metered networks ([9d9a0e8](https://github.com/ReVanced/revanced-manager/commit/9d9a0e81dbc9e73e6e3181f6bea9cabb69e49ea8))
|
||||
|
||||
# app [1.26.0-dev.16](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.15...v1.26.0-dev.16) (2025-12-30)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Show patches as individual steps in patcher screen ([#2889](https://github.com/ReVanced/revanced-manager/issues/2889)) ([11dd6e4](https://github.com/ReVanced/revanced-manager/commit/11dd6e4064099427a8c9bc6f225a19412e5c70e2))
|
||||
|
||||
# app [1.26.0-dev.15](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.14...v1.26.0-dev.15) (2025-12-29)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* install dialog getting stuck ([#2900](https://github.com/ReVanced/revanced-manager/issues/2900)) ([18a4df9](https://github.com/ReVanced/revanced-manager/commit/18a4df9af9cac120fdb8e4ff7aadd2e2a8d5c1a6))
|
||||
|
||||
# app [1.26.0-dev.14](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.13...v1.26.0-dev.14) (2025-12-28)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Update selected patch count when SelectionState changes ([#2896](https://github.com/ReVanced/revanced-manager/issues/2896)) ([0d26df0](https://github.com/ReVanced/revanced-manager/commit/0d26df03f463195dae550240c7f652680763079c))
|
||||
|
||||
# app [1.26.0-dev.13](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.12...v1.26.0-dev.13) (2025-12-17)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Make patcher screen design more consistent with inspiration ([#2805](https://github.com/ReVanced/revanced-manager/issues/2805)) ([dbb6c01](https://github.com/ReVanced/revanced-manager/commit/dbb6c01e89a5e710185ff4304de0ac9e19bed053))
|
||||
|
||||
# app [1.26.0-dev.12](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.11...v1.26.0-dev.12) (2025-12-17)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Improve trust plugin dialog design ([#2420](https://github.com/ReVanced/revanced-manager/issues/2420)) ([0300da9](https://github.com/ReVanced/revanced-manager/commit/0300da9eac6c0fc29dbbb66622c0d52f4cf68934))
|
||||
|
||||
# app [1.26.0-dev.11](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.10...v1.26.0-dev.11) (2025-10-25)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Add pure black theme ([#2824](https://github.com/ReVanced/revanced-manager/issues/2824)) ([3d75ffe](https://github.com/ReVanced/revanced-manager/commit/3d75ffe6a7a39efdebe13dbd07c937c1de409ead))
|
||||
|
||||
# app [1.26.0-dev.10](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.9...v1.26.0-dev.10) (2025-10-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* prevent back presses during installation ([2ff7072](https://github.com/ReVanced/revanced-manager/commit/2ff70728b490b92f212a82dcf599bc0c23f589e7))
|
||||
|
||||
# app [1.26.0-dev.9](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.8...v1.26.0-dev.9) (2025-10-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Instantly re-fetch patch bundle on pre-release preference update ([d5671db](https://github.com/ReVanced/revanced-manager/commit/d5671db3a77541c07bbbb4c3baca02f3ba0703f2)), closes [#2784](https://github.com/ReVanced/revanced-manager/issues/2784)
|
||||
|
||||
# app [1.26.0-dev.8](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.7...v1.26.0-dev.8) (2025-10-06)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Offcenter loading indicator in AppSelector ([12d92ba](https://github.com/ReVanced/revanced-manager/commit/12d92ba8110f5d1ac78aeecfa575444b5c53f561))
|
||||
|
||||
# app [1.26.0-dev.7](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.6...v1.26.0-dev.7) (2025-10-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Improve consistency between pre-release toggles ([e1b768c](https://github.com/ReVanced/revanced-manager/commit/e1b768c4679ecae8bff8007bdab56ff6544b12b6))
|
||||
|
||||
# app [1.26.0-dev.6](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.5...v1.26.0-dev.6) (2025-10-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Broken version comparison ([c327857](https://github.com/ReVanced/revanced-manager/commit/c3278578237dcddd9e7ab79ee80a02fdeef9604d))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Open contributor's GitHub profile when clicked ([#2775](https://github.com/ReVanced/revanced-manager/issues/2775)) ([2571cb8](https://github.com/ReVanced/revanced-manager/commit/2571cb8c1108e9c1ed84950f17692c09d66e0556))
|
||||
|
||||
# app [1.26.0-dev.5](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.4...v1.26.0-dev.5) (2025-10-03)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Toggle to use pre-release versions of ReVanced Patches ([08cec67](https://github.com/ReVanced/revanced-manager/commit/08cec674bbbe5297090ac5ee6039569975fbe9e7))
|
||||
|
||||
# app [1.26.0-dev.4](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.3...v1.26.0-dev.4) (2025-10-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* add newlines to debug logs ([4753873](https://github.com/ReVanced/revanced-manager/commit/4753873866b575e2dcb160020df63f63862c8f33))
|
||||
|
||||
# app [1.26.0-dev.3](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.2...v1.26.0-dev.3) (2025-10-03)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Toggle to use pre-release versions of ReVanced Manager ([#2773](https://github.com/ReVanced/revanced-manager/issues/2773)) ([d758964](https://github.com/ReVanced/revanced-manager/commit/d7589647426b3d3438161a2f0b59bf4f154ac34b))
|
||||
|
||||
# app [1.26.0-dev.2](https://github.com/ReVanced/revanced-manager/compare/v1.26.0-dev.1...v1.26.0-dev.2) (2025-10-03)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* Migration of keystore, by fixing mislabeling of alias as cn ([#2769](https://github.com/ReVanced/revanced-manager/issues/2769)) ([aeab639](https://github.com/ReVanced/revanced-manager/commit/aeab639b2b09e8bbd2478cfbf5a518586405c0f7))
|
||||
|
||||
# app [1.26.0-dev.1](https://github.com/ReVanced/revanced-manager/compare/v1.25.1...v1.26.0-dev.1) (2025-10-02)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* `ExtendedFloatingActionButton` not accessible by screen readers ([#2080](https://github.com/ReVanced/revanced-manager/issues/2080)) ([e4f19b0](https://github.com/ReVanced/revanced-manager/commit/e4f19b0c251e818cce59e11362a29dc8f657e065))
|
||||
* add bounds checks in patch selector ([483be5d](https://github.com/ReVanced/revanced-manager/commit/483be5d722db2be2595f6f6dd0c537a6c8487daf))
|
||||
* Add missing header for "Updates" settings ([#2642](https://github.com/ReVanced/revanced-manager/issues/2642)) ([d4d2056](https://github.com/ReVanced/revanced-manager/commit/d4d2056585ccd4a0456318448dc822c0f40c9c50))
|
||||
* Allow different app version when downloading via plugin if setting is off ([#2579](https://github.com/ReVanced/revanced-manager/issues/2579)) ([59d233e](https://github.com/ReVanced/revanced-manager/commit/59d233e15c885104900c7d4129fb4839c4da81e0))
|
||||
* always use default patch selection if customization is disabled ([cc77181](https://github.com/ReVanced/revanced-manager/commit/cc771817cba3dfd8f704cb7ecc9089ad7911c6ce))
|
||||
* android icon not loading in app selector ([deea682](https://github.com/ReVanced/revanced-manager/commit/deea68265157da65ef98986d751e2551797522e0))
|
||||
* automatically focus search views ([d23d673](https://github.com/ReVanced/revanced-manager/commit/d23d673c4703cdfa3be3a292873bbb37bea30ac7))
|
||||
* available updates dialog list item color ([1a54313](https://github.com/ReVanced/revanced-manager/commit/1a54313c1dc4efbb8b274201a79e28661a7ecf64))
|
||||
* Broken header padding in `AlertDialogExtended` when using an Icon ([8d939a6](https://github.com/ReVanced/revanced-manager/commit/8d939a6669909a44382fc7404276f2eeefcf728d))
|
||||
* broken logo in about page on release builds ([ad775f3](https://github.com/ReVanced/revanced-manager/commit/ad775f3059345dd93ff2baf6d018c2beecc413df))
|
||||
* buildfile syntax ([#66](https://github.com/ReVanced/revanced-manager/issues/66)) ([5c17a78](https://github.com/ReVanced/revanced-manager/commit/5c17a78e46db586642d53362267472fbbd47ae8c))
|
||||
* bundles not loading on Android 14 ([56896d6](https://github.com/ReVanced/revanced-manager/commit/56896d6197baa836bcd4a499ea2cee487e3d07c8))
|
||||
* Change the title in the Update screen from "Updates" to "Update" ([5f23769](https://github.com/ReVanced/revanced-manager/commit/5f2376919bd036987eba8188e3a1a2ff53ef6793)), closes [#1960](https://github.com/ReVanced/revanced-manager/issues/1960)
|
||||
* cleanup advanced settings screen ([02ea5c6](https://github.com/ReVanced/revanced-manager/commit/02ea5c6d4a2e6baa7c034b614deb6e4232cf6d0b))
|
||||
* **Compose:** Adjusted universal patches safeguard and warnings ([#2550](https://github.com/ReVanced/revanced-manager/issues/2550)) ([663cf2d](https://github.com/ReVanced/revanced-manager/commit/663cf2d6b86c276c6bb236af8e05a4f69df9eba0))
|
||||
* contributors screen fix ([#1256](https://github.com/ReVanced/revanced-manager/issues/1256)) ([dc73462](https://github.com/ReVanced/revanced-manager/commit/dc73462ac41bd5f1813358eb5e2265a3e2e7c0f9))
|
||||
* contributors screen repository name ([426b289](https://github.com/ReVanced/revanced-manager/commit/426b28932fe37a6d7412685819ffc8e26b69d31c))
|
||||
* Correct preference description ([#2619](https://github.com/ReVanced/revanced-manager/issues/2619)) ([0096169](https://github.com/ReVanced/revanced-manager/commit/0096169af8f9e2db6c22b8e88f0dfe1cab1260be))
|
||||
* Correctly display universal patches warning ([#2570](https://github.com/ReVanced/revanced-manager/issues/2570)) ([24c4cd3](https://github.com/ReVanced/revanced-manager/commit/24c4cd3f991953dd00b5bf5e7c3ec965315a9528))
|
||||
* correctly patch apk files ([c5cb18a](https://github.com/ReVanced/revanced-manager/commit/c5cb18a7eab838ea096577780335a29b9771b43d))
|
||||
* crash caused by compose inlining bug ([05fe058](https://github.com/ReVanced/revanced-manager/commit/05fe0581516a373cc26dd559d3fc7f21fcf16f3f))
|
||||
* crash when removing used bundles ([189c993](https://github.com/ReVanced/revanced-manager/commit/189c993ada6406db6f8c48c4051c5bd9fac98e2b))
|
||||
* delete temporary files ([#1341](https://github.com/ReVanced/revanced-manager/issues/1341)) ([b03f7b1](https://github.com/ReVanced/revanced-manager/commit/b03f7b18a029465142d08fe1ed68e92c81586a5f))
|
||||
* disable `WebView` history ([#1278](https://github.com/ReVanced/revanced-manager/issues/1278)) ([a811df9](https://github.com/ReVanced/revanced-manager/commit/a811df9547da33fc61397cb33ba5fd35ee470ff9))
|
||||
* display version from manifest ([#2634](https://github.com/ReVanced/revanced-manager/issues/2634)) ([1fb94b7](https://github.com/ReVanced/revanced-manager/commit/1fb94b711fdbbbca7d9baaa90c53faf208fc4d0d))
|
||||
* Do not poll battery optimization status ([#2491](https://github.com/ReVanced/revanced-manager/issues/2491)) ([26778f5](https://github.com/ReVanced/revanced-manager/commit/26778f57e6dd185d9aed1086aa03659a2e91d1a9))
|
||||
* don't store app list in parcel ([e7802ed](https://github.com/ReVanced/revanced-manager/commit/e7802ed3d714cbe6e29409d27989c65d4d7ce6a5))
|
||||
* dont crash when the bundle cannot be downloaded ([4d201f1](https://github.com/ReVanced/revanced-manager/commit/4d201f17f2ce01aad6adb456a49c3f03526c5ad3))
|
||||
* **downloader:** versions not loading correctly ([16c4290](https://github.com/ReVanced/revanced-manager/commit/16c4290f05d94cbe53e68cb98307d7be1bfce7af))
|
||||
* handle edge-to-edge properly in fullscreen dialogs ([eba92e2](https://github.com/ReVanced/revanced-manager/commit/eba92e2644663b10e7e17f2cf955afefe260d769))
|
||||
* handle exceptions when checking for bundle updates ([1dd6738](https://github.com/ReVanced/revanced-manager/commit/1dd673896454710094e83789abb585c106ee6bcb))
|
||||
* Handle open source licenses page crash ([#2569](https://github.com/ReVanced/revanced-manager/issues/2569)) ([f2ea007](https://github.com/ReVanced/revanced-manager/commit/f2ea00757a76ed8758bc0d4df54843c89483c986))
|
||||
* hide patch button ([#1284](https://github.com/ReVanced/revanced-manager/issues/1284)) ([dadc546](https://github.com/ReVanced/revanced-manager/commit/dadc5462e352e91cf971395def91d693677701bc))
|
||||
* Ignore long click when already in delete mode ([6f6296b](https://github.com/ReVanced/revanced-manager/commit/6f6296b8cde56d5fc73e00ef671ca7ab431455f4)), closes [#2503](https://github.com/ReVanced/revanced-manager/issues/2503)
|
||||
* import bundles on another thread ([0383bd7](https://github.com/ReVanced/revanced-manager/commit/0383bd74f73a3523d539c44cdf38b0e857c16bdc))
|
||||
* import export screen UX ([69c119d](https://github.com/ReVanced/revanced-manager/commit/69c119d545ac811c605124173e5cbc97a9064c79))
|
||||
* Improve background running notification ([#2614](https://github.com/ReVanced/revanced-manager/issues/2614)) ([05444d8](https://github.com/ReVanced/revanced-manager/commit/05444d8824a429c7e554d0597f8997e670936a63))
|
||||
* improve bundle page strings ([2a63a61](https://github.com/ReVanced/revanced-manager/commit/2a63a6163a8d2e6ee649cb22099b426ed605de8f))
|
||||
* improve keystore import error handling and show toast ([cd142a7](https://github.com/ReVanced/revanced-manager/commit/cd142a70d3f210161d3c1f20d2cb82a70432469f))
|
||||
* Inconsistent padding for battery optimisation warning ([6c3a99a](https://github.com/ReVanced/revanced-manager/commit/6c3a99a4921ab4438a038ad4c4bccd0326fdd565))
|
||||
* **installer:** make the correct column scrollable ([64496bf](https://github.com/ReVanced/revanced-manager/commit/64496bfbe77a9a44f5535fd5f12eee803ac7c26a))
|
||||
* **installer:** progress tracking ([f547bb7](https://github.com/ReVanced/revanced-manager/commit/f547bb7ab1b7149d7290729527714168a2561b23))
|
||||
* **installer:** properly track worker state ([#32](https://github.com/ReVanced/revanced-manager/issues/32)) ([de1ef23](https://github.com/ReVanced/revanced-manager/commit/de1ef23824227796c8583242e624f83d9dae5af3))
|
||||
* **installer:** save step incorrectly being marked as completed ([0264308](https://github.com/ReVanced/revanced-manager/commit/0264308b6dad051db80da6f130e8d28d86b38f04))
|
||||
* **installer:** sign and install on threads ([3d59ee5](https://github.com/ReVanced/revanced-manager/commit/3d59ee51acc5a6ebb17f68c0462d17d7ecb0f07c))
|
||||
* jvm signature clash error ([ee0f342](https://github.com/ReVanced/revanced-manager/commit/ee0f34245636027d55bd5bdfce4d6a5e6c3b3dcd))
|
||||
* library info not being embedded ([8c9fe69](https://github.com/ReVanced/revanced-manager/commit/8c9fe6989fc6d05afd53baa877f1e6dffc067b50))
|
||||
* load patch bundles earlier ([a2f9e2f](https://github.com/ReVanced/revanced-manager/commit/a2f9e2f1da961a13b2b20e2812593031c9339b88))
|
||||
* Match "Installation incompatible" dialog message with Flutter Manager ([#2231](https://github.com/ReVanced/revanced-manager/issues/2231)) ([fedaedf](https://github.com/ReVanced/revanced-manager/commit/fedaedfda112260144b0b9b0776509ddb3438046))
|
||||
* minify crash on building release ([#1245](https://github.com/ReVanced/revanced-manager/issues/1245)) ([6561e4c](https://github.com/ReVanced/revanced-manager/commit/6561e4c97c19134b22b72e19fad3884f99327b9a))
|
||||
* more android 34 fixes ([7fb1e27](https://github.com/ReVanced/revanced-manager/commit/7fb1e27617b69803b3d4463993b2290877502545))
|
||||
* move battery warning to dashboard ([3a05150](https://github.com/ReVanced/revanced-manager/commit/3a05150fa33f119ecdf436f8508862ef81c327a0))
|
||||
* Move temporary files outside of the cache directory ([#2122](https://github.com/ReVanced/revanced-manager/issues/2122)) ([b93ecc0](https://github.com/ReVanced/revanced-manager/commit/b93ecc0db20339393e1296c44ce4b1dbd837b577))
|
||||
* Offset badge ([c73fdfd](https://github.com/ReVanced/revanced-manager/commit/c73fdfdd2d3a1b8552d9c26df575b3019346596d))
|
||||
* only perform haptics on events ([e55566d](https://github.com/ReVanced/revanced-manager/commit/e55566d3df25480260922f0418b4bbee5d7b7a07))
|
||||
* option state crash ([#1456](https://github.com/ReVanced/revanced-manager/issues/1456)) ([f183b6d](https://github.com/ReVanced/revanced-manager/commit/f183b6d8a6b139fe3e84d5ea3a9658ef900453bc))
|
||||
* parcel error for nullable types ([336eed3](https://github.com/ReVanced/revanced-manager/commit/336eed3a95111ebbe456321f5986e6875ded354e))
|
||||
* pass worker inputs without serialization ([#44](https://github.com/ReVanced/revanced-manager/issues/44)) ([059a72b](https://github.com/ReVanced/revanced-manager/commit/059a72b9dd9103d2b3704daa7dbb13ad83971460))
|
||||
* patch count remaining at zero when using process runtime ([#2542](https://github.com/ReVanced/revanced-manager/issues/2542)) ([f5e1e0b](https://github.com/ReVanced/revanced-manager/commit/f5e1e0b0659e5775dd460b8dfc15427eb0175139))
|
||||
* patch options reset button being broken ([e1647fd](https://github.com/ReVanced/revanced-manager/commit/e1647fdef0c9f68e171a2d15e2b6e744da6bbaf5))
|
||||
* Patch process cancelation dialog conditions ([#2554](https://github.com/ReVanced/revanced-manager/issues/2554)) ([e97b19d](https://github.com/ReVanced/revanced-manager/commit/e97b19d2b65dbfc49ed062b123c363e412b9bf8e))
|
||||
* Patch selection screen padding ([#2533](https://github.com/ReVanced/revanced-manager/issues/2533)) ([cd2dbcc](https://github.com/ReVanced/revanced-manager/commit/cd2dbcc841e56dac99230ea6501af87c43e9c572))
|
||||
* **patcher:** add notification and wakelock to worker; chore: add app icon ([8b6d32d](https://github.com/ReVanced/revanced-manager/commit/8b6d32dd7b3ca4c694414a55a1b6202b62636530))
|
||||
* patches not being reloaded ([dccf861](https://github.com/ReVanced/revanced-manager/commit/dccf86163af34341e3e451df9f24356c7294ae1e))
|
||||
* **patches selector:** copy the selected patches list ([70e49aa](https://github.com/ReVanced/revanced-manager/commit/70e49aaaa3a42510cb9ced2209c90cd1da98391d))
|
||||
* perform selected app operations in the correct order ([34cf848](https://github.com/ReVanced/revanced-manager/commit/34cf848baaaa2504d162c515a95240d45bd7092a))
|
||||
* permission error when using installed app ([8767f0e](https://github.com/ReVanced/revanced-manager/commit/8767f0e99c6de5bbb0a690ced40f6e9a486f0828))
|
||||
* Playback Switch's Haptic Feedback ([#2639](https://github.com/ReVanced/revanced-manager/issues/2639)) ([9fdca5a](https://github.com/ReVanced/revanced-manager/commit/9fdca5a0afd6be8a24e2ec09eec0000b0b9cd179))
|
||||
* process death resilience and account for android 11 bug ([#2355](https://github.com/ReVanced/revanced-manager/issues/2355)) ([83eeeae](https://github.com/ReVanced/revanced-manager/commit/83eeeae801827800a0787e9e753c72d2a24d7970))
|
||||
* progress bar not updating ([dcaa38c](https://github.com/ReVanced/revanced-manager/commit/dcaa38c8824f54da7a833c354b247f309d1c9871))
|
||||
* release builds not working properly ([6f6476e](https://github.com/ReVanced/revanced-manager/commit/6f6476e85158cad4e2497e9f72b73c4dc948f0bc))
|
||||
* remove battery optimization notification if user grants the permission ([9863c51](https://github.com/ReVanced/revanced-manager/commit/9863c5161a1bc16941a323e654f80f8cb0122f9f))
|
||||
* remove the unique constraint for patch bundle names ([ea29d0f](https://github.com/ReVanced/revanced-manager/commit/ea29d0f00c3b3b2c137c4849e6c445a6bf9a180f))
|
||||
* Remove unnecessary screen padding ([8419f75](https://github.com/ReVanced/revanced-manager/commit/8419f75d597dd198aa1029fae2109646c5874078)), closes [#2062](https://github.com/ReVanced/revanced-manager/issues/2062)
|
||||
* remove unused function preventing compilation ([2297e94](https://github.com/ReVanced/revanced-manager/commit/2297e94cb81a9a22ea032d8e247769774ca85087))
|
||||
* Reset cached theme on theme change to avoid broken colors ([#2527](https://github.com/ReVanced/revanced-manager/issues/2527)) ([9a82b78](https://github.com/ReVanced/revanced-manager/commit/9a82b785280954973cafc5e6dccb3c90fdb5ef49))
|
||||
* run blocking IO operations in the correct context ([969ddb7](https://github.com/ReVanced/revanced-manager/commit/969ddb7bef321d7aa2a682b8128b1f755f35c28b))
|
||||
* run props flow on correct dispatcher ([#2035](https://github.com/ReVanced/revanced-manager/issues/2035)) ([d3d4c27](https://github.com/ReVanced/revanced-manager/commit/d3d4c27f6d7affceef233a0138ee6c985c7f56bc))
|
||||
* Screen turns off while patching due to wrong WakeLock ([#2147](https://github.com/ReVanced/revanced-manager/issues/2147)) ([4de5340](https://github.com/ReVanced/revanced-manager/commit/4de534094adc0665021d3ba129a648d896718568))
|
||||
* scrolling in patch selector ([154f036](https://github.com/ReVanced/revanced-manager/commit/154f036fe956096bca983fe9d6654ccca38fd8ac))
|
||||
* Selected patch count ([#2559](https://github.com/ReVanced/revanced-manager/issues/2559)) ([a91ff60](https://github.com/ReVanced/revanced-manager/commit/a91ff60533b44629ea60e8cd6acceeb80b0253b7))
|
||||
* serialization not working ([4d04ae0](https://github.com/ReVanced/revanced-manager/commit/4d04ae088c406d84936120cb753cd1f11fb8a8c2))
|
||||
* show available and selected patches in patch selector screen ([61f1ee0](https://github.com/ReVanced/revanced-manager/commit/61f1ee0627d6cbb6b9a4d226eb6c2f9e0b8c6453))
|
||||
* show install button when installation has been cancelled ([93f4a5b](https://github.com/ReVanced/revanced-manager/commit/93f4a5bb7c912ca77bb04e414432922c89d3e2c0))
|
||||
* Show selection warning also on patch option ([#2643](https://github.com/ReVanced/revanced-manager/issues/2643)) ([3b82767](https://github.com/ReVanced/revanced-manager/commit/3b82767a897eeca1dda1d8343f1db4207050e960))
|
||||
* sources screen being misaligned during transitions ([2ac3d5c](https://github.com/ReVanced/revanced-manager/commit/2ac3d5c483d5cc4776681ed3f900550a4e45f616))
|
||||
* specify `multithreadingDexFileWriter` in `PatcherOptions` ([#1402](https://github.com/ReVanced/revanced-manager/issues/1402)) ([3f362b6](https://github.com/ReVanced/revanced-manager/commit/3f362b605fbce3ea72e7c95b7e0bc614443c7d44))
|
||||
* Support patching on ARMv7 by updating AAPT2 ([#2084](https://github.com/ReVanced/revanced-manager/issues/2084)) ([15b47f9](https://github.com/ReVanced/revanced-manager/commit/15b47f9bb6cd6bb0360fda6ac641cd4c75542287))
|
||||
* Transparent status on fullscreen dialog ([#2654](https://github.com/ReVanced/revanced-manager/issues/2654)) ([a8820a4](https://github.com/ReVanced/revanced-manager/commit/a8820a4daf71704f6945b8f794495fe8a8d7589e))
|
||||
* Turn off filters by default ([#2079](https://github.com/ReVanced/revanced-manager/issues/2079)) ([44f8b1f](https://github.com/ReVanced/revanced-manager/commit/44f8b1fb6bffed5866ada356910119465320a9a8))
|
||||
* typo in string name `import_keystore_description` ([#1273](https://github.com/ReVanced/revanced-manager/issues/1273)) ([933e69e](https://github.com/ReVanced/revanced-manager/commit/933e69e21e97fede2183a26dd1645a6eb96c4509))
|
||||
* **ui:** make entire patches view button selectable ([#1271](https://github.com/ReVanced/revanced-manager/issues/1271)) ([83cdaae](https://github.com/ReVanced/revanced-manager/commit/83cdaaee183ff1b6d905977df38fe4e47f7d5973))
|
||||
* Updates popup shows incorrect names ([#1283](https://github.com/ReVanced/revanced-manager/issues/1283)) ([c879faf](https://github.com/ReVanced/revanced-manager/commit/c879faf2eb338476c6abd9f104922b0d49f95cd6))
|
||||
* Use `compatible` rather than `support` when referring to patch compatibility ([#2422](https://github.com/ReVanced/revanced-manager/issues/2422)) ([8b3c4eb](https://github.com/ReVanced/revanced-manager/commit/8b3c4eb91c491a0971e2ccf7d46012437eca5c25))
|
||||
* use correct `getViewModel` ([5b6ae80](https://github.com/ReVanced/revanced-manager/commit/5b6ae800fdfc93ef5058b21b3e48daac2a4e1358))
|
||||
* use correct classes to determine option type ([e833bf4](https://github.com/ReVanced/revanced-manager/commit/e833bf4ad14811bb6880ae2d97055e4ce0de222f))
|
||||
* use correct directory ([9e1ebb3](https://github.com/ReVanced/revanced-manager/commit/9e1ebb390244dcb9af03a9164a32386481ec5691))
|
||||
* Use FAB instead of ListItem to patch in App Overview ([6ace71b](https://github.com/ReVanced/revanced-manager/commit/6ace71b739302466274ce9b46f5f7dd6ab9da05d)), closes [#1995](https://github.com/ReVanced/revanced-manager/issues/1995)
|
||||
* use proper update icon ([b59a161](https://github.com/ReVanced/revanced-manager/commit/b59a16191a61c64275137c4a6145fd30d68aa480))
|
||||
* use ReVanced ring logo in about section ([#1302](https://github.com/ReVanced/revanced-manager/issues/1302)) ([933a4a3](https://github.com/ReVanced/revanced-manager/commit/933a4a32203425e745e05615217a8d0975c2e959))
|
||||
* Use the correct icon in API URL dialog ([c22e5b4](https://github.com/ReVanced/revanced-manager/commit/c22e5b4051515e0f02828a2b30f6af19b48ba55f)), closes [#1972](https://github.com/ReVanced/revanced-manager/issues/1972)
|
||||
* use upsert when modifying installed apps ([90edf1d](https://github.com/ReVanced/revanced-manager/commit/90edf1ddd0de29b299855810402a31828d989d04))
|
||||
* **VersionSelector:** use correct LazyColumn item key ([413fe98](https://github.com/ReVanced/revanced-manager/commit/413fe980a8c0b45e3924c98b2fbd1a3e9b579528))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **about screen:** complete about screen ([1d6b34a](https://github.com/ReVanced/revanced-manager/commit/1d6b34a39f76e8e733649f7fcfeb20eb1009a39a))
|
||||
* Add `isScrollingUp` support for ScrollState ([bf049c3](https://github.com/ReVanced/revanced-manager/commit/bf049c3c1ac12a60c5c6226b5c3fec7f72caa7db))
|
||||
* add ability to share debug logs ([feb0ca4](https://github.com/ReVanced/revanced-manager/commit/feb0ca4cf315e5d332f36039fbb989b3cfb9cf58))
|
||||
* add checkboxes to the downloaded apps page ([ca93524](https://github.com/ReVanced/revanced-manager/commit/ca93524be0b37f38b860d8512c81d2898b2860af))
|
||||
* Add confirm dialogs when toggling dangerous settings ([#2072](https://github.com/ReVanced/revanced-manager/issues/2072)) ([6643276](https://github.com/ReVanced/revanced-manager/commit/66432764cfe8192f4cf8e599a592f27c675f25ec))
|
||||
* Add confirmation dialog to "Reset" options ([#2576](https://github.com/ReVanced/revanced-manager/issues/2576)) ([f32ffbb](https://github.com/ReVanced/revanced-manager/commit/f32ffbb6f2224f886af14205721fb2372f396de2))
|
||||
* Add downloader plugin system ([#2041](https://github.com/ReVanced/revanced-manager/issues/2041)) ([ca38737](https://github.com/ReVanced/revanced-manager/commit/ca3873778307612b93af3273ffe4821c6a5e398d))
|
||||
* add external process runtime ([#1799](https://github.com/ReVanced/revanced-manager/issues/1799)) ([0d73e0c](https://github.com/ReVanced/revanced-manager/commit/0d73e0cd32b6af3526c226ce4695c7e905f65b15))
|
||||
* Add haptic feedback ([#1457](https://github.com/ReVanced/revanced-manager/issues/1457)) ([76e0c95](https://github.com/ReVanced/revanced-manager/commit/76e0c9518746620cd2723a99c310f92f5b3fd996))
|
||||
* Add installer status dialog ([#1473](https://github.com/ReVanced/revanced-manager/issues/1473)) ([43b3743](https://github.com/ReVanced/revanced-manager/commit/43b37432138d7cd8a507efad80827d6f3bdcdf08))
|
||||
* add network checks for features that require it ([f3f8bc4](https://github.com/ReVanced/revanced-manager/commit/f3f8bc4ec2f593ade91324d78f9ce83f60ef65cc))
|
||||
* add patch bundle info screen ([#55](https://github.com/ReVanced/revanced-manager/issues/55)) ([8ae4e85](https://github.com/ReVanced/revanced-manager/commit/8ae4e850dae9cf4df14afe90048ca0b0a48389ac))
|
||||
* add patches selector bottom sheet ([#1360](https://github.com/ReVanced/revanced-manager/issues/1360)) ([f6fb534](https://github.com/ReVanced/revanced-manager/commit/f6fb534e04777b4f0ec2ff2b13768c724c68c028))
|
||||
* add required options screen ([#2378](https://github.com/ReVanced/revanced-manager/issues/2378)) ([3a63e42](https://github.com/ReVanced/revanced-manager/commit/3a63e42df9ce50069a573d98cf44a8abec03b639))
|
||||
* Add reset button to custom API ([#2076](https://github.com/ReVanced/revanced-manager/issues/2076)) ([df52a7b](https://github.com/ReVanced/revanced-manager/commit/df52a7bdef05e1c9f034ae067c3dd183fb8fdffd)), closes [#2051](https://github.com/ReVanced/revanced-manager/issues/2051)
|
||||
* Add sensitivity to `isScrollingUp` ([f6ca4e9](https://github.com/ReVanced/revanced-manager/commit/f6ca4e95551193c8d21afd09872d9bbe6c80c0e8))
|
||||
* add social links ([#1294](https://github.com/ReVanced/revanced-manager/issues/1294)) ([7df3350](https://github.com/ReVanced/revanced-manager/commit/7df3350acb4aae957e2a7c0d2f30faf6cae6ab85))
|
||||
* add toast feedback to the bundle update button ([ea50e65](https://github.com/ReVanced/revanced-manager/commit/ea50e65ab1d626152bdd40c1893cd408b7271472))
|
||||
* add user agent ([#1382](https://github.com/ReVanced/revanced-manager/issues/1382)) ([3aea6cb](https://github.com/ReVanced/revanced-manager/commit/3aea6cbaecc9db103e9a3925b3c4a531de6c5f0e))
|
||||
* advanced settings page with device info ([#51](https://github.com/ReVanced/revanced-manager/issues/51)) ([86e4244](https://github.com/ReVanced/revanced-manager/commit/86e42449eb553417726b95f79f6edd7f526f6d44))
|
||||
* allow bundles to use classes from other bundles ([#1951](https://github.com/ReVanced/revanced-manager/issues/1951)) ([af8e2b4](https://github.com/ReVanced/revanced-manager/commit/af8e2b44c027d978046a0e7926f1425f0348b098))
|
||||
* allow user to save logs ([a008cf5](https://github.com/ReVanced/revanced-manager/commit/a008cf5dd143fafb1f642cd037db29393716f7d5))
|
||||
* animate the arrow button ([db070b1](https://github.com/ReVanced/revanced-manager/commit/db070b125bf08ff251450259045755e6469c2d5e))
|
||||
* app downloader ([#43](https://github.com/ReVanced/revanced-manager/issues/43)) ([1f1a480](https://github.com/ReVanced/revanced-manager/commit/1f1a480d51edb310934523024c52e0c19b066662))
|
||||
* app selector screen ([373cc4b](https://github.com/ReVanced/revanced-manager/commit/373cc4bbb1a8194bf9475d0a13e1c154cd87480b))
|
||||
* **app-selector:** show patchable installed apps first ([#1496](https://github.com/ReVanced/revanced-manager/issues/1496)) ([afb0f80](https://github.com/ReVanced/revanced-manager/commit/afb0f80de5a73c213f77bfde761ea1ea0886abef))
|
||||
* armv7 warning ([2ffcaec](https://github.com/ReVanced/revanced-manager/commit/2ffcaec724d5a13b816e04813d45cde75681eb69))
|
||||
* Automatic language detection ([#2032](https://github.com/ReVanced/revanced-manager/issues/2032)) ([36a1c3f](https://github.com/ReVanced/revanced-manager/commit/36a1c3f36807500fbe820bf4142fef159b138c7d))
|
||||
* backend ([45a54d1](https://github.com/ReVanced/revanced-manager/commit/45a54d1608a77547e06748867d63a452224727b6))
|
||||
* better installer ui ([#29](https://github.com/ReVanced/revanced-manager/issues/29)) ([14888f9](https://github.com/ReVanced/revanced-manager/commit/14888f9da71ecf1c50d770123d1e8dd09aa6c8b1))
|
||||
* **bundles tab:** add BackHandler ([a9171e1](https://github.com/ReVanced/revanced-manager/commit/a9171e17bd628601f1e074a7fcdf74c15cb73709))
|
||||
* Change "Update" to "Show" in Update Available notification ([5c43413](https://github.com/ReVanced/revanced-manager/commit/5c434137d332aabaaca236b6f9616d7727d0b3d2)), closes [#1959](https://github.com/ReVanced/revanced-manager/issues/1959)
|
||||
* change appID and name of debug builds ([5b3e9e5](https://github.com/ReVanced/revanced-manager/commit/5b3e9e595cded277c051cc669d9f29bcb6ce5d18))
|
||||
* **Changelogs:** overall improvement ([#1429](https://github.com/ReVanced/revanced-manager/issues/1429)) ([2a3590d](https://github.com/ReVanced/revanced-manager/commit/2a3590ddd2cc74b746a3f632a93970bfa23cf384))
|
||||
* check for updates on startup ([#1462](https://github.com/ReVanced/revanced-manager/issues/1462)) ([bb2164e](https://github.com/ReVanced/revanced-manager/commit/bb2164e1a95a698b1b0f69e725af5e0e1e45b868))
|
||||
* check if the version being used is the recommended version ([#1675](https://github.com/ReVanced/revanced-manager/issues/1675)) ([9d961f6](https://github.com/ReVanced/revanced-manager/commit/9d961f6a52d15ed6116afc78c7008460347da69a))
|
||||
* Collapse ExtendedFAB on scroll ([#1630](https://github.com/ReVanced/revanced-manager/issues/1630)) ([b5c1f6d](https://github.com/ReVanced/revanced-manager/commit/b5c1f6d732b65c1c9becb7962c51a70a840dea73))
|
||||
* **Compose:** Add confirmation dialog on multiple operations ([#2529](https://github.com/ReVanced/revanced-manager/issues/2529)) ([2671e68](https://github.com/ReVanced/revanced-manager/commit/2671e68004269deebdedaee38a6692b2302ca732))
|
||||
* **Compose:** hide developer settings ([#2551](https://github.com/ReVanced/revanced-manager/issues/2551)) ([0030c7a](https://github.com/ReVanced/revanced-manager/commit/0030c7a7885feee0578ee1423ee2aefc6a0e2c2c))
|
||||
* **Compose:** Improve patches selector tab by adding the bundle version ([#2545](https://github.com/ReVanced/revanced-manager/issues/2545)) ([3710675](https://github.com/ReVanced/revanced-manager/commit/3710675ac0ca77cecfb172b4cf148f41a762bf06))
|
||||
* **Compose:** Move developer options to top level ([#2528](https://github.com/ReVanced/revanced-manager/issues/2528)) ([cedc6ad](https://github.com/ReVanced/revanced-manager/commit/cedc6ad49f23d778a52a8846f9e384fd2106e074))
|
||||
* contributors screen ([#42](https://github.com/ReVanced/revanced-manager/issues/42)) ([3f54381](https://github.com/ReVanced/revanced-manager/commit/3f54381d307fd71296be18e97a1ab870f1cdc297))
|
||||
* **Contributors Screen:** implement design from Figma ([#1465](https://github.com/ReVanced/revanced-manager/issues/1465)) ([d5bdc29](https://github.com/ReVanced/revanced-manager/commit/d5bdc293f308e2a283d744afdc1aed6a165f7166))
|
||||
* Dashboard Screen ([#18](https://github.com/ReVanced/revanced-manager/issues/18)) ([a127b95](https://github.com/ReVanced/revanced-manager/commit/a127b959ead5a9c83a0c4f7e7840aeeb68362c0d))
|
||||
* disable filter chips when there are no patches ([fd520bb](https://github.com/ReVanced/revanced-manager/commit/fd520bba700bae9d8eae745ce23a95b07b7f7d34))
|
||||
* dont ask for root on launch ([9562d80](https://github.com/ReVanced/revanced-manager/commit/9562d80bfdc785fe5ed512a15cfd7c0e09091acc))
|
||||
* download apps in patcher screen ([#73](https://github.com/ReVanced/revanced-manager/issues/73)) ([a854221](https://github.com/ReVanced/revanced-manager/commit/a854221969c363712a0b3de84607092709db291f))
|
||||
* experimental patches setting ([b07fd23](https://github.com/ReVanced/revanced-manager/commit/b07fd2321dd0aecce556f341e2b18f930baa58fd))
|
||||
* filter options for patches ([62bccd1](https://github.com/ReVanced/revanced-manager/commit/62bccd150441747e5cd6de71de304e416922bdda))
|
||||
* finish implementing the sources system ([#70](https://github.com/ReVanced/revanced-manager/issues/70)) ([858b0ec](https://github.com/ReVanced/revanced-manager/commit/858b0ec5b456043fa61b681bbbd195fd9c30a6f0))
|
||||
* get bundle information from jar manifest ([#2027](https://github.com/ReVanced/revanced-manager/issues/2027)) ([60fdec9](https://github.com/ReVanced/revanced-manager/commit/60fdec9804c763ef9308a7a56d245401dbd35d7c))
|
||||
* hide tabs when 1 bundle is used ([41268ca](https://github.com/ReVanced/revanced-manager/commit/41268ca80b71f68dbf9523fa7bac34feeec7d011))
|
||||
* hide unfinished pages in release mode ([c199801](https://github.com/ReVanced/revanced-manager/commit/c199801fb7f91306538391177d240cf1121964d2))
|
||||
* Highlight links in Markdown ([7bf8988](https://github.com/ReVanced/revanced-manager/commit/7bf89887e420a402b30da4796ba3648147f00394)), closes [#1962](https://github.com/ReVanced/revanced-manager/issues/1962)
|
||||
* implement DI ([7fa7b9d](https://github.com/ReVanced/revanced-manager/commit/7fa7b9d53a3217c7e1e4c70a524fd68ae170c832))
|
||||
* implement more patch option types ([#2015](https://github.com/ReVanced/revanced-manager/issues/2015)) ([b18c678](https://github.com/ReVanced/revanced-manager/commit/b18c6783547e910fa2dbd3d7edcc5fe329e6d921))
|
||||
* implement navigation ([7fc6ec5](https://github.com/ReVanced/revanced-manager/commit/7fc6ec5c2cf8eb9ebfc3dda01cdfd80962be1f8f))
|
||||
* implement Submit Issue button ([#1276](https://github.com/ReVanced/revanced-manager/issues/1276)) ([a269a39](https://github.com/ReVanced/revanced-manager/commit/a269a39aa4a34b94aef4e1e85126c571e96be575))
|
||||
* improve accessibility ([#64](https://github.com/ReVanced/revanced-manager/issues/64)) ([39b08e5](https://github.com/ReVanced/revanced-manager/commit/39b08e5201d2cec6bdb67f9386120a7a40c9ccc6))
|
||||
* Improve APK file name formatting on save ([#2421](https://github.com/ReVanced/revanced-manager/issues/2421)) ([a53a8ba](https://github.com/ReVanced/revanced-manager/commit/a53a8ba62734daf9bd80ab79265241a4a22f489c))
|
||||
* improve bundle dialog UI ([409c888](https://github.com/ReVanced/revanced-manager/commit/409c888d523f398505daaaff9d2490dc5a863680))
|
||||
* Improve bundle info screen design ([#2548](https://github.com/ReVanced/revanced-manager/issues/2548)) ([55524f7](https://github.com/ReVanced/revanced-manager/commit/55524f7284a44bbf8e8c782eedd7fc06d54944cf))
|
||||
* Improve custom API URL dialog ([#2033](https://github.com/ReVanced/revanced-manager/issues/2033)) ([7dae562](https://github.com/ReVanced/revanced-manager/commit/7dae56281994942577bac7bf50c59e805672d0e1))
|
||||
* Improve device information in debugging section ([d889677](https://github.com/ReVanced/revanced-manager/commit/d889677b29aeb4a49a025da98060265e88876ddf)), closes [#1977](https://github.com/ReVanced/revanced-manager/issues/1977)
|
||||
* Improve initial update popup wording ([5901372](https://github.com/ReVanced/revanced-manager/commit/5901372523643eef5a605256662c8e1f0a9f2263)), closes [#1956](https://github.com/ReVanced/revanced-manager/issues/1956)
|
||||
* improve keystore UI and UX ([#52](https://github.com/ReVanced/revanced-manager/issues/52)) ([49b4bbb](https://github.com/ReVanced/revanced-manager/commit/49b4bbbf0ba84b006a1694ca95662cf224a84b0f))
|
||||
* Improve patch bundle screen ([#2070](https://github.com/ReVanced/revanced-manager/issues/2070)) ([a907528](https://github.com/ReVanced/revanced-manager/commit/a907528a2096d8de9778efa8f85e0cdc1d7c2b80))
|
||||
* improve patcher screen labels ([f4d6c60](https://github.com/ReVanced/revanced-manager/commit/f4d6c60b9ec4c76e8e3fa233f79e062b802860e5))
|
||||
* improve patcher UI ([#1494](https://github.com/ReVanced/revanced-manager/issues/1494)) ([429b428](https://github.com/ReVanced/revanced-manager/commit/429b428f673dd949289baaf27ed2e08970db83ae))
|
||||
* Improve Settings order ([#2060](https://github.com/ReVanced/revanced-manager/issues/2060)) ([fa86c1a](https://github.com/ReVanced/revanced-manager/commit/fa86c1a0bb039a86e0649eae30c7b33620f98dbe))
|
||||
* improve the safeguards ([#2038](https://github.com/ReVanced/revanced-manager/issues/2038)) ([e5b414e](https://github.com/ReVanced/revanced-manager/commit/e5b414e277341967c7b5a5f071ddac1fdfdb8e63))
|
||||
* Improve unsupported patch warnings ([#2066](https://github.com/ReVanced/revanced-manager/issues/2066)) ([3c23d57](https://github.com/ReVanced/revanced-manager/commit/3c23d573bf3998304cad4485016004a871cf1636)), closes [#2052](https://github.com/ReVanced/revanced-manager/issues/2052)
|
||||
* Improve update screen design ([#2487](https://github.com/ReVanced/revanced-manager/issues/2487)) ([7007010](https://github.com/ReVanced/revanced-manager/commit/7007010f14239452e565736fe7cee7666a682ffb))
|
||||
* Improve update setting tile titles ([e2623d6](https://github.com/ReVanced/revanced-manager/commit/e2623d6d79b3b87e9ba29016e42f1d645b2f9e19)), closes [#1968](https://github.com/ReVanced/revanced-manager/issues/1968)
|
||||
* improve UX for failed or missing bundles ([49f8510](https://github.com/ReVanced/revanced-manager/commit/49f851022db72b110c8597aa1c711461c1b01882))
|
||||
* improved compose stability ([8c40119](https://github.com/ReVanced/revanced-manager/commit/8c40119609c650d1f012d810a4117e84fbe2da52))
|
||||
* improved dashboard screen ([5c2f9d9](https://github.com/ReVanced/revanced-manager/commit/5c2f9d91a6e803d9b3705e2b3aa84176353ba963))
|
||||
* in-app updater ([#25](https://github.com/ReVanced/revanced-manager/issues/25)) ([d71a4bf](https://github.com/ReVanced/revanced-manager/commit/d71a4bf3c3457a02578bb8ad3c7615b074f6e3f1))
|
||||
* **installer:** adjust arrow icon size ([e997255](https://github.com/ReVanced/revanced-manager/commit/e997255cf3c3c5ba777da07752217f99e01dd789))
|
||||
* **installer:** adjust step icon size and alignment ([cfcabf6](https://github.com/ReVanced/revanced-manager/commit/cfcabf6ef1c212f2627d5d02f4d59981bdc276ca))
|
||||
* **installer:** apk signing and installation ([da32ff9](https://github.com/ReVanced/revanced-manager/commit/da32ff954a84cf8ff321bbbf71cc5b544d6e6be9))
|
||||
* **installer:** sign apk in patcher worker ([c003c3c](https://github.com/ReVanced/revanced-manager/commit/c003c3c3245f5a663a0371d4e9df71777ba728b9))
|
||||
* **Installer:** use BottomAppBar ([#1428](https://github.com/ReVanced/revanced-manager/issues/1428)) ([ceb7623](https://github.com/ReVanced/revanced-manager/commit/ceb762379461443e7e62c37511df1c84a6068bb4))
|
||||
* integrate revanced patcher ([#22](https://github.com/ReVanced/revanced-manager/issues/22)) ([caeabfc](https://github.com/ReVanced/revanced-manager/commit/caeabfc91b2aa7e3de9e6a31859049d4b2d37388))
|
||||
* keystore import/export ([#30](https://github.com/ReVanced/revanced-manager/issues/30)) ([fd0ec6c](https://github.com/ReVanced/revanced-manager/commit/fd0ec6c6a7fc8488db859056a95ebe0455e2843b))
|
||||
* **koin:** use the android logger ([f30333e](https://github.com/ReVanced/revanced-manager/commit/f30333e75338dd2c1ef891723ecb834fc1eb10f7))
|
||||
* licenses screen ([#47](https://github.com/ReVanced/revanced-manager/issues/47)) ([e3cb056](https://github.com/ReVanced/revanced-manager/commit/e3cb056858ea8917162c1a421a7a8d03ddaa08e2))
|
||||
* make bundles selectable ([#1237](https://github.com/ReVanced/revanced-manager/issues/1237)) ([a246863](https://github.com/ReVanced/revanced-manager/commit/a246863a89fe8781feaf2a45fcb7ea991d26028f))
|
||||
* Make patch bundles list scrollable ([#2322](https://github.com/ReVanced/revanced-manager/issues/2322)) ([a5c8a23](https://github.com/ReVanced/revanced-manager/commit/a5c8a23f9ffb36543d45b46bb5f01c5dea56bf90))
|
||||
* more info for the select from application screen ([#81](https://github.com/ReVanced/revanced-manager/issues/81)) ([3f446f8](https://github.com/ReVanced/revanced-manager/commit/3f446f8236101755a9d51a2aa759f70a0bd429da))
|
||||
* move plugin api to another repository ([55e7ebf](https://github.com/ReVanced/revanced-manager/commit/55e7ebf4fc5adf8800430ad4aa2579cb6210290d))
|
||||
* Move safeguards above patcher preference group ([9f7eaa2](https://github.com/ReVanced/revanced-manager/commit/9f7eaa212339f2093050087dc7ab0b8237356939))
|
||||
* move update to notification card ([#1917](https://github.com/ReVanced/revanced-manager/issues/1917)) ([b80f94b](https://github.com/ReVanced/revanced-manager/commit/b80f94b77bba89e31608cdb302dab0619bf7c5cc))
|
||||
* **NotificationCard:** rewrite & consistent usage ([#1426](https://github.com/ReVanced/revanced-manager/issues/1426)) ([f8aafa0](https://github.com/ReVanced/revanced-manager/commit/f8aafa050328423b3168a7943f566fce58100cb0))
|
||||
* Open the app-specific manage all files permission dialog ([#2148](https://github.com/ReVanced/revanced-manager/issues/2148)) ([a3f31ea](https://github.com/ReVanced/revanced-manager/commit/a3f31ea65788a43ce57d548e8240e5b1fe3005d0))
|
||||
* Order bundles by number of patches ([bb5d414](https://github.com/ReVanced/revanced-manager/commit/bb5d414abb4f294aa88d795486836a99ade2b388))
|
||||
* patch bundle sources system ([#24](https://github.com/ReVanced/revanced-manager/issues/24)) ([9675a27](https://github.com/ReVanced/revanced-manager/commit/9675a2777b364e5ede0d44b92eb7e551d4f7b3d6))
|
||||
* patch options ([#45](https://github.com/ReVanced/revanced-manager/issues/45)) ([8540d30](https://github.com/ReVanced/revanced-manager/commit/8540d301962669e3d79ca345c852f5b01df641a4))
|
||||
* patch options UI ([#80](https://github.com/ReVanced/revanced-manager/issues/80)) ([0a1acd2](https://github.com/ReVanced/revanced-manager/commit/0a1acd24e3f0d06fde412b8eeecd923d92ee64a9))
|
||||
* **patch-selector:** default patches selection ([#1272](https://github.com/ReVanced/revanced-manager/issues/1272)) ([a17c2de](https://github.com/ReVanced/revanced-manager/commit/a17c2de228cccb4a0bb0ca7497720011bec131fc))
|
||||
* **patch-selector:** remove TODO about an unplanned feature ([4924eae](https://github.com/ReVanced/revanced-manager/commit/4924eaef800c429f2a59b8a15fd48fae0292810c))
|
||||
* **patcher:** Improve installation ([#2185](https://github.com/ReVanced/revanced-manager/issues/2185)) ([3bd4f0d](https://github.com/ReVanced/revanced-manager/commit/3bd4f0d8f3f60d079d4647d42592b10a15f0dae8))
|
||||
* patches selector screen ([55e871a](https://github.com/ReVanced/revanced-manager/commit/55e871aa7d27885e44ef33faab1bb4ae33e7a460))
|
||||
* Progressive AlertDialog for adding bundles ([9a01273](https://github.com/ReVanced/revanced-manager/commit/9a01273c43bd6bcdb0cdfd26c5a467cd3193e5d7)), closes [#1992](https://github.com/ReVanced/revanced-manager/issues/1992)
|
||||
* ProGuard ([d84e6a3](https://github.com/ReVanced/revanced-manager/commit/d84e6a3ffc20d018b2edeb505de20a920785ba5c))
|
||||
* Purple default theme ([#1601](https://github.com/ReVanced/revanced-manager/issues/1601)) ([0616666](https://github.com/ReVanced/revanced-manager/commit/0616666d5ef9b53bef5fd630b1b1a47088097d37))
|
||||
* Redesign the patches screen ([#2381](https://github.com/ReVanced/revanced-manager/issues/2381)) ([8dc4e5b](https://github.com/ReVanced/revanced-manager/commit/8dc4e5b89ee4d36263c8b4187650691b68484688))
|
||||
* remember patch options ([#1449](https://github.com/ReVanced/revanced-manager/issues/1449)) ([90db765](https://github.com/ReVanced/revanced-manager/commit/90db765c9aa014495775a34927904dedf5fef1e3))
|
||||
* remove dead help icons ([3bb071d](https://github.com/ReVanced/revanced-manager/commit/3bb071d80d319d4943b0d4c3048f232f3eb9f5cf))
|
||||
* Remove tag from changelog ([d2119d3](https://github.com/ReVanced/revanced-manager/commit/d2119d36430198151140b469192f76f781df6dd3))
|
||||
* Rename "Patch bundle" to "Patches" ([#2541](https://github.com/ReVanced/revanced-manager/issues/2541)) ([2cdd6d1](https://github.com/ReVanced/revanced-manager/commit/2cdd6d1843f1e49c7c720f8859e11d6a30c0eea6))
|
||||
* rename debug build to `ReVanced Manager (dev)` ([d3417ad](https://github.com/ReVanced/revanced-manager/commit/d3417adbeba0a8e06d3494a2fd108f735f73632c))
|
||||
* rename main bundle to `Default` ([e44d3fd](https://github.com/ReVanced/revanced-manager/commit/e44d3fdee444d915e3e8b8143e55f1353980aad2))
|
||||
* rename package to `app.revanced.manager` ([5ec97f4](https://github.com/ReVanced/revanced-manager/commit/5ec97f4a852a07d0e554bbe1eacc379179ac089e))
|
||||
* Rename strings ([e127845](https://github.com/ReVanced/revanced-manager/commit/e1278452b9c73479cdfb0eb0703db1552b158633))
|
||||
* rename ViewModels for consistency ([064a54e](https://github.com/ReVanced/revanced-manager/commit/064a54eaf0675a1cc9d21f3e1071160deb25c201))
|
||||
* Reorder Import & Export settings ([#2403](https://github.com/ReVanced/revanced-manager/issues/2403)) ([2697077](https://github.com/ReVanced/revanced-manager/commit/2697077fc88bb795027303558c9d52448a4daded))
|
||||
* ReVanced theme colors ([59b894d](https://github.com/ReVanced/revanced-manager/commit/59b894dce4b99c51151a4cccd03a998ceec31778))
|
||||
* revert to blue theme colors ([5f4c958](https://github.com/ReVanced/revanced-manager/commit/5f4c9584a94a1edd1eeaa0b9ecfcd9b281b7cccc))
|
||||
* root installation ([#1243](https://github.com/ReVanced/revanced-manager/issues/1243)) ([62e934c](https://github.com/ReVanced/revanced-manager/commit/62e934c4032096bed36201510fc55304ba48de68))
|
||||
* save patch options and selected patches in bundle ([#50](https://github.com/ReVanced/revanced-manager/issues/50)) ([23162f6](https://github.com/ReVanced/revanced-manager/commit/23162f6233fa6a176514b35feff731f8f28b4d4b))
|
||||
* save patch selection using room db ([#38](https://github.com/ReVanced/revanced-manager/issues/38)) ([1efccda](https://github.com/ReVanced/revanced-manager/commit/1efccda3f55d964fae3bee9ee1f0bd260bb1cc74))
|
||||
* Screen slide transition ([#2396](https://github.com/ReVanced/revanced-manager/issues/2396)) ([2de16e1](https://github.com/ReVanced/revanced-manager/commit/2de16e18e8ba5e84149b377f225693ea35fa2385))
|
||||
* Scrollbars ([#1479](https://github.com/ReVanced/revanced-manager/issues/1479)) ([b5558ea](https://github.com/ReVanced/revanced-manager/commit/b5558ea3ffef40f96b271f8dfe3a5cf95328781e))
|
||||
* Select bundle type before adding bundle ([#1490](https://github.com/ReVanced/revanced-manager/issues/1490)) ([88e860c](https://github.com/ReVanced/revanced-manager/commit/88e860cf0132aed23a3cfd3d9d12e472aa895718))
|
||||
* selected app info page ([#1395](https://github.com/ReVanced/revanced-manager/issues/1395)) ([b69a369](https://github.com/ReVanced/revanced-manager/commit/b69a369d4e304c8a4c8a8db052309b485171e353))
|
||||
* Set app ownership when installing apps ([#2558](https://github.com/ReVanced/revanced-manager/issues/2558)) ([7c410fe](https://github.com/ReVanced/revanced-manager/commit/7c410fef4512087657e3978d5be049c422b25456))
|
||||
* settings migration (compose) ([#1309](https://github.com/ReVanced/revanced-manager/issues/1309)) ([bf1d628](https://github.com/ReVanced/revanced-manager/commit/bf1d628944cb5a439d0bda7c49d820a5fa7576b3))
|
||||
* settings screen ([b7d53cf](https://github.com/ReVanced/revanced-manager/commit/b7d53cfca84d7239bed9189e265a03fd44dc2e45))
|
||||
* **settings screen:** add battery optimization notification ([5754864](https://github.com/ReVanced/revanced-manager/commit/57548641e7ecd06decfc926cb860674ce7443d7a))
|
||||
* **settings screen:** match typography from figma ([948a6d1](https://github.com/ReVanced/revanced-manager/commit/948a6d14404e067907c9e84576cfeba76134aaf6))
|
||||
* **settings:** move experimental patches option to advanced ([805d440](https://github.com/ReVanced/revanced-manager/commit/805d440450d821a26d3ef90a4f97cd796635057d))
|
||||
* **Settings:** use SettingsListItem consistently and overall improvements ([#1427](https://github.com/ReVanced/revanced-manager/issues/1427)) ([5e35893](https://github.com/ReVanced/revanced-manager/commit/5e35893883fa109d74b028478e60b51f97a2e12d))
|
||||
* show installed app in version selector ([1ab1e46](https://github.com/ReVanced/revanced-manager/commit/1ab1e4682ffbfe16c02c438ad833adbfdec58b33))
|
||||
* Show manager update dialog ([#2069](https://github.com/ReVanced/revanced-manager/issues/2069)) ([113a74d](https://github.com/ReVanced/revanced-manager/commit/113a74d270c1c222d4d06049b4edda8f27724a20)), closes [#1963](https://github.com/ReVanced/revanced-manager/issues/1963) [#1958](https://github.com/ReVanced/revanced-manager/issues/1958)
|
||||
* show stacktrace in installer ui ([#36](https://github.com/ReVanced/revanced-manager/issues/36)) ([8d53180](https://github.com/ReVanced/revanced-manager/commit/8d53180d86e6e9d9c8a4056a5fde0603f17e3157))
|
||||
* show toast when no patches are selected ([8aa70d3](https://github.com/ReVanced/revanced-manager/commit/8aa70d350e07aae8b4a22b6bc6fb90c0f6227acd))
|
||||
* splash screen ([60a5a11](https://github.com/ReVanced/revanced-manager/commit/60a5a11c71634aeda414c2ed85f7706ba3deefe1))
|
||||
* store patched apps ([#79](https://github.com/ReVanced/revanced-manager/issues/79)) ([b14285b](https://github.com/ReVanced/revanced-manager/commit/b14285b2c83e60376ad42fa6ea508257cd04d47d))
|
||||
* switch to androidx.navigation ([#2362](https://github.com/ReVanced/revanced-manager/issues/2362)) ([7438f45](https://github.com/ReVanced/revanced-manager/commit/7438f45903ec6ed3436a895d4c32d34d41b00010))
|
||||
* switch to Preferences DataStore ([#60](https://github.com/ReVanced/revanced-manager/issues/60)) ([1852799](https://github.com/ReVanced/revanced-manager/commit/18527999b5f8752faf36c145276d51e2e095c8ee))
|
||||
* switch to revanced api v4 ([7e858a2](https://github.com/ReVanced/revanced-manager/commit/7e858a244cc4038bdb029c4418278700f6a6490f))
|
||||
* switch to the new api ([#75](https://github.com/ReVanced/revanced-manager/issues/75)) ([a55160e](https://github.com/ReVanced/revanced-manager/commit/a55160e7c619ec5541de72fa80f079c9bc94d2d5))
|
||||
* TopAppBar scroll behavior ([#2397](https://github.com/ReVanced/revanced-manager/issues/2397)) ([dc51d61](https://github.com/ReVanced/revanced-manager/commit/dc51d6134dae0fdc415f66e2716c6bffa35dfdb5))
|
||||
* **Update Screen:** changelogs & handle states ([#1464](https://github.com/ReVanced/revanced-manager/issues/1464)) ([3af26e7](https://github.com/ReVanced/revanced-manager/commit/3af26e706571339a3c69688098a51616549c58a8))
|
||||
* **update screen:** complete main update screen ([553af83](https://github.com/ReVanced/revanced-manager/commit/553af831393d7276088ceb0b0a854ec654f72def))
|
||||
* updater changelogs ([#48](https://github.com/ReVanced/revanced-manager/issues/48)) ([6dbcd62](https://github.com/ReVanced/revanced-manager/commit/6dbcd6293e94d8d20cccc401b0edeb1d7047553e))
|
||||
* updater UI and code improvements ([#1597](https://github.com/ReVanced/revanced-manager/issues/1597)) ([a12cae7](https://github.com/ReVanced/revanced-manager/commit/a12cae72998d85138dcf29c0e5d430359e338d5e))
|
||||
* Use "Debug" and "Debug signed" for build names respectively ([5133f02](https://github.com/ReVanced/revanced-manager/commit/5133f02ad61b85af28608c7180b7a2accb4811ab))
|
||||
* Use correct casing in module description ([59b4c0b](https://github.com/ReVanced/revanced-manager/commit/59b4c0b2d2e426dfe66b5a01d219b57bb0df5b8b))
|
||||
* use revanced api for changelogs ([686eb40](https://github.com/ReVanced/revanced-manager/commit/686eb40cb0f8b8d785732dd2bc82d17b5a4fd042))
|
||||
* Use simpler strings ([83d33e8](https://github.com/ReVanced/revanced-manager/commit/83d33e87e3f89cb3efce63dcabcde6478f69b8e7))
|
||||
* View bundle patches ([#2065](https://github.com/ReVanced/revanced-manager/issues/2065)) ([089f200](https://github.com/ReVanced/revanced-manager/commit/089f200fe6ff59020a87883a47ef20a0c4c08565))
|
||||
|
||||
|
||||
### Reverts
|
||||
|
||||
* downgrade Kotlin to 1.8.21 ([fc90bbc](https://github.com/ReVanced/revanced-manager/commit/fc90bbc27ce765e0b55bb5ac9132e58f46aee9aa))
|
||||
@@ -1,7 +1,3 @@
|
||||
import com.mikepenz.aboutlibraries.plugin.DuplicateMode
|
||||
import com.mikepenz.aboutlibraries.plugin.DuplicateRule
|
||||
import io.github.z4kn4fein.semver.toVersion
|
||||
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
|
||||
import kotlin.random.Random
|
||||
|
||||
plugins {
|
||||
@@ -12,7 +8,6 @@ plugins {
|
||||
alias(libs.plugins.compose.compiler)
|
||||
alias(libs.plugins.devtools)
|
||||
alias(libs.plugins.about.libraries)
|
||||
alias(libs.plugins.about.libraries.android)
|
||||
signing
|
||||
}
|
||||
|
||||
@@ -85,8 +80,7 @@ dependencies {
|
||||
implementation(libs.koin.workmanager)
|
||||
|
||||
// Licenses
|
||||
implementation(libs.about.libraries.core)
|
||||
implementation(libs.about.libraries.m3)
|
||||
implementation(libs.about.libraries)
|
||||
|
||||
// Ktor
|
||||
implementation(libs.ktor.core)
|
||||
@@ -113,60 +107,27 @@ dependencies {
|
||||
|
||||
// Compose Icons
|
||||
implementation(libs.compose.icons.fontawesome)
|
||||
|
||||
// Ackpine
|
||||
implementation(libs.ackpine.core)
|
||||
implementation(libs.ackpine.ktx)
|
||||
}
|
||||
|
||||
buildscript {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
// Semantic versioning string parser
|
||||
classpath(libs.semver.parser)
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "app.revanced.manager"
|
||||
compileSdk = 36
|
||||
compileSdk = 35
|
||||
buildToolsVersion = "35.0.1"
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "app.revanced.manager"
|
||||
minSdk = 26
|
||||
targetSdk = 35
|
||||
|
||||
val versionStr = if (version == "unspecified") "1.0.0" else version.toString()
|
||||
versionName = versionStr
|
||||
versionCode = with(versionStr.toVersion()) {
|
||||
major * 10_000_000 +
|
||||
minor * 10_000 +
|
||||
patch * 100 +
|
||||
(preRelease?.substringAfterLast('.')?.toInt() ?: 99)
|
||||
}
|
||||
versionCode = 1
|
||||
versionName = "0.0.1"
|
||||
vectorDrawables.useSupportLibrary = true
|
||||
|
||||
val resDir = file("src/main/res")
|
||||
val locales = resDir.listFiles()
|
||||
.orEmpty()
|
||||
//noinspection WrongGradleMethod
|
||||
.filter { it.isDirectory && it.name.matches(Regex("values-[a-z]{2}(-r[A-Z]{2})?")) }
|
||||
//noinspection WrongGradleMethod
|
||||
.map { it.name.removePrefix("values-").replace("-r", "-") }
|
||||
.sorted()
|
||||
//noinspection WrongGradleMethod
|
||||
.joinToString(prefix = "{", separator = ",", postfix = "}") { "\"$it\"" }
|
||||
|
||||
buildConfigField("String[]", "SUPPORTED_LOCALES", locales)
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
debug {
|
||||
applicationIdSuffix = ".debug"
|
||||
resValue("string", "app_name", "ReVanced Manager (Debug)")
|
||||
isPseudoLocalesEnabled = true
|
||||
|
||||
buildConfigField("long", "BUILD_ID", "${Random.nextLong()}L")
|
||||
}
|
||||
@@ -238,14 +199,20 @@ android {
|
||||
arg("room.schemaLocation", "$projectDir/schemas")
|
||||
}
|
||||
|
||||
kotlinOptions {
|
||||
jvmTarget = "17"
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
compose = true
|
||||
aidl = true
|
||||
buildConfig = true
|
||||
}
|
||||
|
||||
androidResources {
|
||||
generateLocaleConfig = true
|
||||
android {
|
||||
androidResources {
|
||||
generateLocaleConfig = true
|
||||
}
|
||||
}
|
||||
|
||||
externalNativeBuild {
|
||||
@@ -258,18 +225,6 @@ android {
|
||||
|
||||
kotlin {
|
||||
jvmToolchain(17)
|
||||
compilerOptions {
|
||||
jvmTarget = JvmTarget.JVM_17
|
||||
}
|
||||
}
|
||||
|
||||
aboutLibraries {
|
||||
library {
|
||||
// Enable the duplication mode, allows to merge, or link dependencies which relate
|
||||
duplicationMode = DuplicateMode.MERGE
|
||||
// Configure the duplication rule, to match "duplicates" with
|
||||
duplicationRule = DuplicateRule.EXACT
|
||||
}
|
||||
}
|
||||
|
||||
tasks {
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
version = 1.26.0-dev.20
|
||||
1
app/gradlew
vendored
1
app/gradlew
vendored
@@ -1 +0,0 @@
|
||||
../gradlew
|
||||
@@ -1,11 +0,0 @@
|
||||
{
|
||||
"name": "app",
|
||||
"private": false,
|
||||
"devDependencies": {
|
||||
"@anolilab/multi-semantic-release": "^1.1.10",
|
||||
"@saithodev/semantic-release-backmerge": "^4.0.1",
|
||||
"@semantic-release/changelog": "^6.0.3",
|
||||
"@semantic-release/git": "^10.0.1",
|
||||
"gradle-semantic-release-plugin": "^1.10.1"
|
||||
}
|
||||
}
|
||||
67
app/proguard-rules.pro
vendored
67
app/proguard-rules.pro
vendored
@@ -1,14 +1,63 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.kts.kts.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
-dontobfuscate
|
||||
|
||||
-keep class app.revanced.manager.patcher.runtime.process.* { *; }
|
||||
-keep class app.revanced.manager.plugin.** { *; }
|
||||
-keep class app.revanced.patcher.** { *; }
|
||||
-keep class com.android.tools.smali.** { *; }
|
||||
-keep class kotlin.** { *; }
|
||||
-keepnames class com.android.apksig.internal.** { *; }
|
||||
-keepnames class org.xmlpull.** { *; }
|
||||
# Required for serialization to work properly
|
||||
-if @kotlinx.serialization.Serializable class **
|
||||
-keepclassmembers class <1> {
|
||||
static <1>$Companion Companion;
|
||||
}
|
||||
-if @kotlinx.serialization.Serializable class ** {
|
||||
static **$* *;
|
||||
}
|
||||
-keepclassmembers class <2>$<3> {
|
||||
kotlinx.serialization.KSerializer serializer(...);
|
||||
}
|
||||
-if @kotlinx.serialization.Serializable class ** {
|
||||
public static ** INSTANCE;
|
||||
}
|
||||
-keepclassmembers class <1> {
|
||||
public static <1> INSTANCE;
|
||||
kotlinx.serialization.KSerializer serializer(...);
|
||||
}
|
||||
|
||||
-dontwarn com.google.j2objc.annotations.*
|
||||
# This required for the process runtime.
|
||||
-keep class app.revanced.manager.patcher.runtime.process.* {
|
||||
*;
|
||||
}
|
||||
# Required for the patcher to function correctly
|
||||
-keep class app.revanced.patcher.** {
|
||||
*;
|
||||
}
|
||||
-keep class brut.** {
|
||||
*;
|
||||
}
|
||||
-keep class org.xmlpull.** {
|
||||
*;
|
||||
}
|
||||
-keep class kotlin.** {
|
||||
*;
|
||||
}
|
||||
-keep class org.jf.** {
|
||||
*;
|
||||
}
|
||||
-keep class com.android.** {
|
||||
*;
|
||||
}
|
||||
-keep class app.revanced.manager.plugin.** {
|
||||
*;
|
||||
}
|
||||
|
||||
-dontwarn com.google.auto.value.**
|
||||
-dontwarn java.awt.**
|
||||
-dontwarn javax.**
|
||||
-dontwarn org.slf4j.**
|
||||
-dontwarn org.slf4j.**
|
||||
-dontwarn it.skrape.fetcher.*
|
||||
-dontwarn com.google.j2objc.annotations.*
|
||||
|
||||
-keepattributes RuntimeVisibleAnnotations,AnnotationDefault
|
||||
@@ -51,6 +51,9 @@
|
||||
|
||||
<activity android:name=".plugin.downloader.webview.WebViewActivity" android:exported="false" android:theme="@style/Theme.WebViewActivity" />
|
||||
|
||||
<service android:name=".service.InstallService" />
|
||||
<service android:name=".service.UninstallService" />
|
||||
|
||||
<service
|
||||
android:name="androidx.work.impl.foreground.SystemForegroundService"
|
||||
android:foregroundServiceType="specialUse"
|
||||
@@ -72,15 +75,5 @@
|
||||
android:value="androidx.startup"
|
||||
tools:node="remove" />
|
||||
</provider>
|
||||
|
||||
<provider
|
||||
android:name="androidx.startup.InitializationProvider"
|
||||
android:authorities="${applicationId}.androidx-startup"
|
||||
android:exported="false"
|
||||
tools:node="merge">
|
||||
<meta-data
|
||||
android:name="ru.solrudev.ackpine.AckpineInitializer"
|
||||
tools:node="remove" />
|
||||
</provider>
|
||||
</application>
|
||||
</manifest>
|
||||
@@ -1,4 +0,0 @@
|
||||
// ProgressEventParcel.aidl
|
||||
package app.revanced.manager.patcher;
|
||||
|
||||
parcelable ProgressEventParcel;
|
||||
@@ -1,12 +1,11 @@
|
||||
// IPatcherEvents.aidl
|
||||
package app.revanced.manager.patcher.runtime.process;
|
||||
|
||||
import app.revanced.manager.patcher.ProgressEventParcel;
|
||||
|
||||
// Interface for sending events back to the main app process.
|
||||
oneway interface IPatcherEvents {
|
||||
void log(String level, String msg);
|
||||
void event(in ProgressEventParcel event);
|
||||
void patchSucceeded();
|
||||
void progress(String name, String state, String msg);
|
||||
// The patching process has ended. The exceptionStackTrace is null if it finished successfully.
|
||||
void finished(String exceptionStackTrace);
|
||||
}
|
||||
@@ -3,11 +3,11 @@ package app.revanced.manager
|
||||
import android.content.ActivityNotFoundException
|
||||
import android.os.Bundle
|
||||
import android.os.Parcelable
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.compose.animation.ExperimentalAnimationApi
|
||||
import androidx.compose.animation.slideInHorizontally
|
||||
import androidx.compose.animation.slideOutHorizontally
|
||||
@@ -59,10 +59,11 @@ import app.revanced.manager.ui.viewmodel.SelectedAppInfoViewModel
|
||||
import app.revanced.manager.util.EventEffect
|
||||
import kotlinx.coroutines.launch
|
||||
import org.koin.androidx.compose.koinViewModel
|
||||
import org.koin.androidx.compose.navigation.koinNavViewModel
|
||||
import org.koin.core.parameter.parametersOf
|
||||
import org.koin.androidx.viewmodel.ext.android.getViewModel as getActivityViewModel
|
||||
|
||||
class MainActivity : AppCompatActivity() {
|
||||
class MainActivity : ComponentActivity() {
|
||||
@ExperimentalAnimationApi
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
@@ -80,7 +81,6 @@ class MainActivity : AppCompatActivity() {
|
||||
)
|
||||
val theme by vm.prefs.theme.getAsState()
|
||||
val dynamicColor by vm.prefs.dynamicColor.getAsState()
|
||||
val pureBlackTheme by vm.prefs.pureBlackTheme.getAsState()
|
||||
|
||||
EventEffect(vm.legacyImportActivityFlow) {
|
||||
try {
|
||||
@@ -91,8 +91,7 @@ class MainActivity : AppCompatActivity() {
|
||||
|
||||
ReVancedManagerTheme(
|
||||
darkTheme = theme == Theme.SYSTEM && isSystemInDarkTheme() || theme == Theme.DARK,
|
||||
dynamicColor = dynamicColor,
|
||||
pureBlackTheme = pureBlackTheme
|
||||
dynamicColor = dynamicColor
|
||||
) {
|
||||
ReVancedManager(vm)
|
||||
}
|
||||
@@ -184,7 +183,7 @@ private fun ReVancedManager(vm: MainViewModel) {
|
||||
val data =
|
||||
parentBackStackEntry.getComplexArg<SelectedApplicationInfo.ViewModelParams>()
|
||||
val viewModel =
|
||||
koinViewModel<SelectedAppInfoViewModel>(viewModelStoreOwner = parentBackStackEntry) {
|
||||
koinNavViewModel<SelectedAppInfoViewModel>(viewModelStoreOwner = parentBackStackEntry) {
|
||||
parametersOf(data)
|
||||
}
|
||||
|
||||
@@ -225,7 +224,7 @@ private fun ReVancedManager(vm: MainViewModel) {
|
||||
composable<SelectedApplicationInfo.PatchesSelector> {
|
||||
val data =
|
||||
it.getComplexArg<SelectedApplicationInfo.PatchesSelector.ViewModelParams>()
|
||||
val selectedAppInfoVm = koinViewModel<SelectedAppInfoViewModel>(
|
||||
val selectedAppInfoVm = koinNavViewModel<SelectedAppInfoViewModel>(
|
||||
viewModelStoreOwner = navController.navGraphEntry(it)
|
||||
)
|
||||
|
||||
@@ -242,7 +241,7 @@ private fun ReVancedManager(vm: MainViewModel) {
|
||||
composable<SelectedApplicationInfo.RequiredOptions> {
|
||||
val data =
|
||||
it.getComplexArg<SelectedApplicationInfo.PatchesSelector.ViewModelParams>()
|
||||
val selectedAppInfoVm = koinViewModel<SelectedAppInfoViewModel>(
|
||||
val selectedAppInfoVm = koinNavViewModel<SelectedAppInfoViewModel>(
|
||||
viewModelStoreOwner = navController.navGraphEntry(it)
|
||||
)
|
||||
|
||||
|
||||
@@ -48,8 +48,7 @@ class ManagerApplication : Application() {
|
||||
workerModule,
|
||||
viewModelModule,
|
||||
databaseModule,
|
||||
rootModule,
|
||||
ackpineModule
|
||||
rootModule
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -15,5 +15,5 @@ class NetworkInfo(app: Application) {
|
||||
/**
|
||||
* Returns true if it is safe to download large files.
|
||||
*/
|
||||
fun isSafe(ignoreMetered: Boolean) = isConnected() && (ignoreMetered || isUnmetered())
|
||||
fun isSafe() = isConnected() && isUnmetered()
|
||||
}
|
||||
@@ -1,19 +0,0 @@
|
||||
package app.revanced.manager.di
|
||||
|
||||
import android.content.Context
|
||||
import org.koin.android.ext.koin.androidContext
|
||||
import org.koin.dsl.module
|
||||
import ru.solrudev.ackpine.installer.PackageInstaller
|
||||
import ru.solrudev.ackpine.uninstaller.PackageUninstaller
|
||||
|
||||
val ackpineModule = module {
|
||||
fun provideInstaller(context: Context) = PackageInstaller.getInstance(context)
|
||||
fun provideUninstaller(context: Context) = PackageUninstaller.getInstance(context)
|
||||
|
||||
single {
|
||||
provideInstaller(androidContext())
|
||||
}
|
||||
single {
|
||||
provideUninstaller(androidContext())
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
package app.revanced.manager.di
|
||||
|
||||
import app.revanced.manager.ui.viewmodel.*
|
||||
import org.koin.core.module.dsl.*
|
||||
import org.koin.androidx.viewmodel.dsl.viewModelOf
|
||||
import org.koin.dsl.module
|
||||
|
||||
val viewModelModule = module {
|
||||
|
||||
@@ -27,25 +27,25 @@ class KeystoreManager(app: Application, private val prefs: PreferencesManager) {
|
||||
private val keystorePath =
|
||||
app.getDir("signing", Context.MODE_PRIVATE).resolve("manager.keystore")
|
||||
|
||||
private suspend fun updatePrefs(alias: String, pass: String) = prefs.edit {
|
||||
prefs.keystoreAlias.value = alias
|
||||
private suspend fun updatePrefs(cn: String, pass: String) = prefs.edit {
|
||||
prefs.keystoreCommonName.value = cn
|
||||
prefs.keystorePass.value = pass
|
||||
}
|
||||
|
||||
private suspend fun signingDetails(path: File = keystorePath) = ApkUtils.KeyStoreDetails(
|
||||
keyStore = path,
|
||||
keyStorePassword = null,
|
||||
alias = prefs.keystoreAlias.get(),
|
||||
alias = prefs.keystoreCommonName.get(),
|
||||
password = prefs.keystorePass.get()
|
||||
)
|
||||
|
||||
suspend fun sign(input: File, output: File) = withContext(Dispatchers.Default) {
|
||||
ApkUtils.signApk(input, output, prefs.keystoreAlias.get(), signingDetails())
|
||||
ApkUtils.signApk(input, output, prefs.keystoreCommonName.get(), signingDetails())
|
||||
}
|
||||
|
||||
suspend fun regenerate() = withContext(Dispatchers.Default) {
|
||||
val keyCertPair = ApkSigner.newPrivateKeyCertificatePair(
|
||||
prefs.keystoreAlias.get(),
|
||||
prefs.keystoreCommonName.get(),
|
||||
eightYearsFromNow
|
||||
)
|
||||
val ks = ApkSigner.newKeyStore(
|
||||
@@ -64,13 +64,13 @@ class KeystoreManager(app: Application, private val prefs: PreferencesManager) {
|
||||
updatePrefs(DEFAULT, DEFAULT)
|
||||
}
|
||||
|
||||
suspend fun import(alias: String, pass: String, keystore: InputStream): Boolean {
|
||||
suspend fun import(cn: String, pass: String, keystore: InputStream): Boolean {
|
||||
val keystoreData = withContext(Dispatchers.IO) { keystore.readBytes() }
|
||||
|
||||
try {
|
||||
val ks = ApkSigner.readKeyStore(ByteArrayInputStream(keystoreData), null)
|
||||
|
||||
ApkSigner.readPrivateKeyCertificatePair(ks, alias, pass)
|
||||
ApkSigner.readPrivateKeyCertificatePair(ks, cn, pass)
|
||||
} catch (_: UnrecoverableKeyException) {
|
||||
return false
|
||||
} catch (_: IllegalArgumentException) {
|
||||
@@ -81,7 +81,7 @@ class KeystoreManager(app: Application, private val prefs: PreferencesManager) {
|
||||
Files.write(keystorePath.toPath(), keystoreData)
|
||||
}
|
||||
|
||||
updatePrefs(alias, pass)
|
||||
updatePrefs(cn, pass)
|
||||
return true
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ class PreferencesManager(
|
||||
context: Context
|
||||
) : BasePreferencesManager(context, "settings") {
|
||||
val dynamicColor = booleanPreference("dynamic_color", true)
|
||||
val pureBlackTheme = booleanPreference("pure_black_theme", false)
|
||||
val theme = enumPreference("theme", Theme.SYSTEM)
|
||||
|
||||
val api = stringPreference("api_url", "https://api.revanced.app")
|
||||
@@ -17,14 +16,12 @@ class PreferencesManager(
|
||||
val useProcessRuntime = booleanPreference("use_process_runtime", false)
|
||||
val patcherProcessMemoryLimit = intPreference("process_runtime_memory_limit", 700)
|
||||
|
||||
val keystoreAlias = stringPreference("keystore_alias", KeystoreManager.DEFAULT)
|
||||
val keystoreCommonName = stringPreference("keystore_cn", KeystoreManager.DEFAULT)
|
||||
val keystorePass = stringPreference("keystore_pass", KeystoreManager.DEFAULT)
|
||||
|
||||
val firstLaunch = booleanPreference("first_launch", true)
|
||||
val managerAutoUpdates = booleanPreference("manager_auto_updates", false)
|
||||
val showManagerUpdateDialogOnLaunch = booleanPreference("show_manager_update_dialog_on_launch", true)
|
||||
val useManagerPrereleases = booleanPreference("manager_prereleases", false)
|
||||
val usePatchesPrereleases = booleanPreference("patches_prereleases", false)
|
||||
|
||||
val disablePatchVersionCompatCheck = booleanPreference("disable_patch_version_compatibility_check", false)
|
||||
val disableSelectionWarning = booleanPreference("disable_selection_warning", false)
|
||||
@@ -34,6 +31,4 @@ class PreferencesManager(
|
||||
val acknowledgedDownloaderPlugins = stringSetPreference("acknowledged_downloader_plugins", emptySet())
|
||||
|
||||
val showDeveloperSettings = booleanPreference("show_developer_settings", context.isDebuggable)
|
||||
|
||||
val allowMeteredNetworks = booleanPreference("allow_metered_networks", false)
|
||||
}
|
||||
|
||||
@@ -286,29 +286,28 @@ class PatchBundleRepository(
|
||||
State(sources.toPersistentMap(), info.toPersistentMap())
|
||||
}
|
||||
|
||||
suspend fun createLocal(createStream: suspend () -> InputStream) =
|
||||
dispatchAction("Add bundle") {
|
||||
with(createEntity("", SourceInfo.Local).load() as LocalPatchBundle) {
|
||||
try {
|
||||
createStream().use { patches -> replace(patches) }
|
||||
} catch (e: Exception) {
|
||||
if (e is CancellationException) throw e
|
||||
Log.e(tag, "Got exception while importing bundle", e)
|
||||
withContext(Dispatchers.Main) {
|
||||
app.toast(app.getString(R.string.patches_replace_fail, e.simpleMessage()))
|
||||
}
|
||||
|
||||
deleteLocalFile()
|
||||
suspend fun createLocal(createStream: suspend () -> InputStream) = dispatchAction("Add bundle") {
|
||||
with(createEntity("", SourceInfo.Local).load() as LocalPatchBundle) {
|
||||
try {
|
||||
createStream().use { patches -> replace(patches) }
|
||||
} catch (e: Exception) {
|
||||
if (e is CancellationException) throw e
|
||||
Log.e(tag, "Got exception while importing bundle", e)
|
||||
withContext(Dispatchers.Main) {
|
||||
app.toast(app.getString(R.string.patches_replace_fail, e.simpleMessage()))
|
||||
}
|
||||
}
|
||||
|
||||
doReload()
|
||||
deleteLocalFile()
|
||||
}
|
||||
}
|
||||
|
||||
doReload()
|
||||
}
|
||||
|
||||
suspend fun createRemote(url: String, autoUpdate: Boolean) =
|
||||
dispatchAction("Add bundle ($url)") { state ->
|
||||
val src = createEntity("", SourceInfo.from(url), autoUpdate).load() as RemotePatchBundle
|
||||
update(src, force = true)
|
||||
update(src)
|
||||
state.copy(sources = state.sources.put(src.uid, src))
|
||||
}
|
||||
|
||||
@@ -330,38 +329,32 @@ class PatchBundleRepository(
|
||||
state.copy(sources = state.sources.put(uid, newSrc))
|
||||
}
|
||||
|
||||
suspend fun update(
|
||||
vararg sources: RemotePatchBundle,
|
||||
showToast: Boolean = false,
|
||||
force: Boolean = false
|
||||
) {
|
||||
suspend fun update(vararg sources: RemotePatchBundle, showToast: Boolean = false) {
|
||||
val uids = sources.map { it.uid }.toSet()
|
||||
store.dispatch(Update(showToast = showToast, force = force) { it.uid in uids })
|
||||
store.dispatch(Update(showToast = showToast) { it.uid in uids })
|
||||
}
|
||||
|
||||
suspend fun redownloadRemoteBundles() = store.dispatch(Update(force = true, redownload = true))
|
||||
suspend fun redownloadRemoteBundles() = store.dispatch(Update(force = true))
|
||||
|
||||
/**
|
||||
* Updates all bundles that should be automatically updated.
|
||||
*/
|
||||
suspend fun updateCheck() =
|
||||
store.dispatch(Update(force = prefs.allowMeteredNetworks.get()) { it.autoUpdate })
|
||||
suspend fun updateCheck() = store.dispatch(Update { it.autoUpdate })
|
||||
|
||||
private inner class Update(
|
||||
private val force: Boolean = false,
|
||||
private val redownload: Boolean = false,
|
||||
private val showToast: Boolean = false,
|
||||
private val predicate: (bundle: RemotePatchBundle) -> Boolean = { true },
|
||||
) : Action<State> {
|
||||
private suspend fun toast(@StringRes id: Int, vararg args: Any?) =
|
||||
withContext(Dispatchers.Main) { app.toast(app.getString(id, *args)) }
|
||||
|
||||
override fun toString() = if (redownload) "Redownload remote bundles" else "Update check"
|
||||
override fun toString() = if (force) "Redownload remote bundles" else "Update check"
|
||||
|
||||
override suspend fun ActionContext.execute(
|
||||
current: State
|
||||
) = coroutineScope {
|
||||
if (!networkInfo.isSafe(force)) {
|
||||
if (!networkInfo.isSafe()) {
|
||||
Log.d(tag, "Skipping update check because the network is down or metered.")
|
||||
return@coroutineScope current
|
||||
}
|
||||
@@ -374,7 +367,7 @@ class PatchBundleRepository(
|
||||
Log.d(tag, "Updating patch bundle: ${it.name}")
|
||||
|
||||
val newVersion = with(it) {
|
||||
if (redownload) downloadLatest() else update()
|
||||
if (force) downloadLatest() else update()
|
||||
} ?: return@async null
|
||||
|
||||
it to newVersion
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package app.revanced.manager.network.api
|
||||
|
||||
import app.revanced.manager.BuildConfig
|
||||
import android.os.Build
|
||||
import app.revanced.manager.domain.manager.PreferencesManager
|
||||
import app.revanced.manager.network.dto.ReVancedAsset
|
||||
import app.revanced.manager.network.dto.ReVancedGitRepository
|
||||
@@ -30,12 +30,11 @@ class ReVancedAPI(
|
||||
private suspend inline fun <reified T> request(route: String) = request<T>(apiUrl(), route)
|
||||
|
||||
suspend fun getAppUpdate() =
|
||||
getLatestAppInfo().getOrThrow().takeIf { it.version.removePrefix("v") != BuildConfig.VERSION_NAME }
|
||||
getLatestAppInfo().getOrThrow().takeIf { it.version != Build.VERSION.RELEASE }
|
||||
|
||||
suspend fun getLatestAppInfo() =
|
||||
request<ReVancedAsset>("manager?prerelease=${prefs.useManagerPrereleases.get()}")
|
||||
suspend fun getLatestAppInfo() = request<ReVancedAsset>("manager")
|
||||
|
||||
suspend fun getPatchesUpdate() = request<ReVancedAsset>("patches?prerelease=${prefs.usePatchesPrereleases.get()}")
|
||||
suspend fun getPatchesUpdate() = request<ReVancedAsset>("patches")
|
||||
|
||||
suspend fun getContributors() = request<List<ReVancedGitRepository>>("contributors")
|
||||
|
||||
|
||||
@@ -16,11 +16,8 @@ import io.ktor.http.isSuccess
|
||||
import io.ktor.utils.io.ByteReadChannel
|
||||
import io.ktor.utils.io.core.isNotEmpty
|
||||
import io.ktor.utils.io.core.readBytes
|
||||
import io.ktor.utils.io.exhausted
|
||||
import io.ktor.utils.io.readRemaining
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlinx.io.asSink
|
||||
import kotlinx.serialization.json.Json
|
||||
import java.io.File
|
||||
import java.io.OutputStream
|
||||
@@ -72,12 +69,14 @@ class HttpService(
|
||||
) {
|
||||
http.prepareGet(builder).execute { httpResponse ->
|
||||
if (httpResponse.status.isSuccess()) {
|
||||
val channel: ByteReadChannel = httpResponse.body()
|
||||
withContext(Dispatchers.IO) {
|
||||
val channel: ByteReadChannel = httpResponse.body()
|
||||
val sink = outputStream.asSink()
|
||||
while (!channel.exhausted()) {
|
||||
while (!channel.isClosedForRead) {
|
||||
val packet = channel.readRemaining(DEFAULT_BUFFER_SIZE.toLong())
|
||||
packet.transferTo(sink)
|
||||
while (packet.isNotEmpty) {
|
||||
val bytes = packet.readBytes()
|
||||
outputStream.write(bytes)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
package app.revanced.manager.patcher
|
||||
|
||||
import android.os.Parcelable
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
|
||||
@Parcelize
|
||||
sealed class ProgressEvent : Parcelable {
|
||||
abstract val stepId: StepId?
|
||||
|
||||
data class Started(override val stepId: StepId) : ProgressEvent()
|
||||
|
||||
data class Progress(
|
||||
override val stepId: StepId,
|
||||
val current: Long? = null,
|
||||
val total: Long? = null,
|
||||
val message: String? = null,
|
||||
) : ProgressEvent()
|
||||
|
||||
data class Completed(
|
||||
override val stepId: StepId,
|
||||
) : ProgressEvent()
|
||||
|
||||
data class Failed(
|
||||
override val stepId: StepId?,
|
||||
val error: RemoteError,
|
||||
) : ProgressEvent()
|
||||
}
|
||||
|
||||
/**
|
||||
* Parcelable wrapper for [ProgressEvent].
|
||||
*
|
||||
* Required because AIDL does not support sealed classes.
|
||||
*/
|
||||
@Parcelize
|
||||
data class ProgressEventParcel(val event: ProgressEvent) : Parcelable
|
||||
|
||||
fun ProgressEventParcel.toEvent(): ProgressEvent = event
|
||||
fun ProgressEvent.toParcel(): ProgressEventParcel = ProgressEventParcel(this)
|
||||
|
||||
@Parcelize
|
||||
sealed class StepId : Parcelable {
|
||||
data object DownloadAPK : StepId()
|
||||
data object LoadPatches : StepId()
|
||||
data object ReadAPK : StepId()
|
||||
data object ExecutePatches : StepId()
|
||||
data class ExecutePatch(val index: Int) : StepId()
|
||||
data object WriteAPK : StepId()
|
||||
data object SignAPK : StepId()
|
||||
}
|
||||
|
||||
@Parcelize
|
||||
data class RemoteError(
|
||||
val type: String,
|
||||
val message: String?,
|
||||
val stackTrace: String,
|
||||
) : Parcelable
|
||||
|
||||
fun Exception.toRemoteError() = RemoteError(
|
||||
type = this::class.java.name,
|
||||
message = this.message,
|
||||
stackTrace = this.stackTraceToString(),
|
||||
)
|
||||
|
||||
|
||||
inline fun <T> runStep(
|
||||
stepId: StepId,
|
||||
onEvent: (ProgressEvent) -> Unit,
|
||||
block: () -> T,
|
||||
): T = try {
|
||||
onEvent(ProgressEvent.Started(stepId))
|
||||
val value = block()
|
||||
onEvent(ProgressEvent.Completed(stepId))
|
||||
value
|
||||
} catch (error: Exception) {
|
||||
onEvent(ProgressEvent.Failed(stepId, error.toRemoteError()))
|
||||
throw error
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
package app.revanced.manager.patcher
|
||||
|
||||
import android.content.Context
|
||||
import app.revanced.library.ApkUtils.applyTo
|
||||
import app.revanced.manager.patcher.Session.Companion.component1
|
||||
import app.revanced.manager.patcher.Session.Companion.component2
|
||||
import app.revanced.manager.R
|
||||
import app.revanced.manager.patcher.logger.Logger
|
||||
import app.revanced.manager.ui.model.State
|
||||
import app.revanced.patcher.Patcher
|
||||
import app.revanced.patcher.PatcherConfig
|
||||
import app.revanced.patcher.patch.Patch
|
||||
@@ -21,10 +22,15 @@ class Session(
|
||||
cacheDir: String,
|
||||
frameworkDir: String,
|
||||
aaptPath: String,
|
||||
private val androidContext: Context,
|
||||
private val logger: Logger,
|
||||
private val input: File,
|
||||
private val onEvent: (ProgressEvent) -> Unit,
|
||||
private val onPatchCompleted: suspend () -> Unit,
|
||||
private val onProgress: (name: String?, state: State?, message: String?) -> Unit
|
||||
) : Closeable {
|
||||
private fun updateProgress(name: String? = null, state: State? = null, message: String? = null) =
|
||||
onProgress(name, state, message)
|
||||
|
||||
private val tempDir = File(cacheDir).resolve("patcher").also { it.mkdirs() }
|
||||
private val patcher = Patcher(
|
||||
PatcherConfig(
|
||||
@@ -36,68 +42,86 @@ class Session(
|
||||
)
|
||||
|
||||
private suspend fun Patcher.applyPatchesVerbose(selectedPatches: PatchList) {
|
||||
var nextPatchIndex = 0
|
||||
|
||||
updateProgress(
|
||||
name = androidContext.getString(R.string.executing_patch, selectedPatches[nextPatchIndex]),
|
||||
state = State.RUNNING
|
||||
)
|
||||
|
||||
this().collect { (patch, exception) ->
|
||||
val index = selectedPatches.indexOf(patch)
|
||||
if (index == -1) return@collect
|
||||
if (patch !in selectedPatches) return@collect
|
||||
|
||||
if (exception != null) {
|
||||
onEvent(
|
||||
ProgressEvent.Failed(
|
||||
StepId.ExecutePatch(index),
|
||||
exception.toRemoteError(),
|
||||
)
|
||||
updateProgress(
|
||||
name = androidContext.getString(R.string.failed_to_execute_patch, patch.name),
|
||||
state = State.FAILED,
|
||||
message = exception.stackTraceToString()
|
||||
)
|
||||
|
||||
logger.error("${patch.name} failed:")
|
||||
logger.error(exception.stackTraceToString())
|
||||
throw exception
|
||||
}
|
||||
|
||||
onEvent(
|
||||
ProgressEvent.Completed(
|
||||
StepId.ExecutePatch(index),
|
||||
nextPatchIndex++
|
||||
|
||||
onPatchCompleted()
|
||||
|
||||
selectedPatches.getOrNull(nextPatchIndex)?.let { nextPatch ->
|
||||
updateProgress(
|
||||
name = androidContext.getString(R.string.executing_patch, nextPatch.name)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
logger.info("${patch.name} succeeded")
|
||||
}
|
||||
|
||||
updateProgress(
|
||||
state = State.COMPLETED,
|
||||
name = androidContext.resources.getQuantityString(
|
||||
R.plurals.patches_executed,
|
||||
selectedPatches.size,
|
||||
selectedPatches.size
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
suspend fun run(output: File, selectedPatches: PatchList) {
|
||||
runStep(StepId.ExecutePatches, onEvent) {
|
||||
java.util.logging.Logger.getLogger("").apply {
|
||||
handlers.forEach {
|
||||
it.close()
|
||||
removeHandler(it)
|
||||
}
|
||||
updateProgress(state = State.COMPLETED) // Unpacking
|
||||
|
||||
addHandler(logger.handler)
|
||||
java.util.logging.Logger.getLogger("").apply {
|
||||
handlers.forEach {
|
||||
it.close()
|
||||
removeHandler(it)
|
||||
}
|
||||
|
||||
with(patcher) {
|
||||
logger.info("Merging integrations")
|
||||
this += selectedPatches.toSet()
|
||||
|
||||
logger.info("Applying patches...")
|
||||
applyPatchesVerbose(selectedPatches.sortedBy { it.name })
|
||||
}
|
||||
addHandler(logger.handler)
|
||||
}
|
||||
|
||||
runStep(StepId.WriteAPK, onEvent) {
|
||||
logger.info("Writing patched files...")
|
||||
val result = patcher.get()
|
||||
with(patcher) {
|
||||
logger.info("Merging integrations")
|
||||
this += selectedPatches.toSet()
|
||||
|
||||
val patched = tempDir.resolve("result.apk")
|
||||
withContext(Dispatchers.IO) {
|
||||
Files.copy(input.toPath(), patched.toPath(), StandardCopyOption.REPLACE_EXISTING)
|
||||
}
|
||||
result.applyTo(patched)
|
||||
|
||||
logger.info("Patched apk saved to $patched")
|
||||
|
||||
withContext(Dispatchers.IO) {
|
||||
Files.move(patched.toPath(), output.toPath(), StandardCopyOption.REPLACE_EXISTING)
|
||||
}
|
||||
logger.info("Applying patches...")
|
||||
applyPatchesVerbose(selectedPatches.sortedBy { it.name })
|
||||
}
|
||||
|
||||
logger.info("Writing patched files...")
|
||||
val result = patcher.get()
|
||||
|
||||
val patched = tempDir.resolve("result.apk")
|
||||
withContext(Dispatchers.IO) {
|
||||
Files.copy(input.toPath(), patched.toPath(), StandardCopyOption.REPLACE_EXISTING)
|
||||
}
|
||||
result.applyTo(patched)
|
||||
|
||||
logger.info("Patched apk saved to $patched")
|
||||
|
||||
withContext(Dispatchers.IO) {
|
||||
Files.move(patched.toPath(), output.toPath(), StandardCopyOption.REPLACE_EXISTING)
|
||||
}
|
||||
updateProgress(state = State.COMPLETED) // Saving
|
||||
}
|
||||
|
||||
override fun close() {
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
package app.revanced.manager.patcher.runtime
|
||||
|
||||
import android.content.Context
|
||||
import app.revanced.manager.patcher.ProgressEvent
|
||||
import app.revanced.manager.patcher.Session
|
||||
import app.revanced.manager.patcher.StepId
|
||||
import app.revanced.manager.patcher.logger.Logger
|
||||
import app.revanced.manager.patcher.patch.PatchBundle
|
||||
import app.revanced.manager.patcher.runStep
|
||||
import app.revanced.manager.patcher.worker.ProgressEventHandler
|
||||
import app.revanced.manager.ui.model.State
|
||||
import app.revanced.manager.util.Options
|
||||
import app.revanced.manager.util.PatchSelection
|
||||
import java.io.File
|
||||
@@ -14,7 +13,7 @@ import java.io.File
|
||||
/**
|
||||
* Simple [Runtime] implementation that runs the patcher using coroutines.
|
||||
*/
|
||||
class CoroutineRuntime(context: Context) : Runtime(context) {
|
||||
class CoroutineRuntime(private val context: Context) : Runtime(context) {
|
||||
override suspend fun execute(
|
||||
inputFile: String,
|
||||
outputFile: String,
|
||||
@@ -22,50 +21,47 @@ class CoroutineRuntime(context: Context) : Runtime(context) {
|
||||
selectedPatches: PatchSelection,
|
||||
options: Options,
|
||||
logger: Logger,
|
||||
onEvent: (ProgressEvent) -> Unit,
|
||||
onPatchCompleted: suspend () -> Unit,
|
||||
onProgress: ProgressEventHandler,
|
||||
) {
|
||||
val patchList = runStep(StepId.LoadPatches, onEvent) {
|
||||
val selectedBundles = selectedPatches.keys
|
||||
val bundles = bundles()
|
||||
val uids = bundles.entries.associate { (key, value) -> value to key }
|
||||
val selectedBundles = selectedPatches.keys
|
||||
val bundles = bundles()
|
||||
val uids = bundles.entries.associate { (key, value) -> value to key }
|
||||
|
||||
val allPatches =
|
||||
PatchBundle.Loader.patches(bundles.values, packageName)
|
||||
.mapKeys { (b, _) -> uids[b]!! }
|
||||
.filterKeys { it in selectedBundles }
|
||||
val allPatches =
|
||||
PatchBundle.Loader.patches(bundles.values, packageName)
|
||||
.mapKeys { (b, _) -> uids[b]!! }
|
||||
.filterKeys { it in selectedBundles }
|
||||
|
||||
val patchList = selectedPatches.flatMap { (bundle, selected) ->
|
||||
allPatches[bundle]?.filter { it.name in selected }
|
||||
?: throw IllegalArgumentException("Patch bundle $bundle does not exist")
|
||||
}
|
||||
val patchList = selectedPatches.flatMap { (bundle, selected) ->
|
||||
allPatches[bundle]?.filter { it.name in selected }
|
||||
?: throw IllegalArgumentException("Patch bundle $bundle does not exist")
|
||||
}
|
||||
|
||||
// Set all patch options.
|
||||
options.forEach { (bundle, bundlePatchOptions) ->
|
||||
val patches = allPatches[bundle] ?: return@forEach
|
||||
bundlePatchOptions.forEach { (patchName, configuredPatchOptions) ->
|
||||
val patchOptions = patches.single { it.name == patchName }.options
|
||||
configuredPatchOptions.forEach { (key, value) ->
|
||||
patchOptions[key] = value
|
||||
}
|
||||
// Set all patch options.
|
||||
options.forEach { (bundle, bundlePatchOptions) ->
|
||||
val patches = allPatches[bundle] ?: return@forEach
|
||||
bundlePatchOptions.forEach { (patchName, configuredPatchOptions) ->
|
||||
val patchOptions = patches.single { it.name == patchName }.options
|
||||
configuredPatchOptions.forEach { (key, value) ->
|
||||
patchOptions[key] = value
|
||||
}
|
||||
}
|
||||
|
||||
patchList
|
||||
}
|
||||
|
||||
val session = runStep(StepId.ReadAPK, onEvent) {
|
||||
Session(
|
||||
cacheDir,
|
||||
frameworkPath,
|
||||
aaptPath,
|
||||
logger,
|
||||
File(inputFile),
|
||||
onEvent,
|
||||
)
|
||||
}
|
||||
onProgress(null, State.COMPLETED, null) // Loading patches
|
||||
|
||||
session.use { s ->
|
||||
s.run(
|
||||
Session(
|
||||
cacheDir,
|
||||
frameworkPath,
|
||||
aaptPath,
|
||||
context,
|
||||
logger,
|
||||
File(inputFile),
|
||||
onPatchCompleted = onPatchCompleted,
|
||||
onProgress
|
||||
).use { session ->
|
||||
session.run(
|
||||
File(outputFile),
|
||||
patchList
|
||||
)
|
||||
|
||||
@@ -10,13 +10,12 @@ import app.revanced.manager.BuildConfig
|
||||
import app.revanced.manager.patcher.runtime.process.IPatcherEvents
|
||||
import app.revanced.manager.patcher.runtime.process.IPatcherProcess
|
||||
import app.revanced.manager.patcher.LibraryResolver
|
||||
import app.revanced.manager.patcher.ProgressEvent
|
||||
import app.revanced.manager.patcher.ProgressEventParcel
|
||||
import app.revanced.manager.patcher.logger.Logger
|
||||
import app.revanced.manager.patcher.runtime.process.Parameters
|
||||
import app.revanced.manager.patcher.runtime.process.PatchConfiguration
|
||||
import app.revanced.manager.patcher.runtime.process.PatcherProcess
|
||||
import app.revanced.manager.patcher.toEvent
|
||||
import app.revanced.manager.patcher.worker.ProgressEventHandler
|
||||
import app.revanced.manager.ui.model.State
|
||||
import app.revanced.manager.util.Options
|
||||
import app.revanced.manager.util.PM
|
||||
import app.revanced.manager.util.PatchSelection
|
||||
@@ -67,7 +66,8 @@ class ProcessRuntime(private val context: Context) : Runtime(context) {
|
||||
selectedPatches: PatchSelection,
|
||||
options: Options,
|
||||
logger: Logger,
|
||||
onEvent: (ProgressEvent) -> Unit,
|
||||
onPatchCompleted: suspend () -> Unit,
|
||||
onProgress: ProgressEventHandler,
|
||||
) = coroutineScope {
|
||||
// Get the location of our own Apk.
|
||||
val managerBaseApk = pm.getPackageInfo(context.packageName)!!.applicationInfo!!.sourceDir
|
||||
@@ -111,6 +111,7 @@ class ProcessRuntime(private val context: Context) : Runtime(context) {
|
||||
}
|
||||
|
||||
val patching = CompletableDeferred<Unit>()
|
||||
val scope = this
|
||||
|
||||
launch(Dispatchers.IO) {
|
||||
val binder = awaitBinderConnection()
|
||||
@@ -123,10 +124,13 @@ class ProcessRuntime(private val context: Context) : Runtime(context) {
|
||||
val eventHandler = object : IPatcherEvents.Stub() {
|
||||
override fun log(level: String, msg: String) = logger.log(enumValueOf(level), msg)
|
||||
|
||||
override fun event(event: ProgressEventParcel?) {
|
||||
event?.let { onEvent(it.toEvent()) }
|
||||
override fun patchSucceeded() {
|
||||
scope.launch { onPatchCompleted() }
|
||||
}
|
||||
|
||||
override fun progress(name: String?, state: String?, msg: String?) =
|
||||
onProgress(name, state?.let { enumValueOf<State>(it) }, msg)
|
||||
|
||||
override fun finished(exceptionStackTrace: String?) {
|
||||
binder.exit()
|
||||
|
||||
|
||||
@@ -4,9 +4,9 @@ import android.content.Context
|
||||
import app.revanced.manager.data.platform.Filesystem
|
||||
import app.revanced.manager.domain.manager.PreferencesManager
|
||||
import app.revanced.manager.domain.repository.PatchBundleRepository
|
||||
import app.revanced.manager.patcher.ProgressEvent
|
||||
import app.revanced.manager.patcher.aapt.Aapt
|
||||
import app.revanced.manager.patcher.logger.Logger
|
||||
import app.revanced.manager.patcher.worker.ProgressEventHandler
|
||||
import app.revanced.manager.util.Options
|
||||
import app.revanced.manager.util.PatchSelection
|
||||
import kotlinx.coroutines.flow.first
|
||||
@@ -34,6 +34,7 @@ sealed class Runtime(context: Context) : KoinComponent {
|
||||
selectedPatches: PatchSelection,
|
||||
options: Options,
|
||||
logger: Logger,
|
||||
onEvent: (ProgressEvent) -> Unit,
|
||||
onPatchCompleted: suspend () -> Unit,
|
||||
onProgress: ProgressEventHandler,
|
||||
)
|
||||
}
|
||||
@@ -8,15 +8,12 @@ import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.Looper
|
||||
import app.revanced.manager.BuildConfig
|
||||
import app.revanced.manager.patcher.ProgressEvent
|
||||
import app.revanced.manager.patcher.Session
|
||||
import app.revanced.manager.patcher.StepId
|
||||
import app.revanced.manager.patcher.logger.LogLevel
|
||||
import app.revanced.manager.patcher.logger.Logger
|
||||
import app.revanced.manager.patcher.patch.PatchBundle
|
||||
import app.revanced.manager.patcher.runStep
|
||||
import app.revanced.manager.patcher.runtime.ProcessRuntime
|
||||
import app.revanced.manager.patcher.toParcel
|
||||
import app.revanced.manager.ui.model.State
|
||||
import kotlinx.coroutines.CoroutineExceptionHandler
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -27,7 +24,7 @@ import kotlin.system.exitProcess
|
||||
/**
|
||||
* The main class that runs inside the runner process launched by [ProcessRuntime].
|
||||
*/
|
||||
class PatcherProcess() : IPatcherProcess.Stub() {
|
||||
class PatcherProcess(private val context: Context) : IPatcherProcess.Stub() {
|
||||
private var eventBinder: IPatcherEvents? = null
|
||||
|
||||
private val scope =
|
||||
@@ -49,8 +46,6 @@ class PatcherProcess() : IPatcherProcess.Stub() {
|
||||
override fun exit() = exitProcess(0)
|
||||
|
||||
override fun start(parameters: Parameters, events: IPatcherEvents) {
|
||||
fun onEvent(event: ProgressEvent) = events.event(event.toParcel())
|
||||
|
||||
eventBinder = events
|
||||
|
||||
scope.launch {
|
||||
@@ -61,42 +56,38 @@ class PatcherProcess() : IPatcherProcess.Stub() {
|
||||
|
||||
logger.info("Memory limit: ${Runtime.getRuntime().maxMemory() / (1024 * 1024)}MB")
|
||||
|
||||
val patchList = runStep(StepId.LoadPatches, ::onEvent) {
|
||||
val allPatches = PatchBundle.Loader.patches(
|
||||
parameters.configurations.map { it.bundle },
|
||||
parameters.packageName
|
||||
)
|
||||
|
||||
parameters.configurations.flatMap { config ->
|
||||
val patches = (allPatches[config.bundle] ?: return@flatMap emptyList())
|
||||
val allPatches = PatchBundle.Loader.patches(parameters.configurations.map { it.bundle }, parameters.packageName)
|
||||
val patchList = parameters.configurations.flatMap { config ->
|
||||
val patches = (allPatches[config.bundle] ?: return@flatMap emptyList())
|
||||
.filter { it.name in config.patches }
|
||||
.associateBy { it.name }
|
||||
|
||||
config.options.forEach { (patchName, opts) ->
|
||||
val patchOptions = patches[patchName]?.options
|
||||
?: throw Exception("Patch with name $patchName does not exist.")
|
||||
config.options.forEach { (patchName, opts) ->
|
||||
val patchOptions = patches[patchName]?.options
|
||||
?: throw Exception("Patch with name $patchName does not exist.")
|
||||
|
||||
opts.forEach { (key, value) ->
|
||||
patchOptions[key] = value
|
||||
}
|
||||
opts.forEach { (key, value) ->
|
||||
patchOptions[key] = value
|
||||
}
|
||||
|
||||
patches.values
|
||||
}
|
||||
|
||||
patches.values
|
||||
}
|
||||
|
||||
val session = runStep(StepId.ReadAPK, ::onEvent) {
|
||||
Session(
|
||||
cacheDir = parameters.cacheDir,
|
||||
aaptPath = parameters.aaptPath,
|
||||
frameworkDir = parameters.frameworkDir,
|
||||
logger = logger,
|
||||
input = File(parameters.inputFile),
|
||||
onEvent = ::onEvent,
|
||||
)
|
||||
}
|
||||
events.progress(null, State.COMPLETED.name, null) // Loading patches
|
||||
|
||||
session.use {
|
||||
Session(
|
||||
cacheDir = parameters.cacheDir,
|
||||
aaptPath = parameters.aaptPath,
|
||||
frameworkDir = parameters.frameworkDir,
|
||||
androidContext = context,
|
||||
logger = logger,
|
||||
input = File(parameters.inputFile),
|
||||
onPatchCompleted = { events.patchSucceeded() },
|
||||
onProgress = { name, state, message ->
|
||||
events.progress(name, state?.name, message)
|
||||
}
|
||||
).use {
|
||||
it.run(File(parameters.outputFile), patchList)
|
||||
}
|
||||
|
||||
@@ -128,7 +119,7 @@ class PatcherProcess() : IPatcherProcess.Stub() {
|
||||
}
|
||||
}
|
||||
|
||||
val ipcInterface = PatcherProcess()
|
||||
val ipcInterface = PatcherProcess(appContext)
|
||||
|
||||
appContext.sendBroadcast(Intent().apply {
|
||||
action = ProcessRuntime.CONNECT_TO_APP_ACTION
|
||||
|
||||
@@ -29,17 +29,14 @@ import app.revanced.manager.domain.repository.InstalledAppRepository
|
||||
import app.revanced.manager.domain.worker.Worker
|
||||
import app.revanced.manager.domain.worker.WorkerRepository
|
||||
import app.revanced.manager.network.downloader.LoadedDownloaderPlugin
|
||||
import app.revanced.manager.patcher.ProgressEvent
|
||||
import app.revanced.manager.patcher.StepId
|
||||
import app.revanced.manager.patcher.logger.Logger
|
||||
import app.revanced.manager.patcher.runStep
|
||||
import app.revanced.manager.patcher.runtime.CoroutineRuntime
|
||||
import app.revanced.manager.patcher.runtime.ProcessRuntime
|
||||
import app.revanced.manager.patcher.toRemoteError
|
||||
import app.revanced.manager.plugin.downloader.GetScope
|
||||
import app.revanced.manager.plugin.downloader.PluginHostApi
|
||||
import app.revanced.manager.plugin.downloader.UserInteractionException
|
||||
import app.revanced.manager.ui.model.SelectedApp
|
||||
import app.revanced.manager.ui.model.State
|
||||
import app.revanced.manager.util.Options
|
||||
import app.revanced.manager.util.PM
|
||||
import app.revanced.manager.util.PatchSelection
|
||||
@@ -51,6 +48,8 @@ import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.inject
|
||||
import java.io.File
|
||||
|
||||
typealias ProgressEventHandler = (name: String?, state: State?, message: String?) -> Unit
|
||||
|
||||
@OptIn(PluginHostApi::class)
|
||||
class PatcherWorker(
|
||||
context: Context,
|
||||
@@ -72,9 +71,11 @@ class PatcherWorker(
|
||||
val selectedPatches: PatchSelection,
|
||||
val options: Options,
|
||||
val logger: Logger,
|
||||
val onDownloadProgress: suspend (Pair<Long, Long?>?) -> Unit,
|
||||
val onPatchCompleted: suspend () -> Unit,
|
||||
val handleStartActivityRequest: suspend (LoadedDownloaderPlugin, Intent) -> ActivityResult,
|
||||
val setInputFile: suspend (File) -> Unit,
|
||||
val onEvent: (ProgressEvent) -> Unit,
|
||||
val onProgress: ProgressEventHandler
|
||||
) {
|
||||
val packageName get() = input.packageName
|
||||
}
|
||||
@@ -139,6 +140,10 @@ class PatcherWorker(
|
||||
}
|
||||
|
||||
private suspend fun runPatcher(args: Args): Result {
|
||||
|
||||
fun updateProgress(name: String? = null, state: State? = null, message: String? = null) =
|
||||
args.onProgress(name, state, message)
|
||||
|
||||
val patchedApk = fs.tempDir.resolve("patched.apk")
|
||||
|
||||
return try {
|
||||
@@ -158,65 +163,51 @@ class PatcherWorker(
|
||||
args.input.version,
|
||||
prefs.suggestedVersionSafeguard.get(),
|
||||
!prefs.disablePatchVersionCompatCheck.get(),
|
||||
onDownload = { progress ->
|
||||
args.onEvent(
|
||||
ProgressEvent.Progress(
|
||||
stepId = StepId.DownloadAPK,
|
||||
current = progress.first,
|
||||
total = progress.second
|
||||
)
|
||||
)
|
||||
}
|
||||
).also { args.setInputFile(it) }
|
||||
onDownload = args.onDownloadProgress
|
||||
).also {
|
||||
args.setInputFile(it)
|
||||
updateProgress(state = State.COMPLETED) // Download APK
|
||||
}
|
||||
|
||||
val inputFile = when (val selectedApp = args.input) {
|
||||
is SelectedApp.Download -> {
|
||||
runStep(StepId.DownloadAPK, args.onEvent) {
|
||||
val (plugin, data) = downloaderPluginRepository.unwrapParceledData(
|
||||
selectedApp.data
|
||||
)
|
||||
val (plugin, data) = downloaderPluginRepository.unwrapParceledData(selectedApp.data)
|
||||
|
||||
download(plugin, data)
|
||||
}
|
||||
download(plugin, data)
|
||||
}
|
||||
|
||||
is SelectedApp.Search -> {
|
||||
runStep(StepId.DownloadAPK, args.onEvent) {
|
||||
downloaderPluginRepository.loadedPluginsFlow.first()
|
||||
.firstNotNullOfOrNull { plugin ->
|
||||
try {
|
||||
val getScope = object : GetScope {
|
||||
override val pluginPackageName = plugin.packageName
|
||||
override val hostPackageName =
|
||||
applicationContext.packageName
|
||||
|
||||
override suspend fun requestStartActivity(intent: Intent): Intent? {
|
||||
val result =
|
||||
args.handleStartActivityRequest(plugin, intent)
|
||||
return when (result.resultCode) {
|
||||
Activity.RESULT_OK -> result.data
|
||||
Activity.RESULT_CANCELED -> throw UserInteractionException.Activity.Cancelled()
|
||||
else -> throw UserInteractionException.Activity.NotCompleted(
|
||||
result.resultCode,
|
||||
result.data
|
||||
)
|
||||
}
|
||||
downloaderPluginRepository.loadedPluginsFlow.first()
|
||||
.firstNotNullOfOrNull { plugin ->
|
||||
try {
|
||||
val getScope = object : GetScope {
|
||||
override val pluginPackageName = plugin.packageName
|
||||
override val hostPackageName = applicationContext.packageName
|
||||
override suspend fun requestStartActivity(intent: Intent): Intent? {
|
||||
val result = args.handleStartActivityRequest(plugin, intent)
|
||||
return when (result.resultCode) {
|
||||
Activity.RESULT_OK -> result.data
|
||||
Activity.RESULT_CANCELED -> throw UserInteractionException.Activity.Cancelled()
|
||||
else -> throw UserInteractionException.Activity.NotCompleted(
|
||||
result.resultCode,
|
||||
result.data
|
||||
)
|
||||
}
|
||||
}
|
||||
withContext(Dispatchers.IO) {
|
||||
plugin.get(
|
||||
getScope,
|
||||
selectedApp.packageName,
|
||||
selectedApp.version
|
||||
)
|
||||
}?.takeIf { (_, version) -> selectedApp.version == null || version == selectedApp.version }
|
||||
} catch (e: UserInteractionException.Activity.NotCompleted) {
|
||||
throw e
|
||||
} catch (_: UserInteractionException) {
|
||||
null
|
||||
}?.let { (data, _) -> download(plugin, data) }
|
||||
} ?: throw Exception("App is not available.")
|
||||
}
|
||||
}
|
||||
withContext(Dispatchers.IO) {
|
||||
plugin.get(
|
||||
getScope,
|
||||
selectedApp.packageName,
|
||||
selectedApp.version
|
||||
)
|
||||
}?.takeIf { (_, version) -> selectedApp.version == null || version == selectedApp.version }
|
||||
} catch (e: UserInteractionException.Activity.NotCompleted) {
|
||||
throw e
|
||||
} catch (_: UserInteractionException) {
|
||||
null
|
||||
}?.let { (data, _) -> download(plugin, data) }
|
||||
} ?: throw Exception("App is not available.")
|
||||
}
|
||||
|
||||
is SelectedApp.Local -> selectedApp.file.also { args.setInputFile(it) }
|
||||
@@ -236,12 +227,12 @@ class PatcherWorker(
|
||||
args.selectedPatches,
|
||||
args.options,
|
||||
args.logger,
|
||||
args.onEvent,
|
||||
args.onPatchCompleted,
|
||||
args.onProgress
|
||||
)
|
||||
|
||||
runStep(StepId.SignAPK, args.onEvent) {
|
||||
keystoreManager.sign(patchedApk, File(args.output))
|
||||
}
|
||||
keystoreManager.sign(patchedApk, File(args.output))
|
||||
updateProgress(state = State.COMPLETED) // Signing
|
||||
|
||||
Log.i(tag, "Patching succeeded".logFmt())
|
||||
Result.success()
|
||||
@@ -250,11 +241,11 @@ class PatcherWorker(
|
||||
tag,
|
||||
"An exception occurred in the remote process while patching. ${e.originalStackTrace}".logFmt()
|
||||
)
|
||||
args.onEvent(ProgressEvent.Failed(null, e.toRemoteError())) // Fallback if exception doesn't occur within step
|
||||
updateProgress(state = State.FAILED, message = e.originalStackTrace)
|
||||
Result.failure()
|
||||
} catch (e: Exception) {
|
||||
Log.e(tag, "An exception occurred while patching".logFmt(), e)
|
||||
args.onEvent(ProgressEvent.Failed(null, e.toRemoteError())) // Fallback if exception doesn't occur within step
|
||||
updateProgress(state = State.FAILED, message = e.stackTraceToString())
|
||||
Result.failure()
|
||||
} finally {
|
||||
patchedApk.delete()
|
||||
|
||||
@@ -0,0 +1,53 @@
|
||||
package app.revanced.manager.service
|
||||
|
||||
import android.app.Service
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageInstaller
|
||||
import android.os.Build
|
||||
import android.os.IBinder
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
class InstallService : Service() {
|
||||
|
||||
override fun onStartCommand(
|
||||
intent: Intent, flags: Int, startId: Int
|
||||
): Int {
|
||||
val extraStatus = intent.getIntExtra(PackageInstaller.EXTRA_STATUS, -999)
|
||||
val extraStatusMessage = intent.getStringExtra(PackageInstaller.EXTRA_STATUS_MESSAGE)
|
||||
val extraPackageName = intent.getStringExtra(PackageInstaller.EXTRA_PACKAGE_NAME)
|
||||
when (extraStatus) {
|
||||
PackageInstaller.STATUS_PENDING_USER_ACTION -> {
|
||||
startActivity(if (Build.VERSION.SDK_INT >= 33) {
|
||||
intent.getParcelableExtra(Intent.EXTRA_INTENT, Intent::class.java)
|
||||
} else {
|
||||
intent.getParcelableExtra(Intent.EXTRA_INTENT)
|
||||
}.apply {
|
||||
this?.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
})
|
||||
}
|
||||
|
||||
else -> {
|
||||
sendBroadcast(Intent().apply {
|
||||
action = APP_INSTALL_ACTION
|
||||
`package` = packageName
|
||||
putExtra(EXTRA_INSTALL_STATUS, extraStatus)
|
||||
putExtra(EXTRA_INSTALL_STATUS_MESSAGE, extraStatusMessage)
|
||||
putExtra(EXTRA_PACKAGE_NAME, extraPackageName)
|
||||
})
|
||||
}
|
||||
}
|
||||
stopSelf()
|
||||
return START_NOT_STICKY
|
||||
}
|
||||
|
||||
override fun onBind(intent: Intent?): IBinder? = null
|
||||
|
||||
companion object {
|
||||
const val APP_INSTALL_ACTION = "APP_INSTALL_ACTION"
|
||||
|
||||
const val EXTRA_INSTALL_STATUS = "EXTRA_INSTALL_STATUS"
|
||||
const val EXTRA_INSTALL_STATUS_MESSAGE = "EXTRA_INSTALL_STATUS_MESSAGE"
|
||||
const val EXTRA_PACKAGE_NAME = "EXTRA_PACKAGE_NAME"
|
||||
}
|
||||
|
||||
}
|
||||
@@ -16,7 +16,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.ColorFilter
|
||||
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||
import coil.compose.AsyncImage
|
||||
import com.eygraber.compose.placeholder.material3.placeholder
|
||||
import io.github.fornewid.placeholder.material3.placeholder
|
||||
|
||||
@Composable
|
||||
fun AppIcon(
|
||||
|
||||
@@ -16,7 +16,7 @@ import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import app.revanced.manager.R
|
||||
import com.eygraber.compose.placeholder.material3.placeholder
|
||||
import io.github.fornewid.placeholder.material3.placeholder
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.withContext
|
||||
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package app.revanced.manager.ui.component
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.pm.PackageInstaller
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.annotation.StringRes
|
||||
@@ -80,7 +79,7 @@ private fun installerStatusDialogButton(
|
||||
enum class DialogKind(
|
||||
val flag: Int,
|
||||
val title: Int,
|
||||
@param:StringRes val contentStringResId: Int,
|
||||
@StringRes val contentStringResId: Int,
|
||||
val icon: ImageVector = Icons.Outlined.ErrorOutline,
|
||||
val confirmButton: InstallerStatusDialogButton = installerStatusDialogButton(R.string.ok),
|
||||
val dismissButton: InstallerStatusDialogButton? = null,
|
||||
@@ -134,8 +133,10 @@ enum class DialogKind(
|
||||
title = R.string.installation_storage_issue_dialog_title,
|
||||
contentStringResId = R.string.installation_storage_issue_description,
|
||||
),
|
||||
|
||||
@RequiresApi(34)
|
||||
FAILURE_TIMEOUT(
|
||||
flag = @SuppressLint("InlinedApi") PackageInstaller.STATUS_FAILURE_TIMEOUT,
|
||||
flag = PackageInstaller.STATUS_FAILURE_TIMEOUT,
|
||||
title = R.string.installation_timeout_dialog_title,
|
||||
contentStringResId = R.string.installation_timeout_description,
|
||||
confirmButton = installerStatusDialogButton(R.string.install_app) { model ->
|
||||
|
||||
@@ -14,7 +14,7 @@ fun LoadingIndicator(
|
||||
progress: () -> Float? = { null },
|
||||
color: Color = ProgressIndicatorDefaults.circularColor,
|
||||
strokeWidth: Dp = ProgressIndicatorDefaults.CircularStrokeWidth,
|
||||
trackColor: Color = ProgressIndicatorDefaults.circularIndeterminateTrackColor,
|
||||
trackColor: Color = ProgressIndicatorDefaults.circularTrackColor,
|
||||
strokeCap: StrokeCap = ProgressIndicatorDefaults.CircularDeterminateStrokeCap
|
||||
) {
|
||||
progress()?.let {
|
||||
|
||||
@@ -18,6 +18,8 @@ fun Markdown(
|
||||
colors = markdownColor(
|
||||
text = MaterialTheme.colorScheme.onSurfaceVariant,
|
||||
codeBackground = MaterialTheme.colorScheme.secondaryContainer,
|
||||
codeText = MaterialTheme.colorScheme.onSecondaryContainer,
|
||||
linkText = MaterialTheme.colorScheme.primary
|
||||
),
|
||||
typography = markdownTypography(
|
||||
h1 = MaterialTheme.typography.headlineSmall.copy(fontWeight = FontWeight.Bold),
|
||||
|
||||
@@ -29,8 +29,7 @@ fun SearchBar(
|
||||
) {
|
||||
val colors = SearchBarColors(
|
||||
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh,
|
||||
dividerColor = MaterialTheme.colorScheme.outline,
|
||||
inputFieldColors = SearchBarDefaults.inputFieldColors()
|
||||
dividerColor = MaterialTheme.colorScheme.outline
|
||||
)
|
||||
val keyboardController = LocalSoftwareKeyboardController.current
|
||||
|
||||
|
||||
@@ -31,8 +31,7 @@ fun SearchView(
|
||||
) {
|
||||
val colors = SearchBarColors(
|
||||
containerColor = MaterialTheme.colorScheme.surfaceContainerHigh,
|
||||
dividerColor = MaterialTheme.colorScheme.outline,
|
||||
inputFieldColors = SearchBarDefaults.inputFieldColors()
|
||||
dividerColor = MaterialTheme.colorScheme.outline
|
||||
)
|
||||
val focusRequester = remember { FocusRequester() }
|
||||
val keyboardController = LocalSoftwareKeyboardController.current
|
||||
|
||||
@@ -45,7 +45,6 @@ import app.revanced.manager.domain.bundles.LocalPatchBundle
|
||||
import app.revanced.manager.domain.bundles.PatchBundleSource
|
||||
import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.asRemoteOrNull
|
||||
import app.revanced.manager.domain.bundles.PatchBundleSource.Extensions.isDefault
|
||||
import app.revanced.manager.domain.manager.PreferencesManager
|
||||
import app.revanced.manager.domain.repository.PatchBundleRepository
|
||||
import app.revanced.manager.ui.component.ColumnWithScrollbar
|
||||
import app.revanced.manager.ui.component.ExceptionViewerDialog
|
||||
@@ -66,14 +65,12 @@ fun BundleInformationDialog(
|
||||
) {
|
||||
val bundleRepo = koinInject<PatchBundleRepository>()
|
||||
val networkInfo = koinInject<NetworkInfo>()
|
||||
val prefs = koinInject<PreferencesManager>()
|
||||
val hasNetwork = remember { networkInfo.isConnected() }
|
||||
val composableScope = rememberCoroutineScope()
|
||||
var viewCurrentBundlePatches by remember { mutableStateOf(false) }
|
||||
val isLocal = src is LocalPatchBundle
|
||||
val bundleManifestAttributes = src.patchBundle?.manifestAttributes
|
||||
val (autoUpdate, endpoint) = src.asRemoteOrNull?.let { it.autoUpdate to it.endpoint }
|
||||
?: (null to null)
|
||||
val (autoUpdate, endpoint) = src.asRemoteOrNull?.let { it.autoUpdate to it.endpoint } ?: (null to null)
|
||||
|
||||
fun onAutoUpdateChange(new: Boolean) = composableScope.launch {
|
||||
with(bundleRepo) {
|
||||
@@ -176,34 +173,6 @@ fun BundleInformationDialog(
|
||||
)
|
||||
}
|
||||
|
||||
if (src.isDefault) {
|
||||
val useBundlePrerelease by prefs.usePatchesPrereleases.getAsState()
|
||||
|
||||
BundleListItem(
|
||||
headlineText = stringResource(R.string.patches_prereleases),
|
||||
supportingText = stringResource(R.string.patches_prereleases_description, src.name),
|
||||
trailingContent = {
|
||||
HapticSwitch(
|
||||
checked = useBundlePrerelease,
|
||||
onCheckedChange = {
|
||||
composableScope.launch {
|
||||
prefs.usePatchesPrereleases.update(
|
||||
it
|
||||
)
|
||||
onUpdate()
|
||||
}
|
||||
}
|
||||
)
|
||||
},
|
||||
modifier = Modifier.clickable {
|
||||
composableScope.launch {
|
||||
prefs.usePatchesPrereleases.update(!useBundlePrerelease)
|
||||
onUpdate()
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
endpoint?.takeUnless { src.isDefault }?.let { url ->
|
||||
var showUrlInputDialog by rememberSaveable {
|
||||
mutableStateOf(false)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package app.revanced.manager.ui.component.patcher
|
||||
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.Crossfade
|
||||
import androidx.compose.animation.animateColorAsState
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
@@ -12,6 +12,7 @@ import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Cancel
|
||||
import androidx.compose.material.icons.filled.CheckCircle
|
||||
@@ -20,7 +21,6 @@ import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
@@ -39,9 +39,11 @@ import androidx.compose.ui.unit.dp
|
||||
import app.revanced.manager.R
|
||||
import app.revanced.manager.ui.component.ArrowButton
|
||||
import app.revanced.manager.ui.component.LoadingIndicator
|
||||
import app.revanced.manager.ui.model.ProgressKey
|
||||
import app.revanced.manager.ui.model.State
|
||||
import app.revanced.manager.ui.model.StepCategory
|
||||
import app.revanced.manager.ui.model.Step
|
||||
import app.revanced.manager.ui.model.StepCategory
|
||||
import app.revanced.manager.ui.model.StepProgressProvider
|
||||
import java.util.Locale
|
||||
import kotlin.math.floor
|
||||
|
||||
@@ -50,10 +52,21 @@ import kotlin.math.floor
|
||||
fun Steps(
|
||||
category: StepCategory,
|
||||
steps: List<Step>,
|
||||
isExpanded: Boolean = false,
|
||||
onExpand: () -> Unit,
|
||||
onClick: () -> Unit
|
||||
stepCount: Pair<Int, Int>? = null,
|
||||
stepProgressProvider: StepProgressProvider
|
||||
) {
|
||||
var expanded by rememberSaveable { mutableStateOf(true) }
|
||||
|
||||
val categoryColor by animateColorAsState(
|
||||
if (expanded) MaterialTheme.colorScheme.surfaceContainerHigh else Color.Transparent,
|
||||
label = "category"
|
||||
)
|
||||
|
||||
val cardColor by animateColorAsState(
|
||||
if (expanded) MaterialTheme.colorScheme.surfaceContainer else Color.Transparent,
|
||||
label = "card"
|
||||
)
|
||||
|
||||
val state = remember(steps) {
|
||||
when {
|
||||
steps.all { it.state == State.COMPLETED } -> State.COMPLETED
|
||||
@@ -63,69 +76,62 @@ fun Steps(
|
||||
}
|
||||
}
|
||||
|
||||
val filteredSteps = remember(steps) {
|
||||
val failedCount = steps.count { it.state == State.FAILED }
|
||||
|
||||
steps.filter { step ->
|
||||
// Show hidden steps if it's the only failed step.
|
||||
!step.hide || (step.state == State.FAILED && failedCount == 1)
|
||||
}
|
||||
}
|
||||
|
||||
LaunchedEffect(state) {
|
||||
if (state == State.RUNNING || state == State.FAILED)
|
||||
onExpand()
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.clip(MaterialTheme.shapes.large)
|
||||
.clip(RoundedCornerShape(16.dp))
|
||||
.fillMaxWidth()
|
||||
.background(MaterialTheme.colorScheme.surfaceContainerLow)
|
||||
.background(cardColor)
|
||||
) {
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.spacedBy(14.dp),
|
||||
modifier = Modifier
|
||||
.clickable(true, onClick = onClick)
|
||||
.fillMaxWidth()
|
||||
.padding(20.dp)
|
||||
.clip(RoundedCornerShape(16.dp))
|
||||
.clickable { expanded = !expanded }
|
||||
.background(categoryColor)
|
||||
) {
|
||||
StepIcon(state = state, size = 24.dp)
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.spacedBy(12.dp),
|
||||
modifier = Modifier.padding(16.dp)
|
||||
) {
|
||||
StepIcon(state = state, size = 24.dp)
|
||||
|
||||
Text(stringResource(category.displayName))
|
||||
Text(stringResource(category.displayName))
|
||||
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
Spacer(modifier = Modifier.weight(1f))
|
||||
|
||||
Text(
|
||||
text = "${filteredSteps.count { it.state == State.COMPLETED }}/${filteredSteps.size}",
|
||||
style = MaterialTheme.typography.labelSmall
|
||||
)
|
||||
val stepProgress = remember(stepCount, steps) {
|
||||
stepCount?.let { (current, total) -> "$current/$total" }
|
||||
?: "${steps.count { it.state == State.COMPLETED }}/${steps.size}"
|
||||
}
|
||||
|
||||
ArrowButton(modifier = Modifier.size(24.dp), expanded = isExpanded, onClick = null)
|
||||
Text(
|
||||
text = stepProgress,
|
||||
style = MaterialTheme.typography.labelSmall
|
||||
)
|
||||
|
||||
ArrowButton(modifier = Modifier.size(24.dp), expanded = expanded, onClick = null)
|
||||
}
|
||||
}
|
||||
|
||||
AnimatedVisibility(visible = isExpanded) {
|
||||
AnimatedVisibility(visible = expanded) {
|
||||
Column(
|
||||
modifier = Modifier
|
||||
.background(MaterialTheme.colorScheme.background.copy(0.6f))
|
||||
.fillMaxWidth()
|
||||
.padding(top = 10.dp)
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
) {
|
||||
filteredSteps.forEachIndexed { index, step ->
|
||||
val (progress, progressText) = step.progress?.let { (current, total) ->
|
||||
if (total != null) current.toFloat() / total.toFloat() to "${current.megaBytes}/${total.megaBytes} MB"
|
||||
else null to "${current.megaBytes} MB"
|
||||
steps.forEach { step ->
|
||||
val (progress, progressText) = when (step.progressKey) {
|
||||
null -> null
|
||||
ProgressKey.DOWNLOAD -> stepProgressProvider.downloadProgress?.let { (downloaded, total) ->
|
||||
if (total != null) downloaded.toFloat() / total.toFloat() to "${downloaded.megaBytes}/${total.megaBytes} MB"
|
||||
else null to "${downloaded.megaBytes} MB"
|
||||
}
|
||||
} ?: (null to null)
|
||||
|
||||
SubStep(
|
||||
name = step.title,
|
||||
name = step.name,
|
||||
state = step.state,
|
||||
message = step.message,
|
||||
progress = progress,
|
||||
progressText = progressText,
|
||||
isFirst = index == 0,
|
||||
isLast = index == filteredSteps.lastIndex,
|
||||
progressText = progressText
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -139,9 +145,7 @@ fun SubStep(
|
||||
state: State,
|
||||
message: String? = null,
|
||||
progress: Float? = null,
|
||||
progressText: String? = null,
|
||||
isFirst: Boolean = false,
|
||||
isLast: Boolean = false,
|
||||
progressText: String? = null
|
||||
) {
|
||||
var messageExpanded by rememberSaveable { mutableStateOf(true) }
|
||||
|
||||
@@ -152,22 +156,22 @@ fun SubStep(
|
||||
clickable { messageExpanded = !messageExpanded }
|
||||
else this
|
||||
}
|
||||
.padding(top = if (isFirst) 10.dp else 8.dp, bottom = if (isLast) 20.dp else 8.dp)
|
||||
.padding(horizontal = 20.dp)
|
||||
) {
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.spacedBy(16.dp),
|
||||
horizontalArrangement = Arrangement.spacedBy(12.dp),
|
||||
modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp)
|
||||
) {
|
||||
StepIcon(
|
||||
size = 18.dp,
|
||||
state = state,
|
||||
progress = progress,
|
||||
)
|
||||
Box(
|
||||
modifier = Modifier.size(24.dp),
|
||||
contentAlignment = Alignment.Center
|
||||
) {
|
||||
StepIcon(state, progress, size = 20.dp)
|
||||
}
|
||||
|
||||
Text(
|
||||
text = name,
|
||||
style = MaterialTheme.typography.labelLarge,
|
||||
style = MaterialTheme.typography.titleSmall,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
modifier = Modifier.weight(1f, true),
|
||||
@@ -197,7 +201,7 @@ fun SubStep(
|
||||
text = message.orEmpty(),
|
||||
style = MaterialTheme.typography.labelMedium,
|
||||
color = MaterialTheme.colorScheme.secondary,
|
||||
modifier = Modifier.padding(horizontal = 36.dp, vertical = 8.dp)
|
||||
modifier = Modifier.padding(horizontal = 52.dp, vertical = 8.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -207,44 +211,40 @@ fun SubStep(
|
||||
fun StepIcon(state: State, progress: Float? = null, size: Dp) {
|
||||
val strokeWidth = Dp(floor(size.value / 10) + 1)
|
||||
|
||||
Crossfade(targetState = state, label = "State CrossFade") { state ->
|
||||
when (state) {
|
||||
State.COMPLETED -> Icon(
|
||||
Icons.Filled.CheckCircle,
|
||||
contentDescription = stringResource(R.string.step_completed),
|
||||
tint = Color(0xFF59B463),
|
||||
modifier = Modifier.size(size)
|
||||
when (state) {
|
||||
State.COMPLETED -> Icon(
|
||||
Icons.Filled.CheckCircle,
|
||||
contentDescription = stringResource(R.string.step_completed),
|
||||
tint = MaterialTheme.colorScheme.surfaceTint,
|
||||
modifier = Modifier.size(size)
|
||||
)
|
||||
|
||||
State.FAILED -> Icon(
|
||||
Icons.Filled.Cancel,
|
||||
contentDescription = stringResource(R.string.step_failed),
|
||||
tint = MaterialTheme.colorScheme.error,
|
||||
modifier = Modifier.size(size)
|
||||
)
|
||||
|
||||
State.WAITING -> Icon(
|
||||
Icons.Outlined.Circle,
|
||||
contentDescription = stringResource(R.string.step_waiting),
|
||||
tint = MaterialTheme.colorScheme.surfaceVariant,
|
||||
modifier = Modifier.size(size)
|
||||
)
|
||||
|
||||
State.RUNNING ->
|
||||
LoadingIndicator(
|
||||
modifier = stringResource(R.string.step_running).let { description ->
|
||||
Modifier
|
||||
.size(size)
|
||||
.semantics {
|
||||
contentDescription = description
|
||||
}
|
||||
},
|
||||
progress = { progress },
|
||||
strokeWidth = strokeWidth
|
||||
)
|
||||
|
||||
State.FAILED -> Icon(
|
||||
Icons.Filled.Cancel,
|
||||
contentDescription = stringResource(R.string.step_failed),
|
||||
tint = MaterialTheme.colorScheme.error,
|
||||
modifier = Modifier.size(size)
|
||||
)
|
||||
|
||||
State.WAITING -> Icon(
|
||||
Icons.Outlined.Circle,
|
||||
contentDescription = stringResource(R.string.step_waiting),
|
||||
tint = MaterialTheme.colorScheme.onSurface.copy(.2f),
|
||||
modifier = Modifier.size(size)
|
||||
)
|
||||
|
||||
State.RUNNING -> {
|
||||
LoadingIndicator(
|
||||
modifier = stringResource(R.string.step_running).let { description ->
|
||||
Modifier
|
||||
.size(size)
|
||||
.semantics {
|
||||
contentDescription = description
|
||||
}
|
||||
},
|
||||
|
||||
progress = { progress },
|
||||
strokeWidth = strokeWidth
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3,10 +3,9 @@ package app.revanced.manager.ui.model
|
||||
import android.os.Parcelable
|
||||
import androidx.annotation.StringRes
|
||||
import app.revanced.manager.R
|
||||
import app.revanced.manager.patcher.StepId
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
enum class StepCategory(@param:StringRes val displayName: Int) {
|
||||
enum class StepCategory(@StringRes val displayName: Int) {
|
||||
PREPARING(R.string.patcher_step_group_preparing),
|
||||
PATCHING(R.string.patcher_step_group_patching),
|
||||
SAVING(R.string.patcher_step_group_saving)
|
||||
@@ -16,20 +15,19 @@ enum class State {
|
||||
WAITING, RUNNING, FAILED, COMPLETED
|
||||
}
|
||||
|
||||
enum class ProgressKey {
|
||||
DOWNLOAD
|
||||
}
|
||||
|
||||
interface StepProgressProvider {
|
||||
val downloadProgress: Pair<Long, Long?>?
|
||||
}
|
||||
|
||||
@Parcelize
|
||||
data class Step(
|
||||
val id: StepId,
|
||||
val title: String,
|
||||
val name: String,
|
||||
val category: StepCategory,
|
||||
val state: State = State.WAITING,
|
||||
val message: String? = null,
|
||||
val progress: Pair<Long, Long?>? = null,
|
||||
val hide: Boolean = false,
|
||||
) : Parcelable
|
||||
|
||||
|
||||
fun Step.withState(
|
||||
state: State = this.state,
|
||||
message: String? = this.message,
|
||||
progress: Pair<Long, Long?>? = this.progress
|
||||
) = copy(state = state, message = message, progress = progress)
|
||||
val progressKey: ProgressKey? = null
|
||||
) : Parcelable
|
||||
@@ -234,13 +234,7 @@ fun AppSelectorScreen(
|
||||
|
||||
}
|
||||
} else {
|
||||
item {
|
||||
Box(
|
||||
modifier = Modifier.fillParentMaxSize(), contentAlignment = Alignment.Center
|
||||
) {
|
||||
LoadingIndicator()
|
||||
}
|
||||
}
|
||||
item { LoadingIndicator() }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.SecondaryTabRow
|
||||
import androidx.compose.material3.TabRow
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.material3.surfaceColorAtElevation
|
||||
@@ -53,7 +53,6 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalResources
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
@@ -101,7 +100,6 @@ fun DashboardScreen(
|
||||
false
|
||||
)
|
||||
val androidContext = LocalContext.current
|
||||
val resources = LocalResources.current
|
||||
val composableScope = rememberCoroutineScope()
|
||||
val pagerState = rememberPagerState(
|
||||
initialPage = DashboardPage.DASHBOARD.ordinal,
|
||||
@@ -236,7 +234,7 @@ fun DashboardScreen(
|
||||
when (pagerState.currentPage) {
|
||||
DashboardPage.DASHBOARD.ordinal -> {
|
||||
if (availablePatches < 1) {
|
||||
androidContext.toast(resources.getString(R.string.no_patch_found))
|
||||
androidContext.toast(androidContext.getString(R.string.no_patch_found))
|
||||
composableScope.launch {
|
||||
pagerState.animateScrollToPage(
|
||||
DashboardPage.BUNDLES.ordinal
|
||||
@@ -261,7 +259,7 @@ fun DashboardScreen(
|
||||
}
|
||||
) { paddingValues ->
|
||||
Column(Modifier.padding(paddingValues)) {
|
||||
SecondaryTabRow(
|
||||
TabRow(
|
||||
selectedTabIndex = pagerState.currentPage,
|
||||
containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(3.0.dp)
|
||||
) {
|
||||
|
||||
@@ -40,7 +40,6 @@ import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalResources
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import app.revanced.manager.R
|
||||
@@ -56,7 +55,6 @@ import app.revanced.manager.ui.model.StepCategory
|
||||
import app.revanced.manager.ui.viewmodel.PatcherViewModel
|
||||
import app.revanced.manager.util.APK_MIMETYPE
|
||||
import app.revanced.manager.util.EventEffect
|
||||
import app.revanced.manager.util.toast
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -70,7 +68,6 @@ fun PatcherScreen(
|
||||
}
|
||||
|
||||
val context = LocalContext.current
|
||||
val resources = LocalResources.current
|
||||
val exportApkLauncher =
|
||||
rememberLauncherForActivityResult(CreateDocument(APK_MIMETYPE), viewModel::export)
|
||||
|
||||
@@ -79,17 +76,18 @@ fun PatcherScreen(
|
||||
var showInstallPicker by rememberSaveable { mutableStateOf(false) }
|
||||
var showDismissConfirmationDialog by rememberSaveable { mutableStateOf(false) }
|
||||
|
||||
fun onPageBack() = when {
|
||||
patcherSucceeded == null -> showDismissConfirmationDialog = true
|
||||
viewModel.isInstalling -> context.toast(resources.getString(R.string.patcher_install_in_progress))
|
||||
else -> onLeave()
|
||||
fun onPageBack() {
|
||||
if(patcherSucceeded == null)
|
||||
showDismissConfirmationDialog = true
|
||||
else
|
||||
onLeave()
|
||||
}
|
||||
|
||||
BackHandler(onBack = ::onPageBack)
|
||||
|
||||
val steps by remember {
|
||||
derivedStateOf {
|
||||
viewModel.steps.groupBy { it.category }.toList()
|
||||
viewModel.steps.groupBy { it.category }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -215,12 +213,6 @@ fun PatcherScreen(
|
||||
.padding(paddingValues)
|
||||
.fillMaxSize()
|
||||
) {
|
||||
var expandedCategory by rememberSaveable { mutableStateOf<StepCategory?>(null) }
|
||||
|
||||
val expandCategory: (StepCategory?) -> Unit = { category ->
|
||||
expandedCategory = category
|
||||
}
|
||||
|
||||
LinearProgressIndicator(
|
||||
progress = { viewModel.progress },
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
@@ -232,17 +224,14 @@ fun PatcherScreen(
|
||||
contentPadding = PaddingValues(16.dp)
|
||||
) {
|
||||
items(
|
||||
items = steps,
|
||||
items = steps.toList(),
|
||||
key = { it.first }
|
||||
) { (category, steps) ->
|
||||
Steps(
|
||||
category = category,
|
||||
steps = steps,
|
||||
isExpanded = expandedCategory == category,
|
||||
onExpand = { expandCategory(category) },
|
||||
onClick = {
|
||||
expandCategory(if (expandedCategory == category) null else category)
|
||||
}
|
||||
stepCount = if (category == StepCategory.PATCHING) viewModel.patchesProgress else null,
|
||||
stepProgressProvider = viewModel
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ import androidx.compose.material3.ListItem
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.ModalBottomSheet
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.SecondaryScrollableTabRow
|
||||
import androidx.compose.material3.ScrollableTabRow
|
||||
import androidx.compose.material3.SmallFloatingActionButton
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
@@ -49,12 +49,10 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.derivedStateOf
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.produceState
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.runtime.snapshotFlow
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
@@ -83,11 +81,9 @@ import app.revanced.manager.util.Options
|
||||
import app.revanced.manager.util.PatchSelection
|
||||
import app.revanced.manager.util.isScrollingUp
|
||||
import app.revanced.manager.util.transparentListItemColors
|
||||
import kotlinx.coroutines.FlowPreview
|
||||
import kotlinx.coroutines.flow.sample
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class, FlowPreview::class)
|
||||
@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
|
||||
@Composable
|
||||
fun PatchesSelectorScreen(
|
||||
onSave: (PatchSelection?, Options) -> Unit,
|
||||
@@ -235,8 +231,7 @@ fun PatchesSelectorScreen(
|
||||
viewModel.selectionWarningEnabled -> showSelectionWarning = true
|
||||
|
||||
// Show universal warning if universal patch is selected and the toggle is off
|
||||
patch.compatiblePackages == null && viewModel.universalPatchWarningEnabled -> showUniversalWarning =
|
||||
true
|
||||
patch.compatiblePackages == null && viewModel.universalPatchWarningEnabled -> showUniversalWarning = true
|
||||
|
||||
// Toggle the patch otherwise
|
||||
else -> viewModel.togglePatch(uid, patch)
|
||||
@@ -365,21 +360,6 @@ fun PatchesSelectorScreen(
|
||||
) {
|
||||
Icon(Icons.Outlined.Restore, stringResource(R.string.reset))
|
||||
}
|
||||
|
||||
val isScrollingUp =
|
||||
patchLazyListStates.getOrNull(pagerState.currentPage)?.isScrollingUp()
|
||||
val expanded by produceState(true, isScrollingUp) {
|
||||
val state = isScrollingUp ?: return@produceState
|
||||
value = state.value
|
||||
|
||||
// Use snapshotFlow and sample to prevent the value from changing too often.
|
||||
snapshotFlow { state.value }
|
||||
.sample(333L)
|
||||
.collect {
|
||||
value = it
|
||||
}
|
||||
}
|
||||
|
||||
HapticExtendedFloatingActionButton(
|
||||
text = {
|
||||
Text(
|
||||
@@ -395,7 +375,8 @@ fun PatchesSelectorScreen(
|
||||
contentDescription = stringResource(R.string.save)
|
||||
)
|
||||
},
|
||||
expanded = expanded,
|
||||
expanded = patchLazyListStates.getOrNull(pagerState.currentPage)?.isScrollingUp
|
||||
?: true,
|
||||
onClick = {
|
||||
onSave(viewModel.getCustomSelection(), viewModel.getOptions())
|
||||
}
|
||||
@@ -411,7 +392,7 @@ fun PatchesSelectorScreen(
|
||||
.padding(top = 16.dp)
|
||||
) {
|
||||
if (bundles.size > 1) {
|
||||
SecondaryScrollableTabRow(
|
||||
ScrollableTabRow(
|
||||
selectedTabIndex = pagerState.currentPage,
|
||||
containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(3.0.dp)
|
||||
) {
|
||||
|
||||
@@ -13,7 +13,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.SecondaryScrollableTabRow
|
||||
import androidx.compose.material3.ScrollableTabRow
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TopAppBarDefaults
|
||||
import androidx.compose.material3.rememberTopAppBarState
|
||||
@@ -106,7 +106,7 @@ fun RequiredOptionsScreen(
|
||||
.padding(paddingValues)
|
||||
) {
|
||||
if (list.isEmpty()) return@Column
|
||||
else if (list.size > 1) SecondaryScrollableTabRow(
|
||||
else if (list.size > 1) ScrollableTabRow(
|
||||
selectedTabIndex = pagerState.currentPage,
|
||||
containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(3.0.dp)
|
||||
) {
|
||||
|
||||
@@ -25,14 +25,12 @@ import androidx.compose.material3.TextButton
|
||||
import androidx.compose.material3.TopAppBarDefaults
|
||||
import androidx.compose.material3.rememberTopAppBarState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.derivedStateOf
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalResources
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
@@ -69,7 +67,6 @@ fun SelectedAppInfoScreen(
|
||||
vm: SelectedAppInfoViewModel
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val resources = LocalResources.current
|
||||
val networkInfo = koinInject<NetworkInfo>()
|
||||
val networkConnected = remember { networkInfo.isConnected() }
|
||||
val networkMetered = remember { !networkInfo.isUnmetered() }
|
||||
@@ -79,12 +76,12 @@ fun SelectedAppInfoScreen(
|
||||
val bundles by vm.bundleInfoFlow.collectAsStateWithLifecycle(emptyList())
|
||||
|
||||
val allowIncompatiblePatches by vm.prefs.disablePatchVersionCompatCheck.getAsState()
|
||||
val patches by remember {
|
||||
derivedStateOf {
|
||||
vm.getPatches(bundles, allowIncompatiblePatches)
|
||||
}
|
||||
val patches = remember(bundles, allowIncompatiblePatches) {
|
||||
vm.getPatches(bundles, allowIncompatiblePatches)
|
||||
}
|
||||
val selectedPatchCount = remember(patches) {
|
||||
patches.values.sumOf { it.size }
|
||||
}
|
||||
val selectedPatchCount = patches.values.sumOf { it.size }
|
||||
|
||||
val launcher = rememberLauncherForActivityResult(
|
||||
contract = ActivityResultContracts.StartActivityForResult(),
|
||||
@@ -120,7 +117,7 @@ fun SelectedAppInfoScreen(
|
||||
},
|
||||
onClick = patchClick@{
|
||||
if (selectedPatchCount == 0) {
|
||||
context.toast(resources.getString(R.string.no_patches_selected))
|
||||
context.toast(context.getString(R.string.no_patches_selected))
|
||||
|
||||
return@patchClick
|
||||
}
|
||||
|
||||
@@ -22,8 +22,8 @@ import app.revanced.manager.ui.model.navigation.Settings
|
||||
import org.koin.compose.koinInject
|
||||
|
||||
private data class Section(
|
||||
@param:StringRes val name: Int,
|
||||
@param:StringRes val description: Int,
|
||||
@StringRes val name: Int,
|
||||
@StringRes val description: Int,
|
||||
val image: ImageVector,
|
||||
val destination: Settings.Destination,
|
||||
)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package app.revanced.manager.ui.screen.settings
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
import androidx.compose.foundation.BorderStroke
|
||||
import androidx.compose.foundation.Image
|
||||
@@ -41,7 +40,6 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalResources
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.semantics.hideFromAccessibility
|
||||
import androidx.compose.ui.semantics.semantics
|
||||
@@ -69,9 +67,8 @@ fun AboutSettingsScreen(
|
||||
viewModel: AboutViewModel = koinViewModel()
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val resources = LocalResources.current
|
||||
// painterResource() is broken on release builds for some reason.
|
||||
val icon = rememberDrawablePainter(drawable = remember(resources) {
|
||||
val icon = rememberDrawablePainter(drawable = remember {
|
||||
AppCompatResources.getDrawable(context, R.drawable.ic_logo_ring)
|
||||
})
|
||||
|
||||
@@ -79,7 +76,7 @@ fun AboutSettingsScreen(
|
||||
viewModel.socials.partition(ReVancedSocial::preferred)
|
||||
}
|
||||
|
||||
val preferredSocialButtons = remember(resources, preferredSocials, viewModel.donate, viewModel.contact) {
|
||||
val preferredSocialButtons = remember(preferredSocials, viewModel.donate, viewModel.contact) {
|
||||
preferredSocials.map {
|
||||
Triple(
|
||||
getSocialIcon(it.name),
|
||||
@@ -92,7 +89,7 @@ fun AboutSettingsScreen(
|
||||
viewModel.donate?.let {
|
||||
Triple(
|
||||
Icons.Outlined.FavoriteBorder,
|
||||
resources.getString(R.string.donate),
|
||||
context.getString(R.string.donate),
|
||||
third = {
|
||||
context.openUrl(it)
|
||||
}
|
||||
@@ -101,7 +98,7 @@ fun AboutSettingsScreen(
|
||||
viewModel.contact?.let {
|
||||
Triple(
|
||||
Icons.Outlined.MailOutline,
|
||||
resources.getString(R.string.contact),
|
||||
context.getString(R.string.contact),
|
||||
third = {
|
||||
context.openUrl("mailto:$it")
|
||||
}
|
||||
@@ -134,7 +131,7 @@ fun AboutSettingsScreen(
|
||||
stringResource(R.string.contributors_description),
|
||||
third = nav@{
|
||||
if (!viewModel.isConnected) {
|
||||
context.toast(resources.getString(R.string.no_network_toast))
|
||||
context.toast(context.getString(R.string.no_network_toast))
|
||||
return@nav
|
||||
}
|
||||
|
||||
@@ -156,7 +153,7 @@ fun AboutSettingsScreen(
|
||||
LaunchedEffect(developerTaps) {
|
||||
if (developerTaps == 0) return@LaunchedEffect
|
||||
if (showDeveloperSettings) {
|
||||
snackbarHostState.showSnackbar(resources.getString(R.string.developer_options_already_enabled))
|
||||
snackbarHostState.showSnackbar(context.getString(R.string.developer_options_already_enabled))
|
||||
developerTaps = 0
|
||||
return@LaunchedEffect
|
||||
}
|
||||
@@ -164,7 +161,7 @@ fun AboutSettingsScreen(
|
||||
val remaining = DEVELOPER_OPTIONS_TAPS - developerTaps
|
||||
if (remaining > 0) {
|
||||
snackbarHostState.showSnackbar(
|
||||
resources.getString(
|
||||
context.getString(
|
||||
R.string.developer_options_taps,
|
||||
remaining
|
||||
),
|
||||
@@ -172,7 +169,7 @@ fun AboutSettingsScreen(
|
||||
)
|
||||
} else if (remaining == 0) {
|
||||
viewModel.showDeveloperSettings.update(true)
|
||||
snackbarHostState.showSnackbar(resources.getString(R.string.developer_options_enabled))
|
||||
snackbarHostState.showSnackbar(context.getString(R.string.developer_options_enabled))
|
||||
}
|
||||
|
||||
// Reset the counter
|
||||
|
||||
@@ -38,7 +38,6 @@ import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalResources
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -65,10 +64,9 @@ fun AdvancedSettingsScreen(
|
||||
viewModel: AdvancedSettingsViewModel = koinViewModel()
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val resources = LocalResources.current
|
||||
val memoryLimit = remember(resources) {
|
||||
val memoryLimit = remember {
|
||||
val activityManager = context.getSystemService<ActivityManager>()!!
|
||||
resources.getString(
|
||||
context.getString(
|
||||
R.string.device_memory_limit_format,
|
||||
activityManager.memoryClass,
|
||||
activityManager.largeMemoryClass
|
||||
@@ -185,7 +183,7 @@ fun AdvancedSettingsScreen(
|
||||
ClipData.newPlainText("Device Information", deviceContent)
|
||||
)
|
||||
|
||||
context.toast(resources.getString(R.string.toast_copied_to_clipboard))
|
||||
context.toast(context.getString(R.string.toast_copied_to_clipboard))
|
||||
}.withHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
|
||||
),
|
||||
headlineContent = stringResource(R.string.about_device),
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package app.revanced.manager.ui.screen.settings
|
||||
|
||||
import androidx.compose.foundation.border
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.BoxWithConstraints
|
||||
@@ -35,8 +34,6 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.platform.LocalUriHandler
|
||||
import androidx.compose.ui.platform.UriHandler
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
@@ -60,7 +57,6 @@ fun ContributorSettingsScreen(
|
||||
) {
|
||||
val repositories = viewModel.repositories
|
||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||
val uriHandler = LocalUriHandler.current
|
||||
|
||||
Scaffold(
|
||||
topBar = {
|
||||
@@ -97,8 +93,7 @@ fun ContributorSettingsScreen(
|
||||
) {
|
||||
ContributorsCard(
|
||||
title = it.name,
|
||||
contributors = it.contributors,
|
||||
uriHandler = uriHandler
|
||||
contributors = it.contributors
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -120,8 +115,7 @@ fun ContributorsCard(
|
||||
title: String,
|
||||
contributors: List<ReVancedContributor>,
|
||||
itemsPerPage: Int = 12,
|
||||
numberOfRows: Int = 2,
|
||||
uriHandler: UriHandler
|
||||
numberOfRows: Int = 2
|
||||
) {
|
||||
val itemsPerRow = (itemsPerPage / numberOfRows)
|
||||
|
||||
@@ -178,11 +172,7 @@ fun ContributorsCard(
|
||||
contributorsByPage[page].forEach {
|
||||
if (itemSize > 100.dp) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.width(itemSize - 1.dp)
|
||||
.clickable {
|
||||
uriHandler.openUri("https://github.com/${it.username}")
|
||||
}, // we delete 1.dp to account for not-so divisible numbers
|
||||
modifier = Modifier.width(itemSize - 1.dp), // we delete 1.dp to account for not-so divisible numbers
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.spacedBy(12.dp)
|
||||
) {
|
||||
@@ -213,9 +203,6 @@ fun ContributorsCard(
|
||||
modifier = Modifier
|
||||
.size(size = (itemSize - 1.dp).coerceAtMost(50.dp)) // we delete 1.dp to account for not-so divisible numbers
|
||||
.clip(CircleShape)
|
||||
.clickable {
|
||||
uriHandler.openUri("https://github.com/${it.username}")
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,8 +2,6 @@ package app.revanced.manager.ui.screen.settings
|
||||
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
@@ -12,13 +10,10 @@ import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.filled.Delete
|
||||
import androidx.compose.material.icons.outlined.Delete
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Card
|
||||
import androidx.compose.material3.CardDefaults
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.IconButton
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.OutlinedCard
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
@@ -33,7 +28,6 @@ import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -42,10 +36,10 @@ import app.revanced.manager.R
|
||||
import app.revanced.manager.network.downloader.DownloaderPluginState
|
||||
import app.revanced.manager.ui.component.AppLabel
|
||||
import app.revanced.manager.ui.component.AppTopBar
|
||||
import app.revanced.manager.ui.component.ConfirmDialog
|
||||
import app.revanced.manager.ui.component.ExceptionViewerDialog
|
||||
import app.revanced.manager.ui.component.GroupHeader
|
||||
import app.revanced.manager.ui.component.LazyColumnWithScrollbar
|
||||
import app.revanced.manager.ui.component.ConfirmDialog
|
||||
import app.revanced.manager.ui.component.haptics.HapticCheckbox
|
||||
import app.revanced.manager.ui.component.settings.SettingsListItem
|
||||
import app.revanced.manager.ui.viewmodel.DownloadsViewModel
|
||||
@@ -58,7 +52,6 @@ fun DownloadsSettingsScreen(
|
||||
onBackClick: () -> Unit,
|
||||
viewModel: DownloadsViewModel = koinViewModel()
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val downloadedApps by viewModel.downloadedApps.collectAsStateWithLifecycle(emptyList())
|
||||
val pluginStates by viewModel.downloaderPluginStates.collectAsStateWithLifecycle()
|
||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||
@@ -82,7 +75,7 @@ fun DownloadsSettingsScreen(
|
||||
onBackClick = onBackClick,
|
||||
actions = {
|
||||
if (viewModel.appSelection.isNotEmpty()) {
|
||||
IconButton(onClick = { viewModel.deleteApps() }) {
|
||||
IconButton(onClick = { showDeleteConfirmationDialog = true }) {
|
||||
Icon(Icons.Default.Delete, stringResource(R.string.delete))
|
||||
}
|
||||
}
|
||||
@@ -128,11 +121,6 @@ fun DownloadsSettingsScreen(
|
||||
.digest(androidSignature.toByteArray())
|
||||
hash.toHexString(format = HexFormat.UpperCase)
|
||||
}
|
||||
val appName = remember {
|
||||
packageInfo.applicationInfo?.loadLabel(context.packageManager)
|
||||
?.toString()
|
||||
?: packageName
|
||||
}
|
||||
|
||||
when (state) {
|
||||
is DownloaderPluginState.Loaded -> TrustDialog(
|
||||
@@ -142,8 +130,6 @@ fun DownloadsSettingsScreen(
|
||||
packageName,
|
||||
signature
|
||||
),
|
||||
pluginName = appName,
|
||||
signature = signature,
|
||||
onDismiss = ::dismiss,
|
||||
onConfirm = {
|
||||
viewModel.revokePluginTrust(packageName)
|
||||
@@ -161,10 +147,10 @@ fun DownloadsSettingsScreen(
|
||||
is DownloaderPluginState.Untrusted -> TrustDialog(
|
||||
title = R.string.downloader_plugin_trust_dialog_title,
|
||||
body = stringResource(
|
||||
R.string.downloader_plugin_trust_dialog_body
|
||||
R.string.downloader_plugin_trust_dialog_body,
|
||||
packageName,
|
||||
signature
|
||||
),
|
||||
pluginName = appName,
|
||||
signature = signature,
|
||||
onDismiss = ::dismiss,
|
||||
onConfirm = {
|
||||
viewModel.trustPlugin(packageName)
|
||||
@@ -240,8 +226,6 @@ fun DownloadsSettingsScreen(
|
||||
private fun TrustDialog(
|
||||
@StringRes title: Int,
|
||||
body: String,
|
||||
pluginName: String,
|
||||
signature: String,
|
||||
onDismiss: () -> Unit,
|
||||
onConfirm: () -> Unit
|
||||
) {
|
||||
@@ -254,39 +238,10 @@ private fun TrustDialog(
|
||||
},
|
||||
dismissButton = {
|
||||
TextButton(onClick = onDismiss) {
|
||||
Text(stringResource(R.string.cancel))
|
||||
Text(stringResource(R.string.dismiss))
|
||||
}
|
||||
},
|
||||
title = { Text(stringResource(title)) },
|
||||
text = {
|
||||
Column(verticalArrangement = Arrangement.spacedBy(12.dp)) {
|
||||
Text(body)
|
||||
Card {
|
||||
Column(
|
||||
Modifier.padding(12.dp),
|
||||
verticalArrangement = Arrangement.spacedBy(12.dp)
|
||||
) {
|
||||
Text(
|
||||
stringResource(
|
||||
R.string.downloader_plugin_trust_dialog_plugin,
|
||||
pluginName
|
||||
),
|
||||
)
|
||||
OutlinedCard(
|
||||
colors = CardDefaults.outlinedCardColors(
|
||||
containerColor = MaterialTheme.colorScheme.surfaceContainerHighest
|
||||
)
|
||||
) {
|
||||
Text(
|
||||
stringResource(
|
||||
R.string.downloader_plugin_trust_dialog_signature,
|
||||
signature.chunked(2).joinToString(" ")
|
||||
), modifier = Modifier.padding(12.dp)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
text = { Text(body) }
|
||||
)
|
||||
}
|
||||
@@ -1,15 +1,12 @@
|
||||
package app.revanced.manager.ui.screen.settings
|
||||
|
||||
import android.os.Build
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.FilledTonalButton
|
||||
@@ -21,7 +18,6 @@ import androidx.compose.material3.rememberTopAppBarState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
@@ -41,7 +37,6 @@ import app.revanced.manager.ui.theme.Theme
|
||||
import app.revanced.manager.ui.viewmodel.GeneralSettingsViewModel
|
||||
import org.koin.androidx.compose.koinViewModel
|
||||
import org.koin.compose.koinInject
|
||||
import java.util.Locale
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -52,7 +47,6 @@ fun GeneralSettingsScreen(
|
||||
val prefs = viewModel.prefs
|
||||
val coroutineScope = viewModel.viewModelScope
|
||||
var showThemePicker by rememberSaveable { mutableStateOf(false) }
|
||||
var showLanguagePicker by rememberSaveable { mutableStateOf(false) }
|
||||
|
||||
if (showThemePicker) {
|
||||
ThemePicker(
|
||||
@@ -60,17 +54,6 @@ fun GeneralSettingsScreen(
|
||||
onConfirm = { viewModel.setTheme(it) }
|
||||
)
|
||||
}
|
||||
|
||||
if (showLanguagePicker) {
|
||||
LanguagePicker(
|
||||
supportedLocales = viewModel.getSupportedLocales(),
|
||||
currentLocale = viewModel.getCurrentLocale(),
|
||||
onDismiss = { showLanguagePicker = false },
|
||||
onConfirm = { viewModel.setLocale(it) },
|
||||
getDisplayName = { viewModel.getLocaleDisplayName(it) }
|
||||
)
|
||||
}
|
||||
|
||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||
|
||||
Scaffold(
|
||||
@@ -90,24 +73,6 @@ fun GeneralSettingsScreen(
|
||||
) {
|
||||
GroupHeader(stringResource(R.string.appearance))
|
||||
|
||||
val currentLocale = viewModel.getCurrentLocale()
|
||||
val currentLanguageDisplay = remember(currentLocale) {
|
||||
currentLocale?.let { viewModel.getLocaleDisplayName(it) }
|
||||
}
|
||||
SettingsListItem(
|
||||
modifier = Modifier.clickable { showLanguagePicker = true },
|
||||
headlineContent = stringResource(R.string.language),
|
||||
supportingContent = stringResource(R.string.language_description),
|
||||
trailingContent = {
|
||||
FilledTonalButton(onClick = { showLanguagePicker = true }) {
|
||||
Text(
|
||||
currentLanguageDisplay
|
||||
?: stringResource(R.string.language_system_default)
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
val theme by prefs.theme.getAsState()
|
||||
SettingsListItem(
|
||||
modifier = Modifier.clickable { showThemePicker = true },
|
||||
@@ -131,22 +96,6 @@ fun GeneralSettingsScreen(
|
||||
description = R.string.dynamic_color_description
|
||||
)
|
||||
}
|
||||
AnimatedVisibility(theme != Theme.LIGHT) {
|
||||
BooleanItem(
|
||||
preference = prefs.pureBlackTheme,
|
||||
coroutineScope = coroutineScope,
|
||||
headline = R.string.pure_black_theme,
|
||||
description = R.string.pure_black_theme_description
|
||||
)
|
||||
}
|
||||
|
||||
GroupHeader(stringResource(R.string.networking))
|
||||
BooleanItem(
|
||||
preference = prefs.allowMeteredNetworks,
|
||||
coroutineScope = coroutineScope,
|
||||
headline = R.string.allow_metered_networks,
|
||||
description = R.string.allow_metered_networks_description
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -190,64 +139,4 @@ private fun ThemePicker(
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun LanguagePicker(
|
||||
supportedLocales: List<Locale>,
|
||||
currentLocale: Locale?,
|
||||
onDismiss: () -> Unit,
|
||||
onConfirm: (Locale?) -> Unit,
|
||||
getDisplayName: (Locale) -> String
|
||||
) {
|
||||
var selectedLocale by remember { mutableStateOf(currentLocale) }
|
||||
val systemDefaultString = stringResource(R.string.language_system_default)
|
||||
|
||||
AlertDialog(
|
||||
onDismissRequest = onDismiss,
|
||||
title = { Text(stringResource(R.string.language)) },
|
||||
text = {
|
||||
Column(
|
||||
modifier = Modifier.verticalScroll(rememberScrollState())
|
||||
) {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.clickable { selectedLocale = null },
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
HapticRadioButton(
|
||||
selected = selectedLocale == null,
|
||||
onClick = { selectedLocale = null }
|
||||
)
|
||||
Text(systemDefaultString)
|
||||
}
|
||||
|
||||
supportedLocales.forEach { locale ->
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.clickable { selectedLocale = locale },
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
HapticRadioButton(
|
||||
selected = selectedLocale == locale,
|
||||
onClick = { selectedLocale = locale }
|
||||
)
|
||||
Text(getDisplayName(locale))
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
confirmButton = {
|
||||
TextButton(
|
||||
onClick = {
|
||||
onConfirm(selectedLocale)
|
||||
onDismiss()
|
||||
}
|
||||
) {
|
||||
Text(stringResource(R.string.apply))
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
@@ -36,7 +36,6 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalResources
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
@@ -65,7 +64,6 @@ fun ImportExportSettingsScreen(
|
||||
vm: ImportExportViewModel = koinViewModel()
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val resources = LocalResources.current
|
||||
val coroutineScope = rememberCoroutineScope()
|
||||
var selectorDialog by rememberSaveable { mutableStateOf<(@Composable () -> Unit)?>(null) }
|
||||
|
||||
@@ -106,11 +104,11 @@ fun ImportExportSettingsScreen(
|
||||
if (vm.showCredentialsDialog) {
|
||||
KeystoreCredentialsDialog(
|
||||
onDismissRequest = vm::cancelKeystoreImport,
|
||||
onSubmit = { alias, pass ->
|
||||
onSubmit = { cn, pass ->
|
||||
vm.viewModelScope.launch {
|
||||
uiSafe(context, R.string.failed_to_import_keystore, "Failed to import keystore") {
|
||||
val result = vm.tryKeystoreImport(alias, pass)
|
||||
if (!result) context.toast(resources.getString(R.string.import_keystore_wrong_credentials))
|
||||
val result = vm.tryKeystoreImport(cn, pass)
|
||||
if (!result) context.toast(context.getString(R.string.import_keystore_wrong_credentials))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -168,7 +166,7 @@ fun ImportExportSettingsScreen(
|
||||
GroupItem(
|
||||
onClick = {
|
||||
if (!vm.canExport()) {
|
||||
context.toast(resources.getString(R.string.export_keystore_unavailable))
|
||||
context.toast(context.getString(R.string.export_keystore_unavailable))
|
||||
return@GroupItem
|
||||
}
|
||||
exportKeystoreLauncher.launch("Manager.keystore")
|
||||
@@ -384,7 +382,7 @@ fun KeystoreCredentialsDialog(
|
||||
onDismissRequest: () -> Unit,
|
||||
onSubmit: (String, String) -> Unit
|
||||
) {
|
||||
var alias by rememberSaveable { mutableStateOf("") }
|
||||
var cn by rememberSaveable { mutableStateOf("") }
|
||||
var pass by rememberSaveable { mutableStateOf("") }
|
||||
|
||||
AlertDialog(
|
||||
@@ -392,7 +390,7 @@ fun KeystoreCredentialsDialog(
|
||||
confirmButton = {
|
||||
TextButton(
|
||||
onClick = {
|
||||
onSubmit(alias, pass)
|
||||
onSubmit(cn, pass)
|
||||
}
|
||||
) {
|
||||
Text(stringResource(R.string.import_keystore_dialog_button))
|
||||
@@ -424,8 +422,8 @@ fun KeystoreCredentialsDialog(
|
||||
color = MaterialTheme.colorScheme.onSurfaceVariant
|
||||
)
|
||||
OutlinedTextField(
|
||||
value = alias,
|
||||
onValueChange = { alias = it },
|
||||
value = cn,
|
||||
onValueChange = { cn = it },
|
||||
label = { Text(stringResource(R.string.import_keystore_dialog_alias_field)) }
|
||||
)
|
||||
PasswordField(
|
||||
|
||||
@@ -7,18 +7,15 @@ import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import app.revanced.manager.R
|
||||
import app.revanced.manager.ui.component.AppScaffold
|
||||
import app.revanced.manager.ui.component.AppTopBar
|
||||
import app.revanced.manager.ui.component.Scrollbar
|
||||
import com.mikepenz.aboutlibraries.ui.compose.LibrariesContainer
|
||||
import com.mikepenz.aboutlibraries.ui.compose.LibraryDefaults
|
||||
import com.mikepenz.aboutlibraries.ui.compose.android.produceLibraries
|
||||
import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
|
||||
import com.mikepenz.aboutlibraries.ui.compose.m3.chipColors
|
||||
import com.mikepenz.aboutlibraries.ui.compose.m3.libraryColors
|
||||
import com.mikepenz.aboutlibraries.ui.compose.libraryColors
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
@@ -36,23 +33,16 @@ fun LicensesSettingsScreen(
|
||||
) { paddingValues ->
|
||||
Column(modifier = Modifier.padding(paddingValues)) {
|
||||
val lazyListState = rememberLazyListState()
|
||||
val libraries by produceLibraries(R.raw.aboutlibraries)
|
||||
val chipColors = LibraryDefaults.chipColors(
|
||||
containerColor = MaterialTheme.colorScheme.primary,
|
||||
contentColor = MaterialTheme.colorScheme.onPrimary,
|
||||
)
|
||||
|
||||
LibrariesContainer(
|
||||
modifier = Modifier
|
||||
.fillMaxSize(),
|
||||
libraries = libraries,
|
||||
lazyListState = lazyListState,
|
||||
colors = LibraryDefaults.libraryColors(
|
||||
libraryBackgroundColor = MaterialTheme.colorScheme.background,
|
||||
libraryContentColor = MaterialTheme.colorScheme.onBackground,
|
||||
versionChipColors = chipColors,
|
||||
licenseChipColors = chipColors,
|
||||
fundingChipColors = chipColors,
|
||||
backgroundColor = MaterialTheme.colorScheme.background,
|
||||
contentColor = MaterialTheme.colorScheme.onBackground,
|
||||
badgeBackgroundColor = MaterialTheme.colorScheme.primary,
|
||||
badgeContentColor = MaterialTheme.colorScheme.onPrimary,
|
||||
)
|
||||
)
|
||||
Scrollbar(lazyListState = lazyListState, modifier = Modifier.padding(paddingValues))
|
||||
|
||||
@@ -12,7 +12,6 @@ import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.platform.LocalResources
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import app.revanced.manager.R
|
||||
import app.revanced.manager.ui.component.AppTopBar
|
||||
@@ -34,7 +33,6 @@ fun UpdatesSettingsScreen(
|
||||
vm: UpdatesSettingsViewModel = koinViewModel(),
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
val resources = LocalResources.current
|
||||
val coroutineScope = rememberCoroutineScope()
|
||||
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
|
||||
|
||||
@@ -59,7 +57,7 @@ fun UpdatesSettingsScreen(
|
||||
modifier = Modifier.clickable {
|
||||
coroutineScope.launch {
|
||||
if (!vm.isConnected) {
|
||||
context.toast(resources.getString(R.string.no_network_toast))
|
||||
context.toast(context.getString(R.string.no_network_toast))
|
||||
return@launch
|
||||
}
|
||||
if (vm.checkForUpdates()) onUpdateClick()
|
||||
@@ -72,7 +70,7 @@ fun UpdatesSettingsScreen(
|
||||
SettingsListItem(
|
||||
modifier = Modifier.clickable {
|
||||
if (!vm.isConnected) {
|
||||
context.toast(resources.getString(R.string.no_network_toast))
|
||||
context.toast(context.getString(R.string.no_network_toast))
|
||||
return@clickable
|
||||
}
|
||||
onChangelogClick()
|
||||
@@ -94,12 +92,6 @@ fun UpdatesSettingsScreen(
|
||||
headline = R.string.show_manager_update_dialog_on_launch,
|
||||
description = R.string.show_manager_update_dialog_on_launch_description
|
||||
)
|
||||
|
||||
BooleanItem(
|
||||
preference = vm.useManagerPrereleases,
|
||||
headline = R.string.manager_prereleases,
|
||||
description = R.string.manager_prereleases_description
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -80,7 +80,6 @@ private val LightColorScheme = lightColorScheme(
|
||||
fun ReVancedManagerTheme(
|
||||
darkTheme: Boolean,
|
||||
dynamicColor: Boolean,
|
||||
pureBlackTheme: Boolean,
|
||||
content: @Composable () -> Unit
|
||||
) {
|
||||
val colorScheme = when {
|
||||
@@ -94,10 +93,6 @@ fun ReVancedManagerTheme(
|
||||
|
||||
darkTheme -> DarkColorScheme
|
||||
else -> LightColorScheme
|
||||
}.let {
|
||||
if (darkTheme && pureBlackTheme)
|
||||
it.copy(background = Color.Black, surface = Color.Black)
|
||||
else it
|
||||
}
|
||||
|
||||
val view = LocalView.current
|
||||
|
||||
@@ -47,7 +47,7 @@ class AdvancedSettingsViewModel(
|
||||
app.contentResolver.openOutputStream(target)!!.bufferedWriter().use { writer ->
|
||||
val consumer = Redirect.Consume { flow ->
|
||||
flow.onEach {
|
||||
writer.write("${it}\n")
|
||||
writer.write(it)
|
||||
}.flowOn(Dispatchers.IO).collect()
|
||||
}
|
||||
|
||||
|
||||
@@ -54,7 +54,6 @@ class BundleListViewModel : ViewModel(), KoinComponent {
|
||||
patchBundleRepository.update(
|
||||
*getSelectedSources().filterIsInstance<RemotePatchBundle>().toTypedArray(),
|
||||
showToast = true,
|
||||
force = true
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -66,7 +65,7 @@ class BundleListViewModel : ViewModel(), KoinComponent {
|
||||
fun update(src: PatchBundleSource) = viewModelScope.launch {
|
||||
if (src !is RemotePatchBundle) return@launch
|
||||
|
||||
patchBundleRepository.update(src, showToast = true, force = true)
|
||||
patchBundleRepository.update(src, showToast = true)
|
||||
}
|
||||
|
||||
enum class Event {
|
||||
|
||||
@@ -1,26 +1,17 @@
|
||||
package app.revanced.manager.ui.viewmodel
|
||||
|
||||
import android.app.Application
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import app.revanced.manager.domain.manager.PreferencesManager
|
||||
import app.revanced.manager.ui.theme.Theme
|
||||
import app.revanced.manager.util.SupportedLocales
|
||||
import app.revanced.manager.util.resetListItemColorsCached
|
||||
import kotlinx.coroutines.launch
|
||||
import java.util.Locale
|
||||
|
||||
class GeneralSettingsViewModel(
|
||||
private val app: Application,
|
||||
val prefs: PreferencesManager
|
||||
) : ViewModel() {
|
||||
fun setTheme(theme: Theme) = viewModelScope.launch {
|
||||
prefs.theme.update(theme)
|
||||
resetListItemColorsCached()
|
||||
}
|
||||
|
||||
fun getSupportedLocales() = SupportedLocales.getSupportedLocales(app)
|
||||
fun getCurrentLocale() = SupportedLocales.getCurrentLocale()
|
||||
fun setLocale(locale: Locale?) = SupportedLocales.setLocale(locale)
|
||||
fun getLocaleDisplayName(locale: Locale) = SupportedLocales.getDisplayName(locale)
|
||||
}
|
||||
@@ -36,8 +36,8 @@ import kotlin.io.path.deleteExisting
|
||||
import kotlin.io.path.inputStream
|
||||
|
||||
sealed class ResetDialogState(
|
||||
@param:StringRes val titleResId: Int,
|
||||
@param:StringRes val descriptionResId: Int,
|
||||
@StringRes val titleResId: Int,
|
||||
@StringRes val descriptionResId: Int,
|
||||
val onConfirm: () -> Unit,
|
||||
val dialogOptionName: String? = null
|
||||
) {
|
||||
@@ -154,12 +154,12 @@ class ImportExportViewModel(
|
||||
keystoreImportPath = null
|
||||
}
|
||||
|
||||
suspend fun tryKeystoreImport(alias: String, pass: String) =
|
||||
tryKeystoreImport(alias, pass, keystoreImportPath!!)
|
||||
suspend fun tryKeystoreImport(cn: String, pass: String) =
|
||||
tryKeystoreImport(cn, pass, keystoreImportPath!!)
|
||||
|
||||
private suspend fun tryKeystoreImport(alias: String, pass: String, path: Path): Boolean {
|
||||
private suspend fun tryKeystoreImport(cn: String, pass: String, path: Path): Boolean {
|
||||
path.inputStream().use { stream ->
|
||||
if (keystoreManager.import(alias, pass, stream)) {
|
||||
if (keystoreManager.import(cn, pass, stream)) {
|
||||
app.toast(app.getString(R.string.import_keystore_success))
|
||||
cancelKeystoreImport()
|
||||
return true
|
||||
|
||||
@@ -1,11 +1,17 @@
|
||||
package app.revanced.manager.ui.viewmodel
|
||||
|
||||
import android.app.Application
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.IntentFilter
|
||||
import android.content.pm.PackageInfo
|
||||
import android.content.pm.PackageInstaller
|
||||
import android.util.Log
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import app.revanced.manager.R
|
||||
@@ -13,6 +19,7 @@ import app.revanced.manager.data.room.apps.installed.InstallType
|
||||
import app.revanced.manager.data.room.apps.installed.InstalledApp
|
||||
import app.revanced.manager.domain.installer.RootInstaller
|
||||
import app.revanced.manager.domain.repository.InstalledAppRepository
|
||||
import app.revanced.manager.service.UninstallService
|
||||
import app.revanced.manager.util.PM
|
||||
import app.revanced.manager.util.PatchSelection
|
||||
import app.revanced.manager.util.simpleMessage
|
||||
@@ -23,8 +30,6 @@ import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.inject
|
||||
import ru.solrudev.ackpine.session.Session
|
||||
import ru.solrudev.ackpine.uninstaller.UninstallFailure
|
||||
|
||||
class InstalledAppInfoViewModel(
|
||||
packageName: String
|
||||
@@ -82,28 +87,51 @@ class InstalledAppInfoViewModel(
|
||||
|
||||
fun uninstall() {
|
||||
val app = installedApp ?: return
|
||||
viewModelScope.launch {
|
||||
when (app.installType) {
|
||||
InstallType.DEFAULT -> {
|
||||
when (val result = pm.uninstallPackage(app.currentPackageName)) {
|
||||
is Session.State.Failed<UninstallFailure> -> {
|
||||
val msg = result.failure.message.orEmpty()
|
||||
context.toast(
|
||||
this@InstalledAppInfoViewModel.context.getString(
|
||||
R.string.uninstall_app_fail,
|
||||
msg
|
||||
)
|
||||
)
|
||||
return@launch
|
||||
}
|
||||
Session.State.Succeeded -> {}
|
||||
}
|
||||
}
|
||||
when (app.installType) {
|
||||
InstallType.DEFAULT -> pm.uninstallPackage(app.currentPackageName)
|
||||
|
||||
InstallType.MOUNT -> rootInstaller.uninstall(app.currentPackageName)
|
||||
InstallType.MOUNT -> viewModelScope.launch {
|
||||
rootInstaller.uninstall(app.currentPackageName)
|
||||
installedAppRepository.delete(app)
|
||||
onBackClick()
|
||||
}
|
||||
installedAppRepository.delete(app)
|
||||
onBackClick()
|
||||
}
|
||||
}
|
||||
|
||||
private val uninstallBroadcastReceiver = object : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context?, intent: Intent?) {
|
||||
when (intent?.action) {
|
||||
UninstallService.APP_UNINSTALL_ACTION -> {
|
||||
val extraStatus =
|
||||
intent.getIntExtra(UninstallService.EXTRA_UNINSTALL_STATUS, -999)
|
||||
val extraStatusMessage =
|
||||
intent.getStringExtra(UninstallService.EXTRA_UNINSTALL_STATUS_MESSAGE)
|
||||
|
||||
if (extraStatus == PackageInstaller.STATUS_SUCCESS) {
|
||||
viewModelScope.launch {
|
||||
installedApp?.let {
|
||||
installedAppRepository.delete(it)
|
||||
}
|
||||
onBackClick()
|
||||
}
|
||||
} else if (extraStatus != PackageInstaller.STATUS_FAILURE_ABORTED) {
|
||||
this@InstalledAppInfoViewModel.context.toast(this@InstalledAppInfoViewModel.context.getString(R.string.uninstall_app_fail, extraStatusMessage))
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}.also {
|
||||
ContextCompat.registerReceiver(
|
||||
context,
|
||||
it,
|
||||
IntentFilter(UninstallService.APP_UNINSTALL_ACTION),
|
||||
ContextCompat.RECEIVER_NOT_EXPORTED
|
||||
)
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
context.unregisterReceiver(uninstallBroadcastReceiver)
|
||||
}
|
||||
}
|
||||
@@ -120,10 +120,6 @@ class MainViewModel(
|
||||
settings.useDynamicTheme?.let { dynamicColor ->
|
||||
prefs.dynamicColor.update(dynamicColor)
|
||||
}
|
||||
settings.usePrereleases?.let { prereleases ->
|
||||
prefs.useManagerPrereleases.update(prereleases)
|
||||
prefs.usePatchesPrereleases.update(prereleases)
|
||||
}
|
||||
settings.apiUrl?.let { api ->
|
||||
prefs.api.update(api.removeSuffix("/"))
|
||||
}
|
||||
@@ -147,7 +143,7 @@ class MainViewModel(
|
||||
settings.keystore?.let { keystore ->
|
||||
val keystoreBytes = Base64.decode(keystore, Base64.DEFAULT)
|
||||
keystoreManager.import(
|
||||
"alias",
|
||||
"ReVanced",
|
||||
settings.keystorePassword,
|
||||
keystoreBytes.inputStream()
|
||||
)
|
||||
@@ -163,7 +159,6 @@ class MainViewModel(
|
||||
val keystorePassword: String,
|
||||
val themeMode: Int? = null,
|
||||
val useDynamicTheme: Boolean? = null,
|
||||
val usePrereleases: Boolean? = null,
|
||||
val apiUrl: String? = null,
|
||||
val experimentalPatchesEnabled: Boolean? = null,
|
||||
val patchesAutoUpdate: Boolean? = null,
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
package app.revanced.manager.ui.viewmodel
|
||||
|
||||
import android.app.Application
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageInstaller as AndroidPackageInstaller
|
||||
import android.content.IntentFilter
|
||||
import android.content.pm.PackageInstaller
|
||||
import android.net.Uri
|
||||
import android.os.ParcelUuid
|
||||
import android.util.Log
|
||||
@@ -14,6 +16,7 @@ import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.saveable.autoSaver
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.runtime.toMutableStateList
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.map
|
||||
@@ -29,35 +32,32 @@ import app.revanced.manager.data.room.apps.installed.InstalledApp
|
||||
import app.revanced.manager.domain.installer.RootInstaller
|
||||
import app.revanced.manager.domain.repository.InstalledAppRepository
|
||||
import app.revanced.manager.domain.worker.WorkerRepository
|
||||
import app.revanced.manager.patcher.ProgressEvent
|
||||
import app.revanced.manager.patcher.StepId
|
||||
import app.revanced.manager.patcher.logger.LogLevel
|
||||
import app.revanced.manager.patcher.logger.Logger
|
||||
import app.revanced.manager.patcher.worker.PatcherWorker
|
||||
import app.revanced.manager.plugin.downloader.PluginHostApi
|
||||
import app.revanced.manager.plugin.downloader.UserInteractionException
|
||||
import app.revanced.manager.service.InstallService
|
||||
import app.revanced.manager.service.UninstallService
|
||||
import app.revanced.manager.ui.model.InstallerModel
|
||||
import app.revanced.manager.ui.model.ProgressKey
|
||||
import app.revanced.manager.ui.model.SelectedApp
|
||||
import app.revanced.manager.ui.model.State
|
||||
import app.revanced.manager.ui.model.StepCategory
|
||||
import app.revanced.manager.ui.model.Step
|
||||
import app.revanced.manager.ui.model.StepCategory
|
||||
import app.revanced.manager.ui.model.StepProgressProvider
|
||||
import app.revanced.manager.ui.model.navigation.Patcher
|
||||
import app.revanced.manager.ui.model.withState
|
||||
import app.revanced.manager.util.PM
|
||||
import app.revanced.manager.util.PatchSelection
|
||||
import app.revanced.manager.util.asCode
|
||||
import app.revanced.manager.util.saveableVar
|
||||
import app.revanced.manager.util.saver.snapshotStateListSaver
|
||||
import app.revanced.manager.util.simpleMessage
|
||||
import app.revanced.manager.util.tag
|
||||
import app.revanced.manager.util.toast
|
||||
import app.revanced.manager.util.uiSafe
|
||||
import kotlinx.coroutines.CompletableDeferred
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.DelicateCoroutinesApi
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.GlobalScope
|
||||
import kotlinx.coroutines.NonCancellable
|
||||
import kotlinx.coroutines.async
|
||||
import kotlinx.coroutines.cancel
|
||||
import kotlinx.coroutines.channels.Channel
|
||||
import kotlinx.coroutines.flow.receiveAsFlow
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -66,15 +66,6 @@ import kotlinx.coroutines.withContext
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.get
|
||||
import org.koin.core.component.inject
|
||||
import ru.solrudev.ackpine.installer.InstallFailure
|
||||
import ru.solrudev.ackpine.installer.PackageInstaller
|
||||
import ru.solrudev.ackpine.installer.createSession
|
||||
import ru.solrudev.ackpine.installer.getSession
|
||||
import ru.solrudev.ackpine.session.ProgressSession
|
||||
import ru.solrudev.ackpine.session.Session
|
||||
import ru.solrudev.ackpine.session.await
|
||||
import ru.solrudev.ackpine.session.parameters.Confirmation
|
||||
import ru.solrudev.ackpine.uninstaller.UninstallFailure
|
||||
import java.io.File
|
||||
import java.nio.file.Files
|
||||
import java.time.Duration
|
||||
@@ -82,7 +73,7 @@ import java.time.Duration
|
||||
@OptIn(SavedStateHandleSaveableApi::class, PluginHostApi::class)
|
||||
class PatcherViewModel(
|
||||
private val input: Patcher.ViewModelParams
|
||||
) : ViewModel(), KoinComponent, InstallerModel {
|
||||
) : ViewModel(), KoinComponent, StepProgressProvider, InstallerModel {
|
||||
private val app: Application by inject()
|
||||
private val fs: Filesystem by inject()
|
||||
private val pm: PM by inject()
|
||||
@@ -90,7 +81,6 @@ class PatcherViewModel(
|
||||
private val installedAppRepository: InstalledAppRepository by inject()
|
||||
private val rootInstaller: RootInstaller by inject()
|
||||
private val savedStateHandle: SavedStateHandle = get()
|
||||
private val ackpineInstaller: PackageInstaller = get()
|
||||
|
||||
private var installedApp: InstalledApp? = null
|
||||
private val selectedApp = input.selectedApp
|
||||
@@ -105,6 +95,7 @@ class PatcherViewModel(
|
||||
mutableStateOf<String?>(null)
|
||||
}
|
||||
private set
|
||||
private var ongoingPmSession: Boolean by savedStateHandle.saveableVar { false }
|
||||
var packageInstallerStatus: Int? by savedStateHandle.saveable(
|
||||
key = "packageInstallerStatus",
|
||||
stateSaver = autoSaver()
|
||||
@@ -113,7 +104,7 @@ class PatcherViewModel(
|
||||
}
|
||||
private set
|
||||
|
||||
var isInstalling by mutableStateOf(false)
|
||||
var isInstalling by mutableStateOf(ongoingPmSession)
|
||||
private set
|
||||
|
||||
private var currentActivityRequest: Pair<CompletableDeferred<Boolean>, String>? by mutableStateOf(
|
||||
@@ -132,18 +123,6 @@ class PatcherViewModel(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This coroutine scope is used to await installations.
|
||||
* It should not be cancelled on system-initiated process death since that would cancel the installation process.
|
||||
*/
|
||||
private val installerCoroutineScope = CoroutineScope(Dispatchers.Main)
|
||||
|
||||
/**
|
||||
* Holds the package name of the Apk we are trying to install.
|
||||
*/
|
||||
private var installerPkgName: String by savedStateHandle.saveableVar { "" }
|
||||
private var installerSessionId: ParcelUuid? by savedStateHandle.saveableVar()
|
||||
|
||||
private var inputFile: File? by savedStateHandle.saveableVar()
|
||||
private val outputFile = tempDir.resolve("output.apk")
|
||||
|
||||
@@ -159,15 +138,35 @@ class PatcherViewModel(
|
||||
}
|
||||
}
|
||||
|
||||
val steps by savedStateHandle.saveable(saver = snapshotStateListSaver()) {
|
||||
generateSteps(app, input.selectedApp, input.selectedPatches).toMutableStateList()
|
||||
private val patchCount = input.selectedPatches.values.sumOf { it.size }
|
||||
private var completedPatchCount by savedStateHandle.saveable {
|
||||
// SavedStateHandle.saveable only supports the boxed version.
|
||||
@Suppress("AutoboxingStateCreation") mutableStateOf(
|
||||
0
|
||||
)
|
||||
}
|
||||
val patchesProgress get() = completedPatchCount to patchCount
|
||||
override var downloadProgress by savedStateHandle.saveable(
|
||||
key = "downloadProgress",
|
||||
stateSaver = autoSaver()
|
||||
) {
|
||||
mutableStateOf<Pair<Long, Long?>?>(null)
|
||||
}
|
||||
private set
|
||||
val steps by savedStateHandle.saveable(saver = snapshotStateListSaver()) {
|
||||
generateSteps(
|
||||
app,
|
||||
input.selectedApp
|
||||
).toMutableStateList()
|
||||
}
|
||||
private var currentStepIndex = 0
|
||||
|
||||
val progress by derivedStateOf {
|
||||
val steps = steps.filter { it.id != StepId.ExecutePatches }
|
||||
val current = steps.count {
|
||||
it.state == State.COMPLETED && it.category != StepCategory.PATCHING
|
||||
} + completedPatchCount
|
||||
|
||||
val current = steps.count { it.state == State.COMPLETED }
|
||||
val total = steps.size
|
||||
val total = steps.size - 1 + patchCount
|
||||
|
||||
current.toFloat() / total.toFloat()
|
||||
}
|
||||
@@ -175,46 +174,67 @@ class PatcherViewModel(
|
||||
private val workManager = WorkManager.getInstance(app)
|
||||
|
||||
private val patcherWorkerId by savedStateHandle.saveable<ParcelUuid> {
|
||||
ParcelUuid(
|
||||
workerRepository.launchExpedited<PatcherWorker, PatcherWorker.Args>(
|
||||
"patching", PatcherWorker.Args(
|
||||
input.selectedApp,
|
||||
outputFile.path,
|
||||
input.selectedPatches,
|
||||
input.options,
|
||||
logger,
|
||||
setInputFile = { withContext(Dispatchers.Main) { inputFile = it } },
|
||||
handleStartActivityRequest = { plugin, intent ->
|
||||
withContext(Dispatchers.Main) {
|
||||
if (currentActivityRequest != null) throw Exception("Another request is already pending.")
|
||||
try {
|
||||
// Wait for the dialog interaction.
|
||||
val accepted = with(CompletableDeferred<Boolean>()) {
|
||||
currentActivityRequest = this to plugin.name
|
||||
ParcelUuid(workerRepository.launchExpedited<PatcherWorker, PatcherWorker.Args>(
|
||||
"patching", PatcherWorker.Args(
|
||||
input.selectedApp,
|
||||
outputFile.path,
|
||||
input.selectedPatches,
|
||||
input.options,
|
||||
logger,
|
||||
onDownloadProgress = {
|
||||
withContext(Dispatchers.Main) {
|
||||
downloadProgress = it
|
||||
}
|
||||
},
|
||||
onPatchCompleted = { withContext(Dispatchers.Main) { completedPatchCount += 1 } },
|
||||
setInputFile = { withContext(Dispatchers.Main) { inputFile = it } },
|
||||
handleStartActivityRequest = { plugin, intent ->
|
||||
withContext(Dispatchers.Main) {
|
||||
if (currentActivityRequest != null) throw Exception("Another request is already pending.")
|
||||
try {
|
||||
// Wait for the dialog interaction.
|
||||
val accepted = with(CompletableDeferred<Boolean>()) {
|
||||
currentActivityRequest = this to plugin.name
|
||||
|
||||
await()
|
||||
}
|
||||
if (!accepted) throw UserInteractionException.RequestDenied()
|
||||
|
||||
// Launch the activity and wait for the result.
|
||||
try {
|
||||
with(CompletableDeferred<ActivityResult>()) {
|
||||
launchedActivity = this
|
||||
launchActivityChannel.send(intent)
|
||||
await()
|
||||
}
|
||||
if (!accepted) throw UserInteractionException.RequestDenied()
|
||||
|
||||
// Launch the activity and wait for the result.
|
||||
try {
|
||||
with(CompletableDeferred<ActivityResult>()) {
|
||||
launchedActivity = this
|
||||
launchActivityChannel.send(intent)
|
||||
await()
|
||||
}
|
||||
} finally {
|
||||
launchedActivity = null
|
||||
}
|
||||
} finally {
|
||||
currentActivityRequest = null
|
||||
launchedActivity = null
|
||||
}
|
||||
} finally {
|
||||
currentActivityRequest = null
|
||||
}
|
||||
},
|
||||
onEvent = ::handleProgressEvent,
|
||||
)
|
||||
}
|
||||
},
|
||||
onProgress = { name, state, message ->
|
||||
viewModelScope.launch {
|
||||
steps[currentStepIndex] = steps[currentStepIndex].run {
|
||||
copy(
|
||||
name = name ?: this.name,
|
||||
state = state ?: this.state,
|
||||
message = message ?: this.message
|
||||
)
|
||||
}
|
||||
|
||||
if (state == State.COMPLETED && currentStepIndex != steps.lastIndex) {
|
||||
currentStepIndex++
|
||||
|
||||
steps[currentStepIndex] =
|
||||
steps[currentStepIndex].copy(state = State.RUNNING)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
)
|
||||
))
|
||||
}
|
||||
|
||||
val patcherSucceeded =
|
||||
@@ -226,26 +246,64 @@ class PatcherViewModel(
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
// TODO: detect system-initiated process death during the patching process.
|
||||
private val installerBroadcastReceiver = object : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context?, intent: Intent?) {
|
||||
when (intent?.action) {
|
||||
InstallService.APP_INSTALL_ACTION -> {
|
||||
val pmStatus = intent.getIntExtra(
|
||||
InstallService.EXTRA_INSTALL_STATUS,
|
||||
PackageInstaller.STATUS_FAILURE
|
||||
)
|
||||
|
||||
installerSessionId?.uuid?.let { id ->
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
isInstalling = true
|
||||
uiSafe(app, R.string.install_app_fail, "Failed to install") {
|
||||
// The process was killed during installation. Await the session again.
|
||||
withContext(Dispatchers.IO) {
|
||||
ackpineInstaller.getSession(id)
|
||||
}?.let {
|
||||
awaitInstallation(it)
|
||||
intent.getStringExtra(UninstallService.EXTRA_UNINSTALL_STATUS_MESSAGE)
|
||||
?.let(logger::trace)
|
||||
|
||||
if (pmStatus == PackageInstaller.STATUS_SUCCESS) {
|
||||
app.toast(app.getString(R.string.install_app_success))
|
||||
installedPackageName =
|
||||
intent.getStringExtra(InstallService.EXTRA_PACKAGE_NAME)
|
||||
viewModelScope.launch {
|
||||
installedAppRepository.addOrUpdate(
|
||||
installedPackageName!!,
|
||||
packageName,
|
||||
input.selectedApp.version
|
||||
?: pm.getPackageInfo(outputFile)?.versionName!!,
|
||||
InstallType.DEFAULT,
|
||||
input.selectedPatches
|
||||
)
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
} else packageInstallerStatus = pmStatus
|
||||
|
||||
isInstalling = false
|
||||
}
|
||||
|
||||
UninstallService.APP_UNINSTALL_ACTION -> {
|
||||
val pmStatus = intent.getIntExtra(
|
||||
UninstallService.EXTRA_UNINSTALL_STATUS,
|
||||
PackageInstaller.STATUS_FAILURE
|
||||
)
|
||||
|
||||
intent.getStringExtra(UninstallService.EXTRA_UNINSTALL_STATUS_MESSAGE)
|
||||
?.let(logger::trace)
|
||||
|
||||
if (pmStatus != PackageInstaller.STATUS_SUCCESS)
|
||||
packageInstallerStatus = pmStatus
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
// TODO: detect system-initiated process death during the patching process.
|
||||
ContextCompat.registerReceiver(
|
||||
app,
|
||||
installerBroadcastReceiver,
|
||||
IntentFilter().apply {
|
||||
addAction(InstallService.APP_INSTALL_ACTION)
|
||||
addAction(UninstallService.APP_UNINSTALL_ACTION)
|
||||
},
|
||||
ContextCompat.RECEIVER_NOT_EXPORTED
|
||||
)
|
||||
|
||||
viewModelScope.launch {
|
||||
installedApp = installedAppRepository.get(packageName)
|
||||
@@ -255,6 +313,7 @@ class PatcherViewModel(
|
||||
@OptIn(DelicateCoroutinesApi::class)
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
app.unregisterReceiver(installerBroadcastReceiver)
|
||||
workManager.cancelWorkById(patcherWorkerId.uuid)
|
||||
|
||||
if (input.selectedApp is SelectedApp.Installed && installedApp?.installType == InstallType.MOUNT) {
|
||||
@@ -268,37 +327,7 @@ class PatcherViewModel(
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleProgressEvent(event: ProgressEvent) = viewModelScope.launch {
|
||||
val stepIndex = steps.indexOfFirst {
|
||||
event.stepId?.let { id -> id == it.id }
|
||||
?: (it.state == State.RUNNING || it.state == State.WAITING)
|
||||
}
|
||||
|
||||
if (stepIndex != -1) steps[stepIndex] = steps[stepIndex].run {
|
||||
when (event) {
|
||||
is ProgressEvent.Started -> withState(State.RUNNING)
|
||||
|
||||
is ProgressEvent.Progress -> withState(
|
||||
message = event.message ?: message,
|
||||
progress = event.current?.let { event.current to event.total } ?: progress
|
||||
)
|
||||
|
||||
is ProgressEvent.Completed -> withState(State.COMPLETED, progress = null)
|
||||
|
||||
is ProgressEvent.Failed -> {
|
||||
if (event.stepId == null && steps.any { it.state == State.FAILED }) return@launch
|
||||
withState(
|
||||
State.FAILED,
|
||||
message = event.error.stackTrace,
|
||||
progress = null
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun onBack() {
|
||||
installerCoroutineScope.cancel()
|
||||
// tempDir cannot be deleted inside onCleared because it gets called on system-initiated process death.
|
||||
tempDir.deleteRecursively()
|
||||
}
|
||||
@@ -343,93 +372,44 @@ class PatcherViewModel(
|
||||
|
||||
fun open() = installedPackageName?.let(pm::launch)
|
||||
|
||||
private suspend fun startInstallation(file: File, packageName: String) {
|
||||
val session = withContext(Dispatchers.IO) {
|
||||
ackpineInstaller.createSession(Uri.fromFile(file)) {
|
||||
confirmation = Confirmation.IMMEDIATE
|
||||
}
|
||||
}
|
||||
withContext(Dispatchers.Main) {
|
||||
installerPkgName = packageName
|
||||
}
|
||||
awaitInstallation(session)
|
||||
}
|
||||
|
||||
private suspend fun awaitInstallation(session: ProgressSession<InstallFailure>) = withContext(
|
||||
Dispatchers.Main
|
||||
) {
|
||||
val result = installerCoroutineScope.async {
|
||||
try {
|
||||
installerSessionId = ParcelUuid(session.id)
|
||||
withContext(Dispatchers.IO) {
|
||||
session.await()
|
||||
}
|
||||
} finally {
|
||||
installerSessionId = null
|
||||
}
|
||||
}.await()
|
||||
|
||||
when (result) {
|
||||
is Session.State.Failed<InstallFailure> -> {
|
||||
result.failure.message?.let(logger::trace)
|
||||
packageInstallerStatus = result.failure.asCode()
|
||||
}
|
||||
|
||||
Session.State.Succeeded -> {
|
||||
app.toast(app.getString(R.string.install_app_success))
|
||||
installedPackageName = installerPkgName
|
||||
installedAppRepository.addOrUpdate(
|
||||
installerPkgName,
|
||||
packageName,
|
||||
input.selectedApp.version
|
||||
?: withContext(Dispatchers.IO) { pm.getPackageInfo(outputFile)?.versionName!! },
|
||||
InstallType.DEFAULT,
|
||||
input.selectedPatches
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun install(installType: InstallType) = viewModelScope.launch {
|
||||
isInstalling = true
|
||||
var needsRootUninstall = false
|
||||
var pmInstallStarted = false
|
||||
try {
|
||||
uiSafe(app, R.string.install_app_fail, "Failed to install") {
|
||||
val currentPackageInfo =
|
||||
withContext(Dispatchers.IO) { pm.getPackageInfo(outputFile) }
|
||||
?: throw Exception("Failed to load application info")
|
||||
isInstalling = true
|
||||
|
||||
// If the app is currently installed
|
||||
val existingPackageInfo =
|
||||
withContext(Dispatchers.IO) { pm.getPackageInfo(currentPackageInfo.packageName) }
|
||||
if (existingPackageInfo != null) {
|
||||
// Check if the app version is less than the installed version
|
||||
if (
|
||||
pm.getVersionCode(currentPackageInfo) < pm.getVersionCode(
|
||||
existingPackageInfo
|
||||
)
|
||||
) {
|
||||
// Exit if the selected app version is less than the installed version
|
||||
packageInstallerStatus = AndroidPackageInstaller.STATUS_FAILURE_CONFLICT
|
||||
return@launch
|
||||
val currentPackageInfo = pm.getPackageInfo(outputFile)
|
||||
?: throw Exception("Failed to load application info")
|
||||
|
||||
// If the app is currently installed
|
||||
val existingPackageInfo = pm.getPackageInfo(currentPackageInfo.packageName)
|
||||
if (existingPackageInfo != null) {
|
||||
// Check if the app version is less than the installed version
|
||||
if (pm.getVersionCode(currentPackageInfo) < pm.getVersionCode(existingPackageInfo)) {
|
||||
// Exit if the selected app version is less than the installed version
|
||||
packageInstallerStatus = PackageInstaller.STATUS_FAILURE_CONFLICT
|
||||
return@launch
|
||||
}
|
||||
}
|
||||
|
||||
when (installType) {
|
||||
InstallType.DEFAULT -> {
|
||||
// Check if the app is mounted as root
|
||||
// If it is, unmount it first, silently
|
||||
if (rootInstaller.hasRootAccess() && rootInstaller.isAppMounted(packageName)) {
|
||||
rootInstaller.unmount(packageName)
|
||||
}
|
||||
|
||||
// Install regularly
|
||||
pm.installApp(listOf(outputFile))
|
||||
pmInstallStarted = true
|
||||
}
|
||||
|
||||
when (installType) {
|
||||
InstallType.DEFAULT -> {
|
||||
// Check if the app is mounted as root
|
||||
// If it is, unmount it first, silently
|
||||
if (rootInstaller.hasRootAccess() && rootInstaller.isAppMounted(packageName)) {
|
||||
rootInstaller.unmount(packageName)
|
||||
}
|
||||
|
||||
// Install regularly
|
||||
startInstallation(outputFile, currentPackageInfo.packageName)
|
||||
}
|
||||
|
||||
InstallType.MOUNT -> {
|
||||
InstallType.MOUNT -> {
|
||||
try {
|
||||
val packageInfo = pm.getPackageInfo(outputFile)
|
||||
?: throw Exception("Failed to load application info")
|
||||
val label = with(pm) {
|
||||
currentPackageInfo.label()
|
||||
packageInfo.label()
|
||||
}
|
||||
|
||||
// Check for base APK, first check if the app is already installed
|
||||
@@ -437,17 +417,15 @@ class PatcherViewModel(
|
||||
// If the app is not installed, check if the output file is a base apk
|
||||
if (currentPackageInfo.splitNames.isNotEmpty()) {
|
||||
// Exit if there is no base APK package
|
||||
packageInstallerStatus =
|
||||
AndroidPackageInstaller.STATUS_FAILURE_INVALID
|
||||
packageInstallerStatus = PackageInstaller.STATUS_FAILURE_INVALID
|
||||
return@launch
|
||||
}
|
||||
}
|
||||
|
||||
val inputVersion = input.selectedApp.version
|
||||
?: withContext(Dispatchers.IO) { inputFile?.let(pm::getPackageInfo)?.versionName }
|
||||
?: inputFile?.let(pm::getPackageInfo)?.versionName
|
||||
?: throw Exception("Failed to determine input APK version")
|
||||
|
||||
needsRootUninstall = true
|
||||
// Install as root
|
||||
rootInstaller.install(
|
||||
outputFile,
|
||||
@@ -458,7 +436,7 @@ class PatcherViewModel(
|
||||
)
|
||||
|
||||
installedAppRepository.addOrUpdate(
|
||||
currentPackageInfo.packageName,
|
||||
packageInfo.packageName,
|
||||
packageName,
|
||||
inputVersion,
|
||||
InstallType.MOUNT,
|
||||
@@ -470,20 +448,21 @@ class PatcherViewModel(
|
||||
installedPackageName = packageName
|
||||
|
||||
app.toast(app.getString(R.string.install_app_success))
|
||||
needsRootUninstall = false
|
||||
} catch (e: Exception) {
|
||||
Log.e(tag, "Failed to install as root", e)
|
||||
app.toast(app.getString(R.string.install_app_fail, e.simpleMessage()))
|
||||
try {
|
||||
rootInstaller.uninstall(packageName)
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Log.e(tag, "Failed to install", e)
|
||||
app.toast(app.getString(R.string.install_app_fail, e.simpleMessage()))
|
||||
} finally {
|
||||
isInstalling = false
|
||||
if (needsRootUninstall) {
|
||||
try {
|
||||
withContext(NonCancellable) {
|
||||
rootInstaller.uninstall(packageName)
|
||||
}
|
||||
} catch (_: Exception) {
|
||||
}
|
||||
}
|
||||
if (!pmInstallStarted) isInstalling = false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -494,27 +473,12 @@ class PatcherViewModel(
|
||||
|
||||
override fun reinstall() {
|
||||
viewModelScope.launch {
|
||||
try {
|
||||
uiSafe(app, R.string.reinstall_app_fail, "Failed to reinstall") {
|
||||
pm.getPackageInfo(outputFile)?.packageName?.let { pm.uninstallPackage(it) }
|
||||
?: throw Exception("Failed to load application info")
|
||||
|
||||
pm.installApp(listOf(outputFile))
|
||||
isInstalling = true
|
||||
uiSafe(app, R.string.reinstall_app_fail, "Failed to reinstall") {
|
||||
val pkgName = withContext(Dispatchers.IO) {
|
||||
pm.getPackageInfo(outputFile)?.packageName
|
||||
?: throw Exception("Failed to load application info")
|
||||
}
|
||||
|
||||
when (val result = pm.uninstallPackage(pkgName)) {
|
||||
is Session.State.Failed<UninstallFailure> -> {
|
||||
result.failure.message?.let(logger::trace)
|
||||
packageInstallerStatus = result.failure.asCode()
|
||||
return@launch
|
||||
}
|
||||
|
||||
Session.State.Succeeded -> {}
|
||||
}
|
||||
startInstallation(outputFile, pkgName)
|
||||
}
|
||||
} finally {
|
||||
isInstalling = false
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -533,66 +497,34 @@ class PatcherViewModel(
|
||||
LogLevel.ERROR -> Log.e(TAG, msg)
|
||||
}
|
||||
|
||||
fun generateSteps(
|
||||
context: Context,
|
||||
selectedApp: SelectedApp,
|
||||
selectedPatches: PatchSelection
|
||||
): List<Step> = buildList {
|
||||
if (selectedApp is SelectedApp.Download || selectedApp is SelectedApp.Search)
|
||||
add(
|
||||
Step(
|
||||
StepId.DownloadAPK,
|
||||
context.getString(R.string.download_apk),
|
||||
StepCategory.PREPARING
|
||||
)
|
||||
)
|
||||
fun generateSteps(context: Context, selectedApp: SelectedApp): List<Step> {
|
||||
val needsDownload =
|
||||
selectedApp is SelectedApp.Download || selectedApp is SelectedApp.Search
|
||||
|
||||
add(
|
||||
return listOfNotNull(
|
||||
Step(
|
||||
context.getString(R.string.download_apk),
|
||||
StepCategory.PREPARING,
|
||||
state = State.RUNNING,
|
||||
progressKey = ProgressKey.DOWNLOAD,
|
||||
).takeIf { needsDownload },
|
||||
Step(
|
||||
StepId.LoadPatches,
|
||||
context.getString(R.string.patcher_step_load_patches),
|
||||
StepCategory.PREPARING
|
||||
)
|
||||
)
|
||||
add(
|
||||
StepCategory.PREPARING,
|
||||
state = if (needsDownload) State.WAITING else State.RUNNING,
|
||||
),
|
||||
Step(
|
||||
StepId.ReadAPK,
|
||||
context.getString(R.string.patcher_step_unpack),
|
||||
StepCategory.PREPARING
|
||||
)
|
||||
)
|
||||
add(
|
||||
),
|
||||
|
||||
Step(
|
||||
StepId.ExecutePatches,
|
||||
context.getString(R.string.execute_patches),
|
||||
StepCategory.PATCHING,
|
||||
hide = true
|
||||
)
|
||||
)
|
||||
StepCategory.PATCHING
|
||||
),
|
||||
|
||||
selectedPatches.values.asSequence().flatten().sorted().forEachIndexed { index, name ->
|
||||
add(
|
||||
Step(
|
||||
StepId.ExecutePatch(index),
|
||||
name,
|
||||
StepCategory.PATCHING
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
add(
|
||||
Step(
|
||||
StepId.WriteAPK,
|
||||
context.getString(R.string.patcher_step_write_patched),
|
||||
StepCategory.SAVING
|
||||
)
|
||||
)
|
||||
add(
|
||||
Step(
|
||||
StepId.SignAPK,
|
||||
context.getString(R.string.patcher_step_sign_apk),
|
||||
StepCategory.SAVING
|
||||
)
|
||||
Step(context.getString(R.string.patcher_step_write_patched), StepCategory.SAVING),
|
||||
Step(context.getString(R.string.patcher_step_sign_apk), StepCategory.SAVING)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,6 +8,7 @@ import android.os.Parcelable
|
||||
import android.util.Log
|
||||
import androidx.activity.result.ActivityResult
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.compose.runtime.MutableState
|
||||
import androidx.compose.runtime.derivedStateOf
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
@@ -128,6 +129,8 @@ class SelectedAppInfoViewModel(
|
||||
}
|
||||
|
||||
var options: Options by savedStateHandle.saveable {
|
||||
val state = mutableStateOf<Options>(emptyMap())
|
||||
|
||||
viewModelScope.launch {
|
||||
if (!persistConfiguration) return@launch // TODO: save options for patched apps.
|
||||
val bundlePatches = bundleInfoFlow.first()
|
||||
@@ -138,7 +141,7 @@ class SelectedAppInfoViewModel(
|
||||
}
|
||||
}
|
||||
|
||||
mutableStateOf(emptyMap())
|
||||
state
|
||||
}
|
||||
private set
|
||||
|
||||
@@ -146,6 +149,8 @@ class SelectedAppInfoViewModel(
|
||||
if (input.patches != null)
|
||||
return@saveable mutableStateOf(SelectionState.Customized(input.patches))
|
||||
|
||||
val selection: MutableState<SelectionState> = mutableStateOf(SelectionState.Default)
|
||||
|
||||
// Try to get the previous selection if customization is enabled.
|
||||
viewModelScope.launch {
|
||||
if (!prefs.disableSelectionWarning.get()) return@launch
|
||||
@@ -155,7 +160,7 @@ class SelectedAppInfoViewModel(
|
||||
selectionState = SelectionState.Customized(previous)
|
||||
}
|
||||
|
||||
mutableStateOf(SelectionState.Default)
|
||||
selection
|
||||
}
|
||||
|
||||
var showSourceSelector by mutableStateOf(false)
|
||||
@@ -306,7 +311,7 @@ class SelectedAppInfoViewModel(
|
||||
}
|
||||
}
|
||||
|
||||
enum class Error(@param:StringRes val resourceId: Int) {
|
||||
enum class Error(@StringRes val resourceId: Int) {
|
||||
NoPlugins(R.string.downloader_no_plugins_available)
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,18 @@
|
||||
package app.revanced.manager.ui.viewmodel
|
||||
|
||||
import android.app.Application
|
||||
import android.net.Uri
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.IntentFilter
|
||||
import android.content.pm.PackageInstaller
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.compose.runtime.derivedStateOf
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableLongStateOf
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
import app.revanced.manager.R
|
||||
@@ -16,6 +21,8 @@ import app.revanced.manager.data.platform.NetworkInfo
|
||||
import app.revanced.manager.network.api.ReVancedAPI
|
||||
import app.revanced.manager.network.dto.ReVancedAsset
|
||||
import app.revanced.manager.network.service.HttpService
|
||||
import app.revanced.manager.service.InstallService
|
||||
import app.revanced.manager.util.PM
|
||||
import app.revanced.manager.util.toast
|
||||
import app.revanced.manager.util.uiSafe
|
||||
import io.ktor.client.plugins.onDownload
|
||||
@@ -24,14 +31,7 @@ import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.withContext
|
||||
import org.koin.core.component.KoinComponent
|
||||
import org.koin.core.component.get
|
||||
import org.koin.core.component.inject
|
||||
import ru.solrudev.ackpine.installer.InstallFailure
|
||||
import ru.solrudev.ackpine.installer.PackageInstaller
|
||||
import ru.solrudev.ackpine.installer.createSession
|
||||
import ru.solrudev.ackpine.session.Session
|
||||
import ru.solrudev.ackpine.session.await
|
||||
import ru.solrudev.ackpine.session.parameters.Confirmation
|
||||
|
||||
class UpdateViewModel(
|
||||
private val downloadOnScreenEntry: Boolean
|
||||
@@ -39,11 +39,10 @@ class UpdateViewModel(
|
||||
private val app: Application by inject()
|
||||
private val reVancedAPI: ReVancedAPI by inject()
|
||||
private val http: HttpService by inject()
|
||||
private val pm: PM by inject()
|
||||
private val networkInfo: NetworkInfo by inject()
|
||||
private val fs: Filesystem by inject()
|
||||
private val ackpineInstaller: PackageInstaller = get()
|
||||
|
||||
// TODO: save state to handle process death.
|
||||
var downloadedSize by mutableLongStateOf(0L)
|
||||
private set
|
||||
var totalSize by mutableLongStateOf(0L)
|
||||
@@ -63,17 +62,14 @@ class UpdateViewModel(
|
||||
private set
|
||||
|
||||
private val location = fs.tempDir.resolve("updater.apk")
|
||||
private val job = viewModelScope.launch {
|
||||
uiSafe(app, R.string.download_manager_failed, "Failed to download ReVanced Manager") {
|
||||
releaseInfo = reVancedAPI.getAppUpdate() ?: throw Exception("No update available")
|
||||
|
||||
init {
|
||||
viewModelScope.launch {
|
||||
uiSafe(app, R.string.download_manager_failed, "Failed to download ReVanced Manager") {
|
||||
releaseInfo = reVancedAPI.getAppUpdate() ?: throw Exception("No update available")
|
||||
|
||||
if (downloadOnScreenEntry) {
|
||||
downloadUpdate()
|
||||
} else {
|
||||
state = State.CAN_DOWNLOAD
|
||||
}
|
||||
if (downloadOnScreenEntry) {
|
||||
downloadUpdate()
|
||||
} else {
|
||||
state = State.CAN_DOWNLOAD
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -82,7 +78,7 @@ class UpdateViewModel(
|
||||
uiSafe(app, R.string.failed_to_download_update, "Failed to download update") {
|
||||
val release = releaseInfo!!
|
||||
withContext(Dispatchers.IO) {
|
||||
if (!networkInfo.isSafe(false) && !ignoreInternetCheck) {
|
||||
if (!networkInfo.isSafe() && !ignoreInternetCheck) {
|
||||
showInternetCheckDialog = true
|
||||
} else {
|
||||
state = State.DOWNLOADING
|
||||
@@ -90,10 +86,8 @@ class UpdateViewModel(
|
||||
http.download(location) {
|
||||
url(release.downloadUrl)
|
||||
onDownload { bytesSentTotal, contentLength ->
|
||||
withContext(Dispatchers.Main) {
|
||||
downloadedSize = bytesSentTotal
|
||||
contentLength?.let { totalSize = it }
|
||||
}
|
||||
downloadedSize = bytesSentTotal
|
||||
totalSize = contentLength
|
||||
}
|
||||
}
|
||||
installUpdate()
|
||||
@@ -104,36 +98,50 @@ class UpdateViewModel(
|
||||
|
||||
fun installUpdate() = viewModelScope.launch {
|
||||
state = State.INSTALLING
|
||||
val result = withContext(Dispatchers.IO) {
|
||||
ackpineInstaller.createSession(Uri.fromFile(location)) {
|
||||
confirmation = Confirmation.IMMEDIATE
|
||||
}.await()
|
||||
}
|
||||
|
||||
when (result) {
|
||||
is Session.State.Failed<InstallFailure> -> when (val failure = result.failure) {
|
||||
is InstallFailure.Aborted -> state = State.CAN_INSTALL
|
||||
else -> {
|
||||
val msg = failure.message.orEmpty()
|
||||
app.toast(app.getString(R.string.install_app_fail, msg))
|
||||
installError = msg
|
||||
state = State.FAILED
|
||||
pm.installApp(listOf(location))
|
||||
}
|
||||
|
||||
private val installBroadcastReceiver = object : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context?, intent: Intent?) {
|
||||
intent?.let {
|
||||
val pmStatus = intent.getIntExtra(InstallService.EXTRA_INSTALL_STATUS, -999)
|
||||
val extra =
|
||||
intent.getStringExtra(InstallService.EXTRA_INSTALL_STATUS_MESSAGE)!!
|
||||
|
||||
when(pmStatus) {
|
||||
PackageInstaller.STATUS_SUCCESS -> {
|
||||
app.toast(app.getString(R.string.install_app_success))
|
||||
state = State.SUCCESS
|
||||
}
|
||||
PackageInstaller.STATUS_FAILURE_ABORTED -> {
|
||||
state = State.CAN_INSTALL
|
||||
}
|
||||
else -> {
|
||||
app.toast(app.getString(R.string.install_app_fail, extra))
|
||||
installError = extra
|
||||
state = State.FAILED
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Session.State.Succeeded -> {
|
||||
app.toast(app.getString(R.string.install_app_success))
|
||||
state = State.SUCCESS
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
init {
|
||||
ContextCompat.registerReceiver(app, installBroadcastReceiver, IntentFilter().apply {
|
||||
addAction(InstallService.APP_INSTALL_ACTION)
|
||||
}, ContextCompat.RECEIVER_NOT_EXPORTED)
|
||||
}
|
||||
|
||||
override fun onCleared() {
|
||||
super.onCleared()
|
||||
app.unregisterReceiver(installBroadcastReceiver)
|
||||
|
||||
job.cancel()
|
||||
location.delete()
|
||||
}
|
||||
|
||||
enum class State(@param:StringRes val title: Int) {
|
||||
enum class State(@StringRes val title: Int) {
|
||||
CAN_DOWNLOAD(R.string.update_available),
|
||||
DOWNLOADING(R.string.downloading_manager_update),
|
||||
CAN_INSTALL(R.string.ready_to_install_update),
|
||||
|
||||
@@ -17,8 +17,6 @@ class UpdatesSettingsViewModel(
|
||||
) : ViewModel() {
|
||||
val managerAutoUpdates = prefs.managerAutoUpdates
|
||||
val showManagerUpdateDialogOnLaunch = prefs.showManagerUpdateDialogOnLaunch
|
||||
val useManagerPrereleases = prefs.useManagerPrereleases
|
||||
|
||||
|
||||
val isConnected: Boolean
|
||||
get() = network.isConnected()
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
package app.revanced.manager.util
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.pm.PackageInstaller
|
||||
import ru.solrudev.ackpine.installer.InstallFailure
|
||||
import ru.solrudev.ackpine.uninstaller.UninstallFailure
|
||||
|
||||
/**
|
||||
* Converts an Ackpine installation failure into a PM status code
|
||||
*/
|
||||
fun InstallFailure.asCode() = when (this) {
|
||||
is InstallFailure.Aborted -> PackageInstaller.STATUS_FAILURE_ABORTED
|
||||
is InstallFailure.Blocked -> PackageInstaller.STATUS_FAILURE_BLOCKED
|
||||
is InstallFailure.Conflict -> PackageInstaller.STATUS_FAILURE_CONFLICT
|
||||
is InstallFailure.Incompatible -> PackageInstaller.STATUS_FAILURE_INCOMPATIBLE
|
||||
is InstallFailure.Invalid -> PackageInstaller.STATUS_FAILURE_INVALID
|
||||
is InstallFailure.Storage -> PackageInstaller.STATUS_FAILURE_STORAGE
|
||||
is InstallFailure.Timeout -> @SuppressLint("InlinedApi") PackageInstaller.STATUS_FAILURE_TIMEOUT
|
||||
else -> PackageInstaller.STATUS_FAILURE
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts an Ackpine uninstallation failure into a PM status code
|
||||
*/
|
||||
fun UninstallFailure.asCode() = when (this) {
|
||||
is UninstallFailure.Aborted -> PackageInstaller.STATUS_FAILURE_ABORTED
|
||||
is UninstallFailure.Blocked -> PackageInstaller.STATUS_FAILURE_BLOCKED
|
||||
is UninstallFailure.Conflict -> PackageInstaller.STATUS_FAILURE_CONFLICT
|
||||
else -> PackageInstaller.STATUS_FAILURE
|
||||
}
|
||||
@@ -2,8 +2,11 @@ package app.revanced.manager.util
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Application
|
||||
import android.app.PendingIntent
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageInfo
|
||||
import android.content.pm.PackageInstaller
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.pm.PackageManager.PackageInfoFlags
|
||||
import android.content.pm.PackageManager.NameNotFoundException
|
||||
@@ -13,6 +16,8 @@ import android.os.Build
|
||||
import android.os.Parcelable
|
||||
import androidx.compose.runtime.Immutable
|
||||
import app.revanced.manager.domain.repository.PatchBundleRepository
|
||||
import app.revanced.manager.service.InstallService
|
||||
import app.revanced.manager.service.UninstallService
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.async
|
||||
@@ -20,13 +25,10 @@ import kotlinx.coroutines.flow.flowOn
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import ru.solrudev.ackpine.session.await
|
||||
import ru.solrudev.ackpine.session.parameters.Confirmation
|
||||
import ru.solrudev.ackpine.uninstaller.PackageUninstaller
|
||||
import ru.solrudev.ackpine.uninstaller.createSession
|
||||
import ru.solrudev.ackpine.uninstaller.parameters.UninstallParametersDsl
|
||||
import java.io.File
|
||||
|
||||
private const val byteArraySize = 1024 * 1024 // Because 1,048,576 is not readable
|
||||
|
||||
@Immutable
|
||||
@Parcelize
|
||||
data class AppInfo(
|
||||
@@ -38,8 +40,7 @@ data class AppInfo(
|
||||
@SuppressLint("QueryPermissionsNeeded")
|
||||
class PM(
|
||||
private val app: Application,
|
||||
patchBundleRepository: PatchBundleRepository,
|
||||
private val uninstaller: PackageUninstaller
|
||||
patchBundleRepository: PatchBundleRepository
|
||||
) {
|
||||
private val scope = CoroutineScope(Dispatchers.IO)
|
||||
|
||||
@@ -144,11 +145,17 @@ class PM(
|
||||
false
|
||||
)
|
||||
|
||||
suspend fun uninstallPackage(pkg: String, config: UninstallParametersDsl.() -> Unit = {}) = withContext(Dispatchers.IO) {
|
||||
uninstaller.createSession(pkg) {
|
||||
confirmation = Confirmation.IMMEDIATE
|
||||
config()
|
||||
}.await()
|
||||
suspend fun installApp(apks: List<File>) = withContext(Dispatchers.IO) {
|
||||
val packageInstaller = app.packageManager.packageInstaller
|
||||
packageInstaller.openSession(packageInstaller.createSession(sessionParams)).use { session ->
|
||||
apks.forEach { apk -> session.writeApk(apk) }
|
||||
session.commit(app.installIntentSender)
|
||||
}
|
||||
}
|
||||
|
||||
fun uninstallPackage(pkg: String) {
|
||||
val packageInstaller = app.packageManager.packageInstaller
|
||||
packageInstaller.uninstall(pkg, app.uninstallIntentSender)
|
||||
}
|
||||
|
||||
fun launch(pkg: String) = app.packageManager.getLaunchIntentForPackage(pkg)?.let {
|
||||
@@ -157,4 +164,44 @@ class PM(
|
||||
}
|
||||
|
||||
fun canInstallPackages() = app.packageManager.canRequestPackageInstalls()
|
||||
|
||||
private fun PackageInstaller.Session.writeApk(apk: File) {
|
||||
apk.inputStream().use { inputStream ->
|
||||
openWrite(apk.name, 0, apk.length()).use { outputStream ->
|
||||
inputStream.copyTo(outputStream, byteArraySize)
|
||||
fsync(outputStream)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val intentFlags
|
||||
get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S)
|
||||
PendingIntent.FLAG_MUTABLE
|
||||
else
|
||||
0
|
||||
|
||||
private val sessionParams
|
||||
get() = PackageInstaller.SessionParams(
|
||||
PackageInstaller.SessionParams.MODE_FULL_INSTALL
|
||||
).apply {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
|
||||
setRequestUpdateOwnership(true)
|
||||
setInstallReason(PackageManager.INSTALL_REASON_USER)
|
||||
}
|
||||
|
||||
private val Context.installIntentSender
|
||||
get() = PendingIntent.getService(
|
||||
this,
|
||||
0,
|
||||
Intent(this, InstallService::class.java),
|
||||
intentFlags
|
||||
).intentSender
|
||||
|
||||
private val Context.uninstallIntentSender
|
||||
get() = PendingIntent.getService(
|
||||
this,
|
||||
0,
|
||||
Intent(this, UninstallService::class.java),
|
||||
intentFlags
|
||||
).intentSender
|
||||
}
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
package app.revanced.manager.util
|
||||
|
||||
import android.app.LocaleConfig
|
||||
import android.content.Context
|
||||
import android.os.Build
|
||||
import android.os.LocaleList
|
||||
import androidx.appcompat.app.AppCompatDelegate
|
||||
import androidx.core.os.LocaleListCompat
|
||||
import app.revanced.manager.BuildConfig
|
||||
import java.util.Locale
|
||||
|
||||
object SupportedLocales {
|
||||
fun getSupportedLocales(context: Context): List<Locale> {
|
||||
var result: List<Locale>? = null
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) result = runCatching {
|
||||
LocaleConfig(context).supportedLocales?.toList()
|
||||
}.getOrNull()
|
||||
|
||||
return result ?: generated
|
||||
}
|
||||
|
||||
fun getCurrentLocale(): Locale? =
|
||||
AppCompatDelegate.getApplicationLocales().takeIf { !it.isEmpty }?.get(0)
|
||||
|
||||
fun setLocale(locale: Locale?) = AppCompatDelegate.setApplicationLocales(
|
||||
locale?.let { LocaleListCompat.create(it) } ?: LocaleListCompat.getEmptyLocaleList()
|
||||
)
|
||||
|
||||
fun getDisplayName(locale: Locale) =
|
||||
locale.getDisplayName(locale).replaceFirstChar { it.uppercase(locale) }
|
||||
|
||||
private fun LocaleList.toList() = (0 until size()).map { get(it) }
|
||||
|
||||
private val generated by lazy {
|
||||
listOf(
|
||||
Locale.ENGLISH,
|
||||
*BuildConfig.SUPPORTED_LOCALES.map(Locale::forLanguageTag).toTypedArray()
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -15,10 +15,12 @@ import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.ReadOnlyComposable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.State
|
||||
import androidx.compose.runtime.derivedStateOf
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.produceState
|
||||
import androidx.compose.runtime.mutableIntStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberUpdatedState
|
||||
import androidx.compose.runtime.snapshotFlow
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.alpha
|
||||
import androidx.compose.ui.graphics.Color
|
||||
@@ -31,7 +33,6 @@ import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import app.revanced.manager.R
|
||||
import kotlinx.coroutines.CancellationException
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.DelicateCoroutinesApi
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
@@ -41,6 +42,7 @@ import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.flow.flatMapLatest
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.datetime.Clock
|
||||
import kotlinx.datetime.LocalDateTime
|
||||
import kotlinx.datetime.TimeZone
|
||||
import kotlinx.datetime.format.MonthNames
|
||||
@@ -48,11 +50,9 @@ import kotlinx.datetime.format.char
|
||||
import kotlinx.datetime.toInstant
|
||||
import kotlinx.datetime.toLocalDateTime
|
||||
import java.util.Locale
|
||||
import kotlin.math.abs
|
||||
import kotlin.properties.PropertyDelegateProvider
|
||||
import kotlin.properties.ReadWriteProperty
|
||||
import kotlin.reflect.KProperty
|
||||
import kotlin.time.Clock
|
||||
|
||||
typealias PatchSelection = Map<Int, Set<String>>
|
||||
typealias Options = Map<Int, Map<String, Map<String, Any?>>>
|
||||
@@ -82,8 +82,6 @@ fun Context.toast(string: String, duration: Int = Toast.LENGTH_SHORT) {
|
||||
inline fun uiSafe(context: Context, @StringRes toastMsg: Int, logMsg: String, block: () -> Unit) {
|
||||
try {
|
||||
block()
|
||||
} catch (e: CancellationException) {
|
||||
throw e
|
||||
} catch (error: Exception) {
|
||||
// You can only toast on the main thread.
|
||||
GlobalScope.launch(Dispatchers.Main) {
|
||||
@@ -168,7 +166,7 @@ fun LocalDateTime.relativeTime(context: Context): String {
|
||||
else -> LocalDateTime.Format {
|
||||
monthName(MonthNames.ENGLISH_ABBREVIATED)
|
||||
char(' ')
|
||||
day()
|
||||
dayOfMonth()
|
||||
if (now.toLocalDateTime(TimeZone.UTC).year != this@relativeTime.year) {
|
||||
chars(", ")
|
||||
year()
|
||||
@@ -195,12 +193,7 @@ val transparentListItemColors
|
||||
.also { transparentListItemColorsCached = it }
|
||||
|
||||
@Composable
|
||||
fun <T> EventEffect(
|
||||
flow: Flow<T>,
|
||||
vararg keys: Any?,
|
||||
state: Lifecycle.State = Lifecycle.State.STARTED,
|
||||
block: suspend (T) -> Unit
|
||||
) {
|
||||
fun <T> EventEffect(flow: Flow<T>, vararg keys: Any?, state: Lifecycle.State = Lifecycle.State.STARTED, block: suspend (T) -> Unit) {
|
||||
val lifecycleOwner = LocalLifecycleOwner.current
|
||||
val currentBlock by rememberUpdatedState(block)
|
||||
|
||||
@@ -216,36 +209,40 @@ fun <T> EventEffect(
|
||||
const val isScrollingUpSensitivity = 10
|
||||
|
||||
@Composable
|
||||
fun LazyListState.isScrollingUp() = produceState(true, this) {
|
||||
var previousIndex = firstVisibleItemIndex
|
||||
var previousScrollOffset = firstVisibleItemScrollOffset
|
||||
fun LazyListState.isScrollingUp(): State<Boolean> {
|
||||
return remember(this) {
|
||||
var previousIndex by mutableIntStateOf(firstVisibleItemIndex)
|
||||
var previousScrollOffset by mutableIntStateOf(firstVisibleItemScrollOffset)
|
||||
|
||||
snapshotFlow {
|
||||
firstVisibleItemIndex to firstVisibleItemScrollOffset
|
||||
}.collect { (index, scrollOffset) ->
|
||||
val indexChanged = previousIndex != index
|
||||
val offsetChanged = abs(previousScrollOffset - scrollOffset) > isScrollingUpSensitivity
|
||||
derivedStateOf {
|
||||
val indexChanged = previousIndex != firstVisibleItemIndex
|
||||
val offsetChanged =
|
||||
kotlin.math.abs(previousScrollOffset - firstVisibleItemScrollOffset) > isScrollingUpSensitivity
|
||||
|
||||
value = when {
|
||||
indexChanged -> previousIndex > index
|
||||
offsetChanged -> previousScrollOffset > scrollOffset
|
||||
else -> value
|
||||
if (indexChanged) {
|
||||
previousIndex > firstVisibleItemIndex
|
||||
} else if (offsetChanged) {
|
||||
previousScrollOffset > firstVisibleItemScrollOffset
|
||||
} else {
|
||||
true
|
||||
}.also {
|
||||
previousIndex = firstVisibleItemIndex
|
||||
previousScrollOffset = firstVisibleItemScrollOffset
|
||||
}
|
||||
}
|
||||
previousIndex = index
|
||||
previousScrollOffset = scrollOffset
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: support sensitivity
|
||||
@Composable
|
||||
fun ScrollState.isScrollingUp() = produceState(true, this) {
|
||||
var previousScrollOffset = this@isScrollingUp.value
|
||||
|
||||
snapshotFlow { this@isScrollingUp.value }.collect { scrollOffset ->
|
||||
if (abs(previousScrollOffset - scrollOffset) > isScrollingUpSensitivity) {
|
||||
value = previousScrollOffset >= scrollOffset
|
||||
fun ScrollState.isScrollingUp(): State<Boolean> {
|
||||
return remember(this) {
|
||||
var previousScrollOffset by mutableIntStateOf(value)
|
||||
derivedStateOf {
|
||||
(previousScrollOffset >= value).also {
|
||||
previousScrollOffset = value
|
||||
}
|
||||
}
|
||||
|
||||
previousScrollOffset = scrollOffset
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources></resources>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources></resources>
|
||||
@@ -1,460 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">اختبار التعديل</string>
|
||||
<string name="patches">التعديلات</string>
|
||||
<string name="cli">CLI</string>
|
||||
<string name="manager">المدير</string>
|
||||
<string name="plugin_host_permission_label">مضيف المكونات الإضافية ReVanced Manager</string>
|
||||
<string name="plugin_host_permission_description">يُستخدم للتحكم في الوصول إلى مكونات ReVanced Manager الإضافية. فقط ReVanced Manager يمتلك هذا.</string>
|
||||
<string name="toast_copied_to_clipboard">نُسخ!</string>
|
||||
<string name="copy_to_clipboard">نسخ إلى الحافظة</string>
|
||||
<string name="dashboard">لوحة التحكم</string>
|
||||
<string name="settings">الإعدادات</string>
|
||||
<string name="select_app">حدد تطبيقًا</string>
|
||||
<string name="patches_count_selected">تم تحديد %1$d/%2$d</string>
|
||||
<string name="new_downloader_plugins_notification">تتوفر مكونات إضافية جديدة للتنزيل. انقر هنا لتهيئتها.</string>
|
||||
<string name="unsupported_architecture_warning">التعديل على بنية هذا الجهاز غير مدعوم ومن المرجح أن يفشل.</string>
|
||||
<string name="import_">استيراد</string>
|
||||
<string name="import_patches">استيراد التعديلات</string>
|
||||
<string name="file_field_set">محدد</string>
|
||||
<string name="file_field_not_set">غير محدد</string>
|
||||
<string name="field_not_set">غير معين</string>
|
||||
<string name="patches_missing">مفقود</string>
|
||||
<string name="patches_error">خطأ</string>
|
||||
<string name="patches_error_description">تعذر تحميل التعديلات. انقر لعرض الخطأ</string>
|
||||
<string name="patches_not_downloaded">لم يتم تنزيل التعديلات. انقر هنا لتنزيلها</string>
|
||||
<string name="patches_name_default">التعديلات</string>
|
||||
<string name="patches_name_fallback">غير مُسمى</string>
|
||||
<string name="android_11_bug_dialog_title">خطأ Android 11</string>
|
||||
<string name="android_11_bug_dialog_description">يجب منح إذن تثبيت التطبيق مسبقًا لتجنب خطأ في نظام Android 11 سيؤثر سلبًا على تجربة المستخدم.</string>
|
||||
<string name="no_network_toast">لا يوجد اتصال بالإنترنت متاح</string>
|
||||
<string name="selected_app_meta_any_version">أي إصدار متاح</string>
|
||||
<string name="app_source_dialog_title">حدد المصدر</string>
|
||||
<string name="app_source_dialog_option_auto">تلقائي</string>
|
||||
<string name="app_source_dialog_option_auto_description">استخدم جميع أدوات التنزيل المتاحة لتنزيل التطبيق</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">لا توجد مكونات إضافية متاحة</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">لا يمكن تعديل التطبيقات المثبتة مرة أخرى بدون صلاحيات Root</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">الإصدار %s لا يطابق الإصدار الموصى به</string>
|
||||
<string name="patch_item_description">بدء تعديل التطبيق</string>
|
||||
<string name="patch_selector_item">حدد التعديلات</string>
|
||||
<string name="patch_selector_item_description">تم تحديد %d تعديل</string>
|
||||
<string name="no_patches_selected">لم يتم تحديد أي تعديلات</string>
|
||||
<string name="network_unavailable_warning">جهازك غير متصل بالإنترنت. سيفشل التنزيل لاحقًا.</string>
|
||||
<string name="network_metered_warning">أنت حاليًا تستخدم اتصالًا محدودًا. قد يتم تطبيق رسوم بيانات من مزود الخدمة الخاص بك.</string>
|
||||
<string name="apk_source_selector_item">حدد مصدر APK</string>
|
||||
<string name="apk_source_auto">استخدام جميع أدوات تنزيل APK</string>
|
||||
<string name="apk_source_downloader">استخدام %s</string>
|
||||
<string name="apk_source_installed">استخدام APK المثبت</string>
|
||||
<string name="apk_source_local">استخدام ملف APK محلي</string>
|
||||
<string name="legacy_import_failed">تعذر استيراد الإعدادات القديمة</string>
|
||||
<string name="auto_updates_dialog_title">تهيئة التحديثات</string>
|
||||
<string name="auto_updates_dialog_description">هل تريد من ReVanced Manager التحقق بشكل دوري من التحديثات للمكونات التالية؟</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">تعديلات ReVanced</string>
|
||||
<string name="auto_updates_dialog_note">يمكن تغيير هذه الإعدادات لاحقًا.</string>
|
||||
<string name="general">عام</string>
|
||||
<string name="general_description">اللغة، المظهر، اللون الديناميكي</string>
|
||||
<string name="updates">التحديثات</string>
|
||||
<string name="updates_description">التحقق من التحديثات وعرض سجل التغييرات</string>
|
||||
<string name="downloads">التنزيلات</string>
|
||||
<string name="downloads_description">مكونات التنزيل الإضافية والتطبيقات التي تم تنزيلها</string>
|
||||
<string name="import_export">استيراد وتصدير</string>
|
||||
<string name="import_export_description">مخزن المفاتيح، خيارات التعديل والتحديد</string>
|
||||
<string name="advanced">إعدادات متقدمة</string>
|
||||
<string name="advanced_description">عنوان URL للـ API، حد الذاكرة، تصحيح الأخطاء</string>
|
||||
<string name="about">لمحة</string>
|
||||
<string name="opensource_licenses">تراخيص المصدر المفتوح</string>
|
||||
<string name="opensource_licenses_description">عرض جميع المكتبات المستخدمة لإنشاء هذا التطبيق</string>
|
||||
<string name="contributors">المساهمون</string>
|
||||
<string name="contributors_description">عرض المساهمين في ReVanced</string>
|
||||
<string name="dynamic_color">لون ديناميكي</string>
|
||||
<string name="dynamic_color_description">تكييف الألوان مع خلفية الشاشة</string>
|
||||
<string name="pure_black_theme">مظهر أسود نقي</string>
|
||||
<string name="pure_black_theme_description">استخدام خلفيات سوداء نقية للمظهر الداكن</string>
|
||||
<string name="theme">المظهر</string>
|
||||
<string name="theme_description">اختر بين المظهر الفاتح أو الداكن</string>
|
||||
<string name="language">اللغة</string>
|
||||
<string name="language_description">اختر لغة عرض التطبيق</string>
|
||||
<string name="language_system_default">افتراضي النظام</string>
|
||||
<string name="safeguards">الضمانات</string>
|
||||
<string name="patch_compat_check">تعطيل التحقق من توافق الإصدار</string>
|
||||
<string name="patch_compat_check_description">لا تقيد التعديلات بإصدارات التطبيقات المتوافقة</string>
|
||||
<string name="patch_compat_check_confirmation">"قد يؤدي اختيار تعديلات غير متوافقة إلى تطبيق معطّل.
|
||||
|
||||
هل تريد المتابعة على أي حال؟"</string>
|
||||
<string name="suggested_version_safeguard">يتطلب إصدار التطبيق الموصى به</string>
|
||||
<string name="suggested_version_safeguard_description">فرض اختيار إصدار التطبيق الموصى به</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"قد يؤدي اختيار تطبيق ليس بالإصدار الموصى به إلى مشاكل غير متوقعة.
|
||||
|
||||
هل تريد المتابعة على أي حال؟"</string>
|
||||
<string name="patch_selection_safeguard">السماح بتغيير تحديد التعديل والخيارات</string>
|
||||
<string name="patch_selection_safeguard_description">لا تمنع تحديد أو إلغاء تحديد التعديلات وتخصيص الخيارات</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"قد يؤدي تغيير تحديد التعديلات إلى مشاكل غير متوقعة.
|
||||
|
||||
هل تريد التمكين على أي حال؟"</string>
|
||||
<string name="universal_patches_safeguard">السماح باستخدام التعديلات الشاملة</string>
|
||||
<string name="universal_patches_safeguard_description">لا تمنع استخدام التعديلات الشاملة</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"التعديلات الشاملة ليست مختبرة جيدًا مثل تلك التي تستهدف تطبيقات محددة.
|
||||
|
||||
هل تريد التمكين على أي حال؟"</string>
|
||||
<string name="import_keystore">استيراد مخزن المفاتيح</string>
|
||||
<string name="import_keystore_description">استيراد مخزن مفاتيح مخصص</string>
|
||||
<string name="import_keystore_dialog_title">أدخل بيانات اعتماد مخزن المفاتيح</string>
|
||||
<string name="import_keystore_dialog_description">ستحتاج إلى إدخال بيانات اعتماد مخزن المفاتيح لاستيراده.</string>
|
||||
<string name="import_keystore_dialog_alias_field">اسم المستخدم (الاسم المستعار)</string>
|
||||
<string name="import_keystore_dialog_password_field">كلمة المرور</string>
|
||||
<string name="import_keystore_dialog_button">استيراد</string>
|
||||
<string name="import_keystore_wrong_credentials">بيانات اعتماد مخزن المفاتيح خاطئة</string>
|
||||
<string name="import_keystore_success">تم استيراد مخزن المفاتيح</string>
|
||||
<string name="export_keystore">تصدير مخزن المفاتيح</string>
|
||||
<string name="export_keystore_description">تصدير مخزن المفاتيح الحالي</string>
|
||||
<string name="export_keystore_unavailable">لا يوجد مخزن مفاتيح للتصدير</string>
|
||||
<string name="export_keystore_success">تم تصدير مخزن المفاتيح</string>
|
||||
<string name="regenerate_keystore">إعادة إنشاء مخزن المفاتيح</string>
|
||||
<string name="regenerate_keystore_description">إنشاء مخزن مفاتيح جديد</string>
|
||||
<string name="regenerate_keystore_dialog_description">"أنت على وشك إعادة إنشاء مخزن المفاتيح الذي سيستخدمه المدير أثناء عملية التعديل.
|
||||
|
||||
لن تتمكن من تحديث التطبيقات المثبتة مسبقًا من هذا المصدر."</string>
|
||||
<string name="regenerate_keystore_success">تم استبدال مخزن المفاتيح بنجاح</string>
|
||||
<string name="import_patch_selection">استيراد التعديل المحدد</string>
|
||||
<string name="import_patch_selection_description">استيراد التعديل المحدد من ملف JSON</string>
|
||||
<string name="import_patch_selection_fail">تعذر استيراد التعديل المحدد: %s</string>
|
||||
<string name="import_patch_selection_success">تم استيراد التعديل المحدد</string>
|
||||
<string name="export_patch_selection">تصدير التعديل المحدد</string>
|
||||
<string name="export_patch_selection_description">تصدير التعديل المحدد إلى ملف JSON</string>
|
||||
<string name="export_patch_selection_fail">تعذر تصدير التعديل المحدد: %s</string>
|
||||
<string name="export_patch_selection_success">تم تصدير التعديل المحدد</string>
|
||||
<string name="reset_patch_selection">إعادة تعيين التعديل المحدد</string>
|
||||
<string name="reset_patch_selection_description">إعادة تعيين التعديل المحدد المخزن</string>
|
||||
<string name="reset_patch_options">إعادة تعيين خيارات التعديل</string>
|
||||
<string name="reset_patch_options_description">إعادة تعيين خيارات التعديل المخزنة</string>
|
||||
<string name="reset_patch_selection_success">تم إعادة تعيين التعديل المحدد</string>
|
||||
<string name="patch_selection_reset_all">إعادة تعيين التعديل المحدد عمومًا</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">أنت على وشك إعادة تعيين جميع التعديلات المحددة. ستحتاج إلى تحديد كل تعديل يدويًا مرة أخرى.</string>
|
||||
<string name="patch_selection_reset_all_description">يعيد تعيين جميع التعديلات المحددة</string>
|
||||
<string name="patch_selection_reset_package">إعادة تعيين التعديل المحدد للتطبيق</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">أنت على وشك إعادة تعيين التعديل المحدد للتطبيق \"%s\". سيتعين عليك تحديد كل تعديل يدويًا مرة أخرى.</string>
|
||||
<string name="patch_selection_reset_package_description">يعيد تعيين التعديل المحدد لتطبيق واحد</string>
|
||||
<string name="patch_selection_reset_patches">إعادة تعيين التعديل المحدد (فردي)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">أنت على وشك إعادة تعيين التعديل المحدد لـ \"%s\". سيتعين عليك تحديد كل تعديل يدويًا مرة أخرى.</string>
|
||||
<string name="patch_selection_reset_patches_description">يعيد تعيين التعديل المحدد لمجموعة محددة من التعديلات</string>
|
||||
<string name="patch_options_reset_package">إعادة تعيين خيارات التعديل للتطبيق</string>
|
||||
<string name="patch_options_reset_package_dialog_description">أنت على وشك إعادة تعيين خيارات التعديل للتطبيق \"%s\". سيتعين عليك إعادة تطبيق كل خيار مرة أخرى.</string>
|
||||
<string name="patch_options_reset_package_description">يعيد تعيين خيارات التعديل لتطبيق واحد</string>
|
||||
<string name="patch_options_reset_patches">إعادة تعيين خيارات التعديل (فردي)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">أنت على وشك إعادة تعيين خيارات التعديل لـ \"%s\". سيتعين عليك إعادة تطبيق كل خيار مرة أخرى.</string>
|
||||
<string name="patch_options_reset_patches_description">يعيد تعيين خيارات التعديل لمجموعة محددة من التعديلات</string>
|
||||
<string name="patch_options_reset_all">إعادة تعيين خيارات التعديل عمومًا</string>
|
||||
<string name="patch_options_reset_all_dialog_description">أنت على وشك إعادة تعيين جميع خيارات التعديل. سيتعين عليك إعادة تطبيق كل خيار مرة أخرى.</string>
|
||||
<string name="patch_options_reset_all_description">يعيد تعيين جميع خيارات التعديل</string>
|
||||
<string name="downloader_plugins">المكونات الإضافية</string>
|
||||
<string name="downloader_plugin_state_trusted">موثوق به</string>
|
||||
<string name="downloader_plugin_state_failed">فشل التحميل. انقر للمزيد من التفاصيل.</string>
|
||||
<string name="downloader_plugin_state_untrusted">غير موثوق به</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">هل تثق في المكون الإضافي؟</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">إلغاء الثقة؟</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">ستسمح المتابعة لهذا المكون الإضافي بالتشغيل على نظامك.\n\nقم بتمكين هذا المكون الإضافي فقط إذا كنت تثق به. يمكن للمكونات الإضافية تنفيذ تعليمات برمجية عشوائية وقد تعرض جهازك للخطر.</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">التوقيع:\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">المكون الإضافي:\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">حذف التطبيقات المحددة</string>
|
||||
<string name="downloader_plugin_delete_apps_description">هل أنت متأكد أنك تريد حذف التطبيقات المحددة؟</string>
|
||||
<string name="downloader_settings_no_apps">لم يتم العثور على تطبيقات تم تنزيلها.</string>
|
||||
<string name="search_apps">البحث عن تطبيقات…</string>
|
||||
<string name="loading_body">جارٍ التحميل…</string>
|
||||
<string name="downloading_patches">جارٍ تنزيل التعديلات…</string>
|
||||
<string name="options">الخيارات</string>
|
||||
<string name="ok">موافق</string>
|
||||
<string name="yes">نعم</string>
|
||||
<string name="no">لا</string>
|
||||
<string name="edit">تحرير</string>
|
||||
<string name="dialog_input_placeholder">القيمة</string>
|
||||
<string name="reset">إعادة التعيين</string>
|
||||
<string name="share">مشاركة</string>
|
||||
<string name="patch">تعديل</string>
|
||||
<string name="select_from_storage">اختر من التخزين</string>
|
||||
<string name="select_from_storage_description">اختر ملف APK من التخزين باستخدام منتقي الملفات</string>
|
||||
<string name="suggested_version_info">الإصدار الموصى به: %s</string>
|
||||
<string name="type_anything">اكتب أي شيء للمتابعة</string>
|
||||
<string name="search">البحث عن التعديلات…</string>
|
||||
<string name="apply">تطبيق</string>
|
||||
<string name="help">مساعدة</string>
|
||||
<string name="back">رجوع</string>
|
||||
<string name="warning">تحذير</string>
|
||||
<string name="add">إضافة</string>
|
||||
<string name="close">إغلاق</string>
|
||||
<string name="clear">مسح</string>
|
||||
<string name="system">النظام</string>
|
||||
<string name="light">فاتح</string>
|
||||
<string name="dark">داكن</string>
|
||||
<string name="appearance">المظهر</string>
|
||||
<string name="networking">الشبكة</string>
|
||||
<string name="allow_metered_networks">السماح بالشبكات ذات البيانات المحدودة</string>
|
||||
<string name="allow_metered_networks_description">يسمح بالتحديثات التلقائية على الشبكات ذات البيانات المحدودة.\n قد يستمر التطبيق في التحذير بشأن الشبكات ذات البيانات المحدودة للعمليات اليدوية.</string>
|
||||
<string name="downloaded_apps">التطبيقات التي تم تنزيلها</string>
|
||||
<string name="process_runtime">تشغيل أداة التعديل في عملية أخرى (تجريبي)</string>
|
||||
<string name="process_runtime_description">هذا أسرع ويسمح لـ أداة التعديل باستخدام ذاكرة أكبر</string>
|
||||
<string name="process_runtime_memory_limit">حد ذاكرة عملية أداة التعديل</string>
|
||||
<string name="process_runtime_memory_limit_description">الحد الأقصى للذاكرة التي يمكن أن تستخدمها عملية أداة التعديل (بالميغابايت)</string>
|
||||
<string name="debug_logs_export">تصدير سجلات تصحيح الأخطاء</string>
|
||||
<string name="debug_logs_export_read_failed">فشل قراءة السجلات (رمز الخروج %d)</string>
|
||||
<string name="debug_logs_export_failed">فشل تصدير السجلات</string>
|
||||
<string name="debug_logs_export_success">السجلات المصدرة</string>
|
||||
<string name="api_url">عنوان URL لواجهة برمجة التطبيقات</string>
|
||||
<string name="api_url_description">واجهة برمجة التطبيقات المستخدمة لتنزيل الملفات الضرورية</string>
|
||||
<string name="api_url_dialog_title">تغيير عنوان API</string>
|
||||
<string name="api_url_dialog_description">تغيير عنوان URL لواجهة برمجة التطبيقات لـ ReVanced Manager. يستخدم ReVanced Manager واجهة برمجة التطبيقات لتنزيل التعديلات والتحديثات.</string>
|
||||
<string name="api_url_dialog_warning">يتصل ReVanced Manager بواجهة برمجة التطبيقات لتنزيل التعديلات والتحديثات. تأكد من أنك تثق بها.</string>
|
||||
<string name="api_url_dialog_save">تعيين</string>
|
||||
<string name="api_url_dialog_reset">إعادة تعيين عنوان URL لواجهة برمجة التطبيقات</string>
|
||||
<string name="device">الجهاز</string>
|
||||
<string name="device_android_version">إصدار Android</string>
|
||||
<string name="device_model">الموديل</string>
|
||||
<string name="device_architectures">معماريات وحدة المعالجة المركزية</string>
|
||||
<string name="device_memory_limit">حدود الذاكرة</string>
|
||||
<string name="device_memory_limit_format">%1$d ميغابايت (عادي) - %2$d ميغابايت (كبير)</string>
|
||||
<string name="patches_force_download">فرض تنزيل جميع التعديلات</string>
|
||||
<string name="patches_reset">إعادة تعيين التعديلات</string>
|
||||
<string name="patching">تعديل</string>
|
||||
<string name="signing">توقيع</string>
|
||||
<string name="storage">التخزين</string>
|
||||
<string name="no_patch_found">لا يمكن العثور على أي تعديل. تحقق من التعديلات الخاصة بك</string>
|
||||
<string name="tab_apps">التطبيقات</string>
|
||||
<string name="tab_patches">التعديلات</string>
|
||||
<string name="delete">حذف</string>
|
||||
<string name="refresh">تحديث</string>
|
||||
<string name="continue_anyways">متابعة على أي حال</string>
|
||||
<string name="download_another_version">تنزيل إصدار آخر</string>
|
||||
<string name="download_app">تنزيل التطبيق</string>
|
||||
<string name="download_apk">تنزيل ملف APK</string>
|
||||
<string name="patches_download_fail">فشل تنزيل التعديلات: %s</string>
|
||||
<string name="patches_replace_fail">فشل استيراد التعديلات: %s</string>
|
||||
<string name="no_patched_apps_found">لم يتم العثور على تطبيقات معدلة</string>
|
||||
<string name="tap_on_patches">اضغط على التعديلات للحصول على مزيد من المعلومات عنها</string>
|
||||
<string name="patches_selected">تم تحديد %s</string>
|
||||
<string name="incompatible_patches">تعديلات غير متوافقة</string>
|
||||
<string name="universal_patches">تعديلات شاملة</string>
|
||||
<string name="patch_selection_reset_toast">تم إعادة تعيين تحديد التعديل والخيارات إلى الإعدادات الافتراضية الموصى بها</string>
|
||||
<string name="patch_options_reset_toast">تم إعادة تعيين خيارات التعديل</string>
|
||||
<string name="non_suggested_version_warning_title">إصدار غير موصى به</string>
|
||||
<string name="non_suggested_version_warning_description">"إصدار التطبيق الذي حددته لا يتطابق مع الإصدار الموصى به.\nالرجاء استخدام الإصدار الموصى به: %s\n\nللمتابعة على أي حال، قم بتعطيل \"يتطلب إصدار التطبيق الموصى به\" في الإعدادات المتقدمة."</string>
|
||||
<string name="selection_warning_title">هل تريد التوقف عن استخدام الإعدادات الافتراضية؟</string>
|
||||
<string name="selection_warning_description">"يوصى باستخدام تحديد التعديل والخيارات الافتراضية. قد يؤدي تغييرها إلى مشاكل غير متوقعة.\n\nتحتاج إلى تشغيل \"السماح بتغيير تحديد التعديل والخيارات\" في الإعدادات المتقدمة قبل تبديل التعديلات."</string>
|
||||
<string name="universal_patch_warning_description">"التعديلات الشاملة لها استخدام أكثر عمومية ولا تعمل بنفس الموثوقية مثل التعديلات التي تستهدف تطبيقات معينة. قد تواجه مشاكل أثناء استخدامها.\n\nتحتاج إلى تشغيل \"السماح باستخدام التعديلات الشاملة\" في الإعدادات المتقدمة قبل استخدام التعديلات الشاملة."</string>
|
||||
<string name="this_version">هذا الإصدار</string>
|
||||
<string name="universal">أي تطبيق</string>
|
||||
<string name="search_patches">البحث عن تعديلات</string>
|
||||
<string name="app_version_not_compatible">"هذا التعديل غير متوافق مع إصدار التطبيق المحدد (%1$s)\n\nإنه متوافق فقط مع الإصدار (الإصدارات) التالية: %2$s"</string>
|
||||
<string name="continue_with_version">هل تريد المتابعة بهذا الإصدار؟</string>
|
||||
<string name="version_not_compatible">ليست كل التعديلات متوافقة مع هذا الإصدار (%s). هل تريد المتابعة على أي حال؟</string>
|
||||
<string name="download_application">هل تريد تنزيل التطبيق؟</string>
|
||||
<string name="app_not_installed">التطبيق الذي حددته غير مثبت. هل تريد تنزيله؟</string>
|
||||
<string name="failed_to_load_apk">فشل تحميل APK</string>
|
||||
<string name="loading">جارٍ التحميل…</string>
|
||||
<string name="not_installed">غير مثبت</string>
|
||||
<string name="installed">مثبت</string>
|
||||
<string name="app_info">معلومات التطبيق</string>
|
||||
<string name="uninstall">إلغاء التثبيت</string>
|
||||
<string name="unpatch">إلغاء التعديل</string>
|
||||
<string name="repatch">إعادة التعديل</string>
|
||||
<string name="install_type">نوع التثبيت</string>
|
||||
<string name="package_name">اسم الحزمة</string>
|
||||
<string name="original_package_name">اسم الحزمة الأصلي</string>
|
||||
<string name="applied_patches">التعديلات المطبقة</string>
|
||||
<string name="view_applied_patches">عرض التعديلات المطبقة</string>
|
||||
<string name="default_install">الافتراضي</string>
|
||||
<string name="mount_install">تركيب</string>
|
||||
<string name="mounted">مركّب</string>
|
||||
<string name="not_mounted">غير مركّب</string>
|
||||
<string name="mount">تركيب</string>
|
||||
<string name="unmount">فك تركيب</string>
|
||||
<string name="failed_to_mount">فشل تركيب: %s</string>
|
||||
<string name="failed_to_unmount">فشل فك تركيب: %s</string>
|
||||
<string name="unpatch_app">إلغاء تعديل التطبيق؟</string>
|
||||
<string name="unpatch_description">هل أنت متأكد أنك تريد إلغاء تعديل هذا التطبيق؟</string>
|
||||
<string name="downloader_invalid_version">لم تجلب أداة التنزيل الإصدار الصحيح</string>
|
||||
<string name="downloader_app_not_found">لم تجد أداة التنزيل التطبيق</string>
|
||||
<string name="downloader_error">خطأ في أداة التنزيل: %s</string>
|
||||
<string name="downloader_no_plugins_installed">لم يتم تثبيت أي أداة تنزيل.</string>
|
||||
<string name="downloader_no_plugins_available">يوجد أدوات تنزيل مثبتة ولكن لا يوجد أي منها موثوق به. تحقق من إعداداتك.</string>
|
||||
<string name="already_patched">تم تعديله بالفعل</string>
|
||||
<string name="patch_selector_sheet_filter_title">تصفية</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">التوافق</string>
|
||||
<string name="string_option_menu_description">المزيد من الخيارات</string>
|
||||
<string name="option_preset_custom_value">قيمة مخصصة</string>
|
||||
<string name="path_selector">تحديد من التخزين</string>
|
||||
<string name="path_selector_parent_dir">المجلد السابق</string>
|
||||
<string name="path_selector_dirs">المجلدات</string>
|
||||
<string name="path_selector_files">الملفات</string>
|
||||
<string name="show_password_field">عرض كلمة المرور</string>
|
||||
<string name="hide_password_field">إخفاء كلمة المرور</string>
|
||||
<string name="installer">أداة التثبيت</string>
|
||||
<string name="install_app">تثبيت</string>
|
||||
<string name="install_app_success">تم تثبيت التطبيق</string>
|
||||
<string name="install_app_fail">فشل تثبيت التطبيق: %s</string>
|
||||
<string name="reinstall_app_fail">فشل إعادة تثبيت التطبيق: %s</string>
|
||||
<string name="uninstall_app_fail">فشل إلغاء تثبيت التطبيق: %s</string>
|
||||
<string name="open_app">فتح</string>
|
||||
<string name="save_apk">حفظ APK</string>
|
||||
<string name="save_apk_success">تم حفظ APK</string>
|
||||
<string name="sign_fail">فشل توقيع APK: %s</string>
|
||||
<string name="save_logs">حفظ السجلات</string>
|
||||
<string name="plugin_activity_dialog_body">مطلوب تفاعل المستخدم للمتابعة مع هذه الإضافة.</string>
|
||||
<string name="select_install_type">تحديد نوع التثبيت</string>
|
||||
<string name="patcher_step_group_preparing">جارٍ التحضير</string>
|
||||
<string name="patcher_step_load_patches">تحميل التعديلات</string>
|
||||
<string name="patcher_step_unpack">قراءة ملف APK</string>
|
||||
<string name="patcher_step_group_patching">جارٍ التعديل</string>
|
||||
<string name="patcher_step_group_saving">جارٍ الحفظ</string>
|
||||
<string name="patcher_step_write_patched">كتابة ملف APK المعدل</string>
|
||||
<string name="patcher_step_sign_apk">توقيع ملف APK المعدل</string>
|
||||
<string name="patcher_notification_title">التعديل قيد التقدم…</string>
|
||||
<string name="patcher_notification_text">انقر للعودة إلى أداة التعديل</string>
|
||||
<string name="patcher_stop_confirm_title">إيقاف أداة التعديل</string>
|
||||
<string name="patcher_stop_confirm_description">هل أنت متأكد أنك تريد إيقاف عملية التعديل؟</string>
|
||||
<string name="patcher_install_in_progress">التثبيت قيد التقدم. يرجى الانتظار</string>
|
||||
<string name="execute_patches">تنفيذ التعديلات</string>
|
||||
<string name="executing_patch">تنفيذ %s</string>
|
||||
<string name="failed_to_execute_patch">فشل تنفيذ %s</string>
|
||||
<string name="step_completed">مكتمل</string>
|
||||
<string name="step_failed">فشل</string>
|
||||
<string name="step_running">قيد التشغيل</string>
|
||||
<string name="step_waiting">انتظار</string>
|
||||
<string name="expand_content">توسيع</string>
|
||||
<string name="collapse_content">طي</string>
|
||||
<string name="drag_handle">إعادة ترتيب</string>
|
||||
<string name="more">المزيد</string>
|
||||
<string name="less">أقل</string>
|
||||
<string name="continue_">متابعة</string>
|
||||
<string name="dismiss">تجاهل</string>
|
||||
<string name="permanent_dismiss">لا تظهر هذا مرة أخرى</string>
|
||||
<string name="donate">تبرع</string>
|
||||
<string name="website">الموقع الإلكتروني</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="contact">اتصال</string>
|
||||
<string name="version">الإصدار</string>
|
||||
<string name="submit_feedback">إرسال مشكلة أو ملاحظات</string>
|
||||
<string name="submit_feedback_description">ساعدنا في تحسين هذا التطبيق</string>
|
||||
<string name="developer_options">خيارات المطور</string>
|
||||
<string name="developer_options_description">خيارات لتصحيح الأخطاء</string>
|
||||
<string name="patches_update_success">تم التحديث بنجاح</string>
|
||||
<string name="patches_update_unavailable">لا يوجد تحديث متاح</string>
|
||||
<string name="view_patches">عرض التعديلات</string>
|
||||
<string name="patches_view_any_version">أي إصدار</string>
|
||||
<string name="patches_view_any_package">أي حزمة</string>
|
||||
<string name="patches_delete_single_dialog_description">هل أنت متأكد أنك تريد حذف \"%s\"؟</string>
|
||||
<string name="patches_delete_multiple_dialog_description">هل أنت متأكد أنك تريد حذف التعديلات المحددة؟</string>
|
||||
<string name="about_revanced_manager">حول ReVanced Manager</string>
|
||||
<string name="revanced_manager_description">ReVanced Manager هو تطبيق Android يستخدم ReVanced Patcher لتعديل تطبيقات Android. يتيح لك تنزيل التطبيقات وتعديلها باستخدام تعديلات مخصصة، وإدارة عملية التعديل.</string>
|
||||
<string name="developer_options_taps">%d نقرة متبقية</string>
|
||||
<string name="developer_options_enabled">تم تمكين خيارات المطور</string>
|
||||
<string name="developer_options_already_enabled">خيارات المطور ممكّنة بالفعل</string>
|
||||
<string name="update_available">يتوفر تحديث</string>
|
||||
<string name="current_version">الإصدار الحالي: %s</string>
|
||||
<string name="new_version">الإصدار الجديد: %s</string>
|
||||
<string name="ready_to_install_update">جاهز لتثبيت التحديث</string>
|
||||
<string name="update_completed">تم تثبيت التحديث</string>
|
||||
<string name="install_update_manager_failed">فشل تثبيت التحديث</string>
|
||||
<string name="manual_update_check">التحقق من وجود تحديثات</string>
|
||||
<string name="manual_update_check_description">التحقق اليدوي من توفر تحديثات</string>
|
||||
<string name="update_checking_manager">التحقق من التحديثات عند التشغيل</string>
|
||||
<string name="update_checking_manager_description">التحقق من وجود إصدارات جديدة من ReVanced Manager عند بدء التطبيق</string>
|
||||
<string name="manager_prereleases">استخدام إصدارات ما قبل الإطلاق</string>
|
||||
<string name="manager_prereleases_description">استخدام إصدارات ما قبل الإطلاق من ReVanced Manager</string>
|
||||
<string name="changelog">عرض سجل التغييرات</string>
|
||||
<string name="changelog_loading">جارٍ تحميل سجل التغييرات</string>
|
||||
<string name="changelog_download_fail">فشل تنزيل سجل التغييرات: %s</string>
|
||||
<string name="changelog_description">اطلع على آخر التغييرات في هذا التحديث</string>
|
||||
<string name="battery_optimization_notification">يجب إيقاف تحسينات البطارية لكي يعمل ReVanced Manager بشكل صحيح في الخلفية. انقر هنا لإيقاف التحسينات.</string>
|
||||
<string name="installing_manager_update">جارٍ تثبيت التحديث…</string>
|
||||
<string name="downloading_manager_update">جارٍ تنزيل التحديث…</string>
|
||||
<string name="download_manager_failed">فشل تنزيل التحديث: %s</string>
|
||||
<string name="cancel">إلغاء</string>
|
||||
<string name="save">حفظ</string>
|
||||
<string name="save_with_count">حفظ (%1$s)</string>
|
||||
<string name="update">تحديث</string>
|
||||
<string name="empty">فارغ</string>
|
||||
<string name="installing_message">"انقر على <b>تحديث</b> عندما يطلب ذلك.
|
||||
سيتم إغلاق ReVanced Manager عند التحديث."</string>
|
||||
<string name="no_changelogs_found">لم يتم العثور على سجلات التغييرات</string>
|
||||
<string name="just_now">الآن</string>
|
||||
<string name="minutes_ago">منذ %s دقيقة</string>
|
||||
<string name="hours_ago">منذ %s ساعة</string>
|
||||
<string name="days_ago">منذ %s يوم</string>
|
||||
<string name="invalid_date">تاريخ غير صالح</string>
|
||||
<string name="disable_battery_optimization">تعطيل تحسين البطارية</string>
|
||||
<string name="input_dialog_value_invalid">قيمة غير صالحة</string>
|
||||
<string name="option_required">هذا الخيار مطلوب</string>
|
||||
<string name="required_options_screen">الخيارات المطلوبة</string>
|
||||
<string name="failed_to_check_updates">فشل التحقق من توفر تحديثات: %s</string>
|
||||
<string name="no_update_available">لا يوجد تحديث متاح</string>
|
||||
<string name="update_check">جارٍ التحقق من توفر تحديثات…</string>
|
||||
<string name="dismiss_temporary">ليس الآن</string>
|
||||
<string name="update_available_dialog_description">يتوفر إصدار جديد من ReVanced Manager (%s).</string>
|
||||
<string name="failed_to_download_update">فشل تنزيل التحديث: %s</string>
|
||||
<string name="download">تنزيل</string>
|
||||
<string name="download_confirmation_metered">"أنت متصل حالياً بشبكة محدودة البيانات، وقد يتم تطبيق رسوم بيانات من مزود الخدمة الخاص بك.
|
||||
|
||||
هل ما زلت تريد المتابعة؟"</string>
|
||||
<string name="download_update_confirmation">تنزيل التحديث؟</string>
|
||||
<string name="no_contributors_found">لم يتم العثور على مساهمين</string>
|
||||
<string name="select">تحديد</string>
|
||||
<string name="select_deselect_all">تحديد أو إلغاء تحديد الكل</string>
|
||||
<string name="select_patches_type_dialog_description">إضافة تعديلات جديدة من عنوان URL أو الملفات المحلية</string>
|
||||
<string name="local_patches_description">إضافة تعديلات من التخزين المحلي.</string>
|
||||
<string name="remote_patches_description">إضافة تعديلات من عنوان URL. يمكن للتعديلات التحديث تلقائيًا.</string>
|
||||
<string name="recommended">مُوصَى به</string>
|
||||
<string name="installation_failed_dialog_title">فشل التثبيت</string>
|
||||
<string name="installation_cancelled_dialog_title">تم إلغاء التثبيت</string>
|
||||
<string name="installation_blocked_dialog_title">تم حظر التثبيت</string>
|
||||
<string name="installation_conflict_dialog_title">تعارض التثبيت</string>
|
||||
<string name="installation_incompatible_dialog_title">تثبيت غير متوافق</string>
|
||||
<string name="installation_invalid_dialog_title">تثبيت غير صالح</string>
|
||||
<string name="installation_storage_issue_dialog_title">مساحة تخزين غير كافية</string>
|
||||
<string name="installation_timeout_dialog_title">انتهت مهلة التثبيت</string>
|
||||
<string name="installation_failed_description">فشل التثبيت لسبب غير معروف. هل تريد المحاولة مرة أخرى؟</string>
|
||||
<string name="installation_aborted_description">تم إلغاء التثبيت يدوياً. هل تريد المحاولة مرة أخرى؟</string>
|
||||
<string name="installation_blocked_description">تم حظر التثبيت. راجع إعدادات أمان جهازك وحاول مرة أخرى.</string>
|
||||
<string name="installation_conflict_description">تم منع التثبيت بسبب وجود تثبيت سابق للتطبيق. هل تريد إلغاء تثبيت التطبيق المثبت والمحاولة مرة أخرى؟</string>
|
||||
<string name="installation_incompatible_description">التطبيق غير متوافق مع هذا الجهاز. استخدم ملف APK متوافق مع هذا الجهاز وحاول مرة أخرى.</string>
|
||||
<string name="installation_invalid_description">التطبيق غير صالح. هل تريد إلغاء تثبيت التطبيق والمحاولة مرة أخرى؟</string>
|
||||
<string name="installation_storage_issue_description">لا يمكن تثبيت التطبيق بسبب عدم كفاية مساحة التخزين. قم بتحرير بعض المساحة وحاول مرة أخرى.</string>
|
||||
<string name="installation_timeout_description">استغرق التثبيت وقتاً طويلاً جداً. هل تريد المحاولة مرة أخرى؟</string>
|
||||
<string name="reinstall">إعادة التثبيت</string>
|
||||
<string name="show">عرض</string>
|
||||
<string name="debugging">تصحيح الأخطاء</string>
|
||||
<string name="about_device">حول الجهاز</string>
|
||||
<string name="enter_url">أدخل عنوان URL</string>
|
||||
<string name="next">التالي</string>
|
||||
<string name="auto_update">تحديث تلقائي</string>
|
||||
<string name="add_patches">إضافة تعديلات</string>
|
||||
<string name="auto_update_description">التحديث تلقائيًا عند توفر إصدار جديد</string>
|
||||
<string name="patches_prereleases">استخدام إصدارات ما قبل الإطلاق</string>
|
||||
<string name="patches_prereleases_description">استخدام إصدارات ما قبل الإطلاق من %s</string>
|
||||
<string name="patches_url">عنوان URL للتعديلات</string>
|
||||
<string name="incompatible_patches_dialog">"هذه التعديلات غير متوافقة مع إصدار التطبيق المحدد (%1$s).
|
||||
|
||||
انقر على التعديلات لمشاهدة المزيد من التفاصيل."</string>
|
||||
<string name="incompatible_patch">تعديل غير متوافق</string>
|
||||
<string name="any_version">أيها</string>
|
||||
<string name="never_show_again">لا تعرض مرة أخرى أبدًا</string>
|
||||
<string name="show_manager_update_dialog_on_launch">عرض رسالة التحديث عند التشغيل</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">عرض إشعار منبثق عند توفر تحديث جديد عند بدء التشغيل</string>
|
||||
<string name="failed_to_import_keystore">فشل استيراد مخزن المفاتيح</string>
|
||||
<string name="export">تصدير</string>
|
||||
<string name="confirm">تأكيد</string>
|
||||
</resources>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources></resources>
|
||||
@@ -1,455 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">Patcher sınağı</string>
|
||||
<string name="patches">Yamalar</string>
|
||||
<string name="cli">CLI</string>
|
||||
<string name="manager">Menecer</string>
|
||||
<string name="plugin_host_permission_label">ReVanced Manager plagin hostu</string>
|
||||
<string name="plugin_host_permission_description">ReVanced Manager plaginlərinə girişi idarə etmək üçün istifadə olunur. Buna yalnız ReVanced Manager malikdir.</string>
|
||||
<string name="toast_copied_to_clipboard">Kopyalandı!</string>
|
||||
<string name="copy_to_clipboard">Buferə kopyala</string>
|
||||
<string name="dashboard">İdarə Paneli</string>
|
||||
<string name="settings">Ayarlar</string>
|
||||
<string name="select_app">Tətbiq seçin</string>
|
||||
<string name="patches_count_selected">%1$d/%2$d seçildi</string>
|
||||
<string name="new_downloader_plugins_notification">Yeni yükləyici plaginlər mövcuddur. Onları konfiqurasiya etmək üçün bura klikləyin.</string>
|
||||
<string name="unsupported_architecture_warning">Bu cihaz arxitekturasında yamaqlama dəstəklənmir və çox güman ki uğursuz olacaq.</string>
|
||||
<string name="import_">İdxal</string>
|
||||
<string name="import_patches">Yamaqları idxal et</string>
|
||||
<string name="file_field_set">Seçildi</string>
|
||||
<string name="file_field_not_set">Seçilməyib</string>
|
||||
<string name="field_not_set">Təyin edilməyib</string>
|
||||
<string name="patches_missing">Əskik</string>
|
||||
<string name="patches_error">Xəta</string>
|
||||
<string name="patches_error_description">Yamaqlar yüklənə bilmədi. Xətanı görmək üçün klikləyin</string>
|
||||
<string name="patches_not_downloaded">Yamaqlar yüklənməyib. Yükləmək üçün bura klikləyin</string>
|
||||
<string name="patches_name_default">Yamaqlar</string>
|
||||
<string name="patches_name_fallback">Adsız</string>
|
||||
<string name="android_11_bug_dialog_title">Android 11 səhvi</string>
|
||||
<string name="android_11_bug_dialog_description">Tətbiqin quraşdırılması icazəsi, Android 11 sistemində istifadəçi təcrübəsinə mənfi təsir göstərəcək bir səhvin qarşısını almaq üçün əvvəlcədən verilməlidir.</string>
|
||||
<string name="no_network_toast">İnternet bağlantısı yoxdur</string>
|
||||
<string name="selected_app_meta_any_version">Hər hansı mövcud versiya</string>
|
||||
<string name="app_source_dialog_title">Mənbə seçin</string>
|
||||
<string name="app_source_dialog_option_auto">Avtomatik</string>
|
||||
<string name="app_source_dialog_option_auto_description">Tətbiqi yükləmək üçün bütün mövcud yükləyicilərdən istifadə edin</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">Heç bir plagin mövcud deyil</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">Quraşdırılmış tətbiqlər root icazəsi olmadan yenidən yamaqlana bilməz</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">Versiya %s təklif olunan versiyaya uyğun gəlmir</string>
|
||||
<string name="patch_item_description">Tətbiqi yamaqlamağa başlayın</string>
|
||||
<string name="patch_selector_item">Yamaqları seçin</string>
|
||||
<string name="patch_selector_item_description">%d yamaq seçildi</string>
|
||||
<string name="no_patches_selected">Heç bir yamaq seçilməyib</string>
|
||||
<string name="network_unavailable_warning">Cihazınız internetə qoşulmayıb. Yükləmə daha sonra uğursuz olacaq.</string>
|
||||
<string name="network_metered_warning">Hazırda ölçülü bir bağlantıdasınız. Xidmət təminatçınızdan məlumat haqları tətbiq oluna bilər.</string>
|
||||
<string name="apk_source_selector_item">APK mənbəsini seçin</string>
|
||||
<string name="apk_source_auto">Bütün APK yükləyicilərindən istifadə olunur</string>
|
||||
<string name="apk_source_downloader">%s istifadə olunur</string>
|
||||
<string name="apk_source_installed">Quraşdırılmış APK istifadə olunur</string>
|
||||
<string name="apk_source_local">Yerli APK faylı istifadə olunur</string>
|
||||
<string name="legacy_import_failed">Köhnə parametrlər idxal edilə bilmədi</string>
|
||||
<string name="auto_updates_dialog_title">Yeniləmələri konfiqurasiya edin</string>
|
||||
<string name="auto_updates_dialog_description">ReVanced Manager-in aşağıdakı komponentlər üçün vaxtaşırı yeniləmələri yoxlamasını istəyirsinizmi?</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">ReVanced Yamaqları</string>
|
||||
<string name="auto_updates_dialog_note">Bu parametrlər daha sonra dəyişdirilə bilər.</string>
|
||||
<string name="general">Ümumi</string>
|
||||
<string name="general_description">Dil, mövzu, dinamik rəng</string>
|
||||
<string name="updates">Yeniləmələr</string>
|
||||
<string name="updates_description">Yeniləmələri yoxlayın və dəyişiklik qeydlərinə baxın</string>
|
||||
<string name="downloads">Yükləmələr</string>
|
||||
<string name="downloads_description">Yükləyici plaginlər və yüklənmiş tətbiqlər</string>
|
||||
<string name="import_export">İdxal & ixrac</string>
|
||||
<string name="import_export_description">Açar anbarı, yamaq seçimləri və seçimi</string>
|
||||
<string name="advanced">Qabaqcıl</string>
|
||||
<string name="advanced_description">API URL, yaddaş limiti, sazlama</string>
|
||||
<string name="about">Haqqında</string>
|
||||
<string name="opensource_licenses">Açıq mənbə lisenziyaları</string>
|
||||
<string name="opensource_licenses_description">Bu tətbiqi yaratmaq üçün istifadə olunan bütün kitabxanaları göstər</string>
|
||||
<string name="contributors">İştirakçılar</string>
|
||||
<string name="contributors_description">ReVanced iştirakçılarına baxın</string>
|
||||
<string name="dynamic_color">Dinamik rəng</string>
|
||||
<string name="dynamic_color_description">Rəngləri divar kağızına uyğunlaşdırın</string>
|
||||
<string name="pure_black_theme">Saf qara mövzu</string>
|
||||
<string name="pure_black_theme_description">Qaranlıq mövzu üçün saf qara fonlardan istifadə edin</string>
|
||||
<string name="theme">Mövzu</string>
|
||||
<string name="theme_description">Açıq və ya qaranlıq mövzu arasında seçim edin</string>
|
||||
<string name="language">Dil</string>
|
||||
<string name="language_description">Tətbiqin göstərilmə dilini seçin</string>
|
||||
<string name="language_system_default">Sistem standartı</string>
|
||||
<string name="safeguards">Mühafizələr</string>
|
||||
<string name="patch_compat_check">Versiya uyğunluq yoxlamasını söndür</string>
|
||||
<string name="patch_compat_check_description">Yamaqları uyğun tətbiq versiyalarına məhdudlaşdırmayın</string>
|
||||
<string name="patch_compat_check_confirmation">"Uyğun olmayan yamaqların seçilməsi tətbiqin pozulmasına səbəb ola bilər.
|
||||
|
||||
Yenə də davam etmək istəyirsiniz?"</string>
|
||||
<string name="suggested_version_safeguard">Təklif olunan tətbiq versiyasını tələb et</string>
|
||||
<string name="suggested_version_safeguard_description">Təklif olunan tətbiq versiyasının seçimini tətbiq edin</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"Təklif olunan versiya olmayan bir tətbiqin seçilməsi gözlənilməz problemlərə səbəb ola bilər.
|
||||
|
||||
Yenə də davam etmək istəyirsiniz?"</string>
|
||||
<string name="patch_selection_safeguard">Yamaq seçimini və seçimlərini dəyişməyə icazə ver</string>
|
||||
<string name="patch_selection_safeguard_description">Yamaqları seçməyə və ya seçimi ləğv etməyə, həmçinin seçimlərin fərdiləşdirilməsinə mane olmayın</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"Yamaqların seçimini dəyişmək gözlənilməz problemlərə səbəb ola bilər.
|
||||
|
||||
Yenə də aktiv edilsin?"</string>
|
||||
<string name="universal_patches_safeguard">Universal yamaqlardan istifadə etməyə icazə ver</string>
|
||||
<string name="universal_patches_safeguard_description">Universal yamaqlardan istifadə etməyə mane olmayın</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"Universal yamaqlar, xüsusi tətbiqləri hədəfləyənlər qədər yaxşı sınaqdan keçirilməyib.
|
||||
|
||||
Yenə də aktiv edilsin?"</string>
|
||||
<string name="import_keystore">Açar anbarını idxal et</string>
|
||||
<string name="import_keystore_description">Fərdi açar anbarını idxal et</string>
|
||||
<string name="import_keystore_dialog_title">Açar anbarının etimadnaməsini daxil edin</string>
|
||||
<string name="import_keystore_dialog_description">Onu idxal etmək üçün açar anbarının etimadnaməsini daxil etməlisiniz.</string>
|
||||
<string name="import_keystore_dialog_alias_field">İstifadəçi adı (Ləqəb)</string>
|
||||
<string name="import_keystore_dialog_password_field">Parol</string>
|
||||
<string name="import_keystore_dialog_button">İdxal</string>
|
||||
<string name="import_keystore_wrong_credentials">Səhv açar anbarı etimadnaməsi</string>
|
||||
<string name="import_keystore_success">İdxal edilmiş açar anbarı</string>
|
||||
<string name="export_keystore">Açar anbarını ixrac et</string>
|
||||
<string name="export_keystore_description">Cari açar anbarını ixrac et</string>
|
||||
<string name="export_keystore_unavailable">İxrac ediləcək açar anbarı yoxdur</string>
|
||||
<string name="export_keystore_success">İxrac edilmiş açar anbarı</string>
|
||||
<string name="regenerate_keystore">Açar anbarını yenidən yarat</string>
|
||||
<string name="regenerate_keystore_description">Yeni açar anbarı yarat</string>
|
||||
<string name="regenerate_keystore_dialog_description">"Yamaqlama prosesi zamanı menecerin istifadə edəcəyi açar anbarını yenidən yaratmaq üzrəsiniz.
|
||||
|
||||
Bu mənbədən əvvəlcədən quraşdırılmış tətbiqləri yeniləyə bilməyəcəksiniz."</string>
|
||||
<string name="regenerate_keystore_success">Açar anbarı uğurla dəyişdirildi</string>
|
||||
<string name="import_patch_selection">Yamaq seçimini idxal et</string>
|
||||
<string name="import_patch_selection_description">JSON faylından yamaq seçimini idxal et</string>
|
||||
<string name="import_patch_selection_fail">Yamaq seçimi idxal edilə bilmədi: %s</string>
|
||||
<string name="import_patch_selection_success">İdxal edilmiş yamaq seçimi</string>
|
||||
<string name="export_patch_selection">Yamaq seçimini ixrac et</string>
|
||||
<string name="export_patch_selection_description">Yamaq seçimini JSON faylına ixrac et</string>
|
||||
<string name="export_patch_selection_fail">Yamaq seçimi ixrac edilə bilmədi: %s</string>
|
||||
<string name="export_patch_selection_success">İxrac edilmiş yamaq seçimi</string>
|
||||
<string name="reset_patch_selection">Yamaq seçimini sıfırla</string>
|
||||
<string name="reset_patch_selection_description">Saxlanmış yamaq seçimini sıfırla</string>
|
||||
<string name="reset_patch_options">Yamaq seçimlərini sıfırla</string>
|
||||
<string name="reset_patch_options_description">Saxlanmış yamaq seçimlərini sıfırla</string>
|
||||
<string name="reset_patch_selection_success">Yamaq seçimi sıfırlandı</string>
|
||||
<string name="patch_selection_reset_all">Yamaq seçimini qlobal olaraq sıfırla</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">Bütün yamaq seçimlərini sıfırlamaq üzrəsiniz. Hər bir yamağı yenidən əl ilə seçməli olacaqsınız.</string>
|
||||
<string name="patch_selection_reset_all_description">Bütün yamaq seçimlərini sıfırlayır</string>
|
||||
<string name="patch_selection_reset_package">Tətbiq üçün yamaq seçimini sıfırla</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">Siz \"%s\" tətbiqi üçün yamaq seçimini sıfırlamaq üzrəsiniz. Hər bir yamağı yenidən əl ilə seçməli olacaqsınız.</string>
|
||||
<string name="patch_selection_reset_package_description">Tək bir tətbiq üçün yamaq seçimini sıfırlayır</string>
|
||||
<string name="patch_selection_reset_patches">Yamaq seçimini sıfırla (tək)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">\"%s\" üçün yamaq seçimini sıfırlamaq üzrəsiniz. Hər bir yamağı yenidən əl ilə seçməli olacaqsınız.</string>
|
||||
<string name="patch_selection_reset_patches_description">Müəyyən yamaq kolleksiyası üçün yamaq seçimini sıfırlayır</string>
|
||||
<string name="patch_options_reset_package">Tətbiq üçün yamaq seçimlərini sıfırla</string>
|
||||
<string name="patch_options_reset_package_dialog_description">\"%s\" tətbiqi üçün yamaq seçimlərini sıfırlamaq üzrəsiniz. Hər bir seçimi yenidən tətbiq etməli olacaqsınız.</string>
|
||||
<string name="patch_options_reset_package_description">Tək bir tətbiq üçün yamaq seçimlərini sıfırlayır</string>
|
||||
<string name="patch_options_reset_patches">Yamaq seçimlərini sıfırla (tək)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">\"%s\" üçün yamaq seçimlərini sıfırlamaq üzrəsiniz. Hər bir seçimi yenidən tətbiq etməli olacaqsınız.</string>
|
||||
<string name="patch_options_reset_patches_description">Müəyyən yamaq kolleksiyası üçün yamaq seçimlərini sıfırlayır</string>
|
||||
<string name="patch_options_reset_all">Yamaq seçimlərini qlobal olaraq sıfırla</string>
|
||||
<string name="patch_options_reset_all_dialog_description">Bütün yamaq seçimlərini sıfırlamaq üzrəsiniz. Hər bir seçimi yenidən tətbiq etməli olacaqsınız.</string>
|
||||
<string name="patch_options_reset_all_description">Bütün yamaq seçimlərini sıfırlayır</string>
|
||||
<string name="downloader_plugins">Plaginlər</string>
|
||||
<string name="downloader_plugin_state_trusted">Etibarlı</string>
|
||||
<string name="downloader_plugin_state_failed">Yüklənə bilmədi. Daha çox təfərrüat üçün klikləyin</string>
|
||||
<string name="downloader_plugin_state_untrusted">Etibarsız</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">Plaginə güvənilsin?</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">Güvən ləğv edilsin?</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">Davam etmək bu plaginin sisteminizdə işləməsinə icazə verəcək.\n\nYalnız bu plagini ona güvənirsinizsə aktiv edin. Plaginlər istənilən kodu icra edə bilər və cihazınızı təhlükəyə sala bilər.</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">İmza:\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">Plagin:\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">Seçilmiş tətbiqləri sil</string>
|
||||
<string name="downloader_plugin_delete_apps_description">Seçilmiş tətbiqləri silmək istədiyinizə əminsiniz?</string>
|
||||
<string name="downloader_settings_no_apps">Yüklənmiş tətbiq tapılmadı.</string>
|
||||
<string name="search_apps">Tətbiqləri axtar…</string>
|
||||
<string name="loading_body">Yüklənir…</string>
|
||||
<string name="downloading_patches">Yamaqlar yüklənir…</string>
|
||||
<string name="options">Seçimlər</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="yes">Bəli</string>
|
||||
<string name="no">Xeyr</string>
|
||||
<string name="edit">Redaktə et</string>
|
||||
<string name="dialog_input_placeholder">Dəyər</string>
|
||||
<string name="reset">Sıfırla</string>
|
||||
<string name="share">Paylaş</string>
|
||||
<string name="patch">Yamaq</string>
|
||||
<string name="select_from_storage">Yaddaşdan seç</string>
|
||||
<string name="select_from_storage_description">Fayl seçicidən istifadə edərək yaddaşdan bir APK faylı seçin</string>
|
||||
<string name="suggested_version_info">Tövsiyə olunan versiya: %s</string>
|
||||
<string name="type_anything">Davam etmək üçün hər hansı bir şey yazın</string>
|
||||
<string name="search">Yamaqları axtar…</string>
|
||||
<string name="apply">Tətbiq et</string>
|
||||
<string name="help">Kömək</string>
|
||||
<string name="back">Geri</string>
|
||||
<string name="warning">Xəbərdarlıq</string>
|
||||
<string name="add">Əlavə et</string>
|
||||
<string name="close">Bağla</string>
|
||||
<string name="clear">Təmizlə</string>
|
||||
<string name="system">Sistem</string>
|
||||
<string name="light">Açıq</string>
|
||||
<string name="dark">Tünd</string>
|
||||
<string name="appearance">Görünüş</string>
|
||||
<string name="networking">Şəbəkə</string>
|
||||
<string name="allow_metered_networks">Ölçülmüş şəbəkələrə icazə ver</string>
|
||||
<string name="allow_metered_networks_description">Ölçülmüş şəbəkələrdə avtomatik yeniləmələrə icazə verir.\n Tətbiq əl əməliyyatları üçün hələ də ölçülmüş şəbəkələr haqqında xəbərdarlıq edə bilər.</string>
|
||||
<string name="downloaded_apps">Yüklənmiş tətbiqlər</string>
|
||||
<string name="process_runtime">Yamaqlayıcını başqa prosesdə işlət (eksperimental)</string>
|
||||
<string name="process_runtime_description">Bu daha sürətli və Yamaqlayıcının daha çox yaddaş istifadə etməsinə imkan verir</string>
|
||||
<string name="process_runtime_memory_limit">Yamaqlayıcı prosesinin yaddaş limiti</string>
|
||||
<string name="process_runtime_memory_limit_description">Yamaqlayıcı prosesinin istifadə edə biləcəyi maksimum yaddaş miqdarı (meqabaytlarda)</string>
|
||||
<string name="debug_logs_export">Bərpa qeydlərini ixrac et</string>
|
||||
<string name="debug_logs_export_read_failed">Qeydləri oxumaq alınmadı (çıxış kodu %d)</string>
|
||||
<string name="debug_logs_export_failed">Qeydləri ixrac etmək alınmadı</string>
|
||||
<string name="debug_logs_export_success">İxrac edilmiş qeydlər</string>
|
||||
<string name="api_url">API URL</string>
|
||||
<string name="api_url_description">Lazımi faylları yükləmək üçün istifadə olunan API</string>
|
||||
<string name="api_url_dialog_title">API URL-ni dəyişdir</string>
|
||||
<string name="api_url_dialog_description">ReVanced Manager-ın API URL-ni dəyişdirin. ReVanced Manager yamaqları və yeniləmələri yükləmək üçün API-dən istifadə edir.</string>
|
||||
<string name="api_url_dialog_warning">ReVanced Manager yamaqları və yeniləmələri yükləmək üçün API-yə qoşulur. Ona güvəndiyinizə əmin olun.</string>
|
||||
<string name="api_url_dialog_save">Təyin et</string>
|
||||
<string name="api_url_dialog_reset">API URL-ni sıfırla</string>
|
||||
<string name="device">Cihaz</string>
|
||||
<string name="device_android_version">Android versiyası</string>
|
||||
<string name="device_model">Model</string>
|
||||
<string name="device_architectures">CPU Arxitekturaları</string>
|
||||
<string name="device_memory_limit">Yaddaş limitləri</string>
|
||||
<string name="device_memory_limit_format">%1$dMB (Normal) - %2$dMB (Böyük)</string>
|
||||
<string name="patches_force_download">Bütün yamaqları yükləməyə məcbur et</string>
|
||||
<string name="patches_reset">Yamaqları sıfırla</string>
|
||||
<string name="patching">Yamaqlanır</string>
|
||||
<string name="signing">İmzalanır</string>
|
||||
<string name="storage">Yaddaş</string>
|
||||
<string name="no_patch_found">Yamaq tapılmadı. Yamaqlarınızı yoxlayın</string>
|
||||
<string name="tab_apps">Tətbiqlər</string>
|
||||
<string name="tab_patches">Yamaqlar</string>
|
||||
<string name="delete">Sil</string>
|
||||
<string name="refresh">Yenilə</string>
|
||||
<string name="continue_anyways">Hər halda davam et</string>
|
||||
<string name="download_another_version">Başqa versiyanı yüklə</string>
|
||||
<string name="download_app">Tətbiqi yüklə</string>
|
||||
<string name="download_apk">APK faylını yüklə</string>
|
||||
<string name="patches_download_fail">Yamaqlar yüklənə bilmədi: %s</string>
|
||||
<string name="patches_replace_fail">Yamaqları idxal etmək alınmadı: %s</string>
|
||||
<string name="no_patched_apps_found">Yamaqlanmış tətbiq tapılmadı</string>
|
||||
<string name="tap_on_patches">Yamaqlar haqqında daha çox məlumat almaq üçün onların üzərinə toxunun</string>
|
||||
<string name="patches_selected">%s seçildi</string>
|
||||
<string name="incompatible_patches">Uyğun olmayan yamaqlar</string>
|
||||
<string name="universal_patches">Universal yamaqlar</string>
|
||||
<string name="patch_selection_reset_toast">Yamaq seçimi və seçimləri tövsiyə olunan standartlara qaytarıldı</string>
|
||||
<string name="patch_options_reset_toast">Yamaq seçimləri sıfırlandı</string>
|
||||
<string name="non_suggested_version_warning_title">Tövsiyə olunmayan versiya</string>
|
||||
<string name="non_suggested_version_warning_description">"Seçdiyiniz tətbiqin versiyası tövsiyə olunan versiya ilə uyğun gəlmir.\nZəhmət olmasa tövsiyə olunan versiyadan istifadə edin: %s\n\nHər halda davam etmək üçün, qabaqcıl parametrlərdə \"Tövsiyə olunan tətbiq versiyasını tələb et\" seçimini söndürün."</string>
|
||||
<string name="selection_warning_title">Standartlardan istifadəni dayandırılsın?</string>
|
||||
<string name="selection_warning_description">"Varsayılan yamaq seçimi və seçimlərindən istifadə etmək tövsiyə olunur. Onları dəyişdirmək gözlənilməz problemlərə səbəb ola bilər.\n\nYamaqları dəyişdirməzdən əvvəl qabaqcıl parametrlərdə \"Yamaq seçimini və seçimlərini dəyişdirməyə icazə ver\" seçimini aktiv etməlisiniz."</string>
|
||||
<string name="universal_patch_warning_description">"Universal yamaqların daha ümumi istifadəsi var və xüsusi tətbiqləri hədəfləyən yamaqlar qədər etibarlı işləmir. Onlardan istifadə edərkən problemlərlə qarşılaşa bilərsiniz.\n\nUniversal yamaqlardan istifadə etməzdən əvvəl qabaqcıl parametrlərdə \"Universal yamaqlardan istifadəyə icazə ver\" seçimini aktiv etməlisiniz."</string>
|
||||
<string name="this_version">Bu versiya</string>
|
||||
<string name="universal">Hər hansı tətbiq</string>
|
||||
<string name="search_patches">Yamaqları axtar</string>
|
||||
<string name="app_version_not_compatible">"Bu yamaq seçilmiş tətbiq versiyası (%1$s) ilə uyğun gəlmir.\n\nYalnız aşağıdakı versiya(lar) ilə uyğundur: %2$s"</string>
|
||||
<string name="continue_with_version">Bu versiya ilə davam edilsin?</string>
|
||||
<string name="version_not_compatible">Bütün yamaqlar bu versiya (%s) ilə uyğun gəlmir. Hər halda davam etmək istəyirsiniz?</string>
|
||||
<string name="download_application">Tətbiq yüklənsin?</string>
|
||||
<string name="app_not_installed">Seçdiyiniz tətbiq quraşdırılmayıb. Onu yükləmək istəyirsiniz?</string>
|
||||
<string name="failed_to_load_apk">APK yüklənə bilmədi</string>
|
||||
<string name="loading">Yüklənir…</string>
|
||||
<string name="not_installed">Quraşdırılmayıb</string>
|
||||
<string name="installed">Quraşdırılıb</string>
|
||||
<string name="app_info">Tətbiq məlumatı</string>
|
||||
<string name="uninstall">Sil</string>
|
||||
<string name="unpatch">Yamağı ləğv et</string>
|
||||
<string name="repatch">Yenidən yamaqla</string>
|
||||
<string name="install_type">Quraşdırma növü</string>
|
||||
<string name="package_name">Paket adı</string>
|
||||
<string name="original_package_name">Orijinal paket adı</string>
|
||||
<string name="applied_patches">Tətbiq edilmiş yamalar</string>
|
||||
<string name="view_applied_patches">Tətbiq edilmiş yamalara bax</string>
|
||||
<string name="default_install">İlkin</string>
|
||||
<string name="mount_install">Quraşdır</string>
|
||||
<string name="mounted">Quraşdırılıb</string>
|
||||
<string name="not_mounted">Quraşdırılmayıb</string>
|
||||
<string name="mount">Quraşdır</string>
|
||||
<string name="unmount">Ayır</string>
|
||||
<string name="failed_to_mount">Quraşdırmaq alınmadı: %s</string>
|
||||
<string name="failed_to_unmount">Ayırmaq alınmadı: %s</string>
|
||||
<string name="unpatch_app">Tətbiqi yamasız et?</string>
|
||||
<string name="unpatch_description">Bu tətbiqi yamasız etmək istədiyinizə əminsiniz?</string>
|
||||
<string name="downloader_invalid_version">Yükləyici düzgün versiyanı əldə etmədi</string>
|
||||
<string name="downloader_app_not_found">Yükləyici tətbiqi tapmadı</string>
|
||||
<string name="downloader_error">Yükləyici xətası: %s</string>
|
||||
<string name="downloader_no_plugins_installed">Heç bir yükləyici quraşdırılmayıb.</string>
|
||||
<string name="downloader_no_plugins_available">Yükləyicilər quraşdırılıb, lakin heç biri etibarlı deyil. Parametrlərinizi yoxlayın.</string>
|
||||
<string name="already_patched">Artıq yamalanıb</string>
|
||||
<string name="patch_selector_sheet_filter_title">Filtr</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">Uyğunluq</string>
|
||||
<string name="string_option_menu_description">Daha çox seçim</string>
|
||||
<string name="option_preset_custom_value">Fərdi dəyər</string>
|
||||
<string name="path_selector">Saxlama yerindən seç</string>
|
||||
<string name="path_selector_parent_dir">Əvvəlki qovluq</string>
|
||||
<string name="path_selector_dirs">Qovluqlar</string>
|
||||
<string name="path_selector_files">Fayllar</string>
|
||||
<string name="show_password_field">Parolu göstər</string>
|
||||
<string name="hide_password_field">Parolu gizlət</string>
|
||||
<string name="installer">Quraşdırıcı</string>
|
||||
<string name="install_app">Quraşdır</string>
|
||||
<string name="install_app_success">Tətbiq quraşdırıldı</string>
|
||||
<string name="install_app_fail">Tətbiqi quraşdırmaq alınmadı: %s</string>
|
||||
<string name="reinstall_app_fail">Tətbiqi yenidən quraşdırmaq alınmadı: %s</string>
|
||||
<string name="uninstall_app_fail">Tətbiqi silmək alınmadı: %s</string>
|
||||
<string name="open_app">Aç</string>
|
||||
<string name="save_apk">APK-ni Saxla</string>
|
||||
<string name="save_apk_success">APK Saxlandı</string>
|
||||
<string name="sign_fail">APK-ni imzalamaq alınmadı: %s</string>
|
||||
<string name="save_logs">Qeydləri saxla</string>
|
||||
<string name="plugin_activity_dialog_body">Bu plaginlə davam etmək üçün istifadəçi qarşılıqlı əlaqəsi tələb olunur.</string>
|
||||
<string name="select_install_type">Quraşdırma növünü seç</string>
|
||||
<string name="patcher_step_group_preparing">Hazırlanır</string>
|
||||
<string name="patcher_step_load_patches">Yamaları yüklə</string>
|
||||
<string name="patcher_step_unpack">APK faylını oxu</string>
|
||||
<string name="patcher_step_group_patching">Yamalanır</string>
|
||||
<string name="patcher_step_group_saving">Saxlanılır</string>
|
||||
<string name="patcher_step_write_patched">Yamalanmış APK faylını yaz</string>
|
||||
<string name="patcher_step_sign_apk">Yamalanmış APK faylını imzala</string>
|
||||
<string name="patcher_notification_title">Yamalanma davam edir…</string>
|
||||
<string name="patcher_notification_text">Yamalayıcıya qayıtmaq üçün toxun</string>
|
||||
<string name="patcher_stop_confirm_title">Yamalayıcını dayandır</string>
|
||||
<string name="patcher_stop_confirm_description">Yamalanma prosesini dayandırmaq istədiyinizə əminsiniz?</string>
|
||||
<string name="patcher_install_in_progress">Quraşdırma davam edir. Zəhmət olmasa gözləyin</string>
|
||||
<string name="execute_patches">Yamaları icra et</string>
|
||||
<string name="executing_patch">%s icra et</string>
|
||||
<string name="failed_to_execute_patch">%s icra etmək alınmadı</string>
|
||||
<string name="step_completed">tamamlandı</string>
|
||||
<string name="step_failed">uğursuz oldu</string>
|
||||
<string name="step_running">işləyir</string>
|
||||
<string name="step_waiting">gözləyir</string>
|
||||
<string name="expand_content">genişləndir</string>
|
||||
<string name="collapse_content">yığışdır</string>
|
||||
<string name="drag_handle">yenidən sırala</string>
|
||||
<string name="more">Daha çox</string>
|
||||
<string name="less">Daha az</string>
|
||||
<string name="continue_">Davam et</string>
|
||||
<string name="dismiss">Rədd et</string>
|
||||
<string name="permanent_dismiss">Bunu bir daha göstərmə</string>
|
||||
<string name="donate">İanə et</string>
|
||||
<string name="website">Vebsayt</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="contact">Əlaqə</string>
|
||||
<string name="version">Versiya</string>
|
||||
<string name="submit_feedback">Problemi və ya rəyi göndər</string>
|
||||
<string name="submit_feedback_description">Bu tətbiqi təkmilləşdirməyə kömək edin</string>
|
||||
<string name="developer_options">Tərtibatçı seçimləri</string>
|
||||
<string name="developer_options_description">Problemləri aradan qaldırmaq üçün seçimlər</string>
|
||||
<string name="patches_update_success">Yeniləmə uğurlu oldu</string>
|
||||
<string name="patches_update_unavailable">Yeniləmə yoxdur</string>
|
||||
<string name="view_patches">Yamalara bax</string>
|
||||
<string name="patches_view_any_version">İstənilən versiya</string>
|
||||
<string name="patches_view_any_package">İstənilən paket</string>
|
||||
<string name="patches_delete_single_dialog_description">\"%s\" silmək istədiyinizə əminsiniz?</string>
|
||||
<string name="patches_delete_multiple_dialog_description">Seçilmiş yamaları silmək istədiyinizə əminsiniz?</string>
|
||||
<string name="about_revanced_manager">ReVanced Manager haqqında</string>
|
||||
<string name="revanced_manager_description">ReVanced Manager, Android tətbiqlərini yamalamaq üçün ReVanced Patcher istifadə edən bir Android tətbiqidir. O, xüsusi yamalarla tətbiqləri yükləməyə və yamalamağa, həmçinin yamalanma prosesini idarə etməyə imkan verir.</string>
|
||||
<string name="developer_options_taps">%d toxunuş qalıb</string>
|
||||
<string name="developer_options_enabled">Tərtibatçı seçimləri aktivləşdirildi</string>
|
||||
<string name="developer_options_already_enabled">Tərtibatçı seçimləri artıq aktivləşdirilib</string>
|
||||
<string name="update_available">Yeniləmə mövcuddur</string>
|
||||
<string name="current_version">Cari versiya: %s</string>
|
||||
<string name="new_version">Yeni versiya: %s</string>
|
||||
<string name="ready_to_install_update">Yeniləməni quraşdırmağa hazırdır</string>
|
||||
<string name="update_completed">Yeniləmə quraşdırıldı</string>
|
||||
<string name="install_update_manager_failed">Yeniləməni quraşdırmaq alınmadı</string>
|
||||
<string name="manual_update_check">Yeniləmələri yoxla</string>
|
||||
<string name="manual_update_check_description">Yeniləmələri əl ilə yoxla</string>
|
||||
<string name="update_checking_manager">Başlayarkən yeniləmələri yoxla</string>
|
||||
<string name="update_checking_manager_description">Tətbiq başlayanda ReVanced Manager-in yeni versiyalarını yoxla</string>
|
||||
<string name="manager_prereleases">İlkin buraxılışları istifadə et</string>
|
||||
<string name="manager_prereleases_description">ReVanced Manager-in ilkin versiyalarından istifadə et</string>
|
||||
<string name="changelog">Dəyişiklik qeydlərinə bax</string>
|
||||
<string name="changelog_loading">Dəyişiklik qeydi yüklənir</string>
|
||||
<string name="changelog_download_fail">Dəyişiklik qeydini yükləmək alınmadı: %s</string>
|
||||
<string name="changelog_description">Bu yeniləmədəki son dəyişikliklərə bax</string>
|
||||
<string name="battery_optimization_notification">ReVanced Manager-in arxa planda düzgün işləməsi üçün batareya optimizasiyası söndürülməlidir. Optimizasiyaları söndürmək üçün buraya klikləyin.</string>
|
||||
<string name="installing_manager_update">Yeniləmə quraşdırılır…</string>
|
||||
<string name="downloading_manager_update">Yeniləmə yüklənir…</string>
|
||||
<string name="download_manager_failed">Yeniləməni yükləmək alınmadı: %s</string>
|
||||
<string name="cancel">Ləğv et</string>
|
||||
<string name="save">Saxla</string>
|
||||
<string name="save_with_count">Saxla (%1$s)</string>
|
||||
<string name="update">Yenilə</string>
|
||||
<string name="empty">Boş</string>
|
||||
<string name="installing_message">"Xahiş edildikdə <b>Yenilə</b> düyməsinə toxunun.\nReVanced Manager yenilənərkən bağlanacaq."</string>
|
||||
<string name="no_changelogs_found">Dəyişiklik qeydləri tapılmadı</string>
|
||||
<string name="just_now">İndi</string>
|
||||
<string name="minutes_ago">%s dəq əvvəl</string>
|
||||
<string name="hours_ago">%s saat əvvəl</string>
|
||||
<string name="days_ago">%s gün əvvəl</string>
|
||||
<string name="invalid_date">Yanlış tarix</string>
|
||||
<string name="disable_battery_optimization">Batareya optimizasiyasını söndür</string>
|
||||
<string name="input_dialog_value_invalid">Yanlış dəyər</string>
|
||||
<string name="option_required">Bu seçim tələb olunur</string>
|
||||
<string name="required_options_screen">Tələb olunan seçimlər</string>
|
||||
<string name="failed_to_check_updates">Yeniləmələri yoxlamaq alınmadı: %s</string>
|
||||
<string name="no_update_available">Yeniləmə mövcud deyil</string>
|
||||
<string name="update_check">Yeniləmələr yoxlanılır…</string>
|
||||
<string name="dismiss_temporary">İndi yox</string>
|
||||
<string name="update_available_dialog_description">ReVanced Manager-in (%s) yeni versiyası mövcuddur.</string>
|
||||
<string name="failed_to_download_update">Yeniləməni yükləmək alınmadı: %s</string>
|
||||
<string name="download">Yüklə</string>
|
||||
<string name="download_confirmation_metered">"Hazırda ölçülü bağlantıdasınız və xidmət provayderiniz tərəfindən məlumat haqqları tətbiq oluna bilər.\n\nDavam etmək istəyirsiniz?"</string>
|
||||
<string name="download_update_confirmation">Yeniləməni yüklənsin?</string>
|
||||
<string name="no_contributors_found">Heç bir töhfəçi tapılmadı</string>
|
||||
<string name="select">Seç</string>
|
||||
<string name="select_deselect_all">Hamısını seç və ya seçimi ləğv et</string>
|
||||
<string name="select_patches_type_dialog_description">URL-dən və ya yerli fayllardan yeni yamalar əlavə et</string>
|
||||
<string name="local_patches_description">Yerli saxlama yerindən yamalar əlavə et.</string>
|
||||
<string name="remote_patches_description">URL-dən yamalar əlavə et. Yamalar avtomatik olaraq yenilənə bilər.</string>
|
||||
<string name="recommended">Tövsiyə olunur</string>
|
||||
<string name="installation_failed_dialog_title">Quraşdırma uğursuz oldu</string>
|
||||
<string name="installation_cancelled_dialog_title">Quraşdırma ləğv edildi</string>
|
||||
<string name="installation_blocked_dialog_title">Quraşdırma bloklandı</string>
|
||||
<string name="installation_conflict_dialog_title">Quraşdırma konflikti</string>
|
||||
<string name="installation_incompatible_dialog_title">Quraşdırma uyğun deyil</string>
|
||||
<string name="installation_invalid_dialog_title">Quraşdırma etibarsızdır</string>
|
||||
<string name="installation_storage_issue_dialog_title">Kifayət qədər yaddaş yoxdur</string>
|
||||
<string name="installation_timeout_dialog_title">Quraşdırmanın vaxtı bitdi</string>
|
||||
<string name="installation_failed_description">Quraşdırma naməlum səbəbdən uğursuz oldu. Yenidən cəhd edin?</string>
|
||||
<string name="installation_aborted_description">Quraşdırma əl ilə ləğv edildi. Yenidən cəhd edin?</string>
|
||||
<string name="installation_blocked_description">Quraşdırma bloklandı. Cihazınızın təhlükəsizlik parametrlərini nəzərdən keçirin və yenidən cəhd edin.</string>
|
||||
<string name="installation_conflict_description">Quraşdırma tətbiqin mövcud quraşdırılması tərəfindən dayandırıldı. Quraşdırılmış tətbiqi silin və yenidən cəhd edin?</string>
|
||||
<string name="installation_incompatible_description">Tətbiq bu cihazla uyğun deyil. Bu cihazla uyğun gələn bir APK istifadə edin və yenidən cəhd edin.</string>
|
||||
<string name="installation_invalid_description">Tətbiq etibarsızdır. Tətbiqi silin və yenidən cəhd edin?</string>
|
||||
<string name="installation_storage_issue_description">Kifayət qədər yaddaş olmadığı üçün tətbiq quraşdırıla bilmədi. Bir qədər yer boşaldın və yenidən cəhd edin.</string>
|
||||
<string name="installation_timeout_description">Quraşdırma çox uzun çəkdi. Yenidən cəhd edin?</string>
|
||||
<string name="reinstall">Yenidən quraşdır</string>
|
||||
<string name="show">Göstər</string>
|
||||
<string name="debugging">Hata ayıklama</string>
|
||||
<string name="about_device">Cihaz haqqında</string>
|
||||
<string name="enter_url">URL daxil et</string>
|
||||
<string name="next">Növbəti</string>
|
||||
<string name="auto_update">Avtomatik yeniləmə</string>
|
||||
<string name="add_patches">Yamalar əlavə et</string>
|
||||
<string name="auto_update_description">Yeni versiya mövcud olduqda avtomatik yenilə</string>
|
||||
<string name="patches_prereleases">İlkin buraxılışları istifadə et</string>
|
||||
<string name="patches_prereleases_description">%s-in ilkin versiyalarından istifadə et</string>
|
||||
<string name="patches_url">Yamaların URL-i</string>
|
||||
<string name="incompatible_patches_dialog">"Bu yamalar seçilmiş tətbiq versiyası (%1$s) ilə uyğun deyil.\n\nDaha çox məlumat üçün yamalara klikləyin."</string>
|
||||
<string name="incompatible_patch">Uyğun olmayan yama</string>
|
||||
<string name="any_version">İstənilən</string>
|
||||
<string name="never_show_again">Bir daha göstərmə</string>
|
||||
<string name="show_manager_update_dialog_on_launch">Başlayarkən yeniləmə mesajını göstər</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">Başlayarkən yeni yeniləmə mövcud olduqda açılan bildirişi göstər</string>
|
||||
<string name="failed_to_import_keystore">Açar anbarını idxal etmək alınmadı</string>
|
||||
<string name="export">İxrac et</string>
|
||||
<string name="confirm">Təsdiqlə</string>
|
||||
</resources>
|
||||
@@ -1,460 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">Тэст патчара</string>
|
||||
<string name="patches">Патчы</string>
|
||||
<string name="cli">CLI</string>
|
||||
<string name="manager">Менеджар</string>
|
||||
<string name="plugin_host_permission_label">Хост плагінаў ReVanced Manager</string>
|
||||
<string name="plugin_host_permission_description">Выкарыстоўваецца для кіравання доступам да плагінаў ReVanced Manager. Толькі ReVanced Manager мае гэта.</string>
|
||||
<string name="toast_copied_to_clipboard">Скапіявана!</string>
|
||||
<string name="copy_to_clipboard">Скапіяваць у буфер абмену</string>
|
||||
<string name="dashboard">Панэль кіравання</string>
|
||||
<string name="settings">Налады</string>
|
||||
<string name="select_app">Выберыце праграму</string>
|
||||
<string name="patches_count_selected">%1$d/%2$d выбрана</string>
|
||||
<string name="new_downloader_plugins_notification">Даступны новыя плагіны для загрузкі. Націсніце тут, каб наладзіць іх.</string>
|
||||
<string name="unsupported_architecture_warning">Патчынг на гэтай архітэктуры прылады не падтрымліваецца і, хутчэй за ўсё, не атрымаецца.</string>
|
||||
<string name="import_">Імпарт</string>
|
||||
<string name="import_patches">Імпартаваць патчы</string>
|
||||
<string name="file_field_set">Выбрана</string>
|
||||
<string name="file_field_not_set">Не выбрана</string>
|
||||
<string name="field_not_set">Не ўсталявана</string>
|
||||
<string name="patches_missing">Адсутнічае</string>
|
||||
<string name="patches_error">Памылка</string>
|
||||
<string name="patches_error_description">Патчы не ўдалося загрузіць. Націсніце, каб праглядзець памылку</string>
|
||||
<string name="patches_not_downloaded">Патчы не былі загружаны. Націсніце тут, каб загрузіць іх</string>
|
||||
<string name="patches_name_default">Патчы</string>
|
||||
<string name="patches_name_fallback">Без назвы</string>
|
||||
<string name="android_11_bug_dialog_title">Памылка Android 11</string>
|
||||
<string name="android_11_bug_dialog_description">Дазвол на ўстаноўку праграм павінен быць выдадзены загадзя, каб пазбегнуць памылкі ў сістэме Android 11, якая негатыўна паўплывае на зручнасць карыстання.</string>
|
||||
<string name="no_network_toast">Няма падключэння да інтэрнэту</string>
|
||||
<string name="selected_app_meta_any_version">Любая даступная версія</string>
|
||||
<string name="app_source_dialog_title">Выберыце крыніцу</string>
|
||||
<string name="app_source_dialog_option_auto">Аўтаматычна</string>
|
||||
<string name="app_source_dialog_option_auto_description">Выкарыстоўваць усе даступныя загрузчыкі для загрузкі праграмы</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">Няма даступных плагінаў</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">Усталяваныя праграмы не могуць быць зноў прапатчаны без root-доступу</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">Версія %s не адпавядае прапанаванай версіі</string>
|
||||
<string name="patch_item_description">Пачаць патчынг праграмы</string>
|
||||
<string name="patch_selector_item">Выбраць патчы</string>
|
||||
<string name="patch_selector_item_description">%d патчаў выбрана</string>
|
||||
<string name="no_patches_selected">Няма выбраных патчаў</string>
|
||||
<string name="network_unavailable_warning">Ваша прылада не падключана да інтэрнэту. Загрузка не ўдасца пазней.</string>
|
||||
<string name="network_metered_warning">Вы зараз карыстаецеся тарыфікуемым падключэннем. Можа спаганяцца плата за перадачу даных ад вашага пастаўшчыка паслуг.</string>
|
||||
<string name="apk_source_selector_item">Выбраць крыніцу APK</string>
|
||||
<string name="apk_source_auto">Выкарыстоўваюцца ўсе загрузчыкі APK</string>
|
||||
<string name="apk_source_downloader">Выкарыстоўваецца %s</string>
|
||||
<string name="apk_source_installed">Выкарыстоўваецца ўсталяваны APK</string>
|
||||
<string name="apk_source_local">Выкарыстоўваецца лакальны файл APK</string>
|
||||
<string name="legacy_import_failed">Не ўдалося імпартаваць старыя налады</string>
|
||||
<string name="auto_updates_dialog_title">Наладзіць абнаўленні</string>
|
||||
<string name="auto_updates_dialog_description">Ці хочаце вы, каб ReVanced Manager перыядычна правяраў наяўнасць абнаўленняў для наступных кампанентаў?</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">Патчы ReVanced</string>
|
||||
<string name="auto_updates_dialog_note">Гэтыя налады можна змяніць пазней.</string>
|
||||
<string name="general">Агульныя</string>
|
||||
<string name="general_description">Мова, тэма, дынамічны колер</string>
|
||||
<string name="updates">Абнаўленні</string>
|
||||
<string name="updates_description">Правяраць наяўнасць абнаўленняў і праглядаць спісы змен</string>
|
||||
<string name="downloads">Загрузкі</string>
|
||||
<string name="downloads_description">Плагіны для загрузкі і загружаныя праграмы</string>
|
||||
<string name="import_export">Імпарт & экспарт</string>
|
||||
<string name="import_export_description">Сховішча ключоў, параметры і выбар патчаў</string>
|
||||
<string name="advanced">Пашыраныя</string>
|
||||
<string name="advanced_description">URL API, ліміт памяці, адладка</string>
|
||||
<string name="about">Пра праграму</string>
|
||||
<string name="opensource_licenses">Ліцэнзіі з адкрытым зыходным кодам</string>
|
||||
<string name="opensource_licenses_description">Прагледзець усе бібліятэкі, выкарыстаныя для стварэння гэтай праграмы</string>
|
||||
<string name="contributors">Удзельнікі</string>
|
||||
<string name="contributors_description">Прагледзець удзельнікаў ReVanced</string>
|
||||
<string name="dynamic_color">Дынамічны колер</string>
|
||||
<string name="dynamic_color_description">Адаптаваць колеры да шпалер</string>
|
||||
<string name="pure_black_theme">Чыста чорная тэма</string>
|
||||
<string name="pure_black_theme_description">Выкарыстоўваць чыста чорныя фоны для цёмнай тэмы</string>
|
||||
<string name="theme">Тэма</string>
|
||||
<string name="theme_description">Выбраць паміж светлай ці цёмнай тэмай</string>
|
||||
<string name="language">Мова</string>
|
||||
<string name="language_description">Выберыце мову адлюстравання праграмы</string>
|
||||
<string name="language_system_default">Сістэмны па змаўчанні</string>
|
||||
<string name="safeguards">Абаронныя меры</string>
|
||||
<string name="patch_compat_check">Адключыць праверку сумяшчальнасці версій</string>
|
||||
<string name="patch_compat_check_description">Не абмяжоўваць патчы сумяшчальнымі версіямі праграм</string>
|
||||
<string name="patch_compat_check_confirmation">"Выбар несумяшчальных патчаў можа прывесці да няспраўнасці праграмы.
|
||||
|
||||
Ці хочаце вы працягнуць усё роўна?"</string>
|
||||
<string name="suggested_version_safeguard">Патрабаваць рэкамендаваную версію праграмы</string>
|
||||
<string name="suggested_version_safeguard_description">Прымусіць выбар рэкамендаванай версіі праграмы</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"Выбар праграмы, якая не з'яўляецца рэкамендаванай версіяй, можа выклікаць нечаканыя праблемы.
|
||||
|
||||
Ці хочаце вы працягнуць усё роўна?"</string>
|
||||
<string name="patch_selection_safeguard">Дазволіць змяненне выбару і параметраў патчаў</string>
|
||||
<string name="patch_selection_safeguard_description">Не перашкаджаць выбару або адмене выбару патчаў і наладзе параметраў</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"Змяненне выбару патчаў можа выклікаць нечаканыя праблемы.
|
||||
|
||||
Уключыць усё роўна?"</string>
|
||||
<string name="universal_patches_safeguard">Дазволіць выкарыстоўваць універсальныя патчы</string>
|
||||
<string name="universal_patches_safeguard_description">Не перашкаджаць выкарыстанню ўніверсальных патчаў</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"Універсальныя патчы не так добра пратэставаны, як тыя, што прызначаны для пэўных праграм.
|
||||
|
||||
Уключыць усё роўна?"</string>
|
||||
<string name="import_keystore">Імпартаваць сховішча ключоў</string>
|
||||
<string name="import_keystore_description">Імпартаваць карыстальніцкае сховішча ключоў</string>
|
||||
<string name="import_keystore_dialog_title">Увядзіце ўліковыя даныя сховішча ключоў</string>
|
||||
<string name="import_keystore_dialog_description">Вам трэба будзе ўвесці ўліковыя даныя сховішча ключоў, каб імпартаваць яго.</string>
|
||||
<string name="import_keystore_dialog_alias_field">Імя карыстальніка (Псеўданім)</string>
|
||||
<string name="import_keystore_dialog_password_field">Пароль</string>
|
||||
<string name="import_keystore_dialog_button">Імпартаваць</string>
|
||||
<string name="import_keystore_wrong_credentials">Няправільныя ўліковыя даныя сховішча ключоў</string>
|
||||
<string name="import_keystore_success">Імпартаванае сховішча ключоў</string>
|
||||
<string name="export_keystore">Экспартаваць сховішча ключоў</string>
|
||||
<string name="export_keystore_description">Экспартаваць бягучае сховішча ключоў</string>
|
||||
<string name="export_keystore_unavailable">Няма сховішча ключоў для экспарту</string>
|
||||
<string name="export_keystore_success">Экспартаванае сховішча ключоў</string>
|
||||
<string name="regenerate_keystore">Аднавіць сховішча ключоў</string>
|
||||
<string name="regenerate_keystore_description">Стварыць новае сховішча ключоў</string>
|
||||
<string name="regenerate_keystore_dialog_description">"Вы збіраецеся аднавіць сховішча ключоў, якое менеджэр будзе выкарыстоўваць падчас працэсу патчынгу.
|
||||
|
||||
Вы не зможаце абнавіць раней усталяваныя праграмы з гэтай крыніцы."</string>
|
||||
<string name="regenerate_keystore_success">Сховішча ключоў было паспяхова заменена</string>
|
||||
<string name="import_patch_selection">Імпартаваць выбар патчаў</string>
|
||||
<string name="import_patch_selection_description">Імпартаваць выбар патчаў з файла JSON</string>
|
||||
<string name="import_patch_selection_fail">Не ўдалося імпартаваць выбар патчаў: %s</string>
|
||||
<string name="import_patch_selection_success">Імпартаваны выбар патчаў</string>
|
||||
<string name="export_patch_selection">Экспартаваць выбар патчаў</string>
|
||||
<string name="export_patch_selection_description">Экспартаваць выбар патчаў у файл JSON</string>
|
||||
<string name="export_patch_selection_fail">Не ўдалося экспартаваць выбар патчаў: %s</string>
|
||||
<string name="export_patch_selection_success">Экспартаваны выбар патчаў</string>
|
||||
<string name="reset_patch_selection">Скінуць выбар патчаў</string>
|
||||
<string name="reset_patch_selection_description">Скінуць захаваны выбар патчаў</string>
|
||||
<string name="reset_patch_options">Скінуць параметры патчаў</string>
|
||||
<string name="reset_patch_options_description">Скінуць захаваныя параметры патчаў</string>
|
||||
<string name="reset_patch_selection_success">Выбар патчаў скінуты</string>
|
||||
<string name="patch_selection_reset_all">Скінуць выбар патчаў глабальна</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">Вы збіраецеся скінуць усе выбраныя патчы. Вам трэба будзе ўручную зноў выбраць кожны патч.</string>
|
||||
<string name="patch_selection_reset_all_description">Скідвае ўсе выбраныя патчы</string>
|
||||
<string name="patch_selection_reset_package">Скінуць выбар патчаў для праграмы</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">Вы збіраецеся скінуць выбар патчаў для праграмы \"%s\". Вам прыйдзецца ўручную зноў выбраць кожны патч.</string>
|
||||
<string name="patch_selection_reset_package_description">Скідвае выбар патчаў для адной праграмы</string>
|
||||
<string name="patch_selection_reset_patches">Скінуць выбар патчаў (адзін)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">Вы збіраецеся скінуць выбар патчаў для \"%s\". Вам прыйдзецца выбіраць кожны патч уручную нанова.</string>
|
||||
<string name="patch_selection_reset_patches_description">Скідвае выбар патчаў для пэўнай калекцыі патчаў</string>
|
||||
<string name="patch_options_reset_package">Скінуць параметры патчаў для праграмы</string>
|
||||
<string name="patch_options_reset_package_dialog_description">Вы збіраецеся скінуць параметры патчаў для праграмы \"%s\". Вам прыйдзецца паўторна ўжываць кожны параметр нанова.</string>
|
||||
<string name="patch_options_reset_package_description">Скідвае параметры патчаў для адной праграмы</string>
|
||||
<string name="patch_options_reset_patches">Скінуць параметры патчаў (адзін)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">Вы збіраецеся скінуць параметры патчаў для \"%s\". Вам прыйдзецца паўторна ўжываць кожны параметр нанова.</string>
|
||||
<string name="patch_options_reset_patches_description">Скідвае параметры патчаў для пэўнай калекцыі патчаў</string>
|
||||
<string name="patch_options_reset_all">Скінуць параметры патчаў глабальна</string>
|
||||
<string name="patch_options_reset_all_dialog_description">Вы збіраецеся скінуць усе параметры патчаў. Вам прыйдзецца паўторна ўжываць кожны параметр нанова.</string>
|
||||
<string name="patch_options_reset_all_description">Скідвае ўсе параметры патчаў</string>
|
||||
<string name="downloader_plugins">Убудовы</string>
|
||||
<string name="downloader_plugin_state_trusted">Надзейны</string>
|
||||
<string name="downloader_plugin_state_failed">Не атрымалася загрузіць. Націсніце для атрымання падрабязнасцей</string>
|
||||
<string name="downloader_plugin_state_untrusted">Ненадзейны</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">Давяраць убудове?</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">Адазваць давер?</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">Працяг дазволіць гэтаму ўбудове працаваць у вашай сістэме.\n\nУключайце гэты ўбудова толькі ў тым выпадку, калі вы яму давяраеце. Убудовы могуць выконваць адвольны код і могуць скампраметаваць вашу прыладу.</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">Подпіс:\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">Убудова:\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">Выдаліць выбраныя праграмы</string>
|
||||
<string name="downloader_plugin_delete_apps_description">Вы ўпэўнены, што жадаеце выдаліць выбраныя праграмы?</string>
|
||||
<string name="downloader_settings_no_apps">Не знойдзена загружаных праграм.</string>
|
||||
<string name="search_apps">Пошук праграм…</string>
|
||||
<string name="loading_body">Загрузка…</string>
|
||||
<string name="downloading_patches">Спампоўка патчаў…</string>
|
||||
<string name="options">Параметры</string>
|
||||
<string name="ok">ОК</string>
|
||||
<string name="yes">Так</string>
|
||||
<string name="no">Не</string>
|
||||
<string name="edit">Рэдагаваць</string>
|
||||
<string name="dialog_input_placeholder">Значэнне</string>
|
||||
<string name="reset">Скінуць</string>
|
||||
<string name="share">Падзяліцца</string>
|
||||
<string name="patch">Патч</string>
|
||||
<string name="select_from_storage">Выбраць са сховішча</string>
|
||||
<string name="select_from_storage_description">Выберыце файл APK са сховішча з дапамогай файлавага мэнэджара</string>
|
||||
<string name="suggested_version_info">Рэкамендаваная версія: %s</string>
|
||||
<string name="type_anything">Набярыце што-небудзь для працягу</string>
|
||||
<string name="search">Пошук патчаў…</string>
|
||||
<string name="apply">Ужыць</string>
|
||||
<string name="help">Дапамога</string>
|
||||
<string name="back">Назад</string>
|
||||
<string name="warning">Папярэджанне</string>
|
||||
<string name="add">Дадаць</string>
|
||||
<string name="close">Зачыніць</string>
|
||||
<string name="clear">Ачысціць</string>
|
||||
<string name="system">Сістэма</string>
|
||||
<string name="light">Светлая</string>
|
||||
<string name="dark">Цёмная</string>
|
||||
<string name="appearance">Знешні выгляд</string>
|
||||
<string name="networking">Сетка</string>
|
||||
<string name="allow_metered_networks">Дазволіць лімітаваныя сеткі</string>
|
||||
<string name="allow_metered_networks_description">Дазваляе аўтаматычныя абнаўленні ў лімітаваных сетках.\n Праграма ўсё яшчэ можа папярэджваць аб лімітаваных сетках для ручных аперацый.</string>
|
||||
<string name="downloaded_apps">Спампаваныя праграмы</string>
|
||||
<string name="process_runtime">Запусціць Patcher у іншым працэсе (эксперыментальна)</string>
|
||||
<string name="process_runtime_description">Гэта хутчэй і дазваляе Patcher выкарыстоўваць больш памяці</string>
|
||||
<string name="process_runtime_memory_limit">Ліміт памяці працэсу Patcher</string>
|
||||
<string name="process_runtime_memory_limit_description">Максімальны аб\'ём памяці, які можа выкарыстоўваць працэс Patcher (у мегабайтах)</string>
|
||||
<string name="debug_logs_export">Экспартаваць адладачныя журналы</string>
|
||||
<string name="debug_logs_export_read_failed">Не атрымалася прачытаць журналы (код выхаду %d)</string>
|
||||
<string name="debug_logs_export_failed">Не атрымалася экспартаваць журналы</string>
|
||||
<string name="debug_logs_export_success">Экспартаваныя журналы</string>
|
||||
<string name="api_url">URL-адрас API</string>
|
||||
<string name="api_url_description">API, які выкарыстоўваецца для спампоўкі неабходных файлаў</string>
|
||||
<string name="api_url_dialog_title">Змяніць URL-адрас API</string>
|
||||
<string name="api_url_dialog_description">Змяніць URL-адрас API ReVanced Manager. ReVanced Manager выкарыстоўвае API для спампоўкі патчаў і абнаўленняў.</string>
|
||||
<string name="api_url_dialog_warning">ReVanced Manager падключаецца да API для спампоўкі патчаў і абнаўленняў. Пераканайцеся, што вы давяраеце яму.</string>
|
||||
<string name="api_url_dialog_save">Усталяваць</string>
|
||||
<string name="api_url_dialog_reset">Скінуць URL-адрас API</string>
|
||||
<string name="device">Прылада</string>
|
||||
<string name="device_android_version">Версія Android</string>
|
||||
<string name="device_model">Мадэль</string>
|
||||
<string name="device_architectures">Архітэктуры ЦП</string>
|
||||
<string name="device_memory_limit">Ліміты памяці</string>
|
||||
<string name="device_memory_limit_format">%1$dМБ (Звычайная) - %2$dМБ (Вялікая)</string>
|
||||
<string name="patches_force_download">Прымусова спампаваць усе патчы</string>
|
||||
<string name="patches_reset">Скінуць патчы</string>
|
||||
<string name="patching">Патчынг</string>
|
||||
<string name="signing">Падпісанне</string>
|
||||
<string name="storage">Сховішча</string>
|
||||
<string name="no_patch_found">Патчы не знойдзены. Праверце свае патчы</string>
|
||||
<string name="tab_apps">Праграмы</string>
|
||||
<string name="tab_patches">Патчы</string>
|
||||
<string name="delete">Выдаліць</string>
|
||||
<string name="refresh">Абнавіць</string>
|
||||
<string name="continue_anyways">Усё роўна працягнуць</string>
|
||||
<string name="download_another_version">Спампаваць іншую версію</string>
|
||||
<string name="download_app">Спампаваць праграму</string>
|
||||
<string name="download_apk">Спампаваць файл APK</string>
|
||||
<string name="patches_download_fail">Не атрымалася спампаваць патчы: %s</string>
|
||||
<string name="patches_replace_fail">Не атрымалася імпартаваць патчы: %s</string>
|
||||
<string name="no_patched_apps_found">Не знойдзена залатанных праграм</string>
|
||||
<string name="tap_on_patches">Націсніце на патчы, каб атрымаць больш інфармацыі пра іх</string>
|
||||
<string name="patches_selected">Выбрана: %s</string>
|
||||
<string name="incompatible_patches">Несумяшчальныя патчы</string>
|
||||
<string name="universal_patches">Універсальныя патчы</string>
|
||||
<string name="patch_selection_reset_toast">Выбар патчаў і параметры былі скінуты да рэкамендаваных значэнняў па змаўчанні</string>
|
||||
<string name="patch_options_reset_toast">Параметры патчаў былі скінуты</string>
|
||||
<string name="non_suggested_version_warning_title">Не рэкамендаваная версія</string>
|
||||
<string name="non_suggested_version_warning_description">"Выбраная вамі версія праграмы не супадае з рэкамендаванай версіяй.\nКалі ласка, выкарыстоўвайце рэкамендаваную версію: %s\n\nКаб усё роўна працягнуць, адключыце \"Патрабаваць рэкамендаваную версію праграмы\" у пашыраных наладах."</string>
|
||||
<string name="selection_warning_title">Спыніць выкарыстанне значэнняў па змаўчанні?</string>
|
||||
<string name="selection_warning_description">"Рэкамендуецца выкарыстоўваць выбар патчаў і параметры па змаўчанні. Іх змяненне можа прывесці да нечаканых праблем.\n\nВам трэба ўключыць \"Дазволіць змяненне выбару патчаў і параметраў\" у пашыраных наладах перад пераключэннем патчаў."</string>
|
||||
<string name="universal_patch_warning_description">"Універсальныя патчы маюць больш абагульненае выкарыстанне і працуюць не так надзейна, як патчы, арыентаваныя на пэўныя праграмы. Вы можаце сутыкнуцца з праблемамі пры іх выкарыстанні.\n\nВам трэба ўключыць \"Дазволіць выкарыстанне ўніверсальных патчаў\" у пашыраных наладах перад выкарыстаннем універсальных патчаў."</string>
|
||||
<string name="this_version">Гэтая версія</string>
|
||||
<string name="universal">Любая праграма</string>
|
||||
<string name="search_patches">Пошук патчаў</string>
|
||||
<string name="app_version_not_compatible">"Гэты патч несумяшчальны з выбранай версіяй праграмы (%1$s)\n\nЁн сумяшчальны толькі з наступнымі версіямі: %2$s"</string>
|
||||
<string name="continue_with_version">Працягнуць з гэтай версіяй?</string>
|
||||
<string name="version_not_compatible">Не ўсе патчы сумяшчальныя з гэтай версіяй (%s). Вы ўсё роўна хочаце працягнуць?</string>
|
||||
<string name="download_application">Спампаваць праграму?</string>
|
||||
<string name="app_not_installed">Выбраная вамі праграма не ўсталявана. Вы хочаце яе спампаваць?</string>
|
||||
<string name="failed_to_load_apk">Не атрымалася загрузіць APK</string>
|
||||
<string name="loading">Загрузка…</string>
|
||||
<string name="not_installed">Не ўсталявана</string>
|
||||
<string name="installed">Усталявана</string>
|
||||
<string name="app_info">Інфармацыя аб праграме</string>
|
||||
<string name="uninstall">Выдаліць</string>
|
||||
<string name="unpatch">Распатчаваць</string>
|
||||
<string name="repatch">Перапатчаваць</string>
|
||||
<string name="install_type">Тып усталёўкі</string>
|
||||
<string name="package_name">Назва пакета</string>
|
||||
<string name="original_package_name">Арыгінальная назва пакета</string>
|
||||
<string name="applied_patches">Ужытыя патчы</string>
|
||||
<string name="view_applied_patches">Праглядзець ужытыя патчы</string>
|
||||
<string name="default_install">Па змаўчанні</string>
|
||||
<string name="mount_install">Змантаваць</string>
|
||||
<string name="mounted">Змантавана</string>
|
||||
<string name="not_mounted">Не змантавана</string>
|
||||
<string name="mount">Змантаваць</string>
|
||||
<string name="unmount">Дэмантаваць</string>
|
||||
<string name="failed_to_mount">Не ўдалося змантаваць: %s</string>
|
||||
<string name="failed_to_unmount">Не ўдалося дэмантаваць: %s</string>
|
||||
<string name="unpatch_app">Выдаліць патчы з праграмы?</string>
|
||||
<string name="unpatch_description">Вы ўпэўненыя, што хочаце выдаліць патчы з гэтай праграмы?</string>
|
||||
<string name="downloader_invalid_version">Спампоўшчык не атрымаў правільную версію</string>
|
||||
<string name="downloader_app_not_found">Спампоўшчык не знайшоў праграму</string>
|
||||
<string name="downloader_error">Памылка спампоўшчыка: %s</string>
|
||||
<string name="downloader_no_plugins_installed">Не ўсталяваны спампоўшчык.</string>
|
||||
<string name="downloader_no_plugins_available">Ёсць усталяваныя спампоўшчыкі, але ніводзін з іх не з\'яўляецца давераным. Праверце свае налады.</string>
|
||||
<string name="already_patched">Ужо адпачана</string>
|
||||
<string name="patch_selector_sheet_filter_title">Фільтр</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">Сумяшчальнасць</string>
|
||||
<string name="string_option_menu_description">Больш опцый</string>
|
||||
<string name="option_preset_custom_value">Карыстальніцкае значэнне</string>
|
||||
<string name="path_selector">Выбраць са сховішча</string>
|
||||
<string name="path_selector_parent_dir">Папярэдні каталог</string>
|
||||
<string name="path_selector_dirs">Каталогі</string>
|
||||
<string name="path_selector_files">Файлы</string>
|
||||
<string name="show_password_field">Паказаць пароль</string>
|
||||
<string name="hide_password_field">Схаваць пароль</string>
|
||||
<string name="installer">Усталёўшчык</string>
|
||||
<string name="install_app">Усталяваць</string>
|
||||
<string name="install_app_success">Праграма ўсталявана</string>
|
||||
<string name="install_app_fail">Не ўдалося ўсталяваць праграму: %s</string>
|
||||
<string name="reinstall_app_fail">Не ўдалося пераўсталяваць праграму: %s</string>
|
||||
<string name="uninstall_app_fail">Не ўдалося выдаліць праграму: %s</string>
|
||||
<string name="open_app">Адкрыць</string>
|
||||
<string name="save_apk">Захаваць APK</string>
|
||||
<string name="save_apk_success">APK захаваны</string>
|
||||
<string name="sign_fail">Не ўдалося падпісаць APK: %s</string>
|
||||
<string name="save_logs">Захаваць логі</string>
|
||||
<string name="plugin_activity_dialog_body">Для працягу працы з гэтым плагінам патрабуецца ўзаемадзеянне карыстальніка.</string>
|
||||
<string name="select_install_type">Выберыце тып устаноўкі</string>
|
||||
<string name="patcher_step_group_preparing">Падрыхтоўка</string>
|
||||
<string name="patcher_step_load_patches">Загрузка патчаў</string>
|
||||
<string name="patcher_step_unpack">Чытанне файла APK</string>
|
||||
<string name="patcher_step_group_patching">Патчынг</string>
|
||||
<string name="patcher_step_group_saving">Захаванне</string>
|
||||
<string name="patcher_step_write_patched">Запіс адпачанага файла APK</string>
|
||||
<string name="patcher_step_sign_apk">Падпісанне адпачанага файла APK</string>
|
||||
<string name="patcher_notification_title">Патчынг у працэсе…</string>
|
||||
<string name="patcher_notification_text">Націсніце, каб вярнуцца да патчара</string>
|
||||
<string name="patcher_stop_confirm_title">Спыніць патчар</string>
|
||||
<string name="patcher_stop_confirm_description">Вы ўпэўненыя, што хочаце спыніць працэс патчынгу?</string>
|
||||
<string name="patcher_install_in_progress">Устаноўка ў працэсе. Калі ласка, пачакайце</string>
|
||||
<string name="execute_patches">Выканаць патчы</string>
|
||||
<string name="executing_patch">Выканаць %s</string>
|
||||
<string name="failed_to_execute_patch">Не ўдалося выканаць %s</string>
|
||||
<string name="step_completed">завершана</string>
|
||||
<string name="step_failed">не ўдалося</string>
|
||||
<string name="step_running">выконваецца</string>
|
||||
<string name="step_waiting">чаканне</string>
|
||||
<string name="expand_content">разгарнуць</string>
|
||||
<string name="collapse_content">згарнуць</string>
|
||||
<string name="drag_handle">змяніць парадак</string>
|
||||
<string name="more">Больш</string>
|
||||
<string name="less">Менш</string>
|
||||
<string name="continue_">Працягнуць</string>
|
||||
<string name="dismiss">Адхіліць</string>
|
||||
<string name="permanent_dismiss">Не паказваць гэта зноў</string>
|
||||
<string name="donate">Ахвяраваць</string>
|
||||
<string name="website">Вэб-сайт</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="contact">Кантакт</string>
|
||||
<string name="version">Версія</string>
|
||||
<string name="submit_feedback">Адправіць праблему або водгук</string>
|
||||
<string name="submit_feedback_description">Дапамажыце нам палепшыць гэтую праграму</string>
|
||||
<string name="developer_options">Параметры распрацоўшчыка</string>
|
||||
<string name="developer_options_description">Параметры для адладкі праблем</string>
|
||||
<string name="patches_update_success">Абнаўленне паспяховае</string>
|
||||
<string name="patches_update_unavailable">Абнаўлення няма</string>
|
||||
<string name="view_patches">Праглядзець патчы</string>
|
||||
<string name="patches_view_any_version">Любая версія</string>
|
||||
<string name="patches_view_any_package">Любы пакет</string>
|
||||
<string name="patches_delete_single_dialog_description">Вы ўпэўненыя, што хочаце выдаліць \"%s\"?</string>
|
||||
<string name="patches_delete_multiple_dialog_description">Вы ўпэўненыя, што хочаце выдаліць выбраныя патчы?</string>
|
||||
<string name="about_revanced_manager">Пра ReVanced Manager</string>
|
||||
<string name="revanced_manager_description">ReVanced Manager — гэта праграма для Android, якая выкарыстоўвае ReVanced Patcher для патчынгу праграм Android. Яна дазваляе спампоўваць і патчыць праграмы з дапамогай карыстальніцкіх патчаў, а таксама кіраваць працэсам патчынгу.</string>
|
||||
<string name="developer_options_taps">засталося %d націскаў</string>
|
||||
<string name="developer_options_enabled">Параметры распрацоўшчыка ўключаны</string>
|
||||
<string name="developer_options_already_enabled">Параметры распрацоўшчыка ўжо ўключаны</string>
|
||||
<string name="update_available">Даступна абнаўленне</string>
|
||||
<string name="current_version">Бягучая версія: %s</string>
|
||||
<string name="new_version">Новая версія: %s</string>
|
||||
<string name="ready_to_install_update">Гатова да ўстаноўкі абнаўлення</string>
|
||||
<string name="update_completed">Абнаўленне ўсталявана</string>
|
||||
<string name="install_update_manager_failed">Не ўдалося ўсталяваць абнаўленне</string>
|
||||
<string name="manual_update_check">Праверыць наяўнасць абнаўленняў</string>
|
||||
<string name="manual_update_check_description">Праверыць абнаўленні ўручную</string>
|
||||
<string name="update_checking_manager">Праверыць наяўнасць абнаўленняў пры запуску</string>
|
||||
<string name="update_checking_manager_description">Праверыць наяўнасць новых версій ReVanced Manager пры запуску праграмы</string>
|
||||
<string name="manager_prereleases">Выкарыстоўваць папярэднія версіі</string>
|
||||
<string name="manager_prereleases_description">Выкарыстоўваць папярэднія версіі ReVanced Manager</string>
|
||||
<string name="changelog">Праглядзець змены</string>
|
||||
<string name="changelog_loading">Загрузка змяненняў</string>
|
||||
<string name="changelog_download_fail">Не ўдалося спампаваць змены: %s</string>
|
||||
<string name="changelog_description">Праверце апошнія змены ў гэтым абнаўленні</string>
|
||||
<string name="battery_optimization_notification">Аптымізацыі батарэі павінны быць адключаны, каб ReVanced Manager правільна працаваў у фонавым рэжыме. Націсніце тут, каб адключыць аптымізацыі.</string>
|
||||
<string name="installing_manager_update">Устаноўка абнаўлення…</string>
|
||||
<string name="downloading_manager_update">Спампоўка абнаўлення…</string>
|
||||
<string name="download_manager_failed">Не ўдалося спампаваць абнаўленне: %s</string>
|
||||
<string name="cancel">Адмена</string>
|
||||
<string name="save">Захаваць</string>
|
||||
<string name="save_with_count">Захаваць (%1$s)</string>
|
||||
<string name="update">Абнавіць</string>
|
||||
<string name="empty">Пуста</string>
|
||||
<string name="installing_message">"Націсніце на <b>Абнавіць</b>, калі будзе прапанавана.
|
||||
ReVanced Manager закрыецца падчас абнаўлення."</string>
|
||||
<string name="no_changelogs_found">Зменаў не знойдзена</string>
|
||||
<string name="just_now">Толькі што</string>
|
||||
<string name="minutes_ago">%s хв. таму</string>
|
||||
<string name="hours_ago">%s гадз. таму</string>
|
||||
<string name="days_ago">%s дн. таму</string>
|
||||
<string name="invalid_date">Недапушчальная дата</string>
|
||||
<string name="disable_battery_optimization">Адключыць аптымізацыю батарэі</string>
|
||||
<string name="input_dialog_value_invalid">Недапушчальнае значэнне</string>
|
||||
<string name="option_required">Гэты параметр абавязковы</string>
|
||||
<string name="required_options_screen">Абавязковыя параметры</string>
|
||||
<string name="failed_to_check_updates">Не ўдалося праверыць наяўнасць абнаўленняў: %s</string>
|
||||
<string name="no_update_available">Абнаўлення няма</string>
|
||||
<string name="update_check">Праверка наяўнасці абнаўленняў…</string>
|
||||
<string name="dismiss_temporary">Не зараз</string>
|
||||
<string name="update_available_dialog_description">Даступна новая версія ReVanced Manager (%s).</string>
|
||||
<string name="failed_to_download_update">Не ўдалося спампаваць абнаўленне: %s</string>
|
||||
<string name="download">Спампаваць</string>
|
||||
<string name="download_confirmation_metered">"Вы зараз карыстаецеся тарыфным злучэннем, і можа спаганяцца плата за перадачу дадзеных ад вашага правайдэра.
|
||||
|
||||
Вы ўсё яшчэ хочаце працягнуць?"</string>
|
||||
<string name="download_update_confirmation">Спампаваць абнаўленне?</string>
|
||||
<string name="no_contributors_found">Удзельнікаў не знойдзена</string>
|
||||
<string name="select">Выбраць</string>
|
||||
<string name="select_deselect_all">Выбраць або адмяніць выбар усяго</string>
|
||||
<string name="select_patches_type_dialog_description">Дадаць новыя патчы з URL або лакальных файлаў</string>
|
||||
<string name="local_patches_description">Дадаць патчы з лакальнага сховішча.</string>
|
||||
<string name="remote_patches_description">Дадаць патчы з URL. Патчы могуць аўтаматычна абнаўляцца.</string>
|
||||
<string name="recommended">Рэкамендавана</string>
|
||||
<string name="installation_failed_dialog_title">Не ўдалося ўсталяваць</string>
|
||||
<string name="installation_cancelled_dialog_title">Устаноўка адменена</string>
|
||||
<string name="installation_blocked_dialog_title">Устаноўка заблакавана</string>
|
||||
<string name="installation_conflict_dialog_title">Канфлікт устаноўкі</string>
|
||||
<string name="installation_incompatible_dialog_title">Несумяшчальная ўстаноўка</string>
|
||||
<string name="installation_invalid_dialog_title">Несапраўдная ўстаноўка</string>
|
||||
<string name="installation_storage_issue_dialog_title">Недастаткова месца для захоўвання</string>
|
||||
<string name="installation_timeout_dialog_title">Час устаноўкі скончыўся</string>
|
||||
<string name="installation_failed_description">Устаноўка не ўдалася па невядомай прычыне. Паспрабаваць яшчэ раз?</string>
|
||||
<string name="installation_aborted_description">Устаноўка была адменена ўручную. Паспрабаваць яшчэ раз?</string>
|
||||
<string name="installation_blocked_description">Устаноўка была заблакавана. Праверце налады бяспекі прылады і паспрабуйце яшчэ раз.</string>
|
||||
<string name="installation_conflict_description">Устаноўка была прадухілена існуючай устаноўкай праграмы. Выдаліць усталяваную праграму і паспрабаваць яшчэ раз?</string>
|
||||
<string name="installation_incompatible_description">Праграма несумяшчальная з гэтай прыладай. Выкарыстоўвайце APK, які сумяшчальны з гэтай прыладай, і паспрабуйце яшчоў раз.</string>
|
||||
<string name="installation_invalid_description">Праграма несапраўдная. Выдаліць праграму і паспрабаваць яшчэ раз?</string>
|
||||
<string name="installation_storage_issue_description">Праграму не ўдалося ўсталяваць з-за недастатковага месца для захоўвання. Вызваліце месца і паспрабуйце яшчэ раз.</string>
|
||||
<string name="installation_timeout_description">Устаноўка заняла занадта шмат часу. Паспрабаваць яшчэ раз?</string>
|
||||
<string name="reinstall">Пераўсталяваць</string>
|
||||
<string name="show">Паказаць</string>
|
||||
<string name="debugging">Адладка</string>
|
||||
<string name="about_device">Пра прыладу</string>
|
||||
<string name="enter_url">Увядзіце URL</string>
|
||||
<string name="next">Далей</string>
|
||||
<string name="auto_update">Аўтаматычнае абнаўленне</string>
|
||||
<string name="add_patches">Дадаць патчы</string>
|
||||
<string name="auto_update_description">Аўтаматычна абнаўляць, калі даступная новая версія</string>
|
||||
<string name="patches_prereleases">Выкарыстоўваць папярэднія версіі</string>
|
||||
<string name="patches_prereleases_description">Выкарыстоўваць папярэднія версіі %s</string>
|
||||
<string name="patches_url">URL патчаў</string>
|
||||
<string name="incompatible_patches_dialog">"Гэтыя патчы несумяшчальныя з абранай версіяй праграмы (%1$s).
|
||||
|
||||
Націсніце на патчы, каб убачыць больш падрабязную інфармацыю."</string>
|
||||
<string name="incompatible_patch">Несумяшчальны патч</string>
|
||||
<string name="any_version">Любы</string>
|
||||
<string name="never_show_again">Ніколі не паказваць зноў</string>
|
||||
<string name="show_manager_update_dialog_on_launch">Паказваць паведамленне аб абнаўленні пры запуску</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">Паказваць усплывальнае апавяшчэнне кожны раз, калі пры запуску даступна новае абнаўленне</string>
|
||||
<string name="failed_to_import_keystore">Не ўдалося імпартаваць сховішча ключоў</string>
|
||||
<string name="export">Экспарт</string>
|
||||
<string name="confirm">Пацвердзіць</string>
|
||||
</resources>
|
||||
@@ -1,460 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">Тест на пачъра</string>
|
||||
<string name="patches">Пачове</string>
|
||||
<string name="cli">CLI</string>
|
||||
<string name="manager">Мениджър</string>
|
||||
<string name="plugin_host_permission_label">Хост на плъгини на ReVanced Manager</string>
|
||||
<string name="plugin_host_permission_description">Използва се за контролиране на достъпа до плъгини на ReVanced Manager. Само ReVanced Manager притежава това.</string>
|
||||
<string name="toast_copied_to_clipboard">Копирано!</string>
|
||||
<string name="copy_to_clipboard">Копирай в клипборда</string>
|
||||
<string name="dashboard">Табло</string>
|
||||
<string name="settings">Настройки</string>
|
||||
<string name="select_app">Изберете приложение</string>
|
||||
<string name="patches_count_selected">%1$d/%2$d избрани</string>
|
||||
<string name="new_downloader_plugins_notification">Налични са нови плъгини за изтегляне. Кликнете тук, за да ги конфигурирате.</string>
|
||||
<string name="unsupported_architecture_warning">Закърпването на тази архитектура на устройството не се поддържа и най-вероятно ще се провали.</string>
|
||||
<string name="import_">Импортиране</string>
|
||||
<string name="import_patches">Импортиране на пачове</string>
|
||||
<string name="file_field_set">Избрано</string>
|
||||
<string name="file_field_not_set">Не е избрано</string>
|
||||
<string name="field_not_set">Не е зададено</string>
|
||||
<string name="patches_missing">Липсва</string>
|
||||
<string name="patches_error">Грешка</string>
|
||||
<string name="patches_error_description">Пачовете не можаха да бъдат заредени. Кликнете, за да видите грешката</string>
|
||||
<string name="patches_not_downloaded">Пачовете не са изтеглени. Кликнете тук, за да ги изтеглите</string>
|
||||
<string name="patches_name_default">Пачове</string>
|
||||
<string name="patches_name_fallback">Без име</string>
|
||||
<string name="android_11_bug_dialog_title">Бъг в Android 11</string>
|
||||
<string name="android_11_bug_dialog_description">Разрешението за инсталиране на приложението трябва да бъде предоставено предварително, за да се избегне бъг в системата на Android 11, който ще повлияе негативно на потребителското изживяване.</string>
|
||||
<string name="no_network_toast">Няма налична интернет връзка</string>
|
||||
<string name="selected_app_meta_any_version">Всяка налична версия</string>
|
||||
<string name="app_source_dialog_title">Изберете източник</string>
|
||||
<string name="app_source_dialog_option_auto">Автоматично</string>
|
||||
<string name="app_source_dialog_option_auto_description">Използвайте всички налични програми за изтегляне, за да изтеглите приложението</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">Няма налични плъгини</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">Монтираните приложения не могат да бъдат закърпвани отново без root достъп</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">Версия %s не съответства на предложената версия</string>
|
||||
<string name="patch_item_description">Започнете закърпване на приложението</string>
|
||||
<string name="patch_selector_item">Изберете пачове</string>
|
||||
<string name="patch_selector_item_description">%d избрани пачове</string>
|
||||
<string name="no_patches_selected">Няма избрани пачове</string>
|
||||
<string name="network_unavailable_warning">Устройството ви не е свързано с интернет. Изтеглянето ще се провали по-късно.</string>
|
||||
<string name="network_metered_warning">В момента сте на лимитирана връзка. Могат да бъдат приложени такси за данни от вашия доставчик на услуги.</string>
|
||||
<string name="apk_source_selector_item">Изберете източник на APK</string>
|
||||
<string name="apk_source_auto">Използване на всички APK програми за изтегляне</string>
|
||||
<string name="apk_source_downloader">Използване на %s</string>
|
||||
<string name="apk_source_installed">Използване на инсталиран APK</string>
|
||||
<string name="apk_source_local">Използване на локален APK файл</string>
|
||||
<string name="legacy_import_failed">Не може да се импортират стари настройки</string>
|
||||
<string name="auto_updates_dialog_title">Конфигуриране на актуализации</string>
|
||||
<string name="auto_updates_dialog_description">Искате ли ReVanced Manager периодично да проверява за актуализации за следните компоненти?</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">ReVanced Пачове</string>
|
||||
<string name="auto_updates_dialog_note">Тези настройки могат да бъдат променени по-късно.</string>
|
||||
<string name="general">Общи</string>
|
||||
<string name="general_description">Език, тема, динамичен цвят</string>
|
||||
<string name="updates">Актуализации</string>
|
||||
<string name="updates_description">Проверете за актуализации и прегледайте дневниците на промените</string>
|
||||
<string name="downloads">Изтегляния</string>
|
||||
<string name="downloads_description">Плъгини за изтегляне и изтеглени приложения</string>
|
||||
<string name="import_export">Импортиране & експортиране</string>
|
||||
<string name="import_export_description">Keystore, опции и избор на пачове</string>
|
||||
<string name="advanced">Разширени</string>
|
||||
<string name="advanced_description">API URL, ограничение на паметта, отстраняване на грешки</string>
|
||||
<string name="about">Относно</string>
|
||||
<string name="opensource_licenses">Лицензи за отворен код</string>
|
||||
<string name="opensource_licenses_description">Прегледайте всички библиотеки, използвани за създаването на това приложение</string>
|
||||
<string name="contributors">Сътрудници</string>
|
||||
<string name="contributors_description">Прегледайте сътрудниците на ReVanced</string>
|
||||
<string name="dynamic_color">Динамичен цвят</string>
|
||||
<string name="dynamic_color_description">Адаптирайте цветовете към тапета</string>
|
||||
<string name="pure_black_theme">Чисто черна тема</string>
|
||||
<string name="pure_black_theme_description">Използвайте чисто черни фонове за тъмна тема</string>
|
||||
<string name="theme">Тема</string>
|
||||
<string name="theme_description">Изберете между светла или тъмна тема</string>
|
||||
<string name="language">Език</string>
|
||||
<string name="language_description">Изберете езика на показване на приложението</string>
|
||||
<string name="language_system_default">Системни по подразбиране</string>
|
||||
<string name="safeguards">Предпазни мерки</string>
|
||||
<string name="patch_compat_check">Деактивиране на проверката за съвместимост на версиите</string>
|
||||
<string name="patch_compat_check_description">Не ограничавайте пачовете до съвместими версии на приложения</string>
|
||||
<string name="patch_compat_check_confirmation">"Избирането на несъвместими пачове може да доведе до счупено приложение.
|
||||
|
||||
Искате ли все пак да продължите?"</string>
|
||||
<string name="suggested_version_safeguard">Изискване на предложена версия на приложението</string>
|
||||
<string name="suggested_version_safeguard_description">Наложете избора на предложената версия на приложението</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"Избирането на приложение, което не е предложената версия, може да причини неочаквани проблеми.
|
||||
|
||||
Искате ли все пак да продължите?"</string>
|
||||
<string name="patch_selection_safeguard">Разрешаване на промяна на избора и опциите за пачове</string>
|
||||
<string name="patch_selection_safeguard_description">Не предотвратявайте избирането или премахването на избора на пачове и персонализирането на опциите</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"Промяната на избора на пачове може да причини неочаквани проблеми.
|
||||
|
||||
Разреши ли все пак?"</string>
|
||||
<string name="universal_patches_safeguard">Разрешаване използването на универсални пачове</string>
|
||||
<string name="universal_patches_safeguard_description">Не предотвратявайте използването на универсални пачове</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"Универсалните пачове не са толкова добре тествани, колкото тези, които са насочени към конкретни приложения.
|
||||
|
||||
Разреши ли все пак?"</string>
|
||||
<string name="import_keystore">Импортиране на хранилище за ключове</string>
|
||||
<string name="import_keystore_description">Импортиране на персонализирано хранилище за ключове</string>
|
||||
<string name="import_keystore_dialog_title">Въведете идентификационни данни за хранилището за ключове</string>
|
||||
<string name="import_keystore_dialog_description">Ще трябва да въведете идентификационните данни на хранилището за ключове, за да го импортирате.</string>
|
||||
<string name="import_keystore_dialog_alias_field">Потребителско име (Псевдоним)</string>
|
||||
<string name="import_keystore_dialog_password_field">Парола</string>
|
||||
<string name="import_keystore_dialog_button">Импортиране</string>
|
||||
<string name="import_keystore_wrong_credentials">Грешни идентификационни данни за хранилището за ключове</string>
|
||||
<string name="import_keystore_success">Импортирано хранилище за ключове</string>
|
||||
<string name="export_keystore">Експортиране на хранилище за ключове</string>
|
||||
<string name="export_keystore_description">Експортиране на текущото хранилище за ключове</string>
|
||||
<string name="export_keystore_unavailable">Няма хранилище за ключове за експортиране</string>
|
||||
<string name="export_keystore_success">Експортирано хранилище за ключове</string>
|
||||
<string name="regenerate_keystore">Генериране на ново хранилище за ключове</string>
|
||||
<string name="regenerate_keystore_description">Генериране на ново хранилище за ключове</string>
|
||||
<string name="regenerate_keystore_dialog_description">"Предстои ви да генерирате наново хранилището за ключове, което мениджърът ще използва по време на процеса на закърпване.
|
||||
|
||||
Няма да можете да актуализирате предишно инсталираните приложения от този източник."</string>
|
||||
<string name="regenerate_keystore_success">Хранилището за ключове е успешно заменено</string>
|
||||
<string name="import_patch_selection">Импортиране на избор на пачове</string>
|
||||
<string name="import_patch_selection_description">Импортиране на избор на пачове от JSON файл</string>
|
||||
<string name="import_patch_selection_fail">Не може да се импортира изборът на пачове: %s</string>
|
||||
<string name="import_patch_selection_success">Импортиран избор на пачове</string>
|
||||
<string name="export_patch_selection">Експортиране на избор на пачове</string>
|
||||
<string name="export_patch_selection_description">Експортиране на избор на пачове в JSON файл</string>
|
||||
<string name="export_patch_selection_fail">Не може да се експортира изборът на пачове: %s</string>
|
||||
<string name="export_patch_selection_success">Експортиран избор на пачове</string>
|
||||
<string name="reset_patch_selection">Нулиране на избора на пачове</string>
|
||||
<string name="reset_patch_selection_description">Нулиране на запазения избор на пачове</string>
|
||||
<string name="reset_patch_options">Нулиране на опциите за пачове</string>
|
||||
<string name="reset_patch_options_description">Нулиране на запазените опции за пачове</string>
|
||||
<string name="reset_patch_selection_success">Изборът на пачове е нулиран</string>
|
||||
<string name="patch_selection_reset_all">Нулиране на избора на пачове глобално</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">Предстои ви да нулирате всички избрани пачове. Ще трябва ръчно да изберете всеки пач отново.</string>
|
||||
<string name="patch_selection_reset_all_description">Нулира всички избрани пачове</string>
|
||||
<string name="patch_selection_reset_package">Нулиране на избора на пачове за приложение</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">Предстои ви да нулирате избора на пачове за приложението \"%s\". Ще трябва ръчно да изберете всеки пач отново.</string>
|
||||
<string name="patch_selection_reset_package_description">Нулира избора на пачове за едно приложение</string>
|
||||
<string name="patch_selection_reset_patches">Нулиране на избора на пачове (единично)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">Предстои да нулирате избора на пачове за \"%s\". Ще трябва да изберете ръчно всеки пач отново.</string>
|
||||
<string name="patch_selection_reset_patches_description">Нулира избора на пачове за определена колекция от пачове</string>
|
||||
<string name="patch_options_reset_package">Нулиране на опциите за пачове за приложението</string>
|
||||
<string name="patch_options_reset_package_dialog_description">Предстои да нулирате опциите за пачове за приложението \"%s\". Ще трябва да приложите отново всяка опция.</string>
|
||||
<string name="patch_options_reset_package_description">Нулира опциите за пачове за едно приложение</string>
|
||||
<string name="patch_options_reset_patches">Нулиране на опциите за пачове (единично)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">Предстои да нулирате опциите за пачове за \"%s\". Ще трябва да приложите отново всяка опция.</string>
|
||||
<string name="patch_options_reset_patches_description">Нулира опциите за пачове за определена колекция от пачове</string>
|
||||
<string name="patch_options_reset_all">Нулиране на опциите за пачове глобално</string>
|
||||
<string name="patch_options_reset_all_dialog_description">Предстои да нулирате всички опции за пачове. Ще трябва да приложите отново всяка опция.</string>
|
||||
<string name="patch_options_reset_all_description">Нулира всички опции за пачове</string>
|
||||
<string name="downloader_plugins">Плъгини</string>
|
||||
<string name="downloader_plugin_state_trusted">Доверени</string>
|
||||
<string name="downloader_plugin_state_failed">Неуспешно зареждане. Натиснете за повече подробности</string>
|
||||
<string name="downloader_plugin_state_untrusted">Ненадеждни</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">Доверявате ли се на плъгина?</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">Отмени доверието?</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">Продължаването ще позволи на този плъгин да работи на вашата система.\n\nАктивирайте този плъгин само ако му вярвате. Плъгините могат да изпълняват произволен код и да компрометират вашето устройство.</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">Подпис:\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">Плъгин:\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">Изтриване на избраните приложения</string>
|
||||
<string name="downloader_plugin_delete_apps_description">Сигурни ли сте, че искате да изтриете избраните приложения?</string>
|
||||
<string name="downloader_settings_no_apps">Няма намерени изтеглени приложения.</string>
|
||||
<string name="search_apps">Търсене на приложения…</string>
|
||||
<string name="loading_body">Зареждане…</string>
|
||||
<string name="downloading_patches">Изтегляне на пачове…</string>
|
||||
<string name="options">Опции</string>
|
||||
<string name="ok">ОК</string>
|
||||
<string name="yes">Да</string>
|
||||
<string name="no">Не</string>
|
||||
<string name="edit">Редактиране</string>
|
||||
<string name="dialog_input_placeholder">Стойност</string>
|
||||
<string name="reset">Нулиране</string>
|
||||
<string name="share">Споделяне</string>
|
||||
<string name="patch">Пач</string>
|
||||
<string name="select_from_storage">Избор от хранилището</string>
|
||||
<string name="select_from_storage_description">Изберете APK файл от хранилището с помощта на инструмент за избор на файлове</string>
|
||||
<string name="suggested_version_info">Препоръчителна версия: %s</string>
|
||||
<string name="type_anything">Напишете нещо, за да продължите</string>
|
||||
<string name="search">Търсене на пачове…</string>
|
||||
<string name="apply">Приложи</string>
|
||||
<string name="help">Помощ</string>
|
||||
<string name="back">Назад</string>
|
||||
<string name="warning">Предупреждение</string>
|
||||
<string name="add">Добавяне</string>
|
||||
<string name="close">Затвори</string>
|
||||
<string name="clear">Изчистване</string>
|
||||
<string name="system">Система</string>
|
||||
<string name="light">Светъл</string>
|
||||
<string name="dark">Тъмен</string>
|
||||
<string name="appearance">Външен вид</string>
|
||||
<string name="networking">Мрежа</string>
|
||||
<string name="allow_metered_networks">Разрешаване на тарифирани мрежи</string>
|
||||
<string name="allow_metered_networks_description">Разрешава автоматични актуализации през тарифирани мрежи.\n Приложението може все още да предупреждава за тарифирани мрежи при ръчни операции.</string>
|
||||
<string name="downloaded_apps">Изтеглени приложения</string>
|
||||
<string name="process_runtime">Стартиране на Patcher в друг процес (експериментално)</string>
|
||||
<string name="process_runtime_description">Това е по-бързо и позволява на Patcher да използва повече памет</string>
|
||||
<string name="process_runtime_memory_limit">Ограничение на паметта за процеса на Patcher</string>
|
||||
<string name="process_runtime_memory_limit_description">Максималното количество памет, което процесът на Patcher може да използва (в мегабайти)</string>
|
||||
<string name="debug_logs_export">Експортиране на регистрационни файлове за отстраняване на грешки</string>
|
||||
<string name="debug_logs_export_read_failed">Неуспешно четене на регистрационни файлове (код за изход %d)</string>
|
||||
<string name="debug_logs_export_failed">Неуспешно експортиране на регистрационни файлове</string>
|
||||
<string name="debug_logs_export_success">Експортирани регистрационни файлове</string>
|
||||
<string name="api_url">API URL</string>
|
||||
<string name="api_url_description">API, използван за изтегляне на необходимите файлове</string>
|
||||
<string name="api_url_dialog_title">Промяна на API URL</string>
|
||||
<string name="api_url_dialog_description">Променете API URL на ReVanced Manager. ReVanced Manager използва API за изтегляне на пачове и актуализации.</string>
|
||||
<string name="api_url_dialog_warning">ReVanced Manager се свързва с API, за да изтегля пачове и актуализации. Уверете се, че му се доверявате.</string>
|
||||
<string name="api_url_dialog_save">Задай</string>
|
||||
<string name="api_url_dialog_reset">Нулиране на API URL</string>
|
||||
<string name="device">Устройство</string>
|
||||
<string name="device_android_version">Версия на Android</string>
|
||||
<string name="device_model">Модел</string>
|
||||
<string name="device_architectures">CPU архитектури</string>
|
||||
<string name="device_memory_limit">Ограничения на паметта</string>
|
||||
<string name="device_memory_limit_format">%1$dMB (Нормална) - %2$dMB (Голяма)</string>
|
||||
<string name="patches_force_download">Принудително изтегляне на всички корекции</string>
|
||||
<string name="patches_reset">Нулиране на корекциите</string>
|
||||
<string name="patching">Коригиране</string>
|
||||
<string name="signing">Подписване</string>
|
||||
<string name="storage">Хранилище</string>
|
||||
<string name="no_patch_found">Не може да се намери корекция. Проверете вашите корекции</string>
|
||||
<string name="tab_apps">Приложения</string>
|
||||
<string name="tab_patches">Корекции</string>
|
||||
<string name="delete">Изтриване</string>
|
||||
<string name="refresh">Опресняване</string>
|
||||
<string name="continue_anyways">Продължи така или иначе</string>
|
||||
<string name="download_another_version">Изтегляне на друга версия</string>
|
||||
<string name="download_app">Изтегляне на приложение</string>
|
||||
<string name="download_apk">Изтегляне на APK файл</string>
|
||||
<string name="patches_download_fail">Неуспешно изтегляне на корекции: %s</string>
|
||||
<string name="patches_replace_fail">Неуспешно импортиране на корекции: %s</string>
|
||||
<string name="no_patched_apps_found">Не са намерени коригирани приложения</string>
|
||||
<string name="tap_on_patches">Докоснете корекциите, за да получите повече информация за тях</string>
|
||||
<string name="patches_selected">%s избрани</string>
|
||||
<string name="incompatible_patches">Несъвместими корекции</string>
|
||||
<string name="universal_patches">Универсални корекции</string>
|
||||
<string name="patch_selection_reset_toast">Изборът и опциите на корекциите са нулирани до препоръчителните по подразбиране</string>
|
||||
<string name="patch_options_reset_toast">Опциите за корекция са нулирани</string>
|
||||
<string name="non_suggested_version_warning_title">Непрепоръчителна версия</string>
|
||||
<string name="non_suggested_version_warning_description">"Избраната от вас версия на приложението не съответства на предложената версия.\nМоля, използвайте предложената версия: %s\n\nЗа да продължите въпреки това, деактивирайте „Изискване на предложена версия на приложението“ в разширените настройки."</string>
|
||||
<string name="selection_warning_title">Спиране на използването по подразбиране?</string>
|
||||
<string name="selection_warning_description">"Препоръчително е да използвате избора и опциите на корекциите по подразбиране. Промяната им може да доведе до неочаквани проблеми.\n\nТрябва да включите „Разрешаване на промяна на избора и опциите на корекциите“ в разширените настройки, преди да превключвате корекции."</string>
|
||||
<string name="universal_patch_warning_description">"Универсалните корекции имат по-обща употреба и не работят толкова надеждно, колкото корекциите, които са насочени към конкретни приложения. Може да срещнете проблеми, докато ги използвате.\n\nТрябва да включите „Разрешаване на използване на универсални корекции“ в разширените настройки, преди да използвате универсални корекции."</string>
|
||||
<string name="this_version">Тази версия</string>
|
||||
<string name="universal">Всяко приложение</string>
|
||||
<string name="search_patches">Търсене на корекции</string>
|
||||
<string name="app_version_not_compatible">"Тази корекция не е съвместима с избраната версия на приложението (%1$s)\n\nТя е съвместима само със следните версии: %2$s"</string>
|
||||
<string name="continue_with_version">Продължаване с тази версия?</string>
|
||||
<string name="version_not_compatible">Не всички корекции са съвместими с тази версия (%s). Искате ли да продължите въпреки това?</string>
|
||||
<string name="download_application">Изтегляне на приложение?</string>
|
||||
<string name="app_not_installed">Избраното приложение не е инсталирано. Искате ли да го изтеглите?</string>
|
||||
<string name="failed_to_load_apk">Неуспешно зареждане на APK</string>
|
||||
<string name="loading">Зареждане…</string>
|
||||
<string name="not_installed">Не е инсталирано</string>
|
||||
<string name="installed">Инсталирано</string>
|
||||
<string name="app_info">Информация за приложението</string>
|
||||
<string name="uninstall">Деинсталиране</string>
|
||||
<string name="unpatch">Премахване на корекция</string>
|
||||
<string name="repatch">Повторно коригиране</string>
|
||||
<string name="install_type">Устройство</string>
|
||||
<string name="package_name">Име на пакета</string>
|
||||
<string name="original_package_name">Оригинално име на пакета</string>
|
||||
<string name="applied_patches">Приложени пачове</string>
|
||||
<string name="view_applied_patches">Преглед на приложените пачове</string>
|
||||
<string name="default_install">По подразбиране</string>
|
||||
<string name="mount_install">Монтиране</string>
|
||||
<string name="mounted">Монтирано</string>
|
||||
<string name="not_mounted">Не е монтирано</string>
|
||||
<string name="mount">Монтиране</string>
|
||||
<string name="unmount">Демонтиране</string>
|
||||
<string name="failed_to_mount">Неуспешно монтиране: %s</string>
|
||||
<string name="failed_to_unmount">Неуспешно демонтиране: %s</string>
|
||||
<string name="unpatch_app">Премахване на пачове от приложението?</string>
|
||||
<string name="unpatch_description">Сигурни ли сте, че искате да премахнете пачовете от това приложение?</string>
|
||||
<string name="downloader_invalid_version">Изтеглящият инструмент не изтегли правилната версия</string>
|
||||
<string name="downloader_app_not_found">Изтеглящият инструмент не намери приложението</string>
|
||||
<string name="downloader_error">Грешка в изтеглящия инструмент: %s</string>
|
||||
<string name="downloader_no_plugins_installed">Няма инсталиран изтеглящ инструмент.</string>
|
||||
<string name="downloader_no_plugins_available">Има инсталирани изтеглящи инструменти, но никой не е доверен. Проверете настройките си.</string>
|
||||
<string name="already_patched">Вече е пачнато</string>
|
||||
<string name="patch_selector_sheet_filter_title">Филтър</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">Съвместимост</string>
|
||||
<string name="string_option_menu_description">Още опции</string>
|
||||
<string name="option_preset_custom_value">Персонализирана стойност</string>
|
||||
<string name="path_selector">Избор от хранилището</string>
|
||||
<string name="path_selector_parent_dir">Предишна директория</string>
|
||||
<string name="path_selector_dirs">Директории</string>
|
||||
<string name="path_selector_files">Файлове</string>
|
||||
<string name="show_password_field">Показване на паролата</string>
|
||||
<string name="hide_password_field">Скриване на паролата</string>
|
||||
<string name="installer">Инсталатор</string>
|
||||
<string name="install_app">Инсталиране</string>
|
||||
<string name="install_app_success">Приложението е инсталирано</string>
|
||||
<string name="install_app_fail">Неуспешно инсталиране на приложението: %s</string>
|
||||
<string name="reinstall_app_fail">Неуспешно преинсталиране на приложението: %s</string>
|
||||
<string name="uninstall_app_fail">Неуспешно деинсталиране на приложението: %s</string>
|
||||
<string name="open_app">Отваряне</string>
|
||||
<string name="save_apk">Запазване на APK</string>
|
||||
<string name="save_apk_success">APK файлът е запазен</string>
|
||||
<string name="sign_fail">Неуспешно подписване на APK: %s</string>
|
||||
<string name="save_logs">Запазване на логове</string>
|
||||
<string name="plugin_activity_dialog_body">Изисква се взаимодействие с потребителя, за да продължите с този плъгин.</string>
|
||||
<string name="select_install_type">Изберете тип инсталация</string>
|
||||
<string name="patcher_step_group_preparing">Подготовка</string>
|
||||
<string name="patcher_step_load_patches">Зареждане на пачове</string>
|
||||
<string name="patcher_step_unpack">Четене на APK файл</string>
|
||||
<string name="patcher_step_group_patching">Пачване</string>
|
||||
<string name="patcher_step_group_saving">Запазване</string>
|
||||
<string name="patcher_step_write_patched">Запис на пачнатия APK файл</string>
|
||||
<string name="patcher_step_sign_apk">Подписване на пачнатия APK файл</string>
|
||||
<string name="patcher_notification_title">Пачването е в ход…</string>
|
||||
<string name="patcher_notification_text">Докоснете, за да се върнете към пачера</string>
|
||||
<string name="patcher_stop_confirm_title">Спиране на пачера</string>
|
||||
<string name="patcher_stop_confirm_description">Сигурни ли сте, че искате да спрете процеса на пачване?</string>
|
||||
<string name="patcher_install_in_progress">Инсталацията е в ход. Моля, изчакайте</string>
|
||||
<string name="execute_patches">Изпълнение на пачове</string>
|
||||
<string name="executing_patch">Изпълняване на %s</string>
|
||||
<string name="failed_to_execute_patch">Неуспешно изпълнение на %s</string>
|
||||
<string name="step_completed">завършено</string>
|
||||
<string name="step_failed">неуспешно</string>
|
||||
<string name="step_running">изпълнява се</string>
|
||||
<string name="step_waiting">изчаква се</string>
|
||||
<string name="expand_content">разгъване</string>
|
||||
<string name="collapse_content">свиване</string>
|
||||
<string name="drag_handle">пренареждане</string>
|
||||
<string name="more">Още</string>
|
||||
<string name="less">По-малко</string>
|
||||
<string name="continue_">Продължи</string>
|
||||
<string name="dismiss">Отхвърляне</string>
|
||||
<string name="permanent_dismiss">Не показвай това отново</string>
|
||||
<string name="donate">Дари</string>
|
||||
<string name="website">Уебсайт</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="contact">Контакт</string>
|
||||
<string name="version">Версия</string>
|
||||
<string name="submit_feedback">Изпратете проблем или обратна връзка</string>
|
||||
<string name="submit_feedback_description">Помогнете ни да подобрим това приложение</string>
|
||||
<string name="developer_options">Опции за разработчици</string>
|
||||
<string name="developer_options_description">Опции за отстраняване на грешки</string>
|
||||
<string name="patches_update_success">Актуализацията е успешна</string>
|
||||
<string name="patches_update_unavailable">Няма налична актуализация</string>
|
||||
<string name="view_patches">Преглед на пачове</string>
|
||||
<string name="patches_view_any_version">Всяка версия</string>
|
||||
<string name="patches_view_any_package">Всеки пакет</string>
|
||||
<string name="patches_delete_single_dialog_description">Сигурни ли сте, че искате да изтриете \"%s\"?</string>
|
||||
<string name="patches_delete_multiple_dialog_description">Сигурни ли сте, че искате да изтриете избраните пачове?</string>
|
||||
<string name="about_revanced_manager">Относно ReVanced Manager</string>
|
||||
<string name="revanced_manager_description">ReVanced Manager е приложение за Android, което използва ReVanced Patcher за пачване на Android приложения. То ви позволява да изтегляте и пачвате приложения с персонализирани пачове и да управлявате процеса на пачване.</string>
|
||||
<string name="developer_options_taps">%d докосвания остават</string>
|
||||
<string name="developer_options_enabled">Опциите за разработчици са активирани</string>
|
||||
<string name="developer_options_already_enabled">Опциите за разработчици вече са активирани</string>
|
||||
<string name="update_available">Налична е актуализация</string>
|
||||
<string name="current_version">Текуща версия: %s</string>
|
||||
<string name="new_version">Нова версия: %s</string>
|
||||
<string name="ready_to_install_update">Готово за инсталиране на актуализация</string>
|
||||
<string name="update_completed">Актуализацията е инсталирана</string>
|
||||
<string name="install_update_manager_failed">Неуспешно инсталиране на актуализацията</string>
|
||||
<string name="manual_update_check">Проверка за актуализации</string>
|
||||
<string name="manual_update_check_description">Ръчна проверка за актуализации</string>
|
||||
<string name="update_checking_manager">Проверка за актуализации при стартиране</string>
|
||||
<string name="update_checking_manager_description">Проверявайте за нови версии на ReVanced Manager при стартиране на приложението</string>
|
||||
<string name="manager_prereleases">Използвайте предварителни версии</string>
|
||||
<string name="manager_prereleases_description">Използвайте предварителни версии на ReVanced Manager</string>
|
||||
<string name="changelog">Преглед на дневниците с промени</string>
|
||||
<string name="changelog_loading">Зареждане на дневник с промени</string>
|
||||
<string name="changelog_download_fail">Неуспешно изтегляне на дневника с промени: %s</string>
|
||||
<string name="changelog_description">Вижте последните промени в тази актуализация</string>
|
||||
<string name="battery_optimization_notification">Оптимизациите на батерията трябва да бъдат изключени, за да може ReVanced Manager да работи правилно във фонов режим. Кликнете тук, за да изключите оптимизациите.</string>
|
||||
<string name="installing_manager_update">Инсталиране на актуализация…</string>
|
||||
<string name="downloading_manager_update">Изтегляне на актуализация…</string>
|
||||
<string name="download_manager_failed">Неуспешно изтегляне на актуализацията: %s</string>
|
||||
<string name="cancel">Отказ</string>
|
||||
<string name="save">Запазване</string>
|
||||
<string name="save_with_count">Запазване (%1$s)</string>
|
||||
<string name="update">Актуализиране</string>
|
||||
<string name="empty">Празно</string>
|
||||
<string name="installing_message">"Докоснете <b>Актуализиране</b>, когато бъдете подканени.
|
||||
ReVanced Manager ще се затвори при актуализиране."</string>
|
||||
<string name="no_changelogs_found">Не са намерени дневници с промени</string>
|
||||
<string name="just_now">Току-що</string>
|
||||
<string name="minutes_ago">преди %sm</string>
|
||||
<string name="hours_ago">преди %sh</string>
|
||||
<string name="days_ago">преди %sd</string>
|
||||
<string name="invalid_date">Невалидна дата</string>
|
||||
<string name="disable_battery_optimization">Деактивиране на оптимизацията на батерията</string>
|
||||
<string name="input_dialog_value_invalid">Невалидна стойност</string>
|
||||
<string name="option_required">Тази опция е задължителна</string>
|
||||
<string name="required_options_screen">Задължителни опции</string>
|
||||
<string name="failed_to_check_updates">Неуспешна проверка за актуализации: %s</string>
|
||||
<string name="no_update_available">Няма налична актуализация</string>
|
||||
<string name="update_check">Проверка за актуализации…</string>
|
||||
<string name="dismiss_temporary">Не сега</string>
|
||||
<string name="update_available_dialog_description">Налична е нова версия на ReVanced Manager (%s).</string>
|
||||
<string name="failed_to_download_update">Неуспешно изтегляне на актуализацията: %s</string>
|
||||
<string name="download">Изтегляне</string>
|
||||
<string name="download_confirmation_metered">"В момента използвате тарифирана връзка и може да се прилагат такси за данни от вашия доставчик на услуги.
|
||||
|
||||
Все още ли искате да продължите?"</string>
|
||||
<string name="download_update_confirmation">Изтегляне на актуализация?</string>
|
||||
<string name="no_contributors_found">Не са намерени сътрудници</string>
|
||||
<string name="select">Избор</string>
|
||||
<string name="select_deselect_all">Избиране или отменяне на избора на всички</string>
|
||||
<string name="select_patches_type_dialog_description">Добавете нови пачове от URL адрес или локални файлове</string>
|
||||
<string name="local_patches_description">Добавяне на пачове от локалното хранилище.</string>
|
||||
<string name="remote_patches_description">Добавяне на пачове от URL адрес. Пачовете могат да се актуализират автоматично.</string>
|
||||
<string name="recommended">Препоръчително</string>
|
||||
<string name="installation_failed_dialog_title">Инсталацията е неуспешна</string>
|
||||
<string name="installation_cancelled_dialog_title">Инсталацията е отменена</string>
|
||||
<string name="installation_blocked_dialog_title">Инсталацията е блокирана</string>
|
||||
<string name="installation_conflict_dialog_title">Конфликт при инсталиране</string>
|
||||
<string name="installation_incompatible_dialog_title">Несъвместима инсталация</string>
|
||||
<string name="installation_invalid_dialog_title">Невалидна инсталация</string>
|
||||
<string name="installation_storage_issue_dialog_title">Недостатъчно място за съхранение</string>
|
||||
<string name="installation_timeout_dialog_title">Инсталацията изтече</string>
|
||||
<string name="installation_failed_description">Инсталацията е неуспешна поради неизвестна причина. Да опитате ли отново?</string>
|
||||
<string name="installation_aborted_description">Инсталацията е отменена ръчно. Да опитате ли отново?</string>
|
||||
<string name="installation_blocked_description">Инсталацията е блокирана. Прегледайте настройките за сигурност на устройството си и опитайте отново.</string>
|
||||
<string name="installation_conflict_description">Инсталацията беше предотвратена от съществуваща инсталация на приложението. Да деинсталирате ли инсталираното приложение и да опитате отново?</string>
|
||||
<string name="installation_incompatible_description">Приложението е несъвместимо с това устройство. Използвайте APK, който е съвместим с това устройство, и опитайте отново.</string>
|
||||
<string name="installation_invalid_description">Приложението е невалидно. Да деинсталирате ли приложението и да опитате отново?</string>
|
||||
<string name="installation_storage_issue_description">Приложението не може да бъде инсталирано поради недостатъчно място за съхранение. Освободете малко място и опитайте отново.</string>
|
||||
<string name="installation_timeout_description">Инсталацията отне твърде много време. Да опитате ли отново?</string>
|
||||
<string name="reinstall">Преинсталиране</string>
|
||||
<string name="show">Показване</string>
|
||||
<string name="debugging">Отстраняване на грешки</string>
|
||||
<string name="about_device">Относно устройството</string>
|
||||
<string name="enter_url">Въведете URL адрес</string>
|
||||
<string name="next">Напред</string>
|
||||
<string name="auto_update">Автоматична актуализация</string>
|
||||
<string name="add_patches">Добавяне на пачове</string>
|
||||
<string name="auto_update_description">Автоматично актуализиране, когато е налична нова версия</string>
|
||||
<string name="patches_prereleases">Използвайте предварителни версии</string>
|
||||
<string name="patches_prereleases_description">Използвайте предварителни версии на %s</string>
|
||||
<string name="patches_url">URL адрес на пачове</string>
|
||||
<string name="incompatible_patches_dialog">"Тези пачове не са съвместими с избраната версия на приложението (%1$s).
|
||||
|
||||
Кликнете върху пачовете, за да видите повече подробности."</string>
|
||||
<string name="incompatible_patch">Несъвместим пач</string>
|
||||
<string name="any_version">Всеки</string>
|
||||
<string name="never_show_again">Никога повече да не се показва</string>
|
||||
<string name="show_manager_update_dialog_on_launch">Показване на съобщение за актуализация при стартиране</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">Показвайте изскачащо известие, когато е налична нова актуализация при стартиране</string>
|
||||
<string name="failed_to_import_keystore">Неуспешно импортиране на хранилище за ключове</string>
|
||||
<string name="export">Експортиране</string>
|
||||
<string name="confirm">Потвърди</string>
|
||||
</resources>
|
||||
@@ -1,460 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">প্যাচার পরীক্ষা</string>
|
||||
<string name="patches">প্যাচ</string>
|
||||
<string name="cli">সিএলআই</string>
|
||||
<string name="manager">ম্যানেজার</string>
|
||||
<string name="plugin_host_permission_label">ReVanced Manager প্লাগইন হোস্ট</string>
|
||||
<string name="plugin_host_permission_description">ReVanced Manager প্লাগইনগুলিতে অ্যাক্সেস নিয়ন্ত্রণ করতে ব্যবহৃত হয়। শুধুমাত্র ReVanced Manager-এর এটি আছে।</string>
|
||||
<string name="toast_copied_to_clipboard">অনুলিপি করা হয়েছে!</string>
|
||||
<string name="copy_to_clipboard">ক্লিপবোর্ডে কপি করুন</string>
|
||||
<string name="dashboard">ড্যাশবোর্ড</string>
|
||||
<string name="settings">সেটিংস</string>
|
||||
<string name="select_app">একটি অ্যাপ নির্বাচন করুন</string>
|
||||
<string name="patches_count_selected">%1$d/%2$d নির্বাচিত</string>
|
||||
<string name="new_downloader_plugins_notification">নতুন ডাউনলোডার প্লাগইন উপলব্ধ। সেগুলি কনফিগার করতে এখানে ক্লিক করুন।</string>
|
||||
<string name="unsupported_architecture_warning">এই ডিভাইসের আর্কিটেকচারে প্যাচিং অসমর্থিত এবং সম্ভবত ব্যর্থ হবে।</string>
|
||||
<string name="import_">আমদানি করুন</string>
|
||||
<string name="import_patches">প্যাচ আমদানি করুন</string>
|
||||
<string name="file_field_set">নির্বাচিত</string>
|
||||
<string name="file_field_not_set">নির্বাচিত নয়</string>
|
||||
<string name="field_not_set">সেট করা হয়নি</string>
|
||||
<string name="patches_missing">নেই</string>
|
||||
<string name="patches_error">ত্রুটি</string>
|
||||
<string name="patches_error_description">প্যাচ লোড করা যায়নি। ত্রুটি দেখতে ক্লিক করুন</string>
|
||||
<string name="patches_not_downloaded">প্যাচ ডাউনলোড করা হয়নি। এটি ডাউনলোড করতে এখানে ক্লিক করুন</string>
|
||||
<string name="patches_name_default">প্যাচগুলি</string>
|
||||
<string name="patches_name_fallback">নামহীন</string>
|
||||
<string name="android_11_bug_dialog_title">Android 11 বাগ</string>
|
||||
<string name="android_11_bug_dialog_description">Android 11 সিস্টেমে একটি বাগ এড়াতে অ্যাপ ইনস্টলেশনের অনুমতি আগে থেকেই দিতে হবে, যা ব্যবহারকারীর অভিজ্ঞতার উপর নেতিবাচক প্রভাব ফেলবে।</string>
|
||||
<string name="no_network_toast">কোনো ইন্টারনেট সংযোগ উপলব্ধ নেই</string>
|
||||
<string name="selected_app_meta_any_version">যেকোনো উপলব্ধ সংস্করণ</string>
|
||||
<string name="app_source_dialog_title">উৎস নির্বাচন করুন</string>
|
||||
<string name="app_source_dialog_option_auto">স্বয়ংক্রিয়</string>
|
||||
<string name="app_source_dialog_option_auto_description">অ্যাপটি ডাউনলোড করতে সমস্ত উপলব্ধ ডাউনলোডার ব্যবহার করুন</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">কোনো প্লাগইন উপলব্ধ নেই</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">রুট অ্যাক্সেস ছাড়া মাউন্ট করা অ্যাপগুলি আবার প্যাচ করা যাবে না</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">সংস্করণ %s প্রস্তাবিত সংস্করণের সাথে মেলে না</string>
|
||||
<string name="patch_item_description">অ্যাপ্লিকেশন প্যাচ করা শুরু করুন</string>
|
||||
<string name="patch_selector_item">প্যাচ নির্বাচন করুন</string>
|
||||
<string name="patch_selector_item_description">%d টি প্যাচ নির্বাচিত</string>
|
||||
<string name="no_patches_selected">কোনো প্যাচ নির্বাচিত নেই</string>
|
||||
<string name="network_unavailable_warning">আপনার ডিভাইস ইন্টারনেটের সাথে সংযুক্ত নয়। ডাউনলোড পরে ব্যর্থ হবে।</string>
|
||||
<string name="network_metered_warning">আপনি বর্তমানে একটি মিটারযুক্ত সংযোগে আছেন। আপনার পরিষেবা প্রদানকারীর থেকে ডেটা চার্জ প্রযোজ্য হতে পারে।</string>
|
||||
<string name="apk_source_selector_item">APK উৎস নির্বাচন করুন</string>
|
||||
<string name="apk_source_auto">সমস্ত APK ডাউনলোডার ব্যবহার করা হচ্ছে</string>
|
||||
<string name="apk_source_downloader">%s ব্যবহার করা হচ্ছে</string>
|
||||
<string name="apk_source_installed">ইনস্টল করা APK ব্যবহার করা হচ্ছে</string>
|
||||
<string name="apk_source_local">একটি স্থানীয় APK ফাইল ব্যবহার করা হচ্ছে</string>
|
||||
<string name="legacy_import_failed">লেগ্যাসি সেটিংস আমদানি করা যায়নি</string>
|
||||
<string name="auto_updates_dialog_title">আপডেটগুলি কনফিগার করুন</string>
|
||||
<string name="auto_updates_dialog_description">আপনি কি ReVanced Manager কে নিম্নলিখিত উপাদানগুলির জন্য পর্যায়ক্রমে আপডেট চেক করতে চান?</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">ReVanced প্যাচগুলি</string>
|
||||
<string name="auto_updates_dialog_note">এই সেটিংসগুলি পরে পরিবর্তন করা যেতে পারে।</string>
|
||||
<string name="general">সাধারণ</string>
|
||||
<string name="general_description">ভাষা, থিম, গতিশীল রঙ</string>
|
||||
<string name="updates">আপডেটগুলি</string>
|
||||
<string name="updates_description">আপডেটগুলি চেক করুন এবং চেঞ্জলগগুলি দেখুন</string>
|
||||
<string name="downloads">ডাউনলোডগুলি</string>
|
||||
<string name="downloads_description">ডাউনলোডার প্লাগইন এবং ডাউনলোড করা অ্যাপগুলি</string>
|
||||
<string name="import_export">আমদানি & রপ্তানি</string>
|
||||
<string name="import_export_description">কিস্টোর, প্যাচ বিকল্প এবং নির্বাচন</string>
|
||||
<string name="advanced">উন্নত</string>
|
||||
<string name="advanced_description">API URL, মেমরি সীমা, ডিবাগিং</string>
|
||||
<string name="about">সম্পর্কে</string>
|
||||
<string name="opensource_licenses">ওপেন সোর্স লাইসেন্স</string>
|
||||
<string name="opensource_licenses_description">এই অ্যাপ্লিকেশনটি তৈরি করতে ব্যবহৃত সমস্ত লাইব্রেরি দেখুন</string>
|
||||
<string name="contributors">অবদানকারীগণ</string>
|
||||
<string name="contributors_description">ReVanced-এর অবদানকারীগণ দেখুন</string>
|
||||
<string name="dynamic_color">গতিশীল রঙ</string>
|
||||
<string name="dynamic_color_description">ওয়ালপেপারের সাথে রঙগুলি মানিয়ে নিন</string>
|
||||
<string name="pure_black_theme">বিশুদ্ধ কালো থিম</string>
|
||||
<string name="pure_black_theme_description">ডার্ক থিমের জন্য বিশুদ্ধ কালো ব্যাকগ্রাউন্ড ব্যবহার করুন</string>
|
||||
<string name="theme">থিম</string>
|
||||
<string name="theme_description">হালকা বা গাঢ় থিমের মধ্যে বেছে নিন</string>
|
||||
<string name="language">ভাষা</string>
|
||||
<string name="language_description">অ্যাপ প্রদর্শনের ভাষা নির্বাচন করুন</string>
|
||||
<string name="language_system_default">সিস্টেম ডিফল্ট</string>
|
||||
<string name="safeguards">নিরাপত্তা ব্যবস্থা</string>
|
||||
<string name="patch_compat_check">সংস্করণ সামঞ্জস্যতা পরীক্ষা নিষ্ক্রিয় করুন</string>
|
||||
<string name="patch_compat_check_description">প্যাচগুলিকে সামঞ্জস্যপূর্ণ অ্যাপ সংস্করণগুলিতে সীমাবদ্ধ করবেন না</string>
|
||||
<string name="patch_compat_check_confirmation">"বেমানান প্যাচ নির্বাচন করলে অ্যাপটি ভাঙতে পারে।
|
||||
|
||||
আপনি কি তবুও চালিয়ে যেতে চান?"</string>
|
||||
<string name="suggested_version_safeguard">প্রস্তাবিত অ্যাপ সংস্করণ প্রয়োজন</string>
|
||||
<string name="suggested_version_safeguard_description">প্রস্তাবিত অ্যাপ সংস্করণ নির্বাচন প্রয়োগ করুন</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"প্রস্তাবিত সংস্করণ নয় এমন একটি অ্যাপ নির্বাচন করলে অপ্রত্যাশিত সমস্যা হতে পারে।
|
||||
|
||||
আপনি কি তবুও চালিয়ে যেতে চান?"</string>
|
||||
<string name="patch_selection_safeguard">প্যাচ নির্বাচন এবং বিকল্পগুলি পরিবর্তন করার অনুমতি দিন</string>
|
||||
<string name="patch_selection_safeguard_description">প্যাচ নির্বাচন বা বাতিল করা এবং বিকল্পগুলির কাস্টমাইজেশন প্রতিরোধ করবেন না</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"প্যাচগুলির নির্বাচন পরিবর্তন করলে অপ্রত্যাশিত সমস্যা হতে পারে।
|
||||
|
||||
তবুও সক্ষম করবেন?"</string>
|
||||
<string name="universal_patches_safeguard">ইউনিভার্সাল প্যাচ ব্যবহার করার অনুমতি দিন</string>
|
||||
<string name="universal_patches_safeguard_description">ইউনিভার্সাল প্যাচ ব্যবহার প্রতিরোধ করবেন না</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"ইউনিভার্সাল প্যাচগুলি নির্দিষ্ট অ্যাপগুলিকে লক্ষ্য করে তৈরি প্যাচগুলির মতো ভালোভাবে পরীক্ষিত নয়।
|
||||
|
||||
তবুও সক্ষম করবেন?"</string>
|
||||
<string name="import_keystore">কিস্টোর আমদানি করুন</string>
|
||||
<string name="import_keystore_description">একটি কাস্টম কিস্টোর আমদানি করুন</string>
|
||||
<string name="import_keystore_dialog_title">কিস্টোর শংসাপত্র লিখুন</string>
|
||||
<string name="import_keystore_dialog_description">এটি আমদানি করতে আপনাকে কিস্টোরের শংসাপত্রগুলি প্রবেশ করাতে হবে।</string>
|
||||
<string name="import_keystore_dialog_alias_field">ব্যবহারকারীর নাম (উপনাম)</string>
|
||||
<string name="import_keystore_dialog_password_field">পাসওয়ার্ড</string>
|
||||
<string name="import_keystore_dialog_button">আমদানি করুন</string>
|
||||
<string name="import_keystore_wrong_credentials">ভুল কিস্টোর শংসাপত্র</string>
|
||||
<string name="import_keystore_success">আমদানি করা কিস্টোর</string>
|
||||
<string name="export_keystore">কিস্টোর রপ্তানি করুন</string>
|
||||
<string name="export_keystore_description">বর্তমান কিস্টোর রপ্তানি করুন</string>
|
||||
<string name="export_keystore_unavailable">রপ্তানি করার জন্য কোনো কিস্টোর নেই</string>
|
||||
<string name="export_keystore_success">রপ্তানি করা কিস্টোর</string>
|
||||
<string name="regenerate_keystore">কিস্টোর পুনরায় তৈরি করুন</string>
|
||||
<string name="regenerate_keystore_description">একটি নতুন কিস্টোর তৈরি করুন</string>
|
||||
<string name="regenerate_keystore_dialog_description">"আপনি আপনার কিস্টোরটি পুনরায় তৈরি করতে চলেছেন যা ম্যানেজার প্যাচিং প্রক্রিয়ার সময় ব্যবহার করবে।
|
||||
|
||||
আপনি এই উৎস থেকে পূর্বে ইনস্টল করা অ্যাপগুলি আপডেট করতে পারবেন না।"</string>
|
||||
<string name="regenerate_keystore_success">কিস্টোর সফলভাবে প্রতিস্থাপন করা হয়েছে</string>
|
||||
<string name="import_patch_selection">প্যাচ নির্বাচন আমদানি করুন</string>
|
||||
<string name="import_patch_selection_description">একটি JSON ফাইল থেকে প্যাচ নির্বাচন আমদানি করুন</string>
|
||||
<string name="import_patch_selection_fail">প্যাচ নির্বাচন আমদানি করা যায়নি: %s</string>
|
||||
<string name="import_patch_selection_success">আমদানি করা প্যাচ নির্বাচন</string>
|
||||
<string name="export_patch_selection">প্যাচ নির্বাচন রপ্তানি করুন</string>
|
||||
<string name="export_patch_selection_description">একটি JSON ফাইলে প্যাচ নির্বাচন রপ্তানি করুন</string>
|
||||
<string name="export_patch_selection_fail">প্যাচ নির্বাচন রপ্তানি করা যায়নি: %s</string>
|
||||
<string name="export_patch_selection_success">রপ্তানি করা প্যাচ নির্বাচন</string>
|
||||
<string name="reset_patch_selection">প্যাচ নির্বাচন রিসেট করুন</string>
|
||||
<string name="reset_patch_selection_description">সংরক্ষিত প্যাচ নির্বাচন রিসেট করুন</string>
|
||||
<string name="reset_patch_options">প্যাচ বিকল্প রিসেট করুন</string>
|
||||
<string name="reset_patch_options_description">সংরক্ষিত প্যাচ বিকল্প রিসেট করুন</string>
|
||||
<string name="reset_patch_selection_success">প্যাচ নির্বাচন রিসেট করা হয়েছে</string>
|
||||
<string name="patch_selection_reset_all">বৈশ্বিকভাবে প্যাচ নির্বাচন রিসেট করুন</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">আপনি সমস্ত প্যাচ নির্বাচন রিসেট করতে চলেছেন। আপনাকে প্রতিটি প্যাচ ম্যানুয়ালি আবার নির্বাচন করতে হবে।</string>
|
||||
<string name="patch_selection_reset_all_description">সমস্ত প্যাচ নির্বাচন রিসেট করে</string>
|
||||
<string name="patch_selection_reset_package">অ্যাপের জন্য প্যাচ নির্বাচন রিসেট করুন</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">আপনি \"%s\" অ্যাপের জন্য প্যাচ নির্বাচন রিসেট করতে চলেছেন। আপনাকে প্রতিটি প্যাচ ম্যানুয়ালি আবার নির্বাচন করতে হবে।</string>
|
||||
<string name="patch_selection_reset_package_description">একটি একক অ্যাপের জন্য প্যাচ নির্বাচন পুনরায় সেট করে</string>
|
||||
<string name="patch_selection_reset_patches">প্যাচ নির্বাচন পুনরায় সেট করুন (একক)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">আপনি \"%s\" এর জন্য প্যাচ নির্বাচন পুনরায় সেট করতে চলেছেন। আপনাকে প্রতিটি প্যাচ আবার ম্যানুয়ালি নির্বাচন করতে হবে।</string>
|
||||
<string name="patch_selection_reset_patches_description">প্যাচের একটি নির্দিষ্ট সংগ্রহের জন্য প্যাচ নির্বাচন পুনরায় সেট করে</string>
|
||||
<string name="patch_options_reset_package">অ্যাপের জন্য প্যাচ বিকল্পগুলি পুনরায় সেট করুন</string>
|
||||
<string name="patch_options_reset_package_dialog_description">আপনি \"%s\" অ্যাপের জন্য প্যাচ বিকল্পগুলি পুনরায় সেট করতে চলেছেন। আপনাকে প্রতিটি বিকল্প আবার প্রয়োগ করতে হবে।</string>
|
||||
<string name="patch_options_reset_package_description">একটি একক অ্যাপের জন্য প্যাচ বিকল্পগুলি পুনরায় সেট করে</string>
|
||||
<string name="patch_options_reset_patches">প্যাচ বিকল্পগুলি পুনরায় সেট করুন (একক)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">আপনি \"%s\" এর জন্য প্যাচ বিকল্পগুলি পুনরায় সেট করতে চলেছেন। আপনাকে প্রতিটি বিকল্প আবার প্রয়োগ করতে হবে।</string>
|
||||
<string name="patch_options_reset_patches_description">প্যাচের একটি নির্দিষ্ট সংগ্রহের জন্য প্যাচ বিকল্পগুলি পুনরায় সেট করে</string>
|
||||
<string name="patch_options_reset_all">বিশ্বব্যাপী প্যাচ বিকল্পগুলি পুনরায় সেট করুন</string>
|
||||
<string name="patch_options_reset_all_dialog_description">আপনি সমস্ত প্যাচ বিকল্পগুলি পুনরায় সেট করতে চলেছেন। আপনাকে প্রতিটি বিকল্প আবার প্রয়োগ করতে হবে।</string>
|
||||
<string name="patch_options_reset_all_description">সমস্ত প্যাচ বিকল্প পুনরায় সেট করে</string>
|
||||
<string name="downloader_plugins">প্লাগইন</string>
|
||||
<string name="downloader_plugin_state_trusted">বিশ্বস্ত</string>
|
||||
<string name="downloader_plugin_state_failed">লোড করতে ব্যর্থ হয়েছে। আরও বিস্তারিত জানতে ক্লিক করুন</string>
|
||||
<string name="downloader_plugin_state_untrusted">অবিশ্বস্ত</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">প্লাগইন বিশ্বাস করবেন?</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">বিশ্বাস প্রত্যাহার করবেন?</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">চালিয়ে গেলে এই প্লাগইনটি আপনার সিস্টেমে চলতে পারবে।\n\nশুধুমাত্র যদি আপনি এটিকে বিশ্বাস করেন তবেই এই প্লাগইনটি সক্ষম করুন। প্লাগইনগুলি নির্বিচারে কোড চালাতে পারে এবং আপনার ডিভাইসকে বিপদে ফেলতে পারে।</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">স্বাক্ষর:\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">প্লাগইন:\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">নির্বাচিত অ্যাপগুলি মুছুন</string>
|
||||
<string name="downloader_plugin_delete_apps_description">আপনি কি নিশ্চিত যে আপনি নির্বাচিত অ্যাপগুলি মুছে ফেলতে চান?</string>
|
||||
<string name="downloader_settings_no_apps">কোনো ডাউনলোড করা অ্যাপ পাওয়া যায়নি।</string>
|
||||
<string name="search_apps">অ্যাপ অনুসন্ধান করুন…</string>
|
||||
<string name="loading_body">লোড হচ্ছে…</string>
|
||||
<string name="downloading_patches">প্যাচ ডাউনলোড হচ্ছে…</string>
|
||||
<string name="options">বিকল্প</string>
|
||||
<string name="ok">ঠিক আছে</string>
|
||||
<string name="yes">হ্যাঁ</string>
|
||||
<string name="no">না</string>
|
||||
<string name="edit">সম্পাদনা করুন</string>
|
||||
<string name="dialog_input_placeholder">মান</string>
|
||||
<string name="reset">পুনরায় সেট করুন</string>
|
||||
<string name="share">শেয়ার করুন</string>
|
||||
<string name="patch">প্যাচ</string>
|
||||
<string name="select_from_storage">স্টোরেজ থেকে নির্বাচন করুন</string>
|
||||
<string name="select_from_storage_description">ফাইল পিকার ব্যবহার করে স্টোরেজ থেকে একটি APK ফাইল নির্বাচন করুন</string>
|
||||
<string name="suggested_version_info">প্রস্তাবিত সংস্করণ: %s</string>
|
||||
<string name="type_anything">চালিয়ে যেতে যেকোনো কিছু টাইপ করুন</string>
|
||||
<string name="search">প্যাচ অনুসন্ধান করুন…</string>
|
||||
<string name="apply">প্রয়োগ করুন</string>
|
||||
<string name="help">সাহায্য</string>
|
||||
<string name="back">ফিরে যান</string>
|
||||
<string name="warning">সতর্কতা</string>
|
||||
<string name="add">যোগ করুন</string>
|
||||
<string name="close">বন্ধ করুন</string>
|
||||
<string name="clear">পরিষ্কার করুন</string>
|
||||
<string name="system">সিস্টেম</string>
|
||||
<string name="light">হালকা</string>
|
||||
<string name="dark">অন্ধকার</string>
|
||||
<string name="appearance">উপস্থিতি</string>
|
||||
<string name="networking">নেটওয়ার্কিং</string>
|
||||
<string name="allow_metered_networks">মিটারড নেটওয়ার্কের অনুমতি দিন</string>
|
||||
<string name="allow_metered_networks_description">মিটারড নেটওয়ার্কে স্বয়ংক্রিয় আপডেটের অনুমতি দেয়।\n ম্যানুয়াল অপারেশনের জন্য অ্যাপ্লিকেশনটি এখনও মিটারড নেটওয়ার্ক সম্পর্কে সতর্ক করতে পারে।</string>
|
||||
<string name="downloaded_apps">ডাউনলোড করা অ্যাপস</string>
|
||||
<string name="process_runtime">অন্য প্রক্রিয়ায় প্যাচার চালান (পরীক্ষামূলক)</string>
|
||||
<string name="process_runtime_description">এটি দ্রুত এবং প্যাচারকে আরও মেমরি ব্যবহার করার অনুমতি দেয়</string>
|
||||
<string name="process_runtime_memory_limit">প্যাচার প্রক্রিয়ার মেমরি সীমা</string>
|
||||
<string name="process_runtime_memory_limit_description">প্যাচার প্রক্রিয়া ব্যবহার করতে পারে এমন সর্বোচ্চ মেমরি পরিমাণ (মেগাবাইটে)</string>
|
||||
<string name="debug_logs_export">ডিবাগ লগ এক্সপোর্ট করুন</string>
|
||||
<string name="debug_logs_export_read_failed">লগ পড়তে ব্যর্থ হয়েছে (প্রস্থান কোড %d)</string>
|
||||
<string name="debug_logs_export_failed">লগ এক্সপোর্ট করতে ব্যর্থ হয়েছে</string>
|
||||
<string name="debug_logs_export_success">এক্সপোর্ট করা লগ</string>
|
||||
<string name="api_url">API URL</string>
|
||||
<string name="api_url_description">প্রয়োজনীয় ফাইল ডাউনলোড করতে ব্যবহৃত API</string>
|
||||
<string name="api_url_dialog_title">API URL পরিবর্তন করুন</string>
|
||||
<string name="api_url_dialog_description">ReVanced Manager এর API URL পরিবর্তন করুন। ReVanced Manager প্যাচ এবং আপডেট ডাউনলোড করতে API ব্যবহার করে।</string>
|
||||
<string name="api_url_dialog_warning">ReVanced Manager প্যাচ এবং আপডেট ডাউনলোড করতে API এর সাথে সংযোগ করে। নিশ্চিত করুন যে আপনি এটিকে বিশ্বাস করেন।</string>
|
||||
<string name="api_url_dialog_save">সেট করুন</string>
|
||||
<string name="api_url_dialog_reset">API URL পুনরায় সেট করুন</string>
|
||||
<string name="device">ডিভাইস</string>
|
||||
<string name="device_android_version">অ্যান্ড্রয়েড সংস্করণ</string>
|
||||
<string name="device_model">মডেল</string>
|
||||
<string name="device_architectures">CPU আর্কিটেকচার</string>
|
||||
<string name="device_memory_limit">মেমরি সীমা</string>
|
||||
<string name="device_memory_limit_format">%1$dMB (সাধারণ) - %2$dMB (বড়)</string>
|
||||
<string name="patches_force_download">সমস্ত প্যাচ ডাউনলোড করতে বাধ্য করুন</string>
|
||||
<string name="patches_reset">প্যাচ পুনরায় সেট করুন</string>
|
||||
<string name="patching">প্যাচ করা হচ্ছে</string>
|
||||
<string name="signing">স্বাক্ষর করা হচ্ছে</string>
|
||||
<string name="storage">স্টোরেজ</string>
|
||||
<string name="no_patch_found">কোনো প্যাচ খুঁজে পাওয়া যায়নি। আপনার প্যাচগুলি পরীক্ষা করুন</string>
|
||||
<string name="tab_apps">অ্যাপস</string>
|
||||
<string name="tab_patches">প্যাচ</string>
|
||||
<string name="delete">মুছুন</string>
|
||||
<string name="refresh">রিফ্রেশ করুন</string>
|
||||
<string name="continue_anyways">যাইহোক চালিয়ে যান</string>
|
||||
<string name="download_another_version">অন্য সংস্করণ ডাউনলোড করুন</string>
|
||||
<string name="download_app">অ্যাপ ডাউনলোড করুন</string>
|
||||
<string name="download_apk">APK ফাইল ডাউনলোড করুন</string>
|
||||
<string name="patches_download_fail">প্যাচ ডাউনলোড করতে ব্যর্থ হয়েছে: %s</string>
|
||||
<string name="patches_replace_fail">প্যাচ আমদানি করতে ব্যর্থ হয়েছে: %s</string>
|
||||
<string name="no_patched_apps_found">কোনো প্যাচ করা অ্যাপ পাওয়া যায়নি</string>
|
||||
<string name="tap_on_patches">প্যাচ সম্পর্কে আরও তথ্য পেতে সেগুলিতে ট্যাপ করুন</string>
|
||||
<string name="patches_selected">%s নির্বাচিত</string>
|
||||
<string name="incompatible_patches">বেমানান প্যাচ</string>
|
||||
<string name="universal_patches">ইউনিভার্সাল প্যাচ</string>
|
||||
<string name="patch_selection_reset_toast">প্যাচ নির্বাচন এবং বিকল্পগুলি প্রস্তাবিত ডিফল্টে পুনরায় সেট করা হয়েছে</string>
|
||||
<string name="patch_options_reset_toast">প্যাচ বিকল্পগুলি পুনরায় সেট করা হয়েছে</string>
|
||||
<string name="non_suggested_version_warning_title">অ-প্রস্তাবিত সংস্করণ</string>
|
||||
<string name="non_suggested_version_warning_description">"আপনার নির্বাচিত অ্যাপের সংস্করণ প্রস্তাবিত সংস্করণের সাথে মেলে না।\nঅনুগ্রহ করে প্রস্তাবিত সংস্করণ ব্যবহার করুন: %s\n\nযাইহোক চালিয়ে যেতে, উন্নত সেটিংসে \"প্রস্তাবিত অ্যাপ সংস্করণ প্রয়োজন\" অক্ষম করুন।"</string>
|
||||
<string name="selection_warning_title">ডিফল্ট ব্যবহার বন্ধ করবেন?</string>
|
||||
<string name="selection_warning_description">"ডিফল্ট প্যাচ নির্বাচন এবং বিকল্পগুলি ব্যবহার করার পরামর্শ দেওয়া হয়। সেগুলি পরিবর্তন করলে অপ্রত্যাশিত সমস্যা হতে পারে।\n\nপ্যাচ টগল করার আগে আপনাকে উন্নত সেটিংসে \"প্যাচ নির্বাচন এবং বিকল্পগুলি পরিবর্তন করার অনুমতি দিন\" চালু করতে হবে।"</string>
|
||||
<string name="universal_patch_warning_description">"ইউনিভার্সাল প্যাচগুলির আরও সাধারণ ব্যবহার রয়েছে এবং নির্দিষ্ট অ্যাপগুলিকে লক্ষ্য করে এমন প্যাচগুলির মতো নির্ভরযোগ্যভাবে কাজ করে না। সেগুলি ব্যবহার করার সময় আপনি সমস্যার সম্মুখীন হতে পারেন।\n\nইউনিভার্সাল প্যাচ ব্যবহার করার আগে আপনাকে উন্নত সেটিংসে \"ইউনিভার্সাল প্যাচ ব্যবহার করার অনুমতি দিন\" চালু করতে হবে।"</string>
|
||||
<string name="this_version">এই সংস্করণ</string>
|
||||
<string name="universal">যেকোনো অ্যাপ</string>
|
||||
<string name="search_patches">প্যাচ অনুসন্ধান করুন</string>
|
||||
<string name="app_version_not_compatible">"এই প্যাচটি নির্বাচিত অ্যাপ সংস্করণ (%1$s) এর সাথে সামঞ্জস্যপূর্ণ নয়।\n\nএটি শুধুমাত্র নিম্নলিখিত সংস্করণ(গুলি) এর সাথে সামঞ্জস্যপূর্ণ: %2$s"</string>
|
||||
<string name="continue_with_version">এই সংস্করণ দিয়ে চালিয়ে যাবেন?</string>
|
||||
<string name="version_not_compatible">এই সংস্করণের (%s) সাথে সমস্ত প্যাচ সামঞ্জস্যপূর্ণ নয়। আপনি কি যাইহোক চালিয়ে যেতে চান?</string>
|
||||
<string name="download_application">অ্যাপ্লিকেশন ডাউনলোড করবেন?</string>
|
||||
<string name="app_not_installed">আপনি যে অ্যাপটি নির্বাচন করেছেন তা ইনস্টল করা নেই। আপনি কি এটি ডাউনলোড করতে চান?</string>
|
||||
<string name="failed_to_load_apk">APK লোড করতে ব্যর্থ হয়েছে</string>
|
||||
<string name="loading">লোড হচ্ছে…</string>
|
||||
<string name="not_installed">ইনস্টল করা নেই</string>
|
||||
<string name="installed">ইনস্টল করা হয়েছে</string>
|
||||
<string name="app_info">অ্যাপের তথ্য</string>
|
||||
<string name="uninstall">আনইনস্টল করুন</string>
|
||||
<string name="unpatch">আনপ্যাচ করুন</string>
|
||||
<string name="repatch">রিপ্যাচ করুন</string>
|
||||
<string name="install_type">ইনস্টলেশনের প্রকার</string>
|
||||
<string name="package_name">প্যাকেজের নাম</string>
|
||||
<string name="original_package_name">আসল প্যাকেজের নাম</string>
|
||||
<string name="applied_patches">প্রয়োগকৃত প্যাচসমূহ</string>
|
||||
<string name="view_applied_patches">প্রয়োগকৃত প্যাচসমূহ দেখুন</string>
|
||||
<string name="default_install">ডিফল্ট</string>
|
||||
<string name="mount_install">মাউন্ট করুন</string>
|
||||
<string name="mounted">মাউন্ট করা হয়েছে</string>
|
||||
<string name="not_mounted">মাউন্ট করা হয়নি</string>
|
||||
<string name="mount">মাউন্ট</string>
|
||||
<string name="unmount">আনমাউন্ট করুন</string>
|
||||
<string name="failed_to_mount">মাউন্ট করতে ব্যর্থ: %s</string>
|
||||
<string name="failed_to_unmount">আনমাউন্ট করতে ব্যর্থ: %s</string>
|
||||
<string name="unpatch_app">অ্যাপ আনপ্যাচ করবেন?</string>
|
||||
<string name="unpatch_description">আপনি কি নিশ্চিত যে আপনি এই অ্যাপটি আনপ্যাচ করতে চান?</string>
|
||||
<string name="downloader_invalid_version">ডাউনলোডার সঠিক সংস্করণ আনতে পারেনি</string>
|
||||
<string name="downloader_app_not_found">ডাউনলোডার অ্যাপটি খুঁজে পায়নি</string>
|
||||
<string name="downloader_error">ডাউনলোডার ত্রুটি: %s</string>
|
||||
<string name="downloader_no_plugins_installed">কোনো ডাউনলোডার ইনস্টল করা নেই।</string>
|
||||
<string name="downloader_no_plugins_available">কিছু ডাউনলোডার ইনস্টল করা আছে কিন্তু কোনোটিই বিশ্বস্ত নয়। আপনার সেটিংস পরীক্ষা করুন।</string>
|
||||
<string name="already_patched">ইতিমধ্যেই প্যাচ করা হয়েছে</string>
|
||||
<string name="patch_selector_sheet_filter_title">ফিল্টার</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">সামঞ্জস্য</string>
|
||||
<string name="string_option_menu_description">আরও বিকল্প</string>
|
||||
<string name="option_preset_custom_value">কাস্টম মান</string>
|
||||
<string name="path_selector">স্টোরেজ থেকে নির্বাচন করুন</string>
|
||||
<string name="path_selector_parent_dir">পূর্ববর্তী ডিরেক্টরি</string>
|
||||
<string name="path_selector_dirs">ডিরেক্টরিগুলো</string>
|
||||
<string name="path_selector_files">ফাইলগুলো</string>
|
||||
<string name="show_password_field">পাসওয়ার্ড দেখান</string>
|
||||
<string name="hide_password_field">পাসওয়ার্ড লুকান</string>
|
||||
<string name="installer">ইনস্টলার</string>
|
||||
<string name="install_app">ইনস্টল করুন</string>
|
||||
<string name="install_app_success">অ্যাপ ইনস্টল করা হয়েছে</string>
|
||||
<string name="install_app_fail">অ্যাপ ইনস্টল করতে ব্যর্থ: %s</string>
|
||||
<string name="reinstall_app_fail">অ্যাপ পুনরায় ইনস্টল করতে ব্যর্থ: %s</string>
|
||||
<string name="uninstall_app_fail">অ্যাপ আনইনস্টল করতে ব্যর্থ: %s</string>
|
||||
<string name="open_app">খুলুন</string>
|
||||
<string name="save_apk">APK সংরক্ষণ করুন</string>
|
||||
<string name="save_apk_success">APK সংরক্ষিত হয়েছে</string>
|
||||
<string name="sign_fail">APK স্বাক্ষর করতে ব্যর্থ: %s</string>
|
||||
<string name="save_logs">লগ সংরক্ষণ করুন</string>
|
||||
<string name="plugin_activity_dialog_body">এই প্লাগইনটি চালিয়ে যেতে ব্যবহারকারীর ইন্টারঅ্যাকশন প্রয়োজন।</string>
|
||||
<string name="select_install_type">ইনস্টলেশনের প্রকার নির্বাচন করুন</string>
|
||||
<string name="patcher_step_group_preparing">প্রস্তুতি চলছে</string>
|
||||
<string name="patcher_step_load_patches">প্যাচ লোড করুন</string>
|
||||
<string name="patcher_step_unpack">APK ফাইল পড়ুন</string>
|
||||
<string name="patcher_step_group_patching">প্যাচিং চলছে</string>
|
||||
<string name="patcher_step_group_saving">সংরক্ষণ করা হচ্ছে</string>
|
||||
<string name="patcher_step_write_patched">প্যাচ করা APK ফাইল লিখুন</string>
|
||||
<string name="patcher_step_sign_apk">প্যাচ করা APK ফাইল স্বাক্ষর করুন</string>
|
||||
<string name="patcher_notification_title">প্যাচিং প্রক্রিয়া চলছে…</string>
|
||||
<string name="patcher_notification_text">প্যাচারে ফিরে যেতে ট্যাপ করুন</string>
|
||||
<string name="patcher_stop_confirm_title">প্যাচার বন্ধ করুন</string>
|
||||
<string name="patcher_stop_confirm_description">আপনি কি নিশ্চিত যে আপনি প্যাচিং প্রক্রিয়া বন্ধ করতে চান?</string>
|
||||
<string name="patcher_install_in_progress">ইনস্টলেশন চলছে। অনুগ্রহ করে অপেক্ষা করুন</string>
|
||||
<string name="execute_patches">প্যাচসমূহ কার্যকর করুন</string>
|
||||
<string name="executing_patch">%s কার্যকর করা হচ্ছে</string>
|
||||
<string name="failed_to_execute_patch">%s কার্যকর করতে ব্যর্থ হয়েছে</string>
|
||||
<string name="step_completed">সম্পন্ন হয়েছে</string>
|
||||
<string name="step_failed">ব্যর্থ হয়েছে</string>
|
||||
<string name="step_running">চলছে</string>
|
||||
<string name="step_waiting">অপেক্ষা করছে</string>
|
||||
<string name="expand_content">বিস্তৃত করুন</string>
|
||||
<string name="collapse_content">সংকুচিত করুন</string>
|
||||
<string name="drag_handle">পুনরায় সাজান</string>
|
||||
<string name="more">আরও</string>
|
||||
<string name="less">কম</string>
|
||||
<string name="continue_">চালিয়ে যান</string>
|
||||
<string name="dismiss">বাতিল করুন</string>
|
||||
<string name="permanent_dismiss">এটি আর দেখাবেন না</string>
|
||||
<string name="donate">অনুদান দিন</string>
|
||||
<string name="website">ওয়েবসাইট</string>
|
||||
<string name="github">গিটহাব</string>
|
||||
<string name="contact">যোগাযোগ</string>
|
||||
<string name="version">সংস্করণ</string>
|
||||
<string name="submit_feedback">সমস্যা বা প্রতিক্রিয়া জমা দিন</string>
|
||||
<string name="submit_feedback_description">আমাদের এই অ্যাপ্লিকেশনটি উন্নত করতে সাহায্য করুন</string>
|
||||
<string name="developer_options">ডেভেলপার বিকল্পসমূহ</string>
|
||||
<string name="developer_options_description">সমস্যা ডিবাগ করার জন্য বিকল্প</string>
|
||||
<string name="patches_update_success">আপডেট সফল হয়েছে</string>
|
||||
<string name="patches_update_unavailable">কোনো আপডেট উপলব্ধ নেই</string>
|
||||
<string name="view_patches">প্যাচসমূহ দেখুন</string>
|
||||
<string name="patches_view_any_version">যেকোনো সংস্করণ</string>
|
||||
<string name="patches_view_any_package">যেকোনো প্যাকেজ</string>
|
||||
<string name="patches_delete_single_dialog_description">আপনি কি নিশ্চিত যে আপনি \"%s\" মুছে ফেলতে চান?</string>
|
||||
<string name="patches_delete_multiple_dialog_description">আপনি কি নিশ্চিত যে আপনি নির্বাচিত প্যাচগুলি মুছে ফেলতে চান?</string>
|
||||
<string name="about_revanced_manager">ReVanced Manager সম্পর্কে</string>
|
||||
<string name="revanced_manager_description">ReVanced Manager হল একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন যা অ্যান্ড্রয়েড অ্যাপগুলিকে প্যাচ করতে ReVanced Patcher ব্যবহার করে। এটি আপনাকে কাস্টম প্যাচ সহ অ্যাপ ডাউনলোড এবং প্যাচ করতে এবং প্যাচিং প্রক্রিয়া পরিচালনা করতে দেয়।</string>
|
||||
<string name="developer_options_taps">%d ট্যাপ বাকি</string>
|
||||
<string name="developer_options_enabled">ডেভেলপার বিকল্পসমূহ সক্রিয় করা হয়েছে</string>
|
||||
<string name="developer_options_already_enabled">ডেভেলপার বিকল্পসমূহ ইতিমধ্যেই সক্রিয় করা হয়েছে</string>
|
||||
<string name="update_available">একটি আপডেট উপলব্ধ আছে</string>
|
||||
<string name="current_version">বর্তমান সংস্করণ: %s</string>
|
||||
<string name="new_version">নতুন সংস্করণ: %s</string>
|
||||
<string name="ready_to_install_update">আপডেট ইনস্টল করার জন্য প্রস্তুত</string>
|
||||
<string name="update_completed">আপডেট ইনস্টল করা হয়েছে</string>
|
||||
<string name="install_update_manager_failed">আপডেট ইনস্টল করতে ব্যর্থ</string>
|
||||
<string name="manual_update_check">আপডেটগুলির জন্য পরীক্ষা করুন</string>
|
||||
<string name="manual_update_check_description">ম্যানুয়ালি আপডেটগুলির জন্য পরীক্ষা করুন</string>
|
||||
<string name="update_checking_manager">চালু করার সময় আপডেটগুলির জন্য পরীক্ষা করুন</string>
|
||||
<string name="update_checking_manager_description">অ্যাপ্লিকেশন চালু হওয়ার সময় ReVanced Manager-এর নতুন সংস্করণগুলির জন্য পরীক্ষা করুন</string>
|
||||
<string name="manager_prereleases">প্রি-রিলিজ ব্যবহার করুন</string>
|
||||
<string name="manager_prereleases_description">ReVanced Manager-এর প্রি-রিলিজ সংস্করণগুলি ব্যবহার করুন</string>
|
||||
<string name="changelog">চেঞ্জলগ দেখুন</string>
|
||||
<string name="changelog_loading">চেঞ্জলগ লোড হচ্ছে</string>
|
||||
<string name="changelog_download_fail">চেঞ্জলগ ডাউনলোড করতে ব্যর্থ: %s</string>
|
||||
<string name="changelog_description">এই আপডেটের সর্বশেষ পরিবর্তনগুলি দেখুন</string>
|
||||
<string name="battery_optimization_notification">ReVanced Manager সঠিকভাবে ব্যাকগ্রাউন্ডে কাজ করার জন্য ব্যাটারি অপটিমাইজেশন বন্ধ করতে হবে। অপটিমাইজেশন বন্ধ করতে এখানে ক্লিক করুন।</string>
|
||||
<string name="installing_manager_update">আপডেট ইনস্টল করা হচ্ছে…</string>
|
||||
<string name="downloading_manager_update">আপডেট ডাউনলোড করা হচ্ছে…</string>
|
||||
<string name="download_manager_failed">আপডেট ডাউনলোড করতে ব্যর্থ: %s</string>
|
||||
<string name="cancel">বাতিল করুন</string>
|
||||
<string name="save">সংরক্ষণ করুন</string>
|
||||
<string name="save_with_count">সংরক্ষণ করুন (%1$s)</string>
|
||||
<string name="update">আপডেট করুন</string>
|
||||
<string name="empty">খালি</string>
|
||||
<string name="installing_message">"প্রম্পট করা হলে <b>আপডেট</b>-এ ট্যাপ করুন।
|
||||
আপডেট করার সময় ReVanced Manager বন্ধ হয়ে যাবে।"</string>
|
||||
<string name="no_changelogs_found">কোনো চেঞ্জলগ পাওয়া যায়নি</string>
|
||||
<string name="just_now">এইমাত্র</string>
|
||||
<string name="minutes_ago">%sমি আগে</string>
|
||||
<string name="hours_ago">%sঘ আগে</string>
|
||||
<string name="days_ago">%sদি আগে</string>
|
||||
<string name="invalid_date">অবৈধ তারিখ</string>
|
||||
<string name="disable_battery_optimization">ব্যাটারি অপটিমাইজেশন নিষ্ক্রিয় করুন</string>
|
||||
<string name="input_dialog_value_invalid">অবৈধ মান</string>
|
||||
<string name="option_required">এই বিকল্পটি প্রয়োজনীয়</string>
|
||||
<string name="required_options_screen">প্রয়োজনীয় বিকল্পসমূহ</string>
|
||||
<string name="failed_to_check_updates">আপডেটগুলির জন্য পরীক্ষা করতে ব্যর্থ: %s</string>
|
||||
<string name="no_update_available">কোনো আপডেট উপলব্ধ নেই</string>
|
||||
<string name="update_check">আপডেটগুলির জন্য পরীক্ষা করা হচ্ছে…</string>
|
||||
<string name="dismiss_temporary">এখন নয়</string>
|
||||
<string name="update_available_dialog_description">ReVanced Manager-এর একটি নতুন সংস্করণ (%s) উপলব্ধ আছে।</string>
|
||||
<string name="failed_to_download_update">আপডেট ডাউনলোড করতে ব্যর্থ: %s</string>
|
||||
<string name="download">ডাউনলোড করুন</string>
|
||||
<string name="download_confirmation_metered">"আপনি বর্তমানে একটি মিটারড সংযোগে আছেন এবং আপনার পরিষেবা প্রদানকারী থেকে ডেটা চার্জ প্রযোজ্য হতে পারে।
|
||||
|
||||
আপনি কি এখনও চালিয়ে যেতে চান?"</string>
|
||||
<string name="download_update_confirmation">আপডেট ডাউনলোড করবেন?</string>
|
||||
<string name="no_contributors_found">কোনো অবদানকারী পাওয়া যায়নি</string>
|
||||
<string name="select">নির্বাচন করুন</string>
|
||||
<string name="select_deselect_all">সব নির্বাচন বা অনির্বাচন করুন</string>
|
||||
<string name="select_patches_type_dialog_description">URL বা স্থানীয় ফাইল থেকে নতুন প্যাচ যোগ করুন</string>
|
||||
<string name="local_patches_description">স্থানীয় স্টোরেজ থেকে প্যাচ যোগ করুন।</string>
|
||||
<string name="remote_patches_description">URL থেকে প্যাচ যোগ করুন। প্যাচগুলি স্বয়ংক্রিয়ভাবে আপডেট হতে পারে।</string>
|
||||
<string name="recommended">প্রস্তাবিত</string>
|
||||
<string name="installation_failed_dialog_title">ইনস্টলেশন ব্যর্থ হয়েছে</string>
|
||||
<string name="installation_cancelled_dialog_title">ইনস্টলেশন বাতিল হয়েছে</string>
|
||||
<string name="installation_blocked_dialog_title">ইনস্টলেশন ব্লক করা হয়েছে</string>
|
||||
<string name="installation_conflict_dialog_title">ইনস্টলেশন সংঘাত</string>
|
||||
<string name="installation_incompatible_dialog_title">ইনস্টলেশন অসঙ্গত</string>
|
||||
<string name="installation_invalid_dialog_title">ইনস্টলেশন অবৈধ</string>
|
||||
<string name="installation_storage_issue_dialog_title">পর্যাপ্ত স্টোরেজ নেই</string>
|
||||
<string name="installation_timeout_dialog_title">ইনস্টলেশনের সময় শেষ হয়ে গেছে</string>
|
||||
<string name="installation_failed_description">একটি অজানা কারণে ইনস্টলেশন ব্যর্থ হয়েছে। আবার চেষ্টা করবেন?</string>
|
||||
<string name="installation_aborted_description">ইনস্টলেশন ম্যানুয়ালি বাতিল করা হয়েছিল। আবার চেষ্টা করবেন?</string>
|
||||
<string name="installation_blocked_description">ইনস্টলেশন ব্লক করা হয়েছিল। আপনার ডিভাইসের নিরাপত্তা সেটিংস পর্যালোচনা করুন এবং আবার চেষ্টা করুন।</string>
|
||||
<string name="installation_conflict_description">অ্যাপটির একটি বিদ্যমান ইনস্টলেশন দ্বারা ইনস্টলেশন প্রতিরোধ করা হয়েছিল। ইনস্টল করা অ্যাপটি আনইনস্টল করে আবার চেষ্টা করবেন?</string>
|
||||
<string name="installation_incompatible_description">অ্যাপটি এই ডিভাইসের সাথে অসঙ্গত। এই ডিভাইসের সাথে সামঞ্জস্যপূর্ণ একটি APK ব্যবহার করুন এবং আবার চেষ্টা করুন।</string>
|
||||
<string name="installation_invalid_description">অ্যাপটি অবৈধ। অ্যাপটি আনইনস্টল করে আবার চেষ্টা করবেন?</string>
|
||||
<string name="installation_storage_issue_description">পর্যাপ্ত স্টোরেজ না থাকার কারণে অ্যাপটি ইনস্টল করা যায়নি। কিছু জায়গা খালি করুন এবং আবার চেষ্টা করুন।</string>
|
||||
<string name="installation_timeout_description">ইনস্টলেশনের জন্য অনেক বেশি সময় লেগেছে। আবার চেষ্টা করবেন?</string>
|
||||
<string name="reinstall">পুনরায় ইনস্টল করুন</string>
|
||||
<string name="show">দেখুন</string>
|
||||
<string name="debugging">ডিবাগিং</string>
|
||||
<string name="about_device">ডিভাইস সম্পর্কে</string>
|
||||
<string name="enter_url">URL লিখুন</string>
|
||||
<string name="next">পরবর্তী</string>
|
||||
<string name="auto_update">স্বয়ংক্রিয় আপডেট</string>
|
||||
<string name="add_patches">প্যাচ যোগ করুন</string>
|
||||
<string name="auto_update_description">একটি নতুন সংস্করণ উপলব্ধ হলে স্বয়ংক্রিয়ভাবে আপডেট করুন</string>
|
||||
<string name="patches_prereleases">প্রি-রিলিজ ব্যবহার করুন</string>
|
||||
<string name="patches_prereleases_description">%s এর প্রি-রিলিজ সংস্করণগুলি ব্যবহার করুন</string>
|
||||
<string name="patches_url">প্যাচের URL</string>
|
||||
<string name="incompatible_patches_dialog">"এই প্যাচগুলি নির্বাচিত অ্যাপ সংস্করণ (%1$s) এর সাথে সামঞ্জস্যপূর্ণ নয়।
|
||||
|
||||
আরও বিশদ দেখতে প্যাচগুলিতে ক্লিক করুন।"</string>
|
||||
<string name="incompatible_patch">অসঙ্গতিপূর্ণ প্যাচ</string>
|
||||
<string name="any_version">যেকোনো</string>
|
||||
<string name="never_show_again">আর কখনও দেখাবেন না</string>
|
||||
<string name="show_manager_update_dialog_on_launch">চালু করার সময় আপডেট বার্তা দেখান</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">চালু হওয়ার সময় যখনই একটি নতুন আপডেট উপলব্ধ হবে তখন একটি পপআপ বিজ্ঞপ্তি দেখান</string>
|
||||
<string name="failed_to_import_keystore">কিস্টোর আমদানি করতে ব্যর্থ</string>
|
||||
<string name="export">রপ্তানি করুন</string>
|
||||
<string name="confirm">নিশ্চিত করুন</string>
|
||||
</resources>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources></resources>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources></resources>
|
||||
@@ -1,455 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">Test patcheru</string>
|
||||
<string name="patches">Záplaty</string>
|
||||
<string name="cli">CLI</string>
|
||||
<string name="manager">Správce</string>
|
||||
<string name="plugin_host_permission_label">ReVanced Manager host pluginů</string>
|
||||
<string name="plugin_host_permission_description">Používá se k řízení přístupu k pluginům ReVanced Manager. Tuto funkci má pouze ReVanced Manager.</string>
|
||||
<string name="toast_copied_to_clipboard">Zkopírováno!</string>
|
||||
<string name="copy_to_clipboard">Kopírovat do schránky</string>
|
||||
<string name="dashboard">Přehled</string>
|
||||
<string name="settings">Nastavení</string>
|
||||
<string name="select_app">Vybrat aplikaci</string>
|
||||
<string name="patches_count_selected">Vybráno: %1$d/%2$d</string>
|
||||
<string name="new_downloader_plugins_notification">Dostupné nové pluginy pro stahování. Kliknutím sem je nakonfigurujete.</string>
|
||||
<string name="unsupported_architecture_warning">Oprava na této architektuře zařízení není podporována a s největší pravděpodobností selže.</string>
|
||||
<string name="import_">Importovat</string>
|
||||
<string name="import_patches">Importovat záplaty</string>
|
||||
<string name="file_field_set">Vybráno</string>
|
||||
<string name="file_field_not_set">Nevybráno</string>
|
||||
<string name="field_not_set">Nenastaveno</string>
|
||||
<string name="patches_missing">Chybí</string>
|
||||
<string name="patches_error">Chyba</string>
|
||||
<string name="patches_error_description">Záplaty nebylo možné načíst. Kliknutím zobrazíte chybu.</string>
|
||||
<string name="patches_not_downloaded">Záplaty nebyly staženy. Kliknutím sem je stáhnete.</string>
|
||||
<string name="patches_name_default">Záplaty</string>
|
||||
<string name="patches_name_fallback">Nepojmenováno</string>
|
||||
<string name="android_11_bug_dialog_title">Chyba Androidu 11</string>
|
||||
<string name="android_11_bug_dialog_description">Povolení k instalaci aplikací musí být uděleno předem, aby se předešlo chybě v systému Android 11, která by negativně ovlivnila uživatelský zážitek.</string>
|
||||
<string name="no_network_toast">Není dostupné připojení k internetu</string>
|
||||
<string name="selected_app_meta_any_version">Jakákoli dostupná verze</string>
|
||||
<string name="app_source_dialog_title">Vybrat zdroj</string>
|
||||
<string name="app_source_dialog_option_auto">Automaticky</string>
|
||||
<string name="app_source_dialog_option_auto_description">Použít všechny dostupné stahovače ke stažení aplikace</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">Žádné pluginy nejsou k dispozici</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">Připojené aplikace nelze znovu záplatovat bez oprávnění root.</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">Verze %s neodpovídá doporučené verzi</string>
|
||||
<string name="patch_item_description">Spustit záplatování aplikace</string>
|
||||
<string name="patch_selector_item">Vybrat záplaty</string>
|
||||
<string name="patch_selector_item_description">Vybráno %d záplat</string>
|
||||
<string name="no_patches_selected">Žádné záplaty nejsou vybrány</string>
|
||||
<string name="network_unavailable_warning">Vaše zařízení není připojeno k internetu. Stahování později selže.</string>
|
||||
<string name="network_metered_warning">Momentálně jste na účtovaném připojení. Mohou být účtovány poplatky za data od vašeho poskytovatele služeb.</string>
|
||||
<string name="apk_source_selector_item">Vybrat zdroj APK</string>
|
||||
<string name="apk_source_auto">Používají se všechny stahovače APK</string>
|
||||
<string name="apk_source_downloader">Používá se %s</string>
|
||||
<string name="apk_source_installed">Používá se nainstalované APK</string>
|
||||
<string name="apk_source_local">Používá se místní soubor APK</string>
|
||||
<string name="legacy_import_failed">Nepodařilo se importovat starší nastavení</string>
|
||||
<string name="auto_updates_dialog_title">Konfigurovat aktualizace</string>
|
||||
<string name="auto_updates_dialog_description">Chcete, aby ReVanced Manager pravidelně kontroloval aktualizace následujících součástí?</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">ReVanced záplaty</string>
|
||||
<string name="auto_updates_dialog_note">Tato nastavení lze později změnit.</string>
|
||||
<string name="general">Obecné</string>
|
||||
<string name="general_description">Jazyk, téma, dynamická barva</string>
|
||||
<string name="updates">Aktualizace</string>
|
||||
<string name="updates_description">Zkontrolovat aktualizace a zobrazit protokoly změn</string>
|
||||
<string name="downloads">Stahování</string>
|
||||
<string name="downloads_description">Pluginy pro stahování a stažené aplikace</string>
|
||||
<string name="import_export">Import & export</string>
|
||||
<string name="import_export_description">Úložiště klíčů, možnosti a výběr záplat</string>
|
||||
<string name="advanced">Pokročilé</string>
|
||||
<string name="advanced_description">URL API, limit paměti, ladění</string>
|
||||
<string name="about">O aplikaci</string>
|
||||
<string name="opensource_licenses">Licence otevřeného zdroje</string>
|
||||
<string name="opensource_licenses_description">Zobrazit všechny knihovny použité k vytvoření této aplikace</string>
|
||||
<string name="contributors">Přispěvatelé</string>
|
||||
<string name="contributors_description">Zobrazit přispěvatele ReVanced</string>
|
||||
<string name="dynamic_color">Dynamická barva</string>
|
||||
<string name="dynamic_color_description">Přizpůsobit barvy tapetě</string>
|
||||
<string name="pure_black_theme">Čistě černé téma</string>
|
||||
<string name="pure_black_theme_description">Použít čistě černé pozadí pro tmavé téma</string>
|
||||
<string name="theme">Téma</string>
|
||||
<string name="theme_description">Vybrat mezi světlým nebo tmavým tématem</string>
|
||||
<string name="language">Jazyk</string>
|
||||
<string name="language_description">Vybrat jazyk zobrazení aplikace</string>
|
||||
<string name="language_system_default">Výchozí systémové</string>
|
||||
<string name="safeguards">Ochranná opatření</string>
|
||||
<string name="patch_compat_check">Vypnout kontrolu kompatibility verzí</string>
|
||||
<string name="patch_compat_check_description">Neomezovat záplaty na kompatibilní verze aplikací</string>
|
||||
<string name="patch_compat_check_confirmation">"Výběr nekompatibilních záplat může vést k poškozené aplikaci.
|
||||
|
||||
Chcete přesto pokračovat?"</string>
|
||||
<string name="suggested_version_safeguard">Vyžadovat doporučenou verzi aplikace</string>
|
||||
<string name="suggested_version_safeguard_description">Vynutit výběr doporučené verze aplikace</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"Výběr aplikace, která není doporučenou verzí, může způsobit neočekávané problémy.
|
||||
|
||||
Chcete přesto pokračovat?"</string>
|
||||
<string name="patch_selection_safeguard">Povolit změnu výběru a možností záplat</string>
|
||||
<string name="patch_selection_safeguard_description">Nezabránit výběru nebo zrušení výběru záplat a přizpůsobení možností</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"Změna výběru záplat může způsobit neočekávané problémy.
|
||||
|
||||
Povolit přesto?"</string>
|
||||
<string name="universal_patches_safeguard">Povolit použití univerzálních záplat</string>
|
||||
<string name="universal_patches_safeguard_description">Nezabránit použití univerzálních záplat</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"Univerzální záplaty nejsou tak dobře testovány jako ty, které cílí na konkrétní aplikace.
|
||||
|
||||
Povolit přesto?"</string>
|
||||
<string name="import_keystore">Importovat úložiště klíčů</string>
|
||||
<string name="import_keystore_description">Importovat vlastní úložiště klíčů</string>
|
||||
<string name="import_keystore_dialog_title">Zadat přihlašovací údaje k úložišti klíčů</string>
|
||||
<string name="import_keystore_dialog_description">Pro import úložiště klíčů budete muset zadat jeho přihlašovací údaje.</string>
|
||||
<string name="import_keystore_dialog_alias_field">Uživatelské jméno (Alias)</string>
|
||||
<string name="import_keystore_dialog_password_field">Heslo</string>
|
||||
<string name="import_keystore_dialog_button">Importovat</string>
|
||||
<string name="import_keystore_wrong_credentials">Chybné přihlašovací údaje k úložišti klíčů</string>
|
||||
<string name="import_keystore_success">Úložiště klíčů importováno</string>
|
||||
<string name="export_keystore">Exportovat úložiště klíčů</string>
|
||||
<string name="export_keystore_description">Exportovat aktuální úložiště klíčů</string>
|
||||
<string name="export_keystore_unavailable">Žádné úložiště klíčů k exportu</string>
|
||||
<string name="export_keystore_success">Úložiště klíčů exportováno</string>
|
||||
<string name="regenerate_keystore">Regenerovat úložiště klíčů</string>
|
||||
<string name="regenerate_keystore_description">Vygenerovat nové úložiště klíčů</string>
|
||||
<string name="regenerate_keystore_dialog_description">"Chystáte se regenerovat své úložiště klíčů, které správce použije během procesu záplatování.
|
||||
|
||||
Nebudete moci aktualizovat dříve nainstalované aplikace z tohoto zdroje."</string>
|
||||
<string name="regenerate_keystore_success">Úložiště klíčů bylo úspěšně nahrazeno</string>
|
||||
<string name="import_patch_selection">Importovat výběr záplat</string>
|
||||
<string name="import_patch_selection_description">Importovat výběr záplat ze souboru JSON</string>
|
||||
<string name="import_patch_selection_fail">Nepodařilo se importovat výběr záplat: %s</string>
|
||||
<string name="import_patch_selection_success">Výběr záplat importován</string>
|
||||
<string name="export_patch_selection">Exportovat výběr záplat</string>
|
||||
<string name="export_patch_selection_description">Exportovat výběr záplat do souboru JSON</string>
|
||||
<string name="export_patch_selection_fail">Nepodařilo se exportovat výběr záplat: %s</string>
|
||||
<string name="export_patch_selection_success">Výběr záplat exportován</string>
|
||||
<string name="reset_patch_selection">Resetovat výběr záplat</string>
|
||||
<string name="reset_patch_selection_description">Resetovat uložený výběr záplat</string>
|
||||
<string name="reset_patch_options">Resetovat možnosti záplat</string>
|
||||
<string name="reset_patch_options_description">Resetovat uložené možnosti záplat</string>
|
||||
<string name="reset_patch_selection_success">Výběr záplat byl resetován</string>
|
||||
<string name="patch_selection_reset_all">Globálně resetovat výběr záplat</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">Chystáte se resetovat všechny výběry záplat. Každou záplatu budete muset vybrat ručně znovu.</string>
|
||||
<string name="patch_selection_reset_all_description">Resetuje všechny výběry záplat</string>
|
||||
<string name="patch_selection_reset_package">Resetovat výběr záplat pro aplikaci</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">Chystáte se resetovat výběr záplat pro aplikaci \"%s\". Každou záplatu budete muset vybrat ručně znovu.</string>
|
||||
<string name="patch_selection_reset_package_description">Resetuje výběr záplat pro jednu aplikaci</string>
|
||||
<string name="patch_selection_reset_patches">Resetovat výběr záplat (jednotlivý)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">Chystáte se resetovat výběr záplat pro \"%s\". Každou záplatu budete muset vybrat znovu ručně.</string>
|
||||
<string name="patch_selection_reset_patches_description">Resetuje výběr záplat pro konkrétní sadu záplat</string>
|
||||
<string name="patch_options_reset_package">Resetovat možnosti záplat pro aplikaci</string>
|
||||
<string name="patch_options_reset_package_dialog_description">Chystáte se resetovat možnosti záplat pro aplikaci \"%s\". Každou možnost budete muset znovu použít.</string>
|
||||
<string name="patch_options_reset_package_description">Resetuje možnosti záplat pro jednu aplikaci</string>
|
||||
<string name="patch_options_reset_patches">Resetovat možnosti záplat (jednotlivé)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">Chystáte se resetovat možnosti záplat pro \"%s\". Každou možnost budete muset znovu použít.</string>
|
||||
<string name="patch_options_reset_patches_description">Resetuje možnosti záplat pro konkrétní sadu záplat</string>
|
||||
<string name="patch_options_reset_all">Globálně resetovat možnosti záplat</string>
|
||||
<string name="patch_options_reset_all_dialog_description">Chystáte se resetovat všechny možnosti záplat. Každou možnost budete muset znovu použít.</string>
|
||||
<string name="patch_options_reset_all_description">Resetuje všechny možnosti záplat</string>
|
||||
<string name="downloader_plugins">Pluginy</string>
|
||||
<string name="downloader_plugin_state_trusted">Důvěryhodné</string>
|
||||
<string name="downloader_plugin_state_failed">Nepodařilo se načíst. Klikněte pro více podrobností</string>
|
||||
<string name="downloader_plugin_state_untrusted">Nedůvěryhodné</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">Důvěřovat pluginu?</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">Zrušit důvěru?</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">Pokračováním povolíte tomuto pluginu spuštění ve vašem systému.\n\nPovolte tento plugin pouze v případě, že mu důvěřujete. Pluginy mohou spouštět libovolný kód a mohou kompromitovat vaše zařízení.</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">Podpis:\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">Plugin:\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">Smazat vybrané aplikace</string>
|
||||
<string name="downloader_plugin_delete_apps_description">Opravdu chcete smazat vybrané aplikace?</string>
|
||||
<string name="downloader_settings_no_apps">Nebyly nalezeny žádné stažené aplikace.</string>
|
||||
<string name="search_apps">Hledat aplikace…</string>
|
||||
<string name="loading_body">Načítání…</string>
|
||||
<string name="downloading_patches">Stahování záplat…</string>
|
||||
<string name="options">Možnosti</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="yes">Ano</string>
|
||||
<string name="no">Ne</string>
|
||||
<string name="edit">Upravit</string>
|
||||
<string name="dialog_input_placeholder">Hodnota</string>
|
||||
<string name="reset">Resetovat</string>
|
||||
<string name="share">Sdílet</string>
|
||||
<string name="patch">Záplata</string>
|
||||
<string name="select_from_storage">Vybrat z úložiště</string>
|
||||
<string name="select_from_storage_description">Vybrat soubor APK z úložiště pomocí správce souborů</string>
|
||||
<string name="suggested_version_info">Doporučená verze: %s</string>
|
||||
<string name="type_anything">Napište cokoli pro pokračování</string>
|
||||
<string name="search">Hledat záplaty…</string>
|
||||
<string name="apply">Použít</string>
|
||||
<string name="help">Nápověda</string>
|
||||
<string name="back">Zpět</string>
|
||||
<string name="warning">Upozornění</string>
|
||||
<string name="add">Přidat</string>
|
||||
<string name="close">Zavřít</string>
|
||||
<string name="clear">Vyčistit</string>
|
||||
<string name="system">Systém</string>
|
||||
<string name="light">Světlý</string>
|
||||
<string name="dark">Tmavý</string>
|
||||
<string name="appearance">Vzhled</string>
|
||||
<string name="networking">Síť</string>
|
||||
<string name="allow_metered_networks">Povolit sítě s omezeným objemem dat</string>
|
||||
<string name="allow_metered_networks_description">Povoluje automatické aktualizace v sítích s omezeným objemem dat.\n Aplikace může stále upozorňovat na sítě s omezeným objemem dat pro manuální operace.</string>
|
||||
<string name="downloaded_apps">Stažené aplikace</string>
|
||||
<string name="process_runtime">Spustit Patcher v jiném procesu (experimentální)</string>
|
||||
<string name="process_runtime_description">To je rychlejší a umožňuje Patcheru využívat více paměti</string>
|
||||
<string name="process_runtime_memory_limit">Limit paměti procesu Patcheru</string>
|
||||
<string name="process_runtime_memory_limit_description">Maximální množství paměti, které může proces Patcheru využívat (v megabytech)</string>
|
||||
<string name="debug_logs_export">Exportovat ladicí protokoly</string>
|
||||
<string name="debug_logs_export_read_failed">Nepodařilo se přečíst protokoly (kód chyby %d)</string>
|
||||
<string name="debug_logs_export_failed">Nepodařilo se exportovat protokoly</string>
|
||||
<string name="debug_logs_export_success">Exportované protokoly</string>
|
||||
<string name="api_url">URL API</string>
|
||||
<string name="api_url_description">API používané ke stahování potřebných souborů</string>
|
||||
<string name="api_url_dialog_title">Změnit URL API</string>
|
||||
<string name="api_url_dialog_description">Změnit URL API aplikace ReVanced Manager. ReVanced Manager používá API ke stahování záplat a aktualizací.</string>
|
||||
<string name="api_url_dialog_warning">ReVanced Manager se připojuje k API pro stahování záplat a aktualizací. Ujistěte se, že mu důvěřujete.</string>
|
||||
<string name="api_url_dialog_save">Nastavit</string>
|
||||
<string name="api_url_dialog_reset">Resetovat URL API</string>
|
||||
<string name="device">Zařízení</string>
|
||||
<string name="device_android_version">Verze Androidu</string>
|
||||
<string name="device_model">Model</string>
|
||||
<string name="device_architectures">Architektury CPU</string>
|
||||
<string name="device_memory_limit">Limity paměti</string>
|
||||
<string name="device_memory_limit_format">%1$dMB (Normální) - %2$dMB (Velké)</string>
|
||||
<string name="patches_force_download">Vynutit stažení všech záplat</string>
|
||||
<string name="patches_reset">Resetovat záplaty</string>
|
||||
<string name="patching">Záplatování</string>
|
||||
<string name="signing">Podepisování</string>
|
||||
<string name="storage">Úložiště</string>
|
||||
<string name="no_patch_found">Žádná záplata nebyla nalezena. Zkontrolujte své záplaty</string>
|
||||
<string name="tab_apps">Aplikace</string>
|
||||
<string name="tab_patches">Záplaty</string>
|
||||
<string name="delete">Smazat</string>
|
||||
<string name="refresh">Obnovit</string>
|
||||
<string name="continue_anyways">Přesto pokračovat</string>
|
||||
<string name="download_another_version">Stáhnout jinou verzi</string>
|
||||
<string name="download_app">Stáhnout aplikaci</string>
|
||||
<string name="download_apk">Stáhnout soubor APK</string>
|
||||
<string name="patches_download_fail">Nepodařilo se stáhnout záplaty: %s</string>
|
||||
<string name="patches_replace_fail">Nepodařilo se importovat záplaty: %s</string>
|
||||
<string name="no_patched_apps_found">Nebyly nalezeny žádné záplatované aplikace</string>
|
||||
<string name="tap_on_patches">Klepnutím na záplaty získáte o nich více informací</string>
|
||||
<string name="patches_selected">%s vybráno</string>
|
||||
<string name="incompatible_patches">Nekompatibilní záplaty</string>
|
||||
<string name="universal_patches">Univerzální záplaty</string>
|
||||
<string name="patch_selection_reset_toast">Výběr záplat a možnosti byly resetovány na doporučené výchozí hodnoty</string>
|
||||
<string name="patch_options_reset_toast">Možnosti záplat byly resetovány</string>
|
||||
<string name="non_suggested_version_warning_title">Nenavrhovaná verze</string>
|
||||
<string name="non_suggested_version_warning_description">"Verze aplikace, kterou jste vybrali, neodpovídá doporučené verzi.\nPoužijte doporučenou verzi: %s\n\nChcete-li přesto pokračovat, vypněte \"Vyžadovat doporučenou verzi aplikace\" v rozšířeném nastavení."</string>
|
||||
<string name="selection_warning_title">Přestat používat výchozí nastavení?</string>
|
||||
<string name="selection_warning_description">"Doporučuje se používat výchozí výběr záplat a možnosti. Jejich změna může vést k neočekávaným problémům.\n\nPřed přepínáním záplat musíte v rozšířeném nastavení zapnout \"Povolit změnu výběru záplat a možností\"."</string>
|
||||
<string name="universal_patch_warning_description">"Univerzální záplaty mají obecnější použití a nefungují tak spolehlivě jako záplaty zaměřené na konkrétní aplikace. Při jejich používání se můžete setkat s problémy.\n\nPřed použitím univerzálních záplat musíte v rozšířeném nastavení zapnout \"Povolit použití univerzálních záplat\"."</string>
|
||||
<string name="this_version">Tato verze</string>
|
||||
<string name="universal">Libovolná aplikace</string>
|
||||
<string name="search_patches">Hledat záplaty</string>
|
||||
<string name="app_version_not_compatible">"Tato záplata není kompatibilní s vybranou verzí aplikace (%1$s)\n\nJe kompatibilní pouze s následujícími verzemi: %2$s"</string>
|
||||
<string name="continue_with_version">Pokračovat s touto verzí?</string>
|
||||
<string name="version_not_compatible">Ne všechny záplaty jsou kompatibilní s touto verzí (%s). Chcete přesto pokračovat?</string>
|
||||
<string name="download_application">Stáhnout aplikaci?</string>
|
||||
<string name="app_not_installed">Vybraná aplikace není nainstalovaná. Chcete ji stáhnout?</string>
|
||||
<string name="failed_to_load_apk">Nepodařilo se načíst APK</string>
|
||||
<string name="loading">Načítání…</string>
|
||||
<string name="not_installed">Nenainstalováno</string>
|
||||
<string name="installed">Nainstalováno</string>
|
||||
<string name="app_info">Informace o aplikaci</string>
|
||||
<string name="uninstall">Odinstalovat</string>
|
||||
<string name="unpatch">Zrušit záplatu</string>
|
||||
<string name="repatch">Znovu záplatovat</string>
|
||||
<string name="install_type">Typ instalace</string>
|
||||
<string name="package_name">Název balíčku</string>
|
||||
<string name="original_package_name">Původní název balíčku</string>
|
||||
<string name="applied_patches">Použité záplaty</string>
|
||||
<string name="view_applied_patches">Zobrazit použité záplaty</string>
|
||||
<string name="default_install">Výchozí</string>
|
||||
<string name="mount_install">Připojit</string>
|
||||
<string name="mounted">Připojeno</string>
|
||||
<string name="not_mounted">Nepřipojeno</string>
|
||||
<string name="mount">Připojit</string>
|
||||
<string name="unmount">Odpojit</string>
|
||||
<string name="failed_to_mount">Nepodařilo se připojit: %s</string>
|
||||
<string name="failed_to_unmount">Nepodařilo se odpojit: %s</string>
|
||||
<string name="unpatch_app">Odzáplatovat aplikaci?</string>
|
||||
<string name="unpatch_description">Opravdu chcete tuto aplikaci odzáplatovat?</string>
|
||||
<string name="downloader_invalid_version">Downloader nestáhl správnou verzi</string>
|
||||
<string name="downloader_app_not_found">Downloader nenašel aplikaci</string>
|
||||
<string name="downloader_error">Chyba downloaderu: %s</string>
|
||||
<string name="downloader_no_plugins_installed">Není nainstalován žádný downloader.</string>
|
||||
<string name="downloader_no_plugins_available">Jsou nainstalovány downloadery, ale žádný není důvěryhodný. Zkontrolujte svá nastavení.</string>
|
||||
<string name="already_patched">Již záplatováno</string>
|
||||
<string name="patch_selector_sheet_filter_title">Filtr</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">Kompatibilita</string>
|
||||
<string name="string_option_menu_description">Další možnosti</string>
|
||||
<string name="option_preset_custom_value">Vlastní hodnota</string>
|
||||
<string name="path_selector">Vybrat z úložiště</string>
|
||||
<string name="path_selector_parent_dir">Předchozí adresář</string>
|
||||
<string name="path_selector_dirs">Adresáře</string>
|
||||
<string name="path_selector_files">Soubory</string>
|
||||
<string name="show_password_field">Zobrazit heslo</string>
|
||||
<string name="hide_password_field">Skrýt heslo</string>
|
||||
<string name="installer">Instalátor</string>
|
||||
<string name="install_app">Nainstalovat</string>
|
||||
<string name="install_app_success">Aplikace nainstalována</string>
|
||||
<string name="install_app_fail">Nepodařilo se nainstalovat aplikaci: %s</string>
|
||||
<string name="reinstall_app_fail">Nepodařilo se přeinstalovat aplikaci: %s</string>
|
||||
<string name="uninstall_app_fail">Nepodařilo se odinstalovat aplikaci: %s</string>
|
||||
<string name="open_app">Otevřít</string>
|
||||
<string name="save_apk">Uložit APK</string>
|
||||
<string name="save_apk_success">APK uloženo</string>
|
||||
<string name="sign_fail">Nepodařilo se podepsat APK: %s</string>
|
||||
<string name="save_logs">Uložit protokoly</string>
|
||||
<string name="plugin_activity_dialog_body">Pro pokračování s tímto pluginem je vyžadována interakce uživatele.</string>
|
||||
<string name="select_install_type">Vyberte typ instalace</string>
|
||||
<string name="patcher_step_group_preparing">Příprava</string>
|
||||
<string name="patcher_step_load_patches">Načíst záplaty</string>
|
||||
<string name="patcher_step_unpack">Přečíst soubor APK</string>
|
||||
<string name="patcher_step_group_patching">Záplatování</string>
|
||||
<string name="patcher_step_group_saving">Ukládání</string>
|
||||
<string name="patcher_step_write_patched">Zapsat záplatovaný soubor APK</string>
|
||||
<string name="patcher_step_sign_apk">Podepsat záplatovaný soubor APK</string>
|
||||
<string name="patcher_notification_title">Záplatování probíhá…</string>
|
||||
<string name="patcher_notification_text">Klepnutím se vrátíte k záplatovači</string>
|
||||
<string name="patcher_stop_confirm_title">Zastavit záplatovač</string>
|
||||
<string name="patcher_stop_confirm_description">Opravdu chcete zastavit proces záplatování?</string>
|
||||
<string name="patcher_install_in_progress">Instalace probíhá. Čekejte prosím</string>
|
||||
<string name="execute_patches">Spustit záplaty</string>
|
||||
<string name="executing_patch">Spustit %s</string>
|
||||
<string name="failed_to_execute_patch">Nepodařilo se spustit %s</string>
|
||||
<string name="step_completed">dokončeno</string>
|
||||
<string name="step_failed">selhalo</string>
|
||||
<string name="step_running">běží</string>
|
||||
<string name="step_waiting">čeká se</string>
|
||||
<string name="expand_content">rozbalit</string>
|
||||
<string name="collapse_content">sbalit</string>
|
||||
<string name="drag_handle">změnit pořadí</string>
|
||||
<string name="more">Více</string>
|
||||
<string name="less">Méně</string>
|
||||
<string name="continue_">Pokračovat</string>
|
||||
<string name="dismiss">Zavřít</string>
|
||||
<string name="permanent_dismiss">Už to nezobrazovat</string>
|
||||
<string name="donate">Darovat</string>
|
||||
<string name="website">Webová stránka</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="contact">Kontakt</string>
|
||||
<string name="version">Verze</string>
|
||||
<string name="submit_feedback">Odeslat problém nebo zpětnou vazbu</string>
|
||||
<string name="submit_feedback_description">Pomozte nám vylepšit tuto aplikaci</string>
|
||||
<string name="developer_options">Možnosti pro vývojáře</string>
|
||||
<string name="developer_options_description">Možnosti pro ladění problémů</string>
|
||||
<string name="patches_update_success">Aktualizace úspěšná</string>
|
||||
<string name="patches_update_unavailable">Není dostupná žádná aktualizace</string>
|
||||
<string name="view_patches">Zobrazit záplaty</string>
|
||||
<string name="patches_view_any_version">Jakákoli verze</string>
|
||||
<string name="patches_view_any_package">Jakýkoli balíček</string>
|
||||
<string name="patches_delete_single_dialog_description">Opravdu chcete smazat \"%s\"?</string>
|
||||
<string name="patches_delete_multiple_dialog_description">Opravdu chcete smazat vybrané záplaty?</string>
|
||||
<string name="about_revanced_manager">O aplikaci ReVanced Manager</string>
|
||||
<string name="revanced_manager_description">ReVanced Manager je aplikace pro Android, která používá ReVanced Patcher k záplatování aplikací pro Android. Umožňuje stahovat a záplatovat aplikace vlastními záplatami a spravovat proces záplatování.</string>
|
||||
<string name="developer_options_taps">%d klepnutí zbývá</string>
|
||||
<string name="developer_options_enabled">Možnosti pro vývojáře povoleny</string>
|
||||
<string name="developer_options_already_enabled">Možnosti pro vývojáře jsou již povoleny</string>
|
||||
<string name="update_available">Je dostupná aktualizace</string>
|
||||
<string name="current_version">Aktuální verze: %s</string>
|
||||
<string name="new_version">Nová verze: %s</string>
|
||||
<string name="ready_to_install_update">Připraveno k instalaci aktualizace</string>
|
||||
<string name="update_completed">Aktualizace nainstalována</string>
|
||||
<string name="install_update_manager_failed">Nepodařilo se nainstalovat aktualizaci</string>
|
||||
<string name="manual_update_check">Zkontrolovat aktualizace</string>
|
||||
<string name="manual_update_check_description">Ručně zkontrolovat aktualizace</string>
|
||||
<string name="update_checking_manager">Zkontrolovat aktualizace při spuštění</string>
|
||||
<string name="update_checking_manager_description">Zkontrolovat nové verze ReVanced Manager při spuštění aplikace</string>
|
||||
<string name="manager_prereleases">Použít předběžné verze</string>
|
||||
<string name="manager_prereleases_description">Použít předběžné verze ReVanced Manager</string>
|
||||
<string name="changelog">Zobrazit protokoly změn</string>
|
||||
<string name="changelog_loading">Načítání protokolu změn</string>
|
||||
<string name="changelog_download_fail">Nepodařilo se stáhnout protokol změn: %s</string>
|
||||
<string name="changelog_description">Podívejte se na nejnovější změny v této aktualizaci</string>
|
||||
<string name="battery_optimization_notification">Optimalizace baterie musí být vypnuty, aby ReVanced Manager správně fungoval na pozadí. Klikněte zde pro vypnutí optimalizací.</string>
|
||||
<string name="installing_manager_update">Instalace aktualizace…</string>
|
||||
<string name="downloading_manager_update">Stahování aktualizace…</string>
|
||||
<string name="download_manager_failed">Nepodařilo se stáhnout aktualizaci: %s</string>
|
||||
<string name="cancel">Zrušit</string>
|
||||
<string name="save">Uložit</string>
|
||||
<string name="save_with_count">Uložit (%1$s)</string>
|
||||
<string name="update">Aktualizovat</string>
|
||||
<string name="empty">Prázdné</string>
|
||||
<string name="installing_message">"Klepněte na <b>Aktualizovat</b>, když budete vyzváni.\nReVanced Manager se při aktualizaci zavře."</string>
|
||||
<string name="no_changelogs_found">Nebyly nalezeny žádné protokoly změn</string>
|
||||
<string name="just_now">Právě teď</string>
|
||||
<string name="minutes_ago">před %sm</string>
|
||||
<string name="hours_ago">před %sh</string>
|
||||
<string name="days_ago">před %sd</string>
|
||||
<string name="invalid_date">Neplatné datum</string>
|
||||
<string name="disable_battery_optimization">Zakázat optimalizaci baterie</string>
|
||||
<string name="input_dialog_value_invalid">Neplatná hodnota</string>
|
||||
<string name="option_required">Tato možnost je povinná</string>
|
||||
<string name="required_options_screen">Požadované možnosti</string>
|
||||
<string name="failed_to_check_updates">Nepodařilo se zkontrolovat aktualizace: %s</string>
|
||||
<string name="no_update_available">Není dostupná žádná aktualizace</string>
|
||||
<string name="update_check">Kontrola aktualizací…</string>
|
||||
<string name="dismiss_temporary">Ne teď</string>
|
||||
<string name="update_available_dialog_description">Je dostupná nová verze ReVanced Manager (%s).</string>
|
||||
<string name="failed_to_download_update">Nepodařilo se stáhnout aktualizaci: %s</string>
|
||||
<string name="download">Stáhnout</string>
|
||||
<string name="download_confirmation_metered">"Momentálně jste připojeni k síti s omezeným objemem dat a mohou být účtovány poplatky za data od vašeho poskytovatele služeb.\n\nChcete přesto pokračovat?"</string>
|
||||
<string name="download_update_confirmation">Stáhnout aktualizaci?</string>
|
||||
<string name="no_contributors_found">Nebyli nalezeni žádní přispěvatelé</string>
|
||||
<string name="select">Vybrat</string>
|
||||
<string name="select_deselect_all">Vybrat nebo zrušit výběr všech</string>
|
||||
<string name="select_patches_type_dialog_description">Přidat nové záplaty z URL nebo místních souborů</string>
|
||||
<string name="local_patches_description">Přidat záplaty z místního úložiště.</string>
|
||||
<string name="remote_patches_description">Přidat záplaty z URL. Záplaty se mohou automaticky aktualizovat.</string>
|
||||
<string name="recommended">Doporučeno</string>
|
||||
<string name="installation_failed_dialog_title">Instalace selhala</string>
|
||||
<string name="installation_cancelled_dialog_title">Instalace zrušena</string>
|
||||
<string name="installation_blocked_dialog_title">Instalace blokována</string>
|
||||
<string name="installation_conflict_dialog_title">Konflikt instalace</string>
|
||||
<string name="installation_incompatible_dialog_title">Instalace nekompatibilní</string>
|
||||
<string name="installation_invalid_dialog_title">Instalace neplatná</string>
|
||||
<string name="installation_storage_issue_dialog_title">Nedostatek místa v úložišti</string>
|
||||
<string name="installation_timeout_dialog_title">Časový limit instalace vypršel</string>
|
||||
<string name="installation_failed_description">Instalace selhala z neznámého důvodu. Zkusit znovu?</string>
|
||||
<string name="installation_aborted_description">Instalace byla ručně zrušena. Zkusit znovu?</string>
|
||||
<string name="installation_blocked_description">Instalace byla zablokována. Zkontrolujte nastavení zabezpečení vašeho zařízení a zkuste to znovu.</string>
|
||||
<string name="installation_conflict_description">Instalaci zabránila existující instalace aplikace. Odinstalovat nainstalovanou aplikaci a zkusit to znovu?</string>
|
||||
<string name="installation_incompatible_description">Aplikace je s tímto zařízením nekompatibilní. Použijte APK, který je s tímto zařízením kompatibilní, a zkuste to znovu.</string>
|
||||
<string name="installation_invalid_description">Aplikace je neplatná. Odinstalovat aplikaci a zkusit to znovu?</string>
|
||||
<string name="installation_storage_issue_description">Aplikaci se nepodařilo nainstalovat kvůli nedostatku místa v úložišti. Uvolněte místo a zkuste to znovu.</string>
|
||||
<string name="installation_timeout_description">Instalace trvala příliš dlouho. Zkusit znovu?</string>
|
||||
<string name="reinstall">Přeinstalovat</string>
|
||||
<string name="show">Zobrazit</string>
|
||||
<string name="debugging">Ladění</string>
|
||||
<string name="about_device">O zařízení</string>
|
||||
<string name="enter_url">Zadat URL</string>
|
||||
<string name="next">Další</string>
|
||||
<string name="auto_update">Automatická aktualizace</string>
|
||||
<string name="add_patches">Přidat záplaty</string>
|
||||
<string name="auto_update_description">Automaticky aktualizovat, když je dostupná nová verze</string>
|
||||
<string name="patches_prereleases">Použít předběžné verze</string>
|
||||
<string name="patches_prereleases_description">Použít předběžné verze %s</string>
|
||||
<string name="patches_url">URL záplat</string>
|
||||
<string name="incompatible_patches_dialog">"Tyto záplaty nejsou kompatibilní s vybranou verzí aplikace (%1$s).\n\nKliknutím na záplaty zobrazíte další podrobnosti."</string>
|
||||
<string name="incompatible_patch">Nekompatibilní záplata</string>
|
||||
<string name="any_version">Libovolný</string>
|
||||
<string name="never_show_again">Už nikdy nezobrazovat</string>
|
||||
<string name="show_manager_update_dialog_on_launch">Zobrazit zprávu o aktualizaci při spuštění</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">Zobrazit vyskakovací oznámení, kdykoli je při spuštění dostupná nová aktualizace</string>
|
||||
<string name="failed_to_import_keystore">Nepodařilo se importovat úložiště klíčů</string>
|
||||
<string name="export">Exportovat</string>
|
||||
<string name="confirm">Potvrdit</string>
|
||||
</resources>
|
||||
@@ -1,455 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">Patcher-test</string>
|
||||
<string name="patches">Patches</string>
|
||||
<string name="cli">CLI</string>
|
||||
<string name="manager">Manager</string>
|
||||
<string name="plugin_host_permission_label">ReVanced Manager pluginhost</string>
|
||||
<string name="plugin_host_permission_description">Bruges til at kontrollere adgang til ReVanced Manager-plugins. Kun ReVanced Manager har dette.</string>
|
||||
<string name="toast_copied_to_clipboard">Kopieret!</string>
|
||||
<string name="copy_to_clipboard">Kopiér til udklipsholder</string>
|
||||
<string name="dashboard">Dashboard</string>
|
||||
<string name="settings">Indstillinger</string>
|
||||
<string name="select_app">Vælg en app</string>
|
||||
<string name="patches_count_selected">%1$d/%2$d valgt</string>
|
||||
<string name="new_downloader_plugins_notification">Nye downloader-plugins er tilgængelige. Klik her for at konfigurere dem.</string>
|
||||
<string name="unsupported_architecture_warning">Patching på denne enhedsarkitektur understøttes ikke og vil sandsynligvis mislykkes.</string>
|
||||
<string name="import_">Importér</string>
|
||||
<string name="import_patches">Importér patches</string>
|
||||
<string name="file_field_set">Valgt</string>
|
||||
<string name="file_field_not_set">Ikke valgt</string>
|
||||
<string name="field_not_set">Ikke indstillet</string>
|
||||
<string name="patches_missing">Mangler</string>
|
||||
<string name="patches_error">Fejl</string>
|
||||
<string name="patches_error_description">Patches kunne ikke indlæses. Klik for at se fejlen</string>
|
||||
<string name="patches_not_downloaded">Patches er ikke blevet downloadet. Klik her for at downloade det</string>
|
||||
<string name="patches_name_default">Patches</string>
|
||||
<string name="patches_name_fallback">Unavngivet</string>
|
||||
<string name="android_11_bug_dialog_title">Android 11-fejl</string>
|
||||
<string name="android_11_bug_dialog_description">App-installationstilladelsen skal gives på forhånd for at undgå en fejl i Android 11-systemet, som vil påvirke brugeroplevelsen negativt.</string>
|
||||
<string name="no_network_toast">Ingen internetforbindelse tilgængelig</string>
|
||||
<string name="selected_app_meta_any_version">Enhver tilgængelig version</string>
|
||||
<string name="app_source_dialog_title">Vælg kilde</string>
|
||||
<string name="app_source_dialog_option_auto">Automatisk</string>
|
||||
<string name="app_source_dialog_option_auto_description">Brug alle tilgængelige downloadere til at downloade appen</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">Ingen plugins tilgængelige</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">Monterede apps kan ikke patches igen uden root-adgang</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">Version %s stemmer ikke overens med den foreslåede version</string>
|
||||
<string name="patch_item_description">Start patching af applikationen</string>
|
||||
<string name="patch_selector_item">Vælg patches</string>
|
||||
<string name="patch_selector_item_description">%d patches valgt</string>
|
||||
<string name="no_patches_selected">Ingen patches valgt</string>
|
||||
<string name="network_unavailable_warning">Din enhed er ikke forbundet til internettet. Download vil mislykkes senere.</string>
|
||||
<string name="network_metered_warning">Du er i øjeblikket på en forbrugsbaseret forbindelse. Datagebyrer fra din tjenesteudbyder kan forekomme.</string>
|
||||
<string name="apk_source_selector_item">Vælg APK-kilde</string>
|
||||
<string name="apk_source_auto">Bruger alle APK-downloadere</string>
|
||||
<string name="apk_source_downloader">Bruger %s</string>
|
||||
<string name="apk_source_installed">Bruger installeret APK</string>
|
||||
<string name="apk_source_local">Bruger en lokal APK-fil</string>
|
||||
<string name="legacy_import_failed">Kunne ikke importere ældre indstillinger</string>
|
||||
<string name="auto_updates_dialog_title">Konfigurer opdateringer</string>
|
||||
<string name="auto_updates_dialog_description">Vil du have ReVanced Manager til periodisk at tjekke for opdateringer til følgende komponenter?</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">ReVanced Patches</string>
|
||||
<string name="auto_updates_dialog_note">Disse indstillinger kan ændres senere.</string>
|
||||
<string name="general">Generelt</string>
|
||||
<string name="general_description">Sprog, tema, dynamisk farve</string>
|
||||
<string name="updates">Opdateringer</string>
|
||||
<string name="updates_description">Søg efter opdateringer og se ændringslogfiler</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="downloads_description">Downloader-plugins og downloadede apps</string>
|
||||
<string name="import_export">Importér & eksportér</string>
|
||||
<string name="import_export_description">Keystore, patch-muligheder og -valg</string>
|
||||
<string name="advanced">Avanceret</string>
|
||||
<string name="advanced_description">API URL, hukommelsesgrænse, fejlfinding</string>
|
||||
<string name="about">Om</string>
|
||||
<string name="opensource_licenses">Open source-licenser</string>
|
||||
<string name="opensource_licenses_description">Se alle de biblioteker, der er brugt til at lave denne applikation</string>
|
||||
<string name="contributors">Bidragsydere</string>
|
||||
<string name="contributors_description">Se bidragsydere til ReVanced</string>
|
||||
<string name="dynamic_color">Dynamisk farve</string>
|
||||
<string name="dynamic_color_description">Tilpas farver til tapetet</string>
|
||||
<string name="pure_black_theme">Rent sort tema</string>
|
||||
<string name="pure_black_theme_description">Brug rent sorte baggrunde til mørkt tema</string>
|
||||
<string name="theme">Tema</string>
|
||||
<string name="theme_description">Vælg mellem lyst eller mørkt tema</string>
|
||||
<string name="language">Sprog</string>
|
||||
<string name="language_description">Vælg appens visningssprog</string>
|
||||
<string name="language_system_default">Systemstandard</string>
|
||||
<string name="safeguards">Sikkerhedsforanstaltninger</string>
|
||||
<string name="patch_compat_check">Deaktiver kontrol af versionskompatibilitet</string>
|
||||
<string name="patch_compat_check_description">Begræns ikke patches til kompatible app-versioner</string>
|
||||
<string name="patch_compat_check_confirmation">"Valg af inkompatible patches kan resultere i en ødelagt app.
|
||||
|
||||
Vil du fortsætte alligevel?"</string>
|
||||
<string name="suggested_version_safeguard">Kræv foreslået app-version</string>
|
||||
<string name="suggested_version_safeguard_description">Håndhæv valg af den foreslåede app-version</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"Valg af en app, der ikke er den foreslåede version, kan forårsage uventede problemer.
|
||||
|
||||
Vil du fortsætte alligevel?"</string>
|
||||
<string name="patch_selection_safeguard">Tillad ændring af patch-valg og -muligheder</string>
|
||||
<string name="patch_selection_safeguard_description">Forhindr ikke valg eller fravælgelse af patches og tilpasning af muligheder</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"Ændring af valget af patches kan forårsage uventede problemer.
|
||||
|
||||
Aktiver alligevel?"</string>
|
||||
<string name="universal_patches_safeguard">Tillad brug af universelle patches</string>
|
||||
<string name="universal_patches_safeguard_description">Forhindr ikke brug af universelle patches</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"Universelle patches er ikke testet lige så godt som dem, der er målrettet specifikke apps.
|
||||
|
||||
Aktiver alligevel?"</string>
|
||||
<string name="import_keystore">Importér keystore</string>
|
||||
<string name="import_keystore_description">Importér en brugerdefineret keystore</string>
|
||||
<string name="import_keystore_dialog_title">Indtast keystore-oplysninger</string>
|
||||
<string name="import_keystore_dialog_description">Du skal indtaste keystorens oplysninger for at importere den.</string>
|
||||
<string name="import_keystore_dialog_alias_field">Brugernavn (Alias)</string>
|
||||
<string name="import_keystore_dialog_password_field">Adgangskode</string>
|
||||
<string name="import_keystore_dialog_button">Importér</string>
|
||||
<string name="import_keystore_wrong_credentials">Forkerte keystore-oplysninger</string>
|
||||
<string name="import_keystore_success">Importeret keystore</string>
|
||||
<string name="export_keystore">Eksportér keystore</string>
|
||||
<string name="export_keystore_description">Eksportér den nuværende keystore</string>
|
||||
<string name="export_keystore_unavailable">Ingen keystore at eksportere</string>
|
||||
<string name="export_keystore_success">Eksporteret keystore</string>
|
||||
<string name="regenerate_keystore">Regenerér keystore</string>
|
||||
<string name="regenerate_keystore_description">Generér en ny keystore</string>
|
||||
<string name="regenerate_keystore_dialog_description">"Du er ved at nulstille din keystore, som manageren vil bruge under patchingprocessen.
|
||||
|
||||
Du vil ikke kunne opdatere tidligere installerede apps fra denne kilde."</string>
|
||||
<string name="regenerate_keystore_success">Keystore er blevet udskiftet med succes</string>
|
||||
<string name="import_patch_selection">Importér patch-valg</string>
|
||||
<string name="import_patch_selection_description">Importér patch-valg fra en JSON-fil</string>
|
||||
<string name="import_patch_selection_fail">Kunne ikke importere patch-valg: %s</string>
|
||||
<string name="import_patch_selection_success">Importeret patch-valg</string>
|
||||
<string name="export_patch_selection">Eksportér patch-valg</string>
|
||||
<string name="export_patch_selection_description">Eksportér patch-valg til en JSON-fil</string>
|
||||
<string name="export_patch_selection_fail">Kunne ikke eksportere patch-valg: %s</string>
|
||||
<string name="export_patch_selection_success">Eksporteret patch-valg</string>
|
||||
<string name="reset_patch_selection">Nulstil patch-valg</string>
|
||||
<string name="reset_patch_selection_description">Nulstil det gemte patch-valg</string>
|
||||
<string name="reset_patch_options">Nulstil patch-muligheder</string>
|
||||
<string name="reset_patch_options_description">Nulstil de gemte patch-muligheder</string>
|
||||
<string name="reset_patch_selection_success">Patch-valg er blevet nulstillet</string>
|
||||
<string name="patch_selection_reset_all">Nulstil patch-valg globalt</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">Du er ved at nulstille alle patch-valg. Du skal manuelt vælge hver patch igen.</string>
|
||||
<string name="patch_selection_reset_all_description">Nulstiller alle patch-valg</string>
|
||||
<string name="patch_selection_reset_package">Nulstil patch-valg for app</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">Du er ved at nulstille patch-valget for appen \"%s\". Du skal manuelt vælge hver patch igen.</string>
|
||||
<string name="patch_selection_reset_package_description">Nulstiller patch-valg for en enkelt app</string>
|
||||
<string name="patch_selection_reset_patches">Nulstil patch-valg (enkelt)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">Du er ved at nulstille patch-valget for \"%s\". Du skal manuelt vælge hver patch igen.</string>
|
||||
<string name="patch_selection_reset_patches_description">Nulstiller patch-valget for en specifik samling af patches</string>
|
||||
<string name="patch_options_reset_package">Nulstil patch-indstillinger for app</string>
|
||||
<string name="patch_options_reset_package_dialog_description">Du er ved at nulstille patch-indstillingerne for appen \"%s\". Du skal anvende hver indstilling igen.</string>
|
||||
<string name="patch_options_reset_package_description">Nulstiller patch-indstillingerne for en enkelt app</string>
|
||||
<string name="patch_options_reset_patches">Nulstil patch-indstillinger (enkelt)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">Du er ved at nulstille patch-indstillingerne for \"%s\". Du skal anvende hver indstilling igen.</string>
|
||||
<string name="patch_options_reset_patches_description">Nulstiller patch-indstillingerne for en specifik samling af patches</string>
|
||||
<string name="patch_options_reset_all">Nulstil patch-indstillinger globalt</string>
|
||||
<string name="patch_options_reset_all_dialog_description">Du er ved at nulstille alle patch-indstillinger. Du skal anvende hver indstilling igen.</string>
|
||||
<string name="patch_options_reset_all_description">Nulstiller alle patch-indstillinger</string>
|
||||
<string name="downloader_plugins">Plugins</string>
|
||||
<string name="downloader_plugin_state_trusted">Betroet</string>
|
||||
<string name="downloader_plugin_state_failed">Kunne ikke indlæses. Klik for flere detaljer</string>
|
||||
<string name="downloader_plugin_state_untrusted">Ikke betroet</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">Stol på plugin?</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">Tilbagekald tillid?</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">Fortsætter du, tillader du dette plugin at køre på dit system.\n\nAktiver kun dette plugin, hvis du stoler på det. Plugins kan udføre vilkårlig kode og kan kompromittere din enhed.</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">Signatur:\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">Plugin:\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">Slet valgte apps</string>
|
||||
<string name="downloader_plugin_delete_apps_description">Er du sikker på, at du vil slette de valgte apps?</string>
|
||||
<string name="downloader_settings_no_apps">Ingen downloadede apps fundet.</string>
|
||||
<string name="search_apps">Søg apps…</string>
|
||||
<string name="loading_body">Indlæser…</string>
|
||||
<string name="downloading_patches">Downloader patches…</string>
|
||||
<string name="options">Indstillinger</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="no">Nej</string>
|
||||
<string name="edit">Rediger</string>
|
||||
<string name="dialog_input_placeholder">Værdi</string>
|
||||
<string name="reset">Nulstil</string>
|
||||
<string name="share">Del</string>
|
||||
<string name="patch">Patch</string>
|
||||
<string name="select_from_storage">Vælg fra lager</string>
|
||||
<string name="select_from_storage_description">Vælg en APK-fil fra lager ved hjælp af filvælger</string>
|
||||
<string name="suggested_version_info">Foreslået version: %s</string>
|
||||
<string name="type_anything">Skriv noget for at fortsætte</string>
|
||||
<string name="search">Søg patches…</string>
|
||||
<string name="apply">Anvend</string>
|
||||
<string name="help">Hjælp</string>
|
||||
<string name="back">Tilbage</string>
|
||||
<string name="warning">Advarsel</string>
|
||||
<string name="add">Tilføj</string>
|
||||
<string name="close">Luk</string>
|
||||
<string name="clear">Ryd</string>
|
||||
<string name="system">System</string>
|
||||
<string name="light">Lys</string>
|
||||
<string name="dark">Mørk</string>
|
||||
<string name="appearance">Udseende</string>
|
||||
<string name="networking">Netværk</string>
|
||||
<string name="allow_metered_networks">Tillad forbrugsbaserede netværk</string>
|
||||
<string name="allow_metered_networks_description">Tillader automatiske opdateringer på forbrugsbaserede netværk.\nApplikationen kan stadig advare om forbrugsbaserede netværk ved manuelle handlinger.</string>
|
||||
<string name="downloaded_apps">Downloadede apps</string>
|
||||
<string name="process_runtime">Kør Patcher i en anden proces (eksperimentel)</string>
|
||||
<string name="process_runtime_description">Dette er hurtigere og giver Patcher mulighed for at bruge mere hukommelse</string>
|
||||
<string name="process_runtime_memory_limit">Patcher-proceshukommelsesgrænse</string>
|
||||
<string name="process_runtime_memory_limit_description">Den maksimale mængde hukommelse, som Patcher-processen kan bruge (i megabytes)</string>
|
||||
<string name="debug_logs_export">Eksporter fejlfindingslogfiler</string>
|
||||
<string name="debug_logs_export_read_failed">Kunne ikke læse logfiler (afslutningskode %d)</string>
|
||||
<string name="debug_logs_export_failed">Kunne ikke eksportere logfiler</string>
|
||||
<string name="debug_logs_export_success">Eksporterede logfiler</string>
|
||||
<string name="api_url">API URL</string>
|
||||
<string name="api_url_description">API\'en bruges til at downloade nødvendige filer</string>
|
||||
<string name="api_url_dialog_title">Skift API URL</string>
|
||||
<string name="api_url_dialog_description">Skift API URL for ReVanced Manager. ReVanced Manager bruger API\'en til at downloade patches og opdateringer.</string>
|
||||
<string name="api_url_dialog_warning">ReVanced Manager opretter forbindelse til API\'en for at downloade patches og opdateringer. Sørg for, at du stoler på den.</string>
|
||||
<string name="api_url_dialog_save">Indstil</string>
|
||||
<string name="api_url_dialog_reset">Nulstil API URL</string>
|
||||
<string name="device">Enhed</string>
|
||||
<string name="device_android_version">Android-version</string>
|
||||
<string name="device_model">Model</string>
|
||||
<string name="device_architectures">CPU-arkitekturer</string>
|
||||
<string name="device_memory_limit">Hukommelsesgrænser</string>
|
||||
<string name="device_memory_limit_format">%1$dMB (Normal) - %2$dMB (Stor)</string>
|
||||
<string name="patches_force_download">Tving download af alle patches</string>
|
||||
<string name="patches_reset">Nulstil patches</string>
|
||||
<string name="patching">Patching</string>
|
||||
<string name="signing">Signering</string>
|
||||
<string name="storage">Lager</string>
|
||||
<string name="no_patch_found">Ingen patch fundet. Tjek dine patches</string>
|
||||
<string name="tab_apps">Apps</string>
|
||||
<string name="tab_patches">Patches</string>
|
||||
<string name="delete">Slet</string>
|
||||
<string name="refresh">Opdater</string>
|
||||
<string name="continue_anyways">Fortsæt alligevel</string>
|
||||
<string name="download_another_version">Download en anden version</string>
|
||||
<string name="download_app">Download app</string>
|
||||
<string name="download_apk">Download APK-fil</string>
|
||||
<string name="patches_download_fail">Kunne ikke downloade patches: %s</string>
|
||||
<string name="patches_replace_fail">Kunne ikke importere patches: %s</string>
|
||||
<string name="no_patched_apps_found">Ingen patcherede apps fundet</string>
|
||||
<string name="tap_on_patches">Tryk på patches for at få mere information om dem</string>
|
||||
<string name="patches_selected">%s valgt</string>
|
||||
<string name="incompatible_patches">Inkompatible patches</string>
|
||||
<string name="universal_patches">Universelle patches</string>
|
||||
<string name="patch_selection_reset_toast">Patch-valg og -indstillinger er blevet nulstillet til anbefalede standarder</string>
|
||||
<string name="patch_options_reset_toast">Patch-indstillinger er blevet nulstillet</string>
|
||||
<string name="non_suggested_version_warning_title">Ikke-foreslået version</string>
|
||||
<string name="non_suggested_version_warning_description">"Den valgte app-version stemmer ikke overens med den foreslåede version.\nBrug venligst den foreslåede version: %s\n\nFor at fortsætte alligevel skal du deaktivere \"Kræv foreslået app-version\" i de avancerede indstillinger."</string>
|
||||
<string name="selection_warning_title">Stop brug af standarder?</string>
|
||||
<string name="selection_warning_description">"Det anbefales at bruge standard patch-valg og -indstillinger. Ændring af dem kan resultere i uventede problemer.\n\nDu skal aktivere \"Tillad ændring af patch-valg og -indstillinger\" i de avancerede indstillinger, før du skifter patches."</string>
|
||||
<string name="universal_patch_warning_description">"Universelle patches har en mere generaliseret anvendelse og fungerer ikke lige så pålideligt som patches, der er målrettet specifikke apps. Du kan støde på problemer, når du bruger dem.\n\nDu skal aktivere \"Tillad brug af universelle patches\" i de avancerede indstillinger, før du bruger universelle patches."</string>
|
||||
<string name="this_version">Denne version</string>
|
||||
<string name="universal">Enhver app</string>
|
||||
<string name="search_patches">Søg patches</string>
|
||||
<string name="app_version_not_compatible">"Denne patch er ikke kompatibel med den valgte app-version (%1$s)\n\nDen er kun kompatibel med følgende version(er): %2$s"</string>
|
||||
<string name="continue_with_version">Fortsæt med denne version?</string>
|
||||
<string name="version_not_compatible">Ikke alle patches er kompatible med denne version (%s). Vil du fortsætte alligevel?</string>
|
||||
<string name="download_application">Download applikation?</string>
|
||||
<string name="app_not_installed">Den app, du valgte, er ikke installeret. Vil du downloade den?</string>
|
||||
<string name="failed_to_load_apk">Kunne ikke indlæse APK</string>
|
||||
<string name="loading">Indlæser…</string>
|
||||
<string name="not_installed">Ikke installeret</string>
|
||||
<string name="installed">Installeret</string>
|
||||
<string name="app_info">App-info</string>
|
||||
<string name="uninstall">Afinstaller</string>
|
||||
<string name="unpatch">Fjern patch</string>
|
||||
<string name="repatch">Re-patch</string>
|
||||
<string name="install_type">Installationstype</string>
|
||||
<string name="package_name">Pakkenavn</string>
|
||||
<string name="original_package_name">Originalt pakkenavn</string>
|
||||
<string name="applied_patches">Anvendte patches</string>
|
||||
<string name="view_applied_patches">Se anvendte patches</string>
|
||||
<string name="default_install">Standard</string>
|
||||
<string name="mount_install">Monter</string>
|
||||
<string name="mounted">Monteret</string>
|
||||
<string name="not_mounted">Ikke monteret</string>
|
||||
<string name="mount">Monter</string>
|
||||
<string name="unmount">Afmonter</string>
|
||||
<string name="failed_to_mount">Kunne ikke montere: %s</string>
|
||||
<string name="failed_to_unmount">Kunne ikke afmontere: %s</string>
|
||||
<string name="unpatch_app">Fjern patches fra appen?</string>
|
||||
<string name="unpatch_description">Er du sikker på, at du vil fjerne patches fra denne app?</string>
|
||||
<string name="downloader_invalid_version">Downloaderen hentede ikke den korrekte version</string>
|
||||
<string name="downloader_app_not_found">Downloaderen fandt ikke appen</string>
|
||||
<string name="downloader_error">Downloader-fejl: %s</string>
|
||||
<string name="downloader_no_plugins_installed">Ingen downloader installeret.</string>
|
||||
<string name="downloader_no_plugins_available">Der er installerede downloadere, men ingen er tillid til. Tjek dine indstillinger.</string>
|
||||
<string name="already_patched">Allerede patched</string>
|
||||
<string name="patch_selector_sheet_filter_title">Filter</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">Kompatibilitet</string>
|
||||
<string name="string_option_menu_description">Flere muligheder</string>
|
||||
<string name="option_preset_custom_value">Brugerdefineret værdi</string>
|
||||
<string name="path_selector">Vælg fra lager</string>
|
||||
<string name="path_selector_parent_dir">Forrige mappe</string>
|
||||
<string name="path_selector_dirs">Mapper</string>
|
||||
<string name="path_selector_files">Filer</string>
|
||||
<string name="show_password_field">Vis adgangskode</string>
|
||||
<string name="hide_password_field">Skjul adgangskode</string>
|
||||
<string name="installer">Installer</string>
|
||||
<string name="install_app">Installer</string>
|
||||
<string name="install_app_success">App installeret</string>
|
||||
<string name="install_app_fail">Kunne ikke installere app: %s</string>
|
||||
<string name="reinstall_app_fail">Kunne ikke geninstallere app: %s</string>
|
||||
<string name="uninstall_app_fail">Kunne ikke afinstallere app: %s</string>
|
||||
<string name="open_app">Åbn</string>
|
||||
<string name="save_apk">Gem APK</string>
|
||||
<string name="save_apk_success">APK gemt</string>
|
||||
<string name="sign_fail">Kunne ikke signere APK: %s</string>
|
||||
<string name="save_logs">Gem logfiler</string>
|
||||
<string name="plugin_activity_dialog_body">Brugerinteraktion er påkrævet for at fortsætte med dette plugin.</string>
|
||||
<string name="select_install_type">Vælg installationstype</string>
|
||||
<string name="patcher_step_group_preparing">Forbereder</string>
|
||||
<string name="patcher_step_load_patches">Indlæs patches</string>
|
||||
<string name="patcher_step_unpack">Læs APK-fil</string>
|
||||
<string name="patcher_step_group_patching">Patching</string>
|
||||
<string name="patcher_step_group_saving">Gemmer</string>
|
||||
<string name="patcher_step_write_patched">Skriv patched APK-fil</string>
|
||||
<string name="patcher_step_sign_apk">Signer patched APK-fil</string>
|
||||
<string name="patcher_notification_title">Patching i gang…</string>
|
||||
<string name="patcher_notification_text">Tryk for at vende tilbage til patcheren</string>
|
||||
<string name="patcher_stop_confirm_title">Stop patcher</string>
|
||||
<string name="patcher_stop_confirm_description">Er du sikker på, at du vil stoppe patching-processen?</string>
|
||||
<string name="patcher_install_in_progress">Installationen er i gang. Vent venligst</string>
|
||||
<string name="execute_patches">Udfør patches</string>
|
||||
<string name="executing_patch">Udfør %s</string>
|
||||
<string name="failed_to_execute_patch">Kunne ikke udføre %s</string>
|
||||
<string name="step_completed">gennemført</string>
|
||||
<string name="step_failed">mislykkedes</string>
|
||||
<string name="step_running">kører</string>
|
||||
<string name="step_waiting">venter</string>
|
||||
<string name="expand_content">udvid</string>
|
||||
<string name="collapse_content">skjul</string>
|
||||
<string name="drag_handle">omarranger</string>
|
||||
<string name="more">Mere</string>
|
||||
<string name="less">Mindre</string>
|
||||
<string name="continue_">Fortsæt</string>
|
||||
<string name="dismiss">Afvis</string>
|
||||
<string name="permanent_dismiss">Vis ikke igen</string>
|
||||
<string name="donate">Donér</string>
|
||||
<string name="website">Hjemmeside</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="contact">Kontakt</string>
|
||||
<string name="version">Version</string>
|
||||
<string name="submit_feedback">Send problem eller feedback</string>
|
||||
<string name="submit_feedback_description">Hjælp os med at forbedre denne applikation</string>
|
||||
<string name="developer_options">Udviklerindstillinger</string>
|
||||
<string name="developer_options_description">Indstillinger til fejlfinding af problemer</string>
|
||||
<string name="patches_update_success">Opdatering gennemført</string>
|
||||
<string name="patches_update_unavailable">Ingen opdatering tilgængelig</string>
|
||||
<string name="view_patches">Se patches</string>
|
||||
<string name="patches_view_any_version">Enhver version</string>
|
||||
<string name="patches_view_any_package">Enhver pakke</string>
|
||||
<string name="patches_delete_single_dialog_description">Er du sikker på, at du vil slette \"%s\"?</string>
|
||||
<string name="patches_delete_multiple_dialog_description">Er du sikker på, at du vil slette de valgte patches?</string>
|
||||
<string name="about_revanced_manager">Om ReVanced Manager</string>
|
||||
<string name="revanced_manager_description">ReVanced Manager er en Android-applikation, der bruger ReVanced Patcher til at patche Android-apps. Den giver dig mulighed for at downloade og patche apps med brugerdefinerede patches og administrere patching-processen.</string>
|
||||
<string name="developer_options_taps">%d tryk tilbage</string>
|
||||
<string name="developer_options_enabled">Udviklerindstillinger aktiveret</string>
|
||||
<string name="developer_options_already_enabled">Udviklerindstillinger er allerede aktiveret</string>
|
||||
<string name="update_available">En opdatering er tilgængelig</string>
|
||||
<string name="current_version">Nuværende version: %s</string>
|
||||
<string name="new_version">Ny version: %s</string>
|
||||
<string name="ready_to_install_update">Klar til at installere opdatering</string>
|
||||
<string name="update_completed">Opdatering installeret</string>
|
||||
<string name="install_update_manager_failed">Kunne ikke installere opdatering</string>
|
||||
<string name="manual_update_check">Søg efter opdateringer</string>
|
||||
<string name="manual_update_check_description">Søg manuelt efter opdateringer</string>
|
||||
<string name="update_checking_manager">Søg efter opdateringer ved start</string>
|
||||
<string name="update_checking_manager_description">Søg efter nye versioner af ReVanced Manager, når applikationen starter</string>
|
||||
<string name="manager_prereleases">Brug præ-udgivelser</string>
|
||||
<string name="manager_prereleases_description">Brug præ-udgivelsesversioner af ReVanced Manager</string>
|
||||
<string name="changelog">Se ændringslog</string>
|
||||
<string name="changelog_loading">Indlæser ændringslog</string>
|
||||
<string name="changelog_download_fail">Kunne ikke downloade ændringslog: %s</string>
|
||||
<string name="changelog_description">Se de seneste ændringer i denne opdatering</string>
|
||||
<string name="battery_optimization_notification">Batterioptimeringer skal deaktiveres, for at ReVanced Manager kan fungere korrekt i baggrunden. Klik her for at deaktivere optimeringer.</string>
|
||||
<string name="installing_manager_update">Installerer opdatering…</string>
|
||||
<string name="downloading_manager_update">Downloader opdatering…</string>
|
||||
<string name="download_manager_failed">Kunne ikke downloade opdatering: %s</string>
|
||||
<string name="cancel">Annuller</string>
|
||||
<string name="save">Gem</string>
|
||||
<string name="save_with_count">Gem (%1$s)</string>
|
||||
<string name="update">Opdater</string>
|
||||
<string name="empty">Tom</string>
|
||||
<string name="installing_message">"Tryk på <b>Opdater</b>, når du bliver bedt om det.\nReVanced Manager vil lukke under opdatering."</string>
|
||||
<string name="no_changelogs_found">Ingen ændringslogger fundet</string>
|
||||
<string name="just_now">Lige nu</string>
|
||||
<string name="minutes_ago">for %s min siden</string>
|
||||
<string name="hours_ago">for %s t siden</string>
|
||||
<string name="days_ago">for %s d siden</string>
|
||||
<string name="invalid_date">Ugyldig dato</string>
|
||||
<string name="disable_battery_optimization">Deaktiver batterioptimering</string>
|
||||
<string name="input_dialog_value_invalid">Ugyldig værdi</string>
|
||||
<string name="option_required">Denne mulighed er påkrævet</string>
|
||||
<string name="required_options_screen">Påkrævede indstillinger</string>
|
||||
<string name="failed_to_check_updates">Kunne ikke søge efter opdateringer: %s</string>
|
||||
<string name="no_update_available">Ingen opdatering tilgængelig</string>
|
||||
<string name="update_check">Søger efter opdateringer…</string>
|
||||
<string name="dismiss_temporary">Ikke nu</string>
|
||||
<string name="update_available_dialog_description">En ny version af ReVanced Manager (%s) er tilgængelig.</string>
|
||||
<string name="failed_to_download_update">Kunne ikke downloade opdatering: %s</string>
|
||||
<string name="download">Download</string>
|
||||
<string name="download_confirmation_metered">"Du er i øjeblikket på en begrænset forbindelse, og datagebyrer fra din tjenesteudbyder kan gælde.\n\nVil du stadig fortsætte?"</string>
|
||||
<string name="download_update_confirmation">Download opdatering?</string>
|
||||
<string name="no_contributors_found">Ingen bidragydere fundet</string>
|
||||
<string name="select">Vælg</string>
|
||||
<string name="select_deselect_all">Vælg eller fravælg alle</string>
|
||||
<string name="select_patches_type_dialog_description">Tilføj nye patches fra URL eller lokale filer</string>
|
||||
<string name="local_patches_description">Tilføj patches fra lokalt lager.</string>
|
||||
<string name="remote_patches_description">Tilføj patches fra URL. Patches kan opdateres automatisk.</string>
|
||||
<string name="recommended">Anbefalet</string>
|
||||
<string name="installation_failed_dialog_title">Installation mislykkedes</string>
|
||||
<string name="installation_cancelled_dialog_title">Installation annulleret</string>
|
||||
<string name="installation_blocked_dialog_title">Installation blokeret</string>
|
||||
<string name="installation_conflict_dialog_title">Installationskonflikt</string>
|
||||
<string name="installation_incompatible_dialog_title">Installation inkompatibel</string>
|
||||
<string name="installation_invalid_dialog_title">Installation ugyldig</string>
|
||||
<string name="installation_storage_issue_dialog_title">Ikke nok lagerplads</string>
|
||||
<string name="installation_timeout_dialog_title">Installation udløb</string>
|
||||
<string name="installation_failed_description">Installationen mislykkedes af en ukendt årsag. Vil du prøve igen?</string>
|
||||
<string name="installation_aborted_description">Installationen blev annulleret manuelt. Vil du prøve igen?</string>
|
||||
<string name="installation_blocked_description">Installationen blev blokeret. Gennemgå dine enheds sikkerhedsindstillinger og prøv igen.</string>
|
||||
<string name="installation_conflict_description">Installationen blev forhindret af en eksisterende installation af appen. Afinstaller den installerede app og prøv igen?</string>
|
||||
<string name="installation_incompatible_description">Appen er inkompatibel med denne enhed. Brug en APK, der er kompatibel med denne enhed, og prøv igen.</string>
|
||||
<string name="installation_invalid_description">Appen er ugyldig. Afinstaller appen og prøv igen?</string>
|
||||
<string name="installation_storage_issue_description">Appen kunne ikke installeres på grund af utilstrækkelig lagerplads. Frigør noget plads og prøv igen.</string>
|
||||
<string name="installation_timeout_description">Installationen tog for lang tid. Vil du prøve igen?</string>
|
||||
<string name="reinstall">Geninstaller</string>
|
||||
<string name="show">Vis</string>
|
||||
<string name="debugging">Fejlfinding</string>
|
||||
<string name="about_device">Om enhed</string>
|
||||
<string name="enter_url">Indtast URL</string>
|
||||
<string name="next">Næste</string>
|
||||
<string name="auto_update">Automatisk opdatering</string>
|
||||
<string name="add_patches">Tilføj patches</string>
|
||||
<string name="auto_update_description">Opdater automatisk, når en ny version er tilgængelig</string>
|
||||
<string name="patches_prereleases">Brug præ-udgivelser</string>
|
||||
<string name="patches_prereleases_description">Brug præ-udgivelsesversioner af %s</string>
|
||||
<string name="patches_url">Patches URL</string>
|
||||
<string name="incompatible_patches_dialog">"Disse patches er ikke kompatible med den valgte app-version (%1$s).\n\nKlik på patches for at se flere detaljer."</string>
|
||||
<string name="incompatible_patch">Inkompatibel patch</string>
|
||||
<string name="any_version">Enhver</string>
|
||||
<string name="never_show_again">Vis aldrig igen</string>
|
||||
<string name="show_manager_update_dialog_on_launch">Vis opdateringsmeddelelse ved start</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">Vis en pop-up-meddelelse, når en ny opdatering er tilgængelig ved start</string>
|
||||
<string name="failed_to_import_keystore">Kunne ikke importere nøglelager</string>
|
||||
<string name="export">Eksporter</string>
|
||||
<string name="confirm">Bekræft</string>
|
||||
</resources>
|
||||
@@ -1,460 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">Patcher Test</string>
|
||||
<string name="patches">Patches</string>
|
||||
<string name="cli">CLI</string>
|
||||
<string name="manager">Manager</string>
|
||||
<string name="plugin_host_permission_label">ReVanced Manager Plugin-Host</string>
|
||||
<string name="plugin_host_permission_description">Wird verwendet, um den Zugriff auf ReVanced Manager-Plugins zu steuern. Nur ReVanced Manager hat dies.</string>
|
||||
<string name="toast_copied_to_clipboard">Kopiert!</string>
|
||||
<string name="copy_to_clipboard">In Zwischenablage kopieren</string>
|
||||
<string name="dashboard">Übersicht</string>
|
||||
<string name="settings">Einstellungen</string>
|
||||
<string name="select_app">App auswählen</string>
|
||||
<string name="patches_count_selected">%1$d/%2$d ausgewählt</string>
|
||||
<string name="new_downloader_plugins_notification">Neue Downloader-Plugins verfügbar. Klicken Sie hier, um sie zu konfigurieren.</string>
|
||||
<string name="unsupported_architecture_warning">Das Patchen auf dieser Gerätearchitektur wird nicht unterstützt und schlägt höchstwahrscheinlich fehl.</string>
|
||||
<string name="import_">Importieren</string>
|
||||
<string name="import_patches">Patches importieren</string>
|
||||
<string name="file_field_set">Ausgewählt</string>
|
||||
<string name="file_field_not_set">Nicht ausgewählt</string>
|
||||
<string name="field_not_set">Nicht festgelegt</string>
|
||||
<string name="patches_missing">Fehlend</string>
|
||||
<string name="patches_error">Fehler</string>
|
||||
<string name="patches_error_description">Patches konnten nicht geladen werden. Klicken Sie hier, um den Fehler anzuzeigen.</string>
|
||||
<string name="patches_not_downloaded">Patches wurden nicht heruntergeladen. Klicken Sie hier, um sie herunterzuladen.</string>
|
||||
<string name="patches_name_default">Patches</string>
|
||||
<string name="patches_name_fallback">Unbenannt</string>
|
||||
<string name="android_11_bug_dialog_title">Android 11 Fehler</string>
|
||||
<string name="android_11_bug_dialog_description">Die Berechtigung zur App-Installation muss im Voraus erteilt werden, um einen Fehler im Android 11-System zu vermeiden, der die Benutzererfahrung negativ beeinflusst.</string>
|
||||
<string name="no_network_toast">Keine Internetverbindung verfügbar</string>
|
||||
<string name="selected_app_meta_any_version">Jede verfügbare Version</string>
|
||||
<string name="app_source_dialog_title">Quelle auswählen</string>
|
||||
<string name="app_source_dialog_option_auto">Automatisch</string>
|
||||
<string name="app_source_dialog_option_auto_description">Verwenden Sie alle verfügbaren Downloader, um die App herunterzuladen</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">Keine Plugins verfügbar</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">Installierte Apps können ohne Root-Zugriff nicht erneut gepatcht werden</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">Version %s stimmt nicht mit der vorgeschlagenen Version überein</string>
|
||||
<string name="patch_item_description">Patching der Anwendung starten</string>
|
||||
<string name="patch_selector_item">Patches auswählen</string>
|
||||
<string name="patch_selector_item_description">%d Patches ausgewählt</string>
|
||||
<string name="no_patches_selected">Keine Patches ausgewählt</string>
|
||||
<string name="network_unavailable_warning">Ihr Gerät ist nicht mit dem Internet verbunden. Der Download wird später fehlschlagen.</string>
|
||||
<string name="network_metered_warning">Sie nutzen derzeit eine getaktete Verbindung. Es können Datengebühren Ihres Dienstanbieters anfallen.</string>
|
||||
<string name="apk_source_selector_item">APK-Quelle auswählen</string>
|
||||
<string name="apk_source_auto">Verwenden aller APK-Downloader</string>
|
||||
<string name="apk_source_downloader">Verwende %s</string>
|
||||
<string name="apk_source_installed">Verwenden der installierten APK</string>
|
||||
<string name="apk_source_local">Verwenden einer lokalen APK-Datei</string>
|
||||
<string name="legacy_import_failed">Alte Einstellungen konnten nicht importiert werden</string>
|
||||
<string name="auto_updates_dialog_title">Updates konfigurieren</string>
|
||||
<string name="auto_updates_dialog_description">Möchten Sie, dass ReVanced Manager regelmäßig auf Updates für die folgenden Komponenten prüft?</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">ReVanced Patches</string>
|
||||
<string name="auto_updates_dialog_note">Diese Einstellungen können später geändert werden.</string>
|
||||
<string name="general">Allgemein</string>
|
||||
<string name="general_description">Sprache, Design, dynamische Farbe</string>
|
||||
<string name="updates">Updates</string>
|
||||
<string name="updates_description">Auf Updates prüfen und Änderungsverlauf anzeigen</string>
|
||||
<string name="downloads">Downloads</string>
|
||||
<string name="downloads_description">Downloader-Plugins und heruntergeladene Apps</string>
|
||||
<string name="import_export">Import & Export</string>
|
||||
<string name="import_export_description">Keystore, Patch-Optionen und -Auswahl</string>
|
||||
<string name="advanced">Erweitert</string>
|
||||
<string name="advanced_description">API-URL, Speicherbegrenzung, Debugging</string>
|
||||
<string name="about">Über</string>
|
||||
<string name="opensource_licenses">Open-Source-Lizenzen</string>
|
||||
<string name="opensource_licenses_description">Alle zur Erstellung dieser Anwendung verwendeten Bibliotheken anzeigen</string>
|
||||
<string name="contributors">Mitwirkende</string>
|
||||
<string name="contributors_description">Die Mitwirkenden von ReVanced anzeigen</string>
|
||||
<string name="dynamic_color">Dynamische Farbe</string>
|
||||
<string name="dynamic_color_description">Farben an das Hintergrundbild anpassen</string>
|
||||
<string name="pure_black_theme">Rein schwarzes Design</string>
|
||||
<string name="pure_black_theme_description">Rein schwarze Hintergründe für das dunkle Design verwenden</string>
|
||||
<string name="theme">Design</string>
|
||||
<string name="theme_description">Zwischen hellem oder dunklem Design wählen</string>
|
||||
<string name="language">Sprache</string>
|
||||
<string name="language_description">Die Anzeigesprache der App auswählen</string>
|
||||
<string name="language_system_default">Systemstandard</string>
|
||||
<string name="safeguards">Schutzmaßnahmen</string>
|
||||
<string name="patch_compat_check">Versionskompatibilitätsprüfung deaktivieren</string>
|
||||
<string name="patch_compat_check_description">Patches nicht auf kompatible App-Versionen beschränken</string>
|
||||
<string name="patch_compat_check_confirmation">"Das Auswählen inkompatibler Patches kann zu einer fehlerhaften App führen.
|
||||
|
||||
Möchten Sie trotzdem fortfahren?"</string>
|
||||
<string name="suggested_version_safeguard">Vorgeschlagene App-Version erforderlich</string>
|
||||
<string name="suggested_version_safeguard_description">Erzwingen der Auswahl der vorgeschlagenen App-Version</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"Das Auswählen einer App, die nicht die vorgeschlagene Version ist, kann zu unerwarteten Problemen führen.
|
||||
|
||||
Möchten Sie trotzdem fortfahren?"</string>
|
||||
<string name="patch_selection_safeguard">Ändern der Patch-Auswahl und -Optionen erlauben</string>
|
||||
<string name="patch_selection_safeguard_description">Das Auswählen oder Abwählen von Patches und die Anpassung von Optionen nicht verhindern</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"Das Ändern der Patch-Auswahl kann zu unerwarteten Problemen führen.
|
||||
|
||||
Trotzdem aktivieren?"</string>
|
||||
<string name="universal_patches_safeguard">Verwendung universeller Patches erlauben</string>
|
||||
<string name="universal_patches_safeguard_description">Die Verwendung universeller Patches nicht verhindern</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"Universelle Patches sind nicht so gut getestet wie solche, die auf spezifische Apps abzielen.
|
||||
|
||||
Trotzdem aktivieren?"</string>
|
||||
<string name="import_keystore">Keystore importieren</string>
|
||||
<string name="import_keystore_description">Einen benutzerdefinierten Keystore importieren</string>
|
||||
<string name="import_keystore_dialog_title">Keystore-Anmeldeinformationen eingeben</string>
|
||||
<string name="import_keystore_dialog_description">Sie müssen die Anmeldeinformationen des Keystores eingeben, um ihn zu importieren.</string>
|
||||
<string name="import_keystore_dialog_alias_field">Benutzername (Alias)</string>
|
||||
<string name="import_keystore_dialog_password_field">Passwort</string>
|
||||
<string name="import_keystore_dialog_button">Importieren</string>
|
||||
<string name="import_keystore_wrong_credentials">Falsche Keystore-Anmeldeinformationen</string>
|
||||
<string name="import_keystore_success">Keystore importiert</string>
|
||||
<string name="export_keystore">Keystore exportieren</string>
|
||||
<string name="export_keystore_description">Den aktuellen Keystore exportieren</string>
|
||||
<string name="export_keystore_unavailable">Kein Keystore zum Exportieren</string>
|
||||
<string name="export_keystore_success">Keystore exportiert</string>
|
||||
<string name="regenerate_keystore">Keystore neu generieren</string>
|
||||
<string name="regenerate_keystore_description">Einen neuen Keystore generieren</string>
|
||||
<string name="regenerate_keystore_dialog_description">"Sie sind dabei, Ihren Keystore neu zu generieren, den der Manager während des Patching-Prozesses verwenden wird.
|
||||
|
||||
Sie können die zuvor installierten Apps von dieser Quelle nicht mehr aktualisieren."</string>
|
||||
<string name="regenerate_keystore_success">Der Keystore wurde erfolgreich ersetzt</string>
|
||||
<string name="import_patch_selection">Patch-Auswahl importieren</string>
|
||||
<string name="import_patch_selection_description">Patch-Auswahl aus einer JSON-Datei importieren</string>
|
||||
<string name="import_patch_selection_fail">Patch-Auswahl konnte nicht importiert werden: %s</string>
|
||||
<string name="import_patch_selection_success">Patch-Auswahl importiert</string>
|
||||
<string name="export_patch_selection">Patch-Auswahl exportieren</string>
|
||||
<string name="export_patch_selection_description">Patch-Auswahl in eine JSON-Datei exportieren</string>
|
||||
<string name="export_patch_selection_fail">Patch-Auswahl konnte nicht exportiert werden: %s</string>
|
||||
<string name="export_patch_selection_success">Patch-Auswahl exportiert</string>
|
||||
<string name="reset_patch_selection">Patch-Auswahl zurücksetzen</string>
|
||||
<string name="reset_patch_selection_description">Die gespeicherte Patch-Auswahl zurücksetzen</string>
|
||||
<string name="reset_patch_options">Patch-Optionen zurücksetzen</string>
|
||||
<string name="reset_patch_options_description">Die gespeicherten Patch-Optionen zurücksetzen</string>
|
||||
<string name="reset_patch_selection_success">Patch-Auswahl wurde zurückgesetzt</string>
|
||||
<string name="patch_selection_reset_all">Patch-Auswahl global zurücksetzen</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">Sie sind dabei, alle Patch-Auswahlen zurückzusetzen. Sie müssen jeden Patch manuell erneut auswählen.</string>
|
||||
<string name="patch_selection_reset_all_description">Setzt alle Patch-Auswahlen zurück</string>
|
||||
<string name="patch_selection_reset_package">Patch-Auswahl für App zurücksetzen</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">Sie sind dabei, die Patch-Auswahl für die App „%s“ zurückzusetzen. Sie müssen jeden Patch manuell erneut auswählen.</string>
|
||||
<string name="patch_selection_reset_package_description">Setzt die Patch-Auswahl für eine einzelne App zurück</string>
|
||||
<string name="patch_selection_reset_patches">Patch-Auswahl zurücksetzen (einzeln)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">Sie sind dabei, die Patch-Auswahl für „%s“ zurückzusetzen. Sie müssen jeden Patch erneut manuell auswählen.</string>
|
||||
<string name="patch_selection_reset_patches_description">Setzt die Patch-Auswahl für eine bestimmte Sammlung von Patches zurück</string>
|
||||
<string name="patch_options_reset_package">Patch-Optionen für App zurücksetzen</string>
|
||||
<string name="patch_options_reset_package_dialog_description">Sie sind dabei, die Patch-Optionen für die App „%s“ zurückzusetzen. Sie müssen jede Option erneut anwenden.</string>
|
||||
<string name="patch_options_reset_package_description">Setzt die Patch-Optionen für eine einzelne App zurück</string>
|
||||
<string name="patch_options_reset_patches">Patch-Optionen zurücksetzen (einzeln)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">Sie sind dabei, die Patch-Optionen für „%s“ zurückzusetzen. Sie müssen jede Option erneut anwenden.</string>
|
||||
<string name="patch_options_reset_patches_description">Setzt die Patch-Optionen für eine bestimmte Sammlung von Patches zurück</string>
|
||||
<string name="patch_options_reset_all">Patch-Optionen global zurücksetzen</string>
|
||||
<string name="patch_options_reset_all_dialog_description">Sie sind dabei, alle Patch-Optionen zurückzusetzen. Sie müssen jede Option erneut anwenden.</string>
|
||||
<string name="patch_options_reset_all_description">Setzt alle Patch-Optionen zurück</string>
|
||||
<string name="downloader_plugins">Plugins</string>
|
||||
<string name="downloader_plugin_state_trusted">Vertrauenswürdig</string>
|
||||
<string name="downloader_plugin_state_failed">Laden fehlgeschlagen. Klicken Sie für weitere Details</string>
|
||||
<string name="downloader_plugin_state_untrusted">Nicht vertrauenswürdig</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">Plugin vertrauen?</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">Vertrauen entziehen?</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">Wenn Sie fortfahren, darf dieses Plugin auf Ihrem System ausgeführt werden.\n\nAktivieren Sie dieses Plugin nur, wenn Sie ihm vertrauen. Plugins können beliebigen Code ausführen und Ihr Gerät gefährden.</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">Signatur:\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">Plugin:\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">Ausgewählte Apps löschen</string>
|
||||
<string name="downloader_plugin_delete_apps_description">Möchten Sie die ausgewählten Apps wirklich löschen?</string>
|
||||
<string name="downloader_settings_no_apps">Keine heruntergeladenen Apps gefunden.</string>
|
||||
<string name="search_apps">Apps suchen…</string>
|
||||
<string name="loading_body">Wird geladen…</string>
|
||||
<string name="downloading_patches">Patches werden heruntergeladen…</string>
|
||||
<string name="options">Optionen</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="yes">Ja</string>
|
||||
<string name="no">Nein</string>
|
||||
<string name="edit">Bearbeiten</string>
|
||||
<string name="dialog_input_placeholder">Wert</string>
|
||||
<string name="reset">Zurücksetzen</string>
|
||||
<string name="share">Teilen</string>
|
||||
<string name="patch">Patch</string>
|
||||
<string name="select_from_storage">Aus Speicher auswählen</string>
|
||||
<string name="select_from_storage_description">Wählen Sie eine APK-Datei aus dem Speicher mit der Dateiauswahl aus</string>
|
||||
<string name="suggested_version_info">Empfohlene Version: %s</string>
|
||||
<string name="type_anything">Beliebige Eingabe zum Fortfahren</string>
|
||||
<string name="search">Patches suchen…</string>
|
||||
<string name="apply">Anwenden</string>
|
||||
<string name="help">Hilfe</string>
|
||||
<string name="back">Zurück</string>
|
||||
<string name="warning">Warnung</string>
|
||||
<string name="add">Hinzufügen</string>
|
||||
<string name="close">Schließen</string>
|
||||
<string name="clear">Löschen</string>
|
||||
<string name="system">System</string>
|
||||
<string name="light">Hell</string>
|
||||
<string name="dark">Dunkel</string>
|
||||
<string name="appearance">Erscheinungsbild</string>
|
||||
<string name="networking">Netzwerk</string>
|
||||
<string name="allow_metered_networks">Getaktete Netzwerke zulassen</string>
|
||||
<string name="allow_metered_networks_description">Erlaubt automatische Updates über getaktete Netzwerke.\n Die Anwendung könnte dennoch vor getakteten Netzwerken bei manuellen Vorgängen warnen.</string>
|
||||
<string name="downloaded_apps">Heruntergeladene Apps</string>
|
||||
<string name="process_runtime">Patcher in einem anderen Prozess ausführen (experimentell)</string>
|
||||
<string name="process_runtime_description">Dies ist schneller und ermöglicht dem Patcher, mehr Arbeitsspeicher zu verwenden</string>
|
||||
<string name="process_runtime_memory_limit">Speicherlimit des Patcher-Prozesses</string>
|
||||
<string name="process_runtime_memory_limit_description">Die maximale Speichermenge, die der Patcher-Prozess verwenden kann (in Megabyte)</string>
|
||||
<string name="debug_logs_export">Debug-Protokolle exportieren</string>
|
||||
<string name="debug_logs_export_read_failed">Fehler beim Lesen der Protokolle (Exit-Code %d)</string>
|
||||
<string name="debug_logs_export_failed">Fehler beim Exportieren der Protokolle</string>
|
||||
<string name="debug_logs_export_success">Protokolle exportiert</string>
|
||||
<string name="api_url">API-URL</string>
|
||||
<string name="api_url_description">Die API, die zum Herunterladen notwendiger Dateien verwendet wird</string>
|
||||
<string name="api_url_dialog_title">API-URL ändern</string>
|
||||
<string name="api_url_dialog_description">Ändern Sie die API-URL von ReVanced Manager. ReVanced Manager verwendet die API, um Patches und Updates herunterzuladen.</string>
|
||||
<string name="api_url_dialog_warning">ReVanced Manager verbindet sich mit der API, um Patches und Updates herunterzuladen. Stellen Sie sicher, dass Sie ihr vertrauen.</string>
|
||||
<string name="api_url_dialog_save">Festlegen</string>
|
||||
<string name="api_url_dialog_reset">API-URL zurücksetzen</string>
|
||||
<string name="device">Gerät</string>
|
||||
<string name="device_android_version">Android-Version</string>
|
||||
<string name="device_model">Modell</string>
|
||||
<string name="device_architectures">CPU-Architekturen</string>
|
||||
<string name="device_memory_limit">Speicherbegrenzungen</string>
|
||||
<string name="device_memory_limit_format">%1$dMB (Normal) - %2$dMB (Groß)</string>
|
||||
<string name="patches_force_download">Alle Patches erzwingen</string>
|
||||
<string name="patches_reset">Patches zurücksetzen</string>
|
||||
<string name="patching">Patchen</string>
|
||||
<string name="signing">Signieren</string>
|
||||
<string name="storage">Speicher</string>
|
||||
<string name="no_patch_found">Kein Patch gefunden. Überprüfen Sie Ihre Patches</string>
|
||||
<string name="tab_apps">Apps</string>
|
||||
<string name="tab_patches">Patches</string>
|
||||
<string name="delete">Löschen</string>
|
||||
<string name="refresh">Aktualisieren</string>
|
||||
<string name="continue_anyways">Trotzdem fortfahren</string>
|
||||
<string name="download_another_version">Andere Version herunterladen</string>
|
||||
<string name="download_app">App herunterladen</string>
|
||||
<string name="download_apk">APK-Datei herunterladen</string>
|
||||
<string name="patches_download_fail">Fehler beim Herunterladen der Patches: %s</string>
|
||||
<string name="patches_replace_fail">Fehler beim Importieren der Patches: %s</string>
|
||||
<string name="no_patched_apps_found">Keine gepatchten Apps gefunden</string>
|
||||
<string name="tap_on_patches">Tippen Sie auf die Patches, um weitere Informationen zu erhalten</string>
|
||||
<string name="patches_selected">%s ausgewählt</string>
|
||||
<string name="incompatible_patches">Inkompatible Patches</string>
|
||||
<string name="universal_patches">Universelle Patches</string>
|
||||
<string name="patch_selection_reset_toast">Patch-Auswahl und Optionen wurden auf die empfohlenen Standardwerte zurückgesetzt</string>
|
||||
<string name="patch_options_reset_toast">Patch-Optionen wurden zurückgesetzt</string>
|
||||
<string name="non_suggested_version_warning_title">Nicht empfohlene Version</string>
|
||||
<string name="non_suggested_version_warning_description">"Die ausgewählte App-Version stimmt nicht mit der empfohlenen Version überein.\nBitte verwenden Sie die empfohlene Version: %s\n\nUm trotzdem fortzufahren, deaktivieren Sie „Empfohlene App-Version erforderlich“ in den erweiterten Einstellungen."</string>
|
||||
<string name="selection_warning_title">Standardeinstellungen nicht mehr verwenden?</string>
|
||||
<string name="selection_warning_description">"Es wird empfohlen, die Standard-Patch-Auswahl und -Optionen zu verwenden. Das Ändern dieser kann zu unerwarteten Problemen führen.\n\nSie müssen „Änderung der Patch-Auswahl und Optionen zulassen“ in den erweiterten Einstellungen aktivieren, bevor Sie Patches umschalten."</string>
|
||||
<string name="universal_patch_warning_description">"Universelle Patches haben einen allgemeineren Anwendungsbereich und funktionieren nicht so zuverlässig wie Patches, die auf bestimmte Apps abzielen. Bei der Verwendung können Probleme auftreten.\n\nSie müssen „Verwendung universeller Patches zulassen“ in den erweiterten Einstellungen aktivieren, bevor Sie universelle Patches verwenden."</string>
|
||||
<string name="this_version">Diese Version</string>
|
||||
<string name="universal">Beliebige App</string>
|
||||
<string name="search_patches">Patches suchen</string>
|
||||
<string name="app_version_not_compatible">"Dieser Patch ist nicht mit der ausgewählten App-Version (%1$s) kompatibel.\n\nEr ist nur mit den folgenden Version(en) kompatibel: %2$s"</string>
|
||||
<string name="continue_with_version">Mit dieser Version fortfahren?</string>
|
||||
<string name="version_not_compatible">Nicht alle Patches sind mit dieser Version (%s) kompatibel. Möchten Sie trotzdem fortfahren?</string>
|
||||
<string name="download_application">Anwendung herunterladen?</string>
|
||||
<string name="app_not_installed">Die ausgewählte App ist nicht installiert. Möchten Sie sie herunterladen?</string>
|
||||
<string name="failed_to_load_apk">Fehler beim Laden der APK</string>
|
||||
<string name="loading">Wird geladen…</string>
|
||||
<string name="not_installed">Nicht installiert</string>
|
||||
<string name="installed">Installiert</string>
|
||||
<string name="app_info">App-Info</string>
|
||||
<string name="uninstall">Deinstallieren</string>
|
||||
<string name="unpatch">Patch entfernen</string>
|
||||
<string name="repatch">Neu patchen</string>
|
||||
<string name="install_type">Installationstyp</string>
|
||||
<string name="package_name">Paketname</string>
|
||||
<string name="original_package_name">Originaler Paketname</string>
|
||||
<string name="applied_patches">Angewendete Patches</string>
|
||||
<string name="view_applied_patches">Angewendete Patches anzeigen</string>
|
||||
<string name="default_install">Standard</string>
|
||||
<string name="mount_install">Bereitstellen</string>
|
||||
<string name="mounted">Bereitgestellt</string>
|
||||
<string name="not_mounted">Nicht bereitgestellt</string>
|
||||
<string name="mount">Bereitstellen</string>
|
||||
<string name="unmount">Aushängen</string>
|
||||
<string name="failed_to_mount">Fehler beim Bereitstellen: %s</string>
|
||||
<string name="failed_to_unmount">Fehler beim Aushängen: %s</string>
|
||||
<string name="unpatch_app">App unpatchen?</string>
|
||||
<string name="unpatch_description">Möchten Sie diese App wirklich unpatchen?</string>
|
||||
<string name="downloader_invalid_version">Der Downloader hat nicht die richtige Version abgerufen</string>
|
||||
<string name="downloader_app_not_found">Der Downloader hat die App nicht gefunden</string>
|
||||
<string name="downloader_error">Downloader-Fehler: %s</string>
|
||||
<string name="downloader_no_plugins_installed">Kein Downloader installiert.</string>
|
||||
<string name="downloader_no_plugins_available">Es sind Downloader installiert, aber keiner ist vertrauenswürdig. Überprüfen Sie Ihre Einstellungen.</string>
|
||||
<string name="already_patched">Bereits gepatcht</string>
|
||||
<string name="patch_selector_sheet_filter_title">Filter</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">Kompatibilität</string>
|
||||
<string name="string_option_menu_description">Weitere Optionen</string>
|
||||
<string name="option_preset_custom_value">Benutzerdefinierter Wert</string>
|
||||
<string name="path_selector">Aus Speicher auswählen</string>
|
||||
<string name="path_selector_parent_dir">Vorheriges Verzeichnis</string>
|
||||
<string name="path_selector_dirs">Verzeichnisse</string>
|
||||
<string name="path_selector_files">Dateien</string>
|
||||
<string name="show_password_field">Passwort anzeigen</string>
|
||||
<string name="hide_password_field">Passwort ausblenden</string>
|
||||
<string name="installer">Installationsprogramm</string>
|
||||
<string name="install_app">Installieren</string>
|
||||
<string name="install_app_success">App installiert</string>
|
||||
<string name="install_app_fail">Fehler bei der App-Installation: %s</string>
|
||||
<string name="reinstall_app_fail">Fehler bei der Neuinstallation der App: %s</string>
|
||||
<string name="uninstall_app_fail">Fehler bei der Deinstallation der App: %s</string>
|
||||
<string name="open_app">Öffnen</string>
|
||||
<string name="save_apk">APK speichern</string>
|
||||
<string name="save_apk_success">APK gespeichert</string>
|
||||
<string name="sign_fail">Fehler beim Signieren der APK: %s</string>
|
||||
<string name="save_logs">Logs speichern</string>
|
||||
<string name="plugin_activity_dialog_body">Benutzerinteraktion ist erforderlich, um mit diesem Plugin fortzufahren.</string>
|
||||
<string name="select_install_type">Installationstyp auswählen</string>
|
||||
<string name="patcher_step_group_preparing">Vorbereiten</string>
|
||||
<string name="patcher_step_load_patches">Patches laden</string>
|
||||
<string name="patcher_step_unpack">APK-Datei lesen</string>
|
||||
<string name="patcher_step_group_patching">Patchen</string>
|
||||
<string name="patcher_step_group_saving">Speichern</string>
|
||||
<string name="patcher_step_write_patched">Gepatchte APK-Datei schreiben</string>
|
||||
<string name="patcher_step_sign_apk">Gepatchte APK-Datei signieren</string>
|
||||
<string name="patcher_notification_title">Patchen läuft…</string>
|
||||
<string name="patcher_notification_text">Tippen, um zum Patcher zurückzukehren</string>
|
||||
<string name="patcher_stop_confirm_title">Patcher stoppen</string>
|
||||
<string name="patcher_stop_confirm_description">Möchten Sie den Patching-Prozess wirklich stoppen?</string>
|
||||
<string name="patcher_install_in_progress">Installation läuft. Bitte warten</string>
|
||||
<string name="execute_patches">Patches ausführen</string>
|
||||
<string name="executing_patch">%s ausführen</string>
|
||||
<string name="failed_to_execute_patch">Fehler beim Ausführen von %s</string>
|
||||
<string name="step_completed">abgeschlossen</string>
|
||||
<string name="step_failed">fehlgeschlagen</string>
|
||||
<string name="step_running">läuft</string>
|
||||
<string name="step_waiting">wartet</string>
|
||||
<string name="expand_content">erweitern</string>
|
||||
<string name="collapse_content">einklappen</string>
|
||||
<string name="drag_handle">neu anordnen</string>
|
||||
<string name="more">Mehr</string>
|
||||
<string name="less">Weniger</string>
|
||||
<string name="continue_">Weiter</string>
|
||||
<string name="dismiss">Verwerfen</string>
|
||||
<string name="permanent_dismiss">Nicht erneut anzeigen</string>
|
||||
<string name="donate">Spenden</string>
|
||||
<string name="website">Webseite</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="contact">Kontakt</string>
|
||||
<string name="version">Version</string>
|
||||
<string name="submit_feedback">Problem oder Feedback senden</string>
|
||||
<string name="submit_feedback_description">Helfen Sie uns, diese Anwendung zu verbessern</string>
|
||||
<string name="developer_options">Entwickleroptionen</string>
|
||||
<string name="developer_options_description">Optionen zur Fehlerbehebung</string>
|
||||
<string name="patches_update_success">Update erfolgreich</string>
|
||||
<string name="patches_update_unavailable">Kein Update verfügbar</string>
|
||||
<string name="view_patches">Patches anzeigen</string>
|
||||
<string name="patches_view_any_version">Jede Version</string>
|
||||
<string name="patches_view_any_package">Jedes Paket</string>
|
||||
<string name="patches_delete_single_dialog_description">Möchten Sie \"%s\" wirklich löschen?</string>
|
||||
<string name="patches_delete_multiple_dialog_description">Möchten Sie die ausgewählten Patches wirklich löschen?</string>
|
||||
<string name="about_revanced_manager">Über ReVanced Manager</string>
|
||||
<string name="revanced_manager_description">ReVanced Manager ist eine Android-Anwendung, die ReVanced Patcher verwendet, um Android-Apps zu patchen. Sie ermöglicht das Herunterladen und Patchen von Apps mit benutzerdefinierten Patches sowie die Verwaltung des Patching-Prozesses.</string>
|
||||
<string name="developer_options_taps">%d Tippen verbleibend</string>
|
||||
<string name="developer_options_enabled">Entwickleroptionen aktiviert</string>
|
||||
<string name="developer_options_already_enabled">Entwickleroptionen sind bereits aktiviert</string>
|
||||
<string name="update_available">Ein Update ist verfügbar</string>
|
||||
<string name="current_version">Aktuelle Version: %s</string>
|
||||
<string name="new_version">Neue Version: %s</string>
|
||||
<string name="ready_to_install_update">Bereit zur Installation des Updates</string>
|
||||
<string name="update_completed">Update installiert</string>
|
||||
<string name="install_update_manager_failed">Fehler bei der Installation des Updates</string>
|
||||
<string name="manual_update_check">Nach Updates suchen</string>
|
||||
<string name="manual_update_check_description">Manuell nach Updates suchen</string>
|
||||
<string name="update_checking_manager">Beim Start nach Updates suchen</string>
|
||||
<string name="update_checking_manager_description">Beim Start der Anwendung nach neuen Versionen von ReVanced Manager suchen</string>
|
||||
<string name="manager_prereleases">Vorabversionen verwenden</string>
|
||||
<string name="manager_prereleases_description">Vorabversionen von ReVanced Manager verwenden</string>
|
||||
<string name="changelog">Änderungsprotokolle anzeigen</string>
|
||||
<string name="changelog_loading">Änderungsprotokoll wird geladen</string>
|
||||
<string name="changelog_download_fail">Fehler beim Herunterladen des Änderungsprotokolls: %s</string>
|
||||
<string name="changelog_description">Sehen Sie sich die neuesten Änderungen in diesem Update an</string>
|
||||
<string name="battery_optimization_notification">Akkulaufzeit-Optimierungen müssen deaktiviert werden, damit ReVanced Manager im Hintergrund korrekt funktioniert. Klicken Sie hier, um Optimierungen zu deaktivieren.</string>
|
||||
<string name="installing_manager_update">Update wird installiert…</string>
|
||||
<string name="downloading_manager_update">Update wird heruntergeladen…</string>
|
||||
<string name="download_manager_failed">Fehler beim Herunterladen des Updates: %s</string>
|
||||
<string name="cancel">Abbrechen</string>
|
||||
<string name="save">Speichern</string>
|
||||
<string name="save_with_count">Speichern (%1$s)</string>
|
||||
<string name="update">Aktualisieren</string>
|
||||
<string name="empty">Leer</string>
|
||||
<string name="installing_message">"Tippen Sie auf <b>Aktualisieren</b>, wenn Sie dazu aufgefordert werden.
|
||||
ReVanced Manager wird beim Aktualisieren geschlossen."</string>
|
||||
<string name="no_changelogs_found">Keine Änderungsprotokolle gefunden</string>
|
||||
<string name="just_now">Gerade eben</string>
|
||||
<string name="minutes_ago">vor %s Min.</string>
|
||||
<string name="hours_ago">vor %s Std.</string>
|
||||
<string name="days_ago">vor %s Tg.</string>
|
||||
<string name="invalid_date">Ungültiges Datum</string>
|
||||
<string name="disable_battery_optimization">Akkuoptimierung deaktivieren</string>
|
||||
<string name="input_dialog_value_invalid">Ungültiger Wert</string>
|
||||
<string name="option_required">Diese Option ist erforderlich</string>
|
||||
<string name="required_options_screen">Erforderliche Optionen</string>
|
||||
<string name="failed_to_check_updates">Fehler beim Suchen nach Updates: %s</string>
|
||||
<string name="no_update_available">Kein Update verfügbar</string>
|
||||
<string name="update_check">Suche nach Updates…</string>
|
||||
<string name="dismiss_temporary">Nicht jetzt</string>
|
||||
<string name="update_available_dialog_description">Eine neue Version von ReVanced Manager (%s) ist verfügbar.</string>
|
||||
<string name="failed_to_download_update">Fehler beim Herunterladen des Updates: %s</string>
|
||||
<string name="download">Herunterladen</string>
|
||||
<string name="download_confirmation_metered">"Sie nutzen derzeit eine getaktete Verbindung, und es können Datengebühren von Ihrem Dienstanbieter anfallen.
|
||||
|
||||
Möchten Sie trotzdem fortfahren?"</string>
|
||||
<string name="download_update_confirmation">Update herunterladen?</string>
|
||||
<string name="no_contributors_found">Keine Mitwirkenden gefunden</string>
|
||||
<string name="select">Auswählen</string>
|
||||
<string name="select_deselect_all">Alle auswählen oder abwählen</string>
|
||||
<string name="select_patches_type_dialog_description">Neue Patches von URL oder lokalen Dateien hinzufügen</string>
|
||||
<string name="local_patches_description">Patches aus dem lokalen Speicher hinzufügen.</string>
|
||||
<string name="remote_patches_description">Patches von URL hinzufügen. Patches können automatisch aktualisiert werden.</string>
|
||||
<string name="recommended">Empfohlen</string>
|
||||
<string name="installation_failed_dialog_title">Installation fehlgeschlagen</string>
|
||||
<string name="installation_cancelled_dialog_title">Installation abgebrochen</string>
|
||||
<string name="installation_blocked_dialog_title">Installation blockiert</string>
|
||||
<string name="installation_conflict_dialog_title">Installationskonflikt</string>
|
||||
<string name="installation_incompatible_dialog_title">Installation inkompatibel</string>
|
||||
<string name="installation_invalid_dialog_title">Installation ungültig</string>
|
||||
<string name="installation_storage_issue_dialog_title">Nicht genügend Speicherplatz</string>
|
||||
<string name="installation_timeout_dialog_title">Installation Zeitüberschreitung</string>
|
||||
<string name="installation_failed_description">Die Installation ist aus unbekanntem Grund fehlgeschlagen. Erneut versuchen?</string>
|
||||
<string name="installation_aborted_description">Die Installation wurde manuell abgebrochen. Erneut versuchen?</string>
|
||||
<string name="installation_blocked_description">Die Installation wurde blockiert. Überprüfen Sie Ihre Gerätesicherheitseinstellungen und versuchen Sie es erneut.</string>
|
||||
<string name="installation_conflict_description">Die Installation wurde durch eine vorhandene Installation der App verhindert. Deinstallieren Sie die installierte App und versuchen Sie es erneut?</string>
|
||||
<string name="installation_incompatible_description">Die App ist mit diesem Gerät inkompatibel. Verwenden Sie eine APK, die mit diesem Gerät kompatibel ist, und versuchen Sie es erneut.</string>
|
||||
<string name="installation_invalid_description">Die App ist ungültig. Deinstallieren Sie die App und versuchen Sie es erneut?</string>
|
||||
<string name="installation_storage_issue_description">Die App konnte aufgrund unzureichenden Speicherplatzes nicht installiert werden. Geben Sie etwas Speicherplatz frei und versuchen Sie es erneut.</string>
|
||||
<string name="installation_timeout_description">Die Installation dauerte zu lange. Erneut versuchen?</string>
|
||||
<string name="reinstall">Neu installieren</string>
|
||||
<string name="show">Anzeigen</string>
|
||||
<string name="debugging">Debugging</string>
|
||||
<string name="about_device">Über das Gerät</string>
|
||||
<string name="enter_url">URL eingeben</string>
|
||||
<string name="next">Weiter</string>
|
||||
<string name="auto_update">Auto-Update</string>
|
||||
<string name="add_patches">Patches hinzufügen</string>
|
||||
<string name="auto_update_description">Automatisch aktualisieren, wenn eine neue Version verfügbar ist</string>
|
||||
<string name="patches_prereleases">Vorabversionen verwenden</string>
|
||||
<string name="patches_prereleases_description">Vorabversionen von %s verwenden</string>
|
||||
<string name="patches_url">Patches-URL</string>
|
||||
<string name="incompatible_patches_dialog">"Diese Patches sind nicht mit der ausgewählten App-Version (%1$s) kompatibel.
|
||||
|
||||
Klicken Sie auf die Patches, um weitere Details anzuzeigen."</string>
|
||||
<string name="incompatible_patch">Inkompatibler Patch</string>
|
||||
<string name="any_version">Beliebig</string>
|
||||
<string name="never_show_again">Nie wieder anzeigen</string>
|
||||
<string name="show_manager_update_dialog_on_launch">Update-Meldung beim Start anzeigen</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">Eine Popup-Benachrichtigung anzeigen, wenn beim Start ein neues Update verfügbar ist</string>
|
||||
<string name="failed_to_import_keystore">Fehler beim Importieren des Keystores</string>
|
||||
<string name="export">Exportieren</string>
|
||||
<string name="confirm">Bestätigen</string>
|
||||
</resources>
|
||||
@@ -1,448 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">Έλεγχος τροποποιητή</string>
|
||||
<string name="patches">Τροποποιήσεις</string>
|
||||
<string name="cli">CLI</string>
|
||||
<string name="manager">Manager</string>
|
||||
<string name="plugin_host_permission_label">Εξυπηρετητής πρόσθετων ReVanced Manager</string>
|
||||
<string name="plugin_host_permission_description">Χρησιμοποιείται για τον έλεγχο της πρόσβασης στα πρόσθετα του ReVanced Manager. Μόνο το ReVanced Manager το διαθέτει.</string>
|
||||
<string name="toast_copied_to_clipboard">Αντιγράφηκε!</string>
|
||||
<string name="copy_to_clipboard">Αντιγραφή στο πρόχειρο</string>
|
||||
<string name="dashboard">Πίνακας ελέγχου</string>
|
||||
<string name="settings">Ρυθμίσεις</string>
|
||||
<string name="select_app">Επιλέξτε μια εφαρμογή</string>
|
||||
<string name="patches_count_selected">%1$d/%2$d επιλεγμένα</string>
|
||||
<string name="new_downloader_plugins_notification">Νέα διαθέσιμα πρόσθετα λήψης. Πατήστε εδώ για να τα ρυθμίσετε.</string>
|
||||
<string name="unsupported_architecture_warning">Η τροποποίηση σε αυτήν την αρχιτεκτονική συσκευής δεν υποστηρίζεται και πιθανότατα θα αποτύχει.</string>
|
||||
<string name="import_">Εισαγωγή</string>
|
||||
<string name="import_patches">Εισαγωγή τροποποιήσεων</string>
|
||||
<string name="file_field_set">Επιλεγμένο</string>
|
||||
<string name="file_field_not_set">Μη επιλεγμένο</string>
|
||||
<string name="field_not_set">Μη ορισμένο</string>
|
||||
<string name="patches_missing">Λείπει</string>
|
||||
<string name="patches_error">Σφάλμα</string>
|
||||
<string name="patches_error_description">Δεν ήταν δυνατή η φόρτωση των τροποποιήσεων. Πατήστε για να δείτε το σφάλμα</string>
|
||||
<string name="patches_not_downloaded">Οι τροποποιήσεις δεν έχουν ληφθεί. Πατήστε εδώ για να τις κατεβάσετε</string>
|
||||
<string name="patches_name_default">Τροποποιήσεις</string>
|
||||
<string name="patches_name_fallback">Χωρίς Όνομα</string>
|
||||
<string name="android_11_bug_dialog_title">Σφάλμα Android 11</string>
|
||||
<string name="android_11_bug_dialog_description">Η άδεια εγκατάστασης εφαρμογών πρέπει να χορηγηθεί εκ των προτέρων για να αποφευχθεί ένα σφάλμα στο σύστημα Android 11 που θα επηρεάσει αρνητικά την εμπειρία του χρήστη.</string>
|
||||
<string name="no_network_toast">Δεν υπάρχει διαθέσιμη σύνδεση στο διαδίκτυο</string>
|
||||
<string name="selected_app_meta_any_version">Οποιαδήποτε διαθέσιμη έκδοση</string>
|
||||
<string name="app_source_dialog_title">Επιλέξτε πηγή</string>
|
||||
<string name="app_source_dialog_option_auto">Αυτόματη</string>
|
||||
<string name="app_source_dialog_option_auto_description">Χρησιμοποιήστε όλα τα διαθέσιμα προγράμματα λήψης για να κατεβάσετε την εφαρμογή</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">Δεν υπάρχουν διαθέσιμα πρόσθετα</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">Οι εγκατεστημένες εφαρμογές δεν μπορούν να επιδιορθωθούν ξανά χωρίς πρόσβαση root</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">Η έκδοση %s δεν ταιριάζει με την προτεινόμενη έκδοση</string>
|
||||
<string name="patch_item_description">Έναρξη επιδιόρθωσης της εφαρμογής</string>
|
||||
<string name="patch_selector_item">Επιλέξτε επιδιορθώσεις</string>
|
||||
<string name="patch_selector_item_description">%d επιδιορθώσεις επιλέχθηκαν</string>
|
||||
<string name="no_patches_selected">Δεν επιλέχθηκαν επιδιορθώσεις</string>
|
||||
<string name="network_unavailable_warning">Η συσκευή σας δεν είναι συνδεδεμένη στο διαδίκτυο. Η λήψη θα αποτύχει αργότερα.</string>
|
||||
<string name="network_metered_warning">Είστε αυτήν τη στιγμή σε σύνδεση με περιορισμένα δεδομένα. Ενδέχεται να ισχύουν χρεώσεις δεδομένων από τον πάροχο υπηρεσιών σας.</string>
|
||||
<string name="apk_source_selector_item">Επιλέξτε πηγή APK</string>
|
||||
<string name="apk_source_auto">Χρήση όλων των προγραμμάτων λήψης APK</string>
|
||||
<string name="apk_source_downloader">Χρήση %s</string>
|
||||
<string name="apk_source_installed">Χρήση εγκατεστημένου APK</string>
|
||||
<string name="apk_source_local">Χρήση τοπικού αρχείου APK</string>
|
||||
<string name="legacy_import_failed">Δεν ήταν δυνατή η εισαγωγή παλαιών ρυθμίσεων</string>
|
||||
<string name="auto_updates_dialog_title">Διαμόρφωση ενημερώσεων</string>
|
||||
<string name="auto_updates_dialog_description">Θέλετε το ReVanced Manager να ελέγχει περιοδικά για ενημερώσεις για τα ακόλουθα στοιχεία;</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">Επιδιορθώσεις ReVanced</string>
|
||||
<string name="auto_updates_dialog_note">Αυτές οι ρυθμίσεις μπορούν να αλλάξουν αργότερα.</string>
|
||||
<string name="general">Γενικά</string>
|
||||
<string name="general_description">Γλώσσα, θέμα, δυναμικό χρώμα</string>
|
||||
<string name="updates">Ενημερώσεις</string>
|
||||
<string name="updates_description">Έλεγχος για ενημερώσεις και προβολή αρχείων καταγραφής αλλαγών</string>
|
||||
<string name="downloads">Λήψεις</string>
|
||||
<string name="downloads_description">Πρόσθετα λήψης και ληφθείσες εφαρμογές</string>
|
||||
<string name="import_export">Εισαγωγή & εξαγωγή</string>
|
||||
<string name="import_export_description">Αποθήκη κλειδιών, επιλογές και επιλογή επιδιόρθωσης</string>
|
||||
<string name="advanced">Για προχωρημένους</string>
|
||||
<string name="advanced_description">Διεύθυνση URL API, όριο μνήμης, εντοπισμός σφαλμάτων</string>
|
||||
<string name="about">Ομάδα προγραμματιστών</string>
|
||||
<string name="opensource_licenses">Άδειες ανοιχτού κώδικα</string>
|
||||
<string name="opensource_licenses_description">Προβολή όλων των βιβλιοθηκών που χρησιμοποιήθηκαν για τη δημιουργία αυτής της εφαρμογής</string>
|
||||
<string name="contributors">Συνεισφέροντες</string>
|
||||
<string name="contributors_description">Προβολή των συνεισφερόντων του ReVanced</string>
|
||||
<string name="dynamic_color">Δυναμικό χρώμα</string>
|
||||
<string name="dynamic_color_description">Προσαρμογή χρωμάτων στην ταπετσαρία</string>
|
||||
<string name="pure_black_theme">Θέμα αμιγώς μαύρο</string>
|
||||
<string name="pure_black_theme_description">Χρήση αμιγώς μαύρων φόντων για σκούρο θέμα</string>
|
||||
<string name="theme">Θέμα</string>
|
||||
<string name="theme_description">Επιλέξτε μεταξύ ανοιχτού ή σκούρου θέματος</string>
|
||||
<string name="language">Γλώσσα</string>
|
||||
<string name="language_description">Επιλέξτε τη γλώσσα εμφάνισης της εφαρμογής</string>
|
||||
<string name="language_system_default">Προεπιλογή συστήματος</string>
|
||||
<string name="safeguards">Διασφαλίσεις</string>
|
||||
<string name="patch_compat_check">Απενεργοποίηση ελέγχου συμβατότητας έκδοσης</string>
|
||||
<string name="patch_compat_check_description">Να μην περιορίζονται οι επιδιορθώσεις σε συμβατές εκδόσεις εφαρμογών</string>
|
||||
<string name="patch_compat_check_confirmation">"Η επιλογή μη συμβατών επιδιορθώσεων μπορεί να οδηγήσει σε χαλασμένη εφαρμογή.\n\nΘέλετε να συνεχίσετε ούτως ή άλλως;"</string>
|
||||
<string name="suggested_version_safeguard">Απαίτηση προτεινόμενης έκδοσης εφαρμογής</string>
|
||||
<string name="suggested_version_safeguard_description">Επιβολή επιλογής της προτεινόμενης έκδοσης εφαρμογής</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"Η επιλογή μιας εφαρμογής που δεν είναι η προτεινόμενη έκδοση ενδέχεται να προκαλέσει απρόβλεπτα προβλήματα.\n\nΘέλετε να συνεχίσετε ούτως ή άλλως;"</string>
|
||||
<string name="patch_selection_safeguard">Να επιτρέπεται η αλλαγή της επιλογής επιδιόρθωσης και των επιλογών</string>
|
||||
<string name="patch_selection_safeguard_description">Να μην αποτρέπεται η επιλογή ή η αποεπιλογή επιδιορθώσεων και η προσαρμογή των επιλογών</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"Η αλλαγή της επιλογής επιδιορθώσεων ενδέχεται να προκαλέσει απρόβλεπτα προβλήματα.\n\nΕνεργοποίηση ούτως ή άλλως;"</string>
|
||||
<string name="universal_patches_safeguard">Να επιτρέπεται η χρήση καθολικών επιδιορθώσεων</string>
|
||||
<string name="universal_patches_safeguard_description">Να μην αποτρέπεται η χρήση καθολικών επιδιορθώσεων</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"Οι καθολικές επιδιορθώσεις δεν έχουν δοκιμαστεί τόσο καλά όσο εκείνες που στοχεύουν σε συγκεκριμένες εφαρμογές.\n\nΕνεργοποίηση ούτως ή άλλως;"</string>
|
||||
<string name="import_keystore">Εισαγωγή αποθήκης κλειδιών</string>
|
||||
<string name="import_keystore_description">Εισαγωγή προσαρμοσμένης αποθήκης κλειδιών</string>
|
||||
<string name="import_keystore_dialog_title">Εισαγάγετε τα διαπιστευτήρια της αποθήκης κλειδιών</string>
|
||||
<string name="import_keystore_dialog_description">Θα χρειαστεί να εισαγάγετε τα διαπιστευτήρια της αποθήκης κλειδιών για να την εισαγάγετε.</string>
|
||||
<string name="import_keystore_dialog_alias_field">Όνομα χρήστη (Ψευδώνυμο)</string>
|
||||
<string name="import_keystore_dialog_password_field">Κωδικός πρόσβασης</string>
|
||||
<string name="import_keystore_dialog_button">Εισαγωγή</string>
|
||||
<string name="import_keystore_wrong_credentials">Λανθασμένα διαπιστευτήρια αποθήκης κλειδιών</string>
|
||||
<string name="import_keystore_success">Εισαγόμενη αποθήκη κλειδιών</string>
|
||||
<string name="export_keystore">Εξαγωγή αποθήκης κλειδιών</string>
|
||||
<string name="export_keystore_description">Εξαγωγή της τρέχουσας αποθήκης κλειδιών</string>
|
||||
<string name="export_keystore_unavailable">Δεν υπάρχει αποθήκη κλειδιών για εξαγωγή</string>
|
||||
<string name="export_keystore_success">Εξαγόμενη αποθήκη κλειδιών</string>
|
||||
<string name="regenerate_keystore">Αναδημιουργία αποθήκης κλειδιών</string>
|
||||
<string name="regenerate_keystore_description">Δημιουργία νέας αποθήκης κλειδιών</string>
|
||||
<string name="regenerate_keystore_dialog_description">"Πρόκειται να αναδημιουργήσετε την αποθήκη κλειδιών που θα χρησιμοποιήσει ο διαχειριστής κατά τη διαδικασία επιδιόρθωσης.\n\nΔεν θα μπορείτε να ενημερώσετε τις προηγουμένως εγκατεστημένες εφαρμογές από αυτήν την πηγή."</string>
|
||||
<string name="regenerate_keystore_success">Η αποθήκη κλειδιών αντικαταστάθηκε επιτυχώς</string>
|
||||
<string name="import_patch_selection">Εισαγωγή επιλογής επιδιόρθωσης</string>
|
||||
<string name="import_patch_selection_description">Εισαγωγή επιλογής επιδιόρθωσης από αρχείο JSON</string>
|
||||
<string name="import_patch_selection_fail">Δεν ήταν δυνατή η εισαγωγή επιλογής επιδιόρθωσης: %s</string>
|
||||
<string name="import_patch_selection_success">Εισαγόμενη επιλογή επιδιόρθωσης</string>
|
||||
<string name="export_patch_selection">Εξαγωγή επιλογής επιδιόρθωσης</string>
|
||||
<string name="export_patch_selection_description">Εξαγωγή επιλογής επιδιόρθωσης σε αρχείο JSON</string>
|
||||
<string name="export_patch_selection_fail">Δεν ήταν δυνατή η εξαγωγή επιλογής επιδιόρθωσης: %s</string>
|
||||
<string name="export_patch_selection_success">Εξαγόμενη επιλογή επιδιόρθωσης</string>
|
||||
<string name="reset_patch_selection">Επαναφορά επιλογής επιδιόρθωσης</string>
|
||||
<string name="reset_patch_selection_description">Επαναφορά της αποθηκευμένης επιλογής επιδιόρθωσης</string>
|
||||
<string name="reset_patch_options">Επαναφορά επιλογών επιδιόρθωσης</string>
|
||||
<string name="reset_patch_options_description">Επαναφορά των αποθηκευμένων επιλογών επιδιόρθωσης</string>
|
||||
<string name="reset_patch_selection_success">Η επιλογή επιδιόρθωσης έχει επαναφερθεί</string>
|
||||
<string name="patch_selection_reset_all">Επαναφορά επιλογής επιδιόρθωσης καθολικά</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">Πρόκειται να επαναφέρετε όλες τις επιλογές επιδιόρθωσης. Θα χρειαστεί να επιλέξετε μη αυτόματα κάθε επιδιόρθωση ξανά.</string>
|
||||
<string name="patch_selection_reset_all_description">Επαναφέρει όλες τις επιλογές επιδιόρθωσης</string>
|
||||
<string name="patch_selection_reset_package">Επαναφορά επιλογής επιδιόρθωσης για εφαρμογή</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">Πρόκειται να επαναφέρετε την επιλογή επιδιόρθωσης για την εφαρμογή \"%s\". Θα χρειαστεί να επιλέξετε μη αυτόματα κάθε επιδιόρθωση ξανά.</string>
|
||||
<string name="patch_selection_reset_package_description">Επαναφέρει την επιλογή επιδιόρθωσης για μία μόνο εφαρμογή</string>
|
||||
<string name="patch_selection_reset_patches">Επαναφορά επιλογής patch (μεμονωμένο)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">Πρόκειται να επαναφέρετε την επιλογή patch για το \"%s\". Θα πρέπει να επιλέξετε χειροκίνητα κάθε patch ξανά.</string>
|
||||
<string name="patch_selection_reset_patches_description">Επαναφέρει την επιλογή patch για μια συγκεκριμένη συλλογή patches</string>
|
||||
<string name="patch_options_reset_package">Επαναφορά επιλογών patch για την εφαρμογή</string>
|
||||
<string name="patch_options_reset_package_dialog_description">Πρόκειται να επαναφέρετε τις επιλογές patch για την εφαρμογή \"%s\". Θα πρέπει να εφαρμόσετε ξανά κάθε επιλογή.</string>
|
||||
<string name="patch_options_reset_package_description">Επαναφέρει τις επιλογές patch για μία μόνο εφαρμογή</string>
|
||||
<string name="patch_options_reset_patches">Επαναφορά επιλογών patch (μεμονωμένο)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">Πρόκειται να επαναφέρετε τις επιλογές patch για το \"%s\". Θα πρέπει να εφαρμόσετε ξανά κάθε επιλογή.</string>
|
||||
<string name="patch_options_reset_patches_description">Επαναφέρει τις επιλογές patch για μια συγκεκριμένη συλλογή patches</string>
|
||||
<string name="patch_options_reset_all">Επαναφορά επιλογών patch παγκοσμίως</string>
|
||||
<string name="patch_options_reset_all_dialog_description">Πρόκειται να επαναφέρετε όλες τις επιλογές patch. Θα πρέπει να εφαρμόσετε ξανά κάθε επιλογή.</string>
|
||||
<string name="patch_options_reset_all_description">Επαναφέρει όλες τις επιλογές patch</string>
|
||||
<string name="downloader_plugins">Πρόσθετα</string>
|
||||
<string name="downloader_plugin_state_trusted">Αξιόπιστο</string>
|
||||
<string name="downloader_plugin_state_failed">Αποτυχία φόρτωσης. Κάντε κλικ για περισσότερες λεπτομέρειες</string>
|
||||
<string name="downloader_plugin_state_untrusted">Μη αξιόπιστο</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">Να εμπιστευτείτε το πρόσθετο;</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">Ανάκληση εμπιστοσύνης;</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">Η συνέχεια θα επιτρέψει σε αυτό το πρόσθετο να εκτελεστεί στο σύστημά σας.\n\nΕνεργοποιήστε αυτό το πρόσθετο μόνο αν το εμπιστεύεστε. Τα πρόσθετα μπορούν να εκτελέσουν αυθαίρετο κώδικα και ενδέχεται να θέσουν σε κίνδυνο τη συσκευή σας.</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">Υπογραφή:\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">Πρόσθετο:\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">Διαγραφή επιλεγμένων εφαρμογών</string>
|
||||
<string name="downloader_plugin_delete_apps_description">Είστε βέβαιοι ότι θέλετε να διαγράψετε τις επιλεγμένες εφαρμογές;</string>
|
||||
<string name="downloader_settings_no_apps">Δεν βρέθηκαν εφαρμογές για λήψη.</string>
|
||||
<string name="search_apps">Αναζήτηση εφαρμογών…</string>
|
||||
<string name="loading_body">Φόρτωση…</string>
|
||||
<string name="downloading_patches">Λήψη patches…</string>
|
||||
<string name="options">Επιλογές</string>
|
||||
<string name="ok">ΟΚ</string>
|
||||
<string name="yes">Ναι</string>
|
||||
<string name="no">Όχι</string>
|
||||
<string name="edit">Επεξεργασία</string>
|
||||
<string name="dialog_input_placeholder">Τιμή</string>
|
||||
<string name="reset">Επαναφορά</string>
|
||||
<string name="share">Κοινή χρήση</string>
|
||||
<string name="patch">Patch</string>
|
||||
<string name="select_from_storage">Επιλογή από τον χώρο αποθήκευσης</string>
|
||||
<string name="select_from_storage_description">Επιλέξτε ένα αρχείο APK από τον χώρο αποθήκευσης χρησιμοποιώντας την επιλογή αρχείων</string>
|
||||
<string name="suggested_version_info">Προτεινόμενη έκδοση: %s</string>
|
||||
<string name="type_anything">Πληκτρολογήστε οτιδήποτε για να συνεχίσετε</string>
|
||||
<string name="search">Αναζήτηση patches…</string>
|
||||
<string name="apply">Εφαρμογή</string>
|
||||
<string name="help">Βοήθεια</string>
|
||||
<string name="back">Πίσω</string>
|
||||
<string name="warning">Προειδοποίηση</string>
|
||||
<string name="add">Προσθήκη</string>
|
||||
<string name="close">Κλείσιμο</string>
|
||||
<string name="clear">Εκκαθάριση</string>
|
||||
<string name="system">Σύστημα</string>
|
||||
<string name="light">Φωτεινό</string>
|
||||
<string name="dark">Σκοτεινό</string>
|
||||
<string name="appearance">Εμφάνιση</string>
|
||||
<string name="networking">Δικτύωση</string>
|
||||
<string name="allow_metered_networks">Να επιτρέπονται τα μετρημένα δίκτυα</string>
|
||||
<string name="allow_metered_networks_description">Επιτρέπει τις αυτόματες ενημερώσεις σε μετρημένα δίκτυα.\n Η εφαρμογή ενδέχεται να εξακολουθεί να προειδοποιεί για μετρημένα δίκτυα για χειροκίνητες λειτουργίες.</string>
|
||||
<string name="downloaded_apps">Εφαρμογές που έχουν ληφθεί</string>
|
||||
<string name="process_runtime">Εκτέλεση του Patcher σε άλλη διεργασία (πειραματικό)</string>
|
||||
<string name="process_runtime_description">Αυτό είναι ταχύτερο και επιτρέπει στον Patcher να χρησιμοποιεί περισσότερη μνήμη</string>
|
||||
<string name="process_runtime_memory_limit">Όριο μνήμης διεργασίας Patcher</string>
|
||||
<string name="process_runtime_memory_limit_description">Η μέγιστη ποσότητα μνήμης που μπορεί να χρησιμοποιήσει η διεργασία του Patcher (σε megabytes)</string>
|
||||
<string name="debug_logs_export">Εξαγωγή αρχείων καταγραφής εντοπισμού σφαλμάτων</string>
|
||||
<string name="debug_logs_export_read_failed">Αποτυχία ανάγνωσης αρχείων καταγραφής (κωδικός εξόδου %d)</string>
|
||||
<string name="debug_logs_export_failed">Αποτυχία εξαγωγής αρχείων καταγραφής</string>
|
||||
<string name="debug_logs_export_success">Εξαγμένα αρχεία καταγραφής</string>
|
||||
<string name="api_url">URL API</string>
|
||||
<string name="api_url_description">Το API που χρησιμοποιείται για τη λήψη απαραίτητων αρχείων</string>
|
||||
<string name="api_url_dialog_title">Αλλαγή διεύθυνσης API</string>
|
||||
<string name="api_url_dialog_description">Αλλαγή του URL API του ReVanced Manager. Το ReVanced Manager χρησιμοποιεί το API για τη λήψη patches και ενημερώσεων.</string>
|
||||
<string name="api_url_dialog_warning">Το ReVanced Manager συνδέεται με το API για τη λήψη patches και ενημερώσεων. Βεβαιωθείτε ότι το εμπιστεύεστε.</string>
|
||||
<string name="api_url_dialog_save">Ορισμός</string>
|
||||
<string name="api_url_dialog_reset">Επαναφορά URL API</string>
|
||||
<string name="device">Συσκευή</string>
|
||||
<string name="device_android_version">Έκδοση Android</string>
|
||||
<string name="device_model">Μοντέλο</string>
|
||||
<string name="device_architectures">Αρχιτεκτονικές CPU</string>
|
||||
<string name="device_memory_limit">Όρια μνήμης</string>
|
||||
<string name="device_memory_limit_format">%1$dMB (Κανονικό) - %2$dMB (Μεγάλο)</string>
|
||||
<string name="patches_force_download">Αναγκαστική λήψη όλων των patches</string>
|
||||
<string name="patches_reset">Επαναφορά patches</string>
|
||||
<string name="patching">Εφαρμογή patch</string>
|
||||
<string name="signing">Υπογραφή</string>
|
||||
<string name="storage">Αποθηκευτικός χώρος</string>
|
||||
<string name="no_patch_found">Δεν βρέθηκε patch. Ελέγξτε τα patches σας</string>
|
||||
<string name="tab_apps">Εφαρμογές</string>
|
||||
<string name="tab_patches">Patches</string>
|
||||
<string name="delete">Διαγραφή</string>
|
||||
<string name="refresh">Ανανέωση</string>
|
||||
<string name="continue_anyways">Συνέχεια ούτως ή άλλως</string>
|
||||
<string name="download_another_version">Λήψη άλλης έκδοσης</string>
|
||||
<string name="download_app">Λήψη εφαρμογής</string>
|
||||
<string name="download_apk">Λήψη αρχείου APK</string>
|
||||
<string name="patches_download_fail">Αποτυχία λήψης patches: %s</string>
|
||||
<string name="patches_replace_fail">Αποτυχία εισαγωγής patches: %s</string>
|
||||
<string name="no_patched_apps_found">Δεν βρέθηκαν patched εφαρμογές</string>
|
||||
<string name="tap_on_patches">Πατήστε στα patches για περισσότερες πληροφορίες</string>
|
||||
<string name="patches_selected">%s επιλεγμένα</string>
|
||||
<string name="incompatible_patches">Μη συμβατά patches</string>
|
||||
<string name="universal_patches">Καθολικά patches</string>
|
||||
<string name="patch_selection_reset_toast">Η επιλογή και οι επιλογές patch έχουν επαναφερθεί στις προτεινόμενες προεπιλογές</string>
|
||||
<string name="patch_options_reset_toast">Οι επιλογές patch έχουν επαναφερθεί</string>
|
||||
<string name="non_suggested_version_warning_title">Μη προτεινόμενη έκδοση</string>
|
||||
<string name="non_suggested_version_warning_description">"Η έκδοση της εφαρμογής που επιλέξατε δεν ταιριάζει με την προτεινόμενη έκδοση.\nΠαρακαλούμε χρησιμοποιήστε την προτεινόμενη έκδοση: %s\n\nΓια να συνεχίσετε ούτως ή άλλως, απενεργοποιήστε την επιλογή \"Απαίτηση προτεινόμενης έκδοσης εφαρμογής\" στις προηγμένες ρυθμίσεις."</string>
|
||||
<string name="selection_warning_title">Να σταματήσετε τη χρήση των προεπιλογών;</string>
|
||||
<string name="selection_warning_description">"Συνιστάται η χρήση της προεπιλεγμένης επιλογής patch και των επιλογών. Η αλλαγή τους ενδέχεται να οδηγήσει σε απρόβλεπτα προβλήματα.\n\nΠρέπει να ενεργοποιήσετε την επιλογή \"Να επιτρέπεται η αλλαγή της επιλογής patch και των επιλογών\" στις προηγμένες ρυθμίσεις πριν την εναλλαγή των patches."</string>
|
||||
<string name="universal_patch_warning_description">"Τα καθολικά patches έχουν πιο γενικευμένη χρήση και δεν λειτουργούν τόσο αξιόπιστα όσο τα patches που στοχεύουν σε συγκεκριμένες εφαρμογές. Ενδέχεται να αντιμετωπίσετε προβλήματα κατά τη χρήση τους.\n\nΠρέπει να ενεργοποιήσετε την επιλογή \"Να επιτρέπεται η χρήση καθολικών patches\" στις προηγμένες ρυθμίσεις πριν τη χρήση καθολικών patches."</string>
|
||||
<string name="this_version">Αυτή η έκδοση</string>
|
||||
<string name="universal">Οποιαδήποτε εφαρμογή</string>
|
||||
<string name="search_patches">Αναζήτηση patches</string>
|
||||
<string name="app_version_not_compatible">"Αυτό το patch δεν είναι συμβατό με την επιλεγμένη έκδοση εφαρμογής (%1$s)\n\nΕίναι συμβατό μόνο με τις ακόλουθες εκδόσεις: %2$s"</string>
|
||||
<string name="continue_with_version">Να συνεχίσετε με αυτήν την έκδοση;</string>
|
||||
<string name="version_not_compatible">Δεν είναι όλα τα patches συμβατά με αυτήν την έκδοση (%s). Θέλετε να συνεχίσετε ούτως ή άλλως;</string>
|
||||
<string name="download_application">Λήψη εφαρμογής;</string>
|
||||
<string name="app_not_installed">Η εφαρμογή που επιλέξατε δεν είναι εγκατεστημένη. Θέλετε να την κατεβάσετε;</string>
|
||||
<string name="failed_to_load_apk">Αποτυχία φόρτωσης APK</string>
|
||||
<string name="loading">Φόρτωση…</string>
|
||||
<string name="not_installed">Δεν είναι εγκατεστημένο</string>
|
||||
<string name="installed">Εγκατεστημένο</string>
|
||||
<string name="app_info">Πληροφορίες εφαρμογής</string>
|
||||
<string name="uninstall">Απεγκατάσταση</string>
|
||||
<string name="unpatch">Αφαίρεση patch</string>
|
||||
<string name="repatch">Επανεφαρμογή patch</string>
|
||||
<string name="install_type">Τύπος εγκατάστασης</string>
|
||||
<string name="package_name">Όνομα πακέτου</string>
|
||||
<string name="original_package_name">Αρχικό όνομα πακέτου</string>
|
||||
<string name="applied_patches">Εφαρμοσμένες τροποποιήσεις</string>
|
||||
<string name="view_applied_patches">Προβολή εφαρμοσμένων τροποποιήσεων</string>
|
||||
<string name="default_install">Προεπιλογή</string>
|
||||
<string name="mount_install">Προσαρτήση</string>
|
||||
<string name="mounted">Προσαρτημένο</string>
|
||||
<string name="not_mounted">Δεν είναι προσαρτημένο</string>
|
||||
<string name="mount">Προσαρτήση</string>
|
||||
<string name="unmount">Αποπροσαρτήση</string>
|
||||
<string name="failed_to_mount">Αποτυχία προσαρτήσης: %s</string>
|
||||
<string name="failed_to_unmount">Αποτυχία αποπροσαρτήσης: %s</string>
|
||||
<string name="unpatch_app">Αναίρεση τροποποίησης εφαρμογής;</string>
|
||||
<string name="unpatch_description">Είστε βέβαιοι ότι θέλετε να αναιρέσετε την τροποποίηση αυτής της εφαρμογής;</string>
|
||||
<string name="downloader_invalid_version">Η εφαρμογή λήψης δεν έλαβε τη σωστή έκδοση</string>
|
||||
<string name="downloader_app_not_found">Η εφαρμογή λήψης δεν βρήκε την εφαρμογή</string>
|
||||
<string name="downloader_error">Σφάλμα εφαρμογής λήψης: %s</string>
|
||||
<string name="downloader_no_plugins_installed">Δεν έχει εγκατασταθεί εφαρμογή λήψης.</string>
|
||||
<string name="downloader_no_plugins_available">Έχουν εγκατασταθεί εφαρμογές λήψης, αλλά καμία δεν είναι αξιόπιστη. Ελέγξτε τις ρυθμίσεις σας.</string>
|
||||
<string name="already_patched">Ήδη τροποποιημένο</string>
|
||||
<string name="patch_selector_sheet_filter_title">Φίλτρο</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">Συμβατότητα</string>
|
||||
<string name="string_option_menu_description">Περισσότερες επιλογές</string>
|
||||
<string name="option_preset_custom_value">Προσαρμοσμένη τιμή</string>
|
||||
<string name="path_selector">Επιλογή από τον χώρο αποθήκευσης</string>
|
||||
<string name="path_selector_parent_dir">Προηγούμενος κατάλογος</string>
|
||||
<string name="path_selector_dirs">Κατάλογοι</string>
|
||||
<string name="path_selector_files">Αρχεία</string>
|
||||
<string name="show_password_field">Εμφάνιση κωδικού πρόσβασης</string>
|
||||
<string name="hide_password_field">Απόκρυψη κωδικού πρόσβασης</string>
|
||||
<string name="installer">Εγκαταστάτης</string>
|
||||
<string name="install_app">Εγκατάσταση</string>
|
||||
<string name="install_app_success">Εγκαταστάθηκε η εφαρμογή</string>
|
||||
<string name="install_app_fail">Αποτυχία εγκατάστασης εφαρμογής: %s</string>
|
||||
<string name="reinstall_app_fail">Αποτυχία επανεγκατάστασης εφαρμογής: %s</string>
|
||||
<string name="uninstall_app_fail">Αποτυχία απεγκατάστασης εφαρμογής: %s</string>
|
||||
<string name="open_app">Άνοιγμα</string>
|
||||
<string name="save_apk">Αποθήκευση APK</string>
|
||||
<string name="save_apk_success">Το APK αποθηκεύτηκε</string>
|
||||
<string name="sign_fail">Αποτυχία υπογραφής APK: %s</string>
|
||||
<string name="save_logs">Αποθήκευση αρχείων καταγραφής</string>
|
||||
<string name="plugin_activity_dialog_body">Απαιτείται αλληλεπίδραση χρήστη για να προχωρήσει αυτό το πρόσθετο.</string>
|
||||
<string name="select_install_type">Επιλέξτε τύπο εγκατάστασης</string>
|
||||
<string name="patcher_step_group_preparing">Προετοιμασία</string>
|
||||
<string name="patcher_step_load_patches">Φόρτωση τροποποιήσεων</string>
|
||||
<string name="patcher_step_unpack">Ανάγνωση αρχείου APK</string>
|
||||
<string name="patcher_step_group_patching">Τροποποίηση</string>
|
||||
<string name="patcher_step_group_saving">Αποθήκευση</string>
|
||||
<string name="patcher_step_write_patched">Εγγραφή τροποποιημένου αρχείου APK</string>
|
||||
<string name="patcher_step_sign_apk">Υπογραφή τροποποιημένου αρχείου APK</string>
|
||||
<string name="patcher_notification_title">Η τροποποίηση βρίσκεται σε εξέλιξη…</string>
|
||||
<string name="patcher_notification_text">Πατήστε για επιστροφή στον τροποποιητή</string>
|
||||
<string name="patcher_stop_confirm_title">Διακοπή τροποποιητή</string>
|
||||
<string name="patcher_stop_confirm_description">Είστε βέβαιοι ότι θέλετε να διακόψετε τη διαδικασία τροποποίησης;</string>
|
||||
<string name="patcher_install_in_progress">Η εγκατάσταση βρίσκεται σε εξέλιξη. Παρακαλώ περιμένετε</string>
|
||||
<string name="execute_patches">Εκτέλεση τροποποιήσεων</string>
|
||||
<string name="executing_patch">Εκτέλεση %s</string>
|
||||
<string name="failed_to_execute_patch">Αποτυχία εκτέλεσης %s</string>
|
||||
<string name="step_completed">ολοκληρώθηκε</string>
|
||||
<string name="step_failed">απέτυχε</string>
|
||||
<string name="step_running">σε εκτέλεση</string>
|
||||
<string name="step_waiting">σε αναμονή</string>
|
||||
<string name="expand_content">ανάπτυξη</string>
|
||||
<string name="collapse_content">σύμπτυξη</string>
|
||||
<string name="drag_handle">αναδιάταξη</string>
|
||||
<string name="more">Περισσότερα</string>
|
||||
<string name="less">Λιγότερα</string>
|
||||
<string name="continue_">Συνέχεια</string>
|
||||
<string name="dismiss">Παράλειψη</string>
|
||||
<string name="permanent_dismiss">Να μην εμφανιστεί ξανά αυτό</string>
|
||||
<string name="donate">Δωρεά</string>
|
||||
<string name="website">Ιστότοπος</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="contact">Επικοινωνία</string>
|
||||
<string name="version">Έκδοση</string>
|
||||
<string name="submit_feedback">Υποβολή προβλήματος ή σχολίων</string>
|
||||
<string name="submit_feedback_description">Βοηθήστε μας να βελτιώσουμε αυτήν την εφαρμογή</string>
|
||||
<string name="developer_options">Επιλογές προγραμματιστή</string>
|
||||
<string name="developer_options_description">Επιλογές για την αποσφαλμάτωση προβλημάτων</string>
|
||||
<string name="patches_update_success">Η ενημέρωση ολοκληρώθηκε με επιτυχία</string>
|
||||
<string name="patches_update_unavailable">Δεν υπάρχει διαθέσιμη ενημέρωση</string>
|
||||
<string name="view_patches">Προβολή τροποποιήσεων</string>
|
||||
<string name="patches_view_any_version">Οποιαδήποτε έκδοση</string>
|
||||
<string name="patches_view_any_package">Οποιοδήποτε πακέτο</string>
|
||||
<string name="patches_delete_single_dialog_description">Είστε βέβαιοι ότι θέλετε να διαγράψετε το \"%s\";</string>
|
||||
<string name="patches_delete_multiple_dialog_description">Είστε βέβαιοι ότι θέλετε να διαγράψετε τις επιλεγμένες τροποποιήσεις;</string>
|
||||
<string name="about_revanced_manager">Σχετικά με το ReVanced Manager</string>
|
||||
<string name="revanced_manager_description">Το ReVanced Manager είναι μια εφαρμογή Android που χρησιμοποιεί το ReVanced Patcher για την τροποποίηση εφαρμογών Android. Σας επιτρέπει να κατεβάζετε και να τροποποιείτε εφαρμογές με προσαρμοσμένες τροποποιήσεις, και να διαχειρίζεστε τη διαδικασία τροποποίησης.</string>
|
||||
<string name="developer_options_taps">%d πατήματα απομένουν</string>
|
||||
<string name="developer_options_enabled">Οι επιλογές προγραμματιστή είναι ενεργοποιημένες</string>
|
||||
<string name="developer_options_already_enabled">Οι επιλογές προγραμματιστή είναι ήδη ενεργοποιημένες</string>
|
||||
<string name="update_available">Μια ενημέρωση είναι διαθέσιμη</string>
|
||||
<string name="current_version">Τρέχουσα έκδοση: %s</string>
|
||||
<string name="new_version">Νέα έκδοση: %s</string>
|
||||
<string name="ready_to_install_update">Έτοιμο για εγκατάσταση ενημέρωσης</string>
|
||||
<string name="update_completed">Η ενημέρωση εγκαταστάθηκε</string>
|
||||
<string name="install_update_manager_failed">Αποτυχία εγκατάστασης ενημέρωσης</string>
|
||||
<string name="manual_update_check">Έλεγχος για ενημερώσεις</string>
|
||||
<string name="manual_update_check_description">Μη αυτόματος έλεγχος για ενημερώσεις</string>
|
||||
<string name="update_checking_manager">Έλεγχος για ενημερώσεις κατά την εκκίνηση</string>
|
||||
<string name="update_checking_manager_description">Έλεγχος για νέες εκδόσεις του ReVanced Manager όταν ξεκινά η εφαρμογή</string>
|
||||
<string name="manager_prereleases">Χρήση πρώιμων εκδόσεων</string>
|
||||
<string name="manager_prereleases_description">Χρήση πρώιμων εκδόσεων του ReVanced Manager</string>
|
||||
<string name="changelog">Προβολή αρχείων αλλαγών</string>
|
||||
<string name="changelog_loading">Φόρτωση αρχείου αλλαγών</string>
|
||||
<string name="changelog_download_fail">Αποτυχία λήψης αρχείου αλλαγών: %s</string>
|
||||
<string name="changelog_description">Δείτε τις τελευταίες αλλαγές σε αυτήν την ενημέρωση</string>
|
||||
<string name="battery_optimization_notification">Οι βελτιστοποιήσεις μπαταρίας πρέπει να απενεργοποιηθούν ώστε το ReVanced Manager να λειτουργεί σωστά στο παρασκήνιο. Πατήστε εδώ για να απενεργοποιήσετε τις βελτιστοποιήσεις.</string>
|
||||
<string name="installing_manager_update">Εγκατάσταση ενημέρωσης…</string>
|
||||
<string name="downloading_manager_update">Λήψη ενημέρωσης…</string>
|
||||
<string name="download_manager_failed">Αποτυχία λήψης ενημέρωσης: %s</string>
|
||||
<string name="cancel">Ακύρωση</string>
|
||||
<string name="save">Αποθήκευση</string>
|
||||
<string name="save_with_count">Αποθήκευση (%1$s)</string>
|
||||
<string name="update">Ενημέρωση</string>
|
||||
<string name="empty">Άδειο</string>
|
||||
<string name="installing_message">"Πατήστε <b>Ενημέρωση</b> όταν σας ζητηθεί.
|
||||
Το ReVanced Manager θα κλείσει κατά την ενημέρωση."</string>
|
||||
<string name="no_changelogs_found">Δεν βρέθηκαν αρχεία αλλαγών</string>
|
||||
<string name="just_now">Μόλις τώρα</string>
|
||||
<string name="minutes_ago">Πριν από %sλ</string>
|
||||
<string name="hours_ago">Πριν από %sώ</string>
|
||||
<string name="days_ago">Πριν από %sη</string>
|
||||
<string name="invalid_date">Μη έγκυρη ημερομηνία</string>
|
||||
<string name="disable_battery_optimization">Απενεργοποίηση βελτιστοποίησης μπαταρίας</string>
|
||||
<string name="input_dialog_value_invalid">Μη έγκυρη τιμή</string>
|
||||
<string name="option_required">Αυτή η επιλογή είναι υποχρεωτική</string>
|
||||
<string name="required_options_screen">Απαιτούμενες επιλογές</string>
|
||||
<string name="failed_to_check_updates">Αποτυχία ελέγχου για ενημερώσεις: %s</string>
|
||||
<string name="no_update_available">Δεν υπάρχει διαθέσιμη ενημέρωση</string>
|
||||
<string name="update_check">Έλεγχος για ενημερώσεις…</string>
|
||||
<string name="dismiss_temporary">Όχι τώρα</string>
|
||||
<string name="update_available_dialog_description">Μια νέα έκδοση του ReVanced Manager (%s) είναι διαθέσιμη.</string>
|
||||
<string name="failed_to_download_update">Αποτυχία λήψης ενημέρωσης: %s</string>
|
||||
<string name="download">Λήψη</string>
|
||||
<string name="download_confirmation_metered">"Είστε συνδεδεμένοι σε σύνδεση με περιορισμένα δεδομένα και ενδέχεται να ισχύουν χρεώσεις δεδομένων από τον πάροχο υπηρεσιών σας.
|
||||
|
||||
Θέλετε να συνεχίσετε;"</string>
|
||||
<string name="download_update_confirmation">Λήψη ενημέρωσης;</string>
|
||||
<string name="no_contributors_found">Δεν βρέθηκαν συντελεστές</string>
|
||||
<string name="select">Επιλογή</string>
|
||||
<string name="select_deselect_all">Επιλογή ή κατάργηση επιλογής όλων</string>
|
||||
<string name="select_patches_type_dialog_description">Προσθήκη νέων τροποποιήσεων από URL ή τοπικά αρχεία</string>
|
||||
<string name="local_patches_description">Προσθήκη τροποποιήσεων από τον τοπικό χώρο αποθήκευσης.</string>
|
||||
<string name="remote_patches_description">Προσθήκη τροποποιήσεων από URL. Οι τροποποιήσεις μπορούν να ενημερώνονται αυτόματα.</string>
|
||||
<string name="recommended">Συνιστάται</string>
|
||||
<string name="installation_failed_dialog_title">Η εγκατάσταση απέτυχε</string>
|
||||
<string name="installation_cancelled_dialog_title">Η εγκατάσταση ακυρώθηκε</string>
|
||||
<string name="installation_blocked_dialog_title">Η εγκατάσταση αποκλείστηκε</string>
|
||||
<string name="installation_conflict_dialog_title">Σύγκρουση εγκατάστασης</string>
|
||||
<string name="installation_incompatible_dialog_title">Η εγκατάσταση δεν είναι συμβατή</string>
|
||||
<string name="installation_invalid_dialog_title">Η εγκατάσταση δεν είναι έγκυρη</string>
|
||||
<string name="installation_storage_issue_dialog_title">Μη επαρκής χώρος αποθήκευσης</string>
|
||||
<string name="installation_timeout_dialog_title">Η εγκατάσταση έληξε</string>
|
||||
<string name="installation_failed_description">Η εγκατάσταση απέτυχε λόγω άγνωστου λόγου. Θέλετε να προσπαθήσετε ξανά;</string>
|
||||
<string name="installation_aborted_description">Η εγκατάσταση ακυρώθηκε χειροκίνητα. Θέλετε να προσπαθήσετε ξανά;</string>
|
||||
<string name="installation_blocked_description">Η εγκατάσταση αποκλείστηκε. Ελέγξτε τις ρυθμίσεις ασφαλείας της συσκευής σας και δοκιμάστε ξανά.</string>
|
||||
<string name="installation_conflict_description">Η εγκατάσταση αποτράπηκε από μια υπάρχουσα εγκατάσταση της εφαρμογής. Θέλετε να απεγκαταστήσετε την εγκατεστημένη εφαρμογή και να δοκιμάσετε ξανά;</string>
|
||||
<string name="installation_incompatible_description">Η εφαρμογή δεν είναι συμβατή με αυτήν τη συσκευή. Χρησιμοποιήστε ένα APK που είναι συμβατό με αυτήν τη συσκευή και δοκιμάστε ξανά.</string>
|
||||
<string name="installation_invalid_description">Η εφαρμογή δεν είναι έγκυρη. Θέλετε να απεγκαταστήσετε την εφαρμογή και να δοκιμάσετε ξανά;</string>
|
||||
<string name="installation_storage_issue_description">Η εφαρμογή δεν μπόρεσε να εγκατασταθεί λόγω ανεπαρκούς χώρου αποθήκευσης. Απελευθερώστε χώρο και δοκιμάστε ξανά.</string>
|
||||
<string name="installation_timeout_description">Η εγκατάσταση χρειάστηκε πολύ χρόνο. Θέλετε να προσπαθήσετε ξανά;</string>
|
||||
<string name="reinstall">Επανεγκατάσταση</string>
|
||||
<string name="show">Εμφάνιση</string>
|
||||
<string name="debugging">Εντοπισμός σφαλμάτων</string>
|
||||
<string name="about_device">Σχετικά με τη συσκευή</string>
|
||||
<string name="enter_url">Εισαγωγή URL</string>
|
||||
<string name="next">Επόμενο</string>
|
||||
<string name="auto_update">Αυτόματη ενημέρωση</string>
|
||||
<string name="add_patches">Προσθήκη τροποποιήσεων</string>
|
||||
<string name="auto_update_description">Αυτόματη ενημέρωση όταν είναι διαθέσιμη μια νέα έκδοση</string>
|
||||
<string name="patches_prereleases">Χρήση πρώιμων εκδόσεων</string>
|
||||
<string name="patches_prereleases_description">Χρήση πρώιμων εκδόσεων του %s</string>
|
||||
<string name="patches_url">URL τροποποιήσεων</string>
|
||||
<string name="incompatible_patches_dialog">"Αυτές οι τροποποιήσεις δεν είναι συμβατές με την επιλεγμένη έκδοση εφαρμογής (%1$s).\n\nΠατήστε στις τροποποιήσεις για να δείτε περισσότερες λεπτομέρειες."</string>
|
||||
<string name="incompatible_patch">Μη συμβατή τροποποίηση</string>
|
||||
<string name="any_version">Οποιοδήποτε</string>
|
||||
<string name="never_show_again">Να μην εμφανιστεί ποτέ ξανά</string>
|
||||
<string name="show_manager_update_dialog_on_launch">Εμφάνιση μηνύματος ενημέρωσης κατά την εκκίνηση</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">Εμφάνιση αναδυόμενης ειδοποίησης κάθε φορά που είναι διαθέσιμη μια νέα ενημέρωση κατά την εκκίνηση</string>
|
||||
<string name="failed_to_import_keystore">Αποτυχία εισαγωγής keystore</string>
|
||||
<string name="export">Εξαγωγή</string>
|
||||
<string name="confirm">Επιβεβαίωση</string>
|
||||
</resources>
|
||||
@@ -1,460 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">Prueba de parcheador</string>
|
||||
<string name="patches">Parches</string>
|
||||
<string name="cli">CLI</string>
|
||||
<string name="manager">Administrador</string>
|
||||
<string name="plugin_host_permission_label">Host de plugins de ReVanced Manager</string>
|
||||
<string name="plugin_host_permission_description">Se usa para controlar el acceso a los plugins de ReVanced Manager. Solo ReVanced Manager lo tiene.</string>
|
||||
<string name="toast_copied_to_clipboard">¡Copiado!</string>
|
||||
<string name="copy_to_clipboard">Copiar al portapapeles</string>
|
||||
<string name="dashboard">Panel de control</string>
|
||||
<string name="settings">Ajustes</string>
|
||||
<string name="select_app">Seleccionar una aplicación</string>
|
||||
<string name="patches_count_selected">%1$d/%2$d seleccionados</string>
|
||||
<string name="new_downloader_plugins_notification">Nuevos plugins de descarga disponibles. Haz clic aquí para configurarlos.</string>
|
||||
<string name="unsupported_architecture_warning">La aplicación de parches en la arquitectura de este dispositivo no es compatible y lo más probable es que falle.</string>
|
||||
<string name="import_">Importar</string>
|
||||
<string name="import_patches">Importar parches</string>
|
||||
<string name="file_field_set">Seleccionado</string>
|
||||
<string name="file_field_not_set">No seleccionado</string>
|
||||
<string name="field_not_set">No establecido</string>
|
||||
<string name="patches_missing">Ausente</string>
|
||||
<string name="patches_error">Error</string>
|
||||
<string name="patches_error_description">No se pudieron cargar los parches. Haz clic para ver el error</string>
|
||||
<string name="patches_not_downloaded">Los parches no se han descargado. Haz clic aquí para descargarlos</string>
|
||||
<string name="patches_name_default">Parches</string>
|
||||
<string name="patches_name_fallback">Sin nombre</string>
|
||||
<string name="android_11_bug_dialog_title">Error de Android 11</string>
|
||||
<string name="android_11_bug_dialog_description">El permiso de instalación de la aplicación debe concederse con antelación para evitar un error en el sistema Android 11 que afectará negativamente a la experiencia del usuario.</string>
|
||||
<string name="no_network_toast">No hay conexión a internet disponible</string>
|
||||
<string name="selected_app_meta_any_version">Cualquier versión disponible</string>
|
||||
<string name="app_source_dialog_title">Seleccionar origen</string>
|
||||
<string name="app_source_dialog_option_auto">Automático</string>
|
||||
<string name="app_source_dialog_option_auto_description">Usar todos los descargadores disponibles para bajar la aplicación</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">No hay plugins disponibles</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">Las aplicaciones montadas no se pueden parchear de nuevo sin acceso de root</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">La versión %s no coincide con la versión sugerida</string>
|
||||
<string name="patch_item_description">Comenzar a parchear la aplicación</string>
|
||||
<string name="patch_selector_item">Seleccionar parches</string>
|
||||
<string name="patch_selector_item_description">%d parches seleccionados</string>
|
||||
<string name="no_patches_selected">Ningún parche seleccionado</string>
|
||||
<string name="network_unavailable_warning">Tu dispositivo no está conectado a internet. La descarga fallará más tarde.</string>
|
||||
<string name="network_metered_warning">Actualmente estás en una conexión de uso medido. Pueden aplicarse cargos por datos de tu proveedor de servicios.</string>
|
||||
<string name="apk_source_selector_item">Seleccionar origen de APK</string>
|
||||
<string name="apk_source_auto">Usando todos los descargadores de APK</string>
|
||||
<string name="apk_source_downloader">Usando %s</string>
|
||||
<string name="apk_source_installed">Usando APK instalada</string>
|
||||
<string name="apk_source_local">Usando un archivo APK local</string>
|
||||
<string name="legacy_import_failed">No se pudieron importar los ajustes heredados</string>
|
||||
<string name="auto_updates_dialog_title">Configurar actualizaciones</string>
|
||||
<string name="auto_updates_dialog_description">¿Desea que ReVanced Manager compruebe periódicamente si hay actualizaciones para los siguientes componentes?</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">Parches de ReVanced</string>
|
||||
<string name="auto_updates_dialog_note">Estos ajustes se pueden cambiar más tarde.</string>
|
||||
<string name="general">General</string>
|
||||
<string name="general_description">Idioma, tema, color dinámico</string>
|
||||
<string name="updates">Actualizaciones</string>
|
||||
<string name="updates_description">Buscar actualizaciones y ver registros de cambios</string>
|
||||
<string name="downloads">Descargas</string>
|
||||
<string name="downloads_description">Plugins de descarga y aplicaciones descargadas</string>
|
||||
<string name="import_export">Importar & exportar</string>
|
||||
<string name="import_export_description">Almacén de claves, opciones de parche y selección</string>
|
||||
<string name="advanced">Avanzado</string>
|
||||
<string name="advanced_description">URL de API, límite de memoria, depuración</string>
|
||||
<string name="about">Acerca de</string>
|
||||
<string name="opensource_licenses">Licencias de código abierto</string>
|
||||
<string name="opensource_licenses_description">Ver todas las bibliotecas utilizadas para crear esta aplicación</string>
|
||||
<string name="contributors">Colaboradores</string>
|
||||
<string name="contributors_description">Ver los colaboradores de ReVanced</string>
|
||||
<string name="dynamic_color">Color dinámico</string>
|
||||
<string name="dynamic_color_description">Adaptar colores al fondo de pantalla</string>
|
||||
<string name="pure_black_theme">Tema negro puro</string>
|
||||
<string name="pure_black_theme_description">Usar fondos negros puros para el tema oscuro</string>
|
||||
<string name="theme">Tema</string>
|
||||
<string name="theme_description">Elegir entre tema claro u oscuro</string>
|
||||
<string name="language">Idioma</string>
|
||||
<string name="language_description">Elegir el idioma de visualización de la aplicación</string>
|
||||
<string name="language_system_default">Predeterminado del sistema</string>
|
||||
<string name="safeguards">Salvaguardas</string>
|
||||
<string name="patch_compat_check">Desactivar la comprobación de compatibilidad de versiones</string>
|
||||
<string name="patch_compat_check_description">No restringir los parches a versiones de aplicaciones compatibles</string>
|
||||
<string name="patch_compat_check_confirmation">"Seleccionar parches incompatibles puede resultar en una aplicación rota.
|
||||
|
||||
¿Deseas continuar de todos modos?"</string>
|
||||
<string name="suggested_version_safeguard">Requerir la versión sugerida de la aplicación</string>
|
||||
<string name="suggested_version_safeguard_description">Aplicar la selección de la versión sugerida de la aplicación</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"Seleccionar una aplicación que no sea la versión sugerida puede causar problemas inesperados.
|
||||
|
||||
¿Deseas continuar de todos modos?"</string>
|
||||
<string name="patch_selection_safeguard">Permitir cambiar la selección y opciones de parches</string>
|
||||
<string name="patch_selection_safeguard_description">No evitar seleccionar o deseleccionar parches y la personalización de opciones</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"Cambiar la selección de parches puede causar problemas inesperados.
|
||||
|
||||
¿Habilitar de todos modos?"</string>
|
||||
<string name="universal_patches_safeguard">Permitir usar parches universales</string>
|
||||
<string name="universal_patches_safeguard_description">No evitar el uso de parches universales</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"Los parches universales no están tan bien probados como aquellos que se dirigen a aplicaciones específicas.
|
||||
|
||||
¿Habilitar de todos modos?"</string>
|
||||
<string name="import_keystore">Importar almacén de claves</string>
|
||||
<string name="import_keystore_description">Importar un almacén de claves personalizado</string>
|
||||
<string name="import_keystore_dialog_title">Introducir credenciales del almacén de claves</string>
|
||||
<string name="import_keystore_dialog_description">Deberás introducir las credenciales del almacén de claves para importarlo.</string>
|
||||
<string name="import_keystore_dialog_alias_field">Nombre de usuario (Alias)</string>
|
||||
<string name="import_keystore_dialog_password_field">Contraseña</string>
|
||||
<string name="import_keystore_dialog_button">Importar</string>
|
||||
<string name="import_keystore_wrong_credentials">Credenciales del almacén de claves incorrectas</string>
|
||||
<string name="import_keystore_success">Almacén de claves importado</string>
|
||||
<string name="export_keystore">Exportar almacén de claves</string>
|
||||
<string name="export_keystore_description">Exportar el almacén de claves actual</string>
|
||||
<string name="export_keystore_unavailable">No hay almacén de claves para exportar</string>
|
||||
<string name="export_keystore_success">Almacén de claves exportado</string>
|
||||
<string name="regenerate_keystore">Regenerar almacén de claves</string>
|
||||
<string name="regenerate_keystore_description">Generar un nuevo almacén de claves</string>
|
||||
<string name="regenerate_keystore_dialog_description">"Estás a punto de regenerar tu almacén de claves que el administrador usará durante el proceso de aplicación de parches.
|
||||
|
||||
No podrás actualizar las aplicaciones instaladas previamente desde este origen."</string>
|
||||
<string name="regenerate_keystore_success">El almacén de claves ha sido reemplazado con éxito</string>
|
||||
<string name="import_patch_selection">Importar selección de parches</string>
|
||||
<string name="import_patch_selection_description">Importar selección de parches desde un archivo JSON</string>
|
||||
<string name="import_patch_selection_fail">No se pudo importar la selección de parches: %s</string>
|
||||
<string name="import_patch_selection_success">Selección de parches importada</string>
|
||||
<string name="export_patch_selection">Exportar selección de parches</string>
|
||||
<string name="export_patch_selection_description">Exportar selección de parches a un archivo JSON</string>
|
||||
<string name="export_patch_selection_fail">No se pudo exportar la selección de parches: %s</string>
|
||||
<string name="export_patch_selection_success">Selección de parches exportada</string>
|
||||
<string name="reset_patch_selection">Restablecer selección de parches</string>
|
||||
<string name="reset_patch_selection_description">Restablecer la selección de parches almacenada</string>
|
||||
<string name="reset_patch_options">Restablecer opciones de parches</string>
|
||||
<string name="reset_patch_options_description">Restablecer las opciones de parches almacenadas</string>
|
||||
<string name="reset_patch_selection_success">La selección de parches ha sido restablecida</string>
|
||||
<string name="patch_selection_reset_all">Restablecer selección de parches globalmente</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">Estás a punto de restablecer todas las selecciones de parches. Deberás seleccionar manualmente cada parche de nuevo.</string>
|
||||
<string name="patch_selection_reset_all_description">Restablece todas las selecciones de parches</string>
|
||||
<string name="patch_selection_reset_package">Restablecer selección de parches para la aplicación</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">Estás a punto de restablecer la selección de parches para la aplicación \"%s\". Tendrás que seleccionar manualmente cada parche de nuevo.</string>
|
||||
<string name="patch_selection_reset_package_description">Restablece la selección de parches para una sola aplicación</string>
|
||||
<string name="patch_selection_reset_patches">Restablecer selección de parches (individual)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">Estás a punto de restablecer la selección de parches para \"%s\". Tendrás que seleccionar manualmente cada parche de nuevo.</string>
|
||||
<string name="patch_selection_reset_patches_description">Restablece la selección de parches para una colección específica de parches</string>
|
||||
<string name="patch_options_reset_package">Restablecer opciones de parche para la aplicación</string>
|
||||
<string name="patch_options_reset_package_dialog_description">Estás a punto de restablecer las opciones de parche para la aplicación \"%s\". Tendrás que volver a aplicar cada opción.</string>
|
||||
<string name="patch_options_reset_package_description">Restablece las opciones de parche para una sola aplicación</string>
|
||||
<string name="patch_options_reset_patches">Restablecer opciones de parche (individual)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">Estás a punto de restablecer las opciones de parche para \"%s\". Tendrás que volver a aplicar cada opción.</string>
|
||||
<string name="patch_options_reset_patches_description">Restablece las opciones de parche para una colección específica de parches</string>
|
||||
<string name="patch_options_reset_all">Restablecer opciones de parche globalmente</string>
|
||||
<string name="patch_options_reset_all_dialog_description">Estás a punto de restablecer todas las opciones de parche. Tendrás que volver a aplicar cada opción.</string>
|
||||
<string name="patch_options_reset_all_description">Restablece todas las opciones de parche</string>
|
||||
<string name="downloader_plugins">Plugins</string>
|
||||
<string name="downloader_plugin_state_trusted">Confiable</string>
|
||||
<string name="downloader_plugin_state_failed">Error al cargar. Haz clic para más detalles</string>
|
||||
<string name="downloader_plugin_state_untrusted">No confiable</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">¿Confiar en el plugin?</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">¿Revocar confianza?</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">Continuar permitirá que este plugin se ejecute en tu sistema.\n\nSolo activa este plugin si confías en él. Los plugins pueden ejecutar código arbitrario y pueden comprometer tu dispositivo.</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">Firma:\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">Plugin:\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">Eliminar aplicaciones seleccionadas</string>
|
||||
<string name="downloader_plugin_delete_apps_description">¿Estás seguro de que quieres eliminar las aplicaciones seleccionadas?</string>
|
||||
<string name="downloader_settings_no_apps">No se encontraron aplicaciones descargadas.</string>
|
||||
<string name="search_apps">Buscar aplicaciones…</string>
|
||||
<string name="loading_body">Cargando…</string>
|
||||
<string name="downloading_patches">Descargando parches…</string>
|
||||
<string name="options">Opciones</string>
|
||||
<string name="ok">Aceptar</string>
|
||||
<string name="yes">Sí</string>
|
||||
<string name="no">No</string>
|
||||
<string name="edit">Editar</string>
|
||||
<string name="dialog_input_placeholder">Valor</string>
|
||||
<string name="reset">Restablecer</string>
|
||||
<string name="share">Compartir</string>
|
||||
<string name="patch">Parche</string>
|
||||
<string name="select_from_storage">Seleccionar del almacenamiento</string>
|
||||
<string name="select_from_storage_description">Seleccionar un archivo APK del almacenamiento usando el selector de archivos</string>
|
||||
<string name="suggested_version_info">Versión sugerida: %s</string>
|
||||
<string name="type_anything">Escribe algo para continuar</string>
|
||||
<string name="search">Buscar parches…</string>
|
||||
<string name="apply">Aplicar</string>
|
||||
<string name="help">Ayuda</string>
|
||||
<string name="back">Atrás</string>
|
||||
<string name="warning">Advertencia</string>
|
||||
<string name="add">Añadir</string>
|
||||
<string name="close">Cerrar</string>
|
||||
<string name="clear">Borrar</string>
|
||||
<string name="system">Sistema</string>
|
||||
<string name="light">Claro</string>
|
||||
<string name="dark">Oscuro</string>
|
||||
<string name="appearance">Apariencia</string>
|
||||
<string name="networking">Redes</string>
|
||||
<string name="allow_metered_networks">Permitir redes de uso medido</string>
|
||||
<string name="allow_metered_networks_description">Permite actualizaciones automáticas en redes de uso medido.\n La aplicación podría seguir advirtiendo sobre redes de uso medido para operaciones manuales.</string>
|
||||
<string name="downloaded_apps">Aplicaciones descargadas</string>
|
||||
<string name="process_runtime">Ejecutar Patcher en otro proceso (experimental)</string>
|
||||
<string name="process_runtime_description">Esto es más rápido y permite que Patcher use más memoria</string>
|
||||
<string name="process_runtime_memory_limit">Límite de memoria del proceso de Patcher</string>
|
||||
<string name="process_runtime_memory_limit_description">La cantidad máxima de memoria que el proceso de Patcher puede usar (en megabytes)</string>
|
||||
<string name="debug_logs_export">Exportar registros de depuración</string>
|
||||
<string name="debug_logs_export_read_failed">Error al leer registros (código de salida %d)</string>
|
||||
<string name="debug_logs_export_failed">Error al exportar registros</string>
|
||||
<string name="debug_logs_export_success">Registros exportados</string>
|
||||
<string name="api_url">URL de la API</string>
|
||||
<string name="api_url_description">La API utilizada para descargar archivos necesarios</string>
|
||||
<string name="api_url_dialog_title">Cambiar URL de la API</string>
|
||||
<string name="api_url_dialog_description">Cambia la URL de la API de ReVanced Manager. ReVanced Manager usa la API para descargar parches y actualizaciones.</string>
|
||||
<string name="api_url_dialog_warning">ReVanced Manager se conecta a la API para descargar parches y actualizaciones. Asegúrate de que confías en ella.</string>
|
||||
<string name="api_url_dialog_save">Establecer</string>
|
||||
<string name="api_url_dialog_reset">Restablecer URL de la API</string>
|
||||
<string name="device">Dispositivo</string>
|
||||
<string name="device_android_version">Versión de Android</string>
|
||||
<string name="device_model">Modelo</string>
|
||||
<string name="device_architectures">Arquitecturas de CPU</string>
|
||||
<string name="device_memory_limit">Límites de memoria</string>
|
||||
<string name="device_memory_limit_format">%1$dMB (Normal) - %2$dMB (Grande)</string>
|
||||
<string name="patches_force_download">Forzar descarga de todos los parches</string>
|
||||
<string name="patches_reset">Restablecer parches</string>
|
||||
<string name="patching">Parcheando</string>
|
||||
<string name="signing">Firmando</string>
|
||||
<string name="storage">Almacenamiento</string>
|
||||
<string name="no_patch_found">No se puede encontrar ningún parche. Comprueba tus parches</string>
|
||||
<string name="tab_apps">Aplicaciones</string>
|
||||
<string name="tab_patches">Parches</string>
|
||||
<string name="delete">Eliminar</string>
|
||||
<string name="refresh">Actualizar</string>
|
||||
<string name="continue_anyways">Continuar de todas formas</string>
|
||||
<string name="download_another_version">Descargar otra versión</string>
|
||||
<string name="download_app">Descargar aplicación</string>
|
||||
<string name="download_apk">Descargar archivo APK</string>
|
||||
<string name="patches_download_fail">Error al descargar parches: %s</string>
|
||||
<string name="patches_replace_fail">Error al importar parches: %s</string>
|
||||
<string name="no_patched_apps_found">No se encontraron aplicaciones parcheadas</string>
|
||||
<string name="tap_on_patches">Toca los parches para obtener más información sobre ellos</string>
|
||||
<string name="patches_selected">%s seleccionados</string>
|
||||
<string name="incompatible_patches">Parches incompatibles</string>
|
||||
<string name="universal_patches">Parches universales</string>
|
||||
<string name="patch_selection_reset_toast">La selección y las opciones de parches se han restablecido a los valores predeterminados recomendados</string>
|
||||
<string name="patch_options_reset_toast">Las opciones de parche se han restablecido</string>
|
||||
<string name="non_suggested_version_warning_title">Versión no sugerida</string>
|
||||
<string name="non_suggested_version_warning_description">"La versión de la aplicación que has seleccionado no coincide con la versión sugerida.\nUtiliza la versión sugerida: %s\n\nPara continuar de todas formas, desactiva \"Requerir versión de aplicación sugerida\" en la configuración avanzada."</string>
|
||||
<string name="selection_warning_title">¿Dejar de usar los valores predeterminados?</string>
|
||||
<string name="selection_warning_description">"Se recomienda usar la selección y opciones de parches predeterminadas. Cambiarlas puede resultar en problemas inesperados.\n\nDebes activar \"Permitir cambiar la selección y opciones de parches\" en la configuración avanzada antes de activar o desactivar parches."</string>
|
||||
<string name="universal_patch_warning_description">"Los parches universales tienen un uso más generalizado y no funcionan de manera tan fiable como los parches dirigidos a aplicaciones específicas. Puedes encontrar problemas al usarlos.\n\nDebes activar \"Permitir usar parches universales\" en la configuración avanzada antes de usarlos."</string>
|
||||
<string name="this_version">Esta versión</string>
|
||||
<string name="universal">Cualquier aplicación</string>
|
||||
<string name="search_patches">Buscar parches</string>
|
||||
<string name="app_version_not_compatible">"Este parche no es compatible con la versión de aplicación seleccionada (%1$s)\n\nSolo es compatible con la(s) siguiente(s) versión(es): %2$s"</string>
|
||||
<string name="continue_with_version">¿Continuar con esta versión?</string>
|
||||
<string name="version_not_compatible">No todos los parches son compatibles con esta versión (%s). ¿Quieres continuar de todas formas?</string>
|
||||
<string name="download_application">¿Descargar aplicación?</string>
|
||||
<string name="app_not_installed">La aplicación que seleccionaste no está instalada. ¿Quieres descargarla?</string>
|
||||
<string name="failed_to_load_apk">Error al cargar el APK</string>
|
||||
<string name="loading">Cargando…</string>
|
||||
<string name="not_installed">No instalada</string>
|
||||
<string name="installed">Instalada</string>
|
||||
<string name="app_info">Información de la aplicación</string>
|
||||
<string name="uninstall">Desinstalar</string>
|
||||
<string name="unpatch">Desparchear</string>
|
||||
<string name="repatch">Volver a parchear</string>
|
||||
<string name="install_type">Tipo de instalación</string>
|
||||
<string name="package_name">Nombre del paquete</string>
|
||||
<string name="original_package_name">Nombre original del paquete</string>
|
||||
<string name="applied_patches">Parches aplicados</string>
|
||||
<string name="view_applied_patches">Ver parches aplicados</string>
|
||||
<string name="default_install">Predeterminado</string>
|
||||
<string name="mount_install">Montar</string>
|
||||
<string name="mounted">Montado</string>
|
||||
<string name="not_mounted">No montado</string>
|
||||
<string name="mount">Montar</string>
|
||||
<string name="unmount">Desmontar</string>
|
||||
<string name="failed_to_mount">Error al montar: %s</string>
|
||||
<string name="failed_to_unmount">Error al desmontar: %s</string>
|
||||
<string name="unpatch_app">¿Desaplicar parches de la aplicación?</string>
|
||||
<string name="unpatch_description">¿Estás seguro de que deseas desaplicar los parches de esta aplicación?</string>
|
||||
<string name="downloader_invalid_version">El descargador no obtuvo la versión correcta</string>
|
||||
<string name="downloader_app_not_found">El descargador no encontró la aplicación</string>
|
||||
<string name="downloader_error">Error del descargador: %s</string>
|
||||
<string name="downloader_no_plugins_installed">No hay ningún descargador instalado.</string>
|
||||
<string name="downloader_no_plugins_available">Hay descargadores instalados, pero ninguno es de confianza. Revisa tu configuración.</string>
|
||||
<string name="already_patched">Ya parchado</string>
|
||||
<string name="patch_selector_sheet_filter_title">Filtrar</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">Compatibilidad</string>
|
||||
<string name="string_option_menu_description">Más opciones</string>
|
||||
<string name="option_preset_custom_value">Valor personalizado</string>
|
||||
<string name="path_selector">Seleccionar del almacenamiento</string>
|
||||
<string name="path_selector_parent_dir">Directorio anterior</string>
|
||||
<string name="path_selector_dirs">Directorios</string>
|
||||
<string name="path_selector_files">Archivos</string>
|
||||
<string name="show_password_field">Mostrar contraseña</string>
|
||||
<string name="hide_password_field">Ocultar contraseña</string>
|
||||
<string name="installer">Instalador</string>
|
||||
<string name="install_app">Instalar</string>
|
||||
<string name="install_app_success">Aplicación instalada</string>
|
||||
<string name="install_app_fail">Error al instalar la aplicación: %s</string>
|
||||
<string name="reinstall_app_fail">Error al reinstalar la aplicación: %s</string>
|
||||
<string name="uninstall_app_fail">Error al desinstalar la aplicación: %s</string>
|
||||
<string name="open_app">Abrir</string>
|
||||
<string name="save_apk">Guardar APK</string>
|
||||
<string name="save_apk_success">APK guardado</string>
|
||||
<string name="sign_fail">Error al firmar APK: %s</string>
|
||||
<string name="save_logs">Guardar registros</string>
|
||||
<string name="plugin_activity_dialog_body">Se requiere la interacción del usuario para continuar con este complemento.</string>
|
||||
<string name="select_install_type">Seleccionar tipo de instalación</string>
|
||||
<string name="patcher_step_group_preparing">Preparando</string>
|
||||
<string name="patcher_step_load_patches">Cargar parches</string>
|
||||
<string name="patcher_step_unpack">Leer archivo APK</string>
|
||||
<string name="patcher_step_group_patching">Parcheando</string>
|
||||
<string name="patcher_step_group_saving">Guardando</string>
|
||||
<string name="patcher_step_write_patched">Escribir archivo APK parchado</string>
|
||||
<string name="patcher_step_sign_apk">Firmar archivo APK parchado</string>
|
||||
<string name="patcher_notification_title">Parcheando…</string>
|
||||
<string name="patcher_notification_text">Toca para volver al parcheador</string>
|
||||
<string name="patcher_stop_confirm_title">Detener parcheador</string>
|
||||
<string name="patcher_stop_confirm_description">¿Estás seguro de que deseas detener el proceso de parcheo?</string>
|
||||
<string name="patcher_install_in_progress">La instalación está en curso. Por favor, espera.</string>
|
||||
<string name="execute_patches">Ejecutar parches</string>
|
||||
<string name="executing_patch">Ejecutar %s</string>
|
||||
<string name="failed_to_execute_patch">Error al ejecutar %s</string>
|
||||
<string name="step_completed">completado</string>
|
||||
<string name="step_failed">falló</string>
|
||||
<string name="step_running">ejecutando</string>
|
||||
<string name="step_waiting">esperando</string>
|
||||
<string name="expand_content">expandir</string>
|
||||
<string name="collapse_content">contraer</string>
|
||||
<string name="drag_handle">reordenar</string>
|
||||
<string name="more">Más</string>
|
||||
<string name="less">Menos</string>
|
||||
<string name="continue_">Continuar</string>
|
||||
<string name="dismiss">Descartar</string>
|
||||
<string name="permanent_dismiss">No volver a mostrar esto</string>
|
||||
<string name="donate">Donar</string>
|
||||
<string name="website">Sitio web</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="contact">Contacto</string>
|
||||
<string name="version">Versión</string>
|
||||
<string name="submit_feedback">Enviar incidencia o comentarios</string>
|
||||
<string name="submit_feedback_description">Ayúdanos a mejorar esta aplicación</string>
|
||||
<string name="developer_options">Opciones de desarrollador</string>
|
||||
<string name="developer_options_description">Opciones para depurar problemas</string>
|
||||
<string name="patches_update_success">Actualización exitosa</string>
|
||||
<string name="patches_update_unavailable">No hay actualización disponible</string>
|
||||
<string name="view_patches">Ver parches</string>
|
||||
<string name="patches_view_any_version">Cualquier versión</string>
|
||||
<string name="patches_view_any_package">Cualquier paquete</string>
|
||||
<string name="patches_delete_single_dialog_description">¿Estás seguro de que deseas eliminar \"%s\"?</string>
|
||||
<string name="patches_delete_multiple_dialog_description">¿Estás seguro de que deseas eliminar los parches seleccionados?</string>
|
||||
<string name="about_revanced_manager">Acerca de ReVanced Manager</string>
|
||||
<string name="revanced_manager_description">ReVanced Manager es una aplicación de Android que utiliza ReVanced Patcher para aplicar parches a aplicaciones de Android. Te permite descargar y aplicar parches a aplicaciones con parches personalizados, y gestionar el proceso de parcheo.</string>
|
||||
<string name="developer_options_taps">%d toques restantes</string>
|
||||
<string name="developer_options_enabled">Opciones de desarrollador activadas</string>
|
||||
<string name="developer_options_already_enabled">Las opciones de desarrollador ya están activadas</string>
|
||||
<string name="update_available">Hay una actualización disponible</string>
|
||||
<string name="current_version">Versión actual: %s</string>
|
||||
<string name="new_version">Nueva versión: %s</string>
|
||||
<string name="ready_to_install_update">Listo para instalar la actualización</string>
|
||||
<string name="update_completed">Actualización instalada</string>
|
||||
<string name="install_update_manager_failed">Error al instalar la actualización</string>
|
||||
<string name="manual_update_check">Buscar actualizaciones</string>
|
||||
<string name="manual_update_check_description">Buscar actualizaciones manualmente</string>
|
||||
<string name="update_checking_manager">Buscar actualizaciones al inicio</string>
|
||||
<string name="update_checking_manager_description">Buscar nuevas versiones de ReVanced Manager cuando la aplicación se inicie</string>
|
||||
<string name="manager_prereleases">Usar versiones de pre-lanzamiento</string>
|
||||
<string name="manager_prereleases_description">Usar versiones de pre-lanzamiento de ReVanced Manager</string>
|
||||
<string name="changelog">Ver registros de cambios</string>
|
||||
<string name="changelog_loading">Cargando registro de cambios</string>
|
||||
<string name="changelog_download_fail">Error al descargar el registro de cambios: %s</string>
|
||||
<string name="changelog_description">Consulta los últimos cambios en esta actualización</string>
|
||||
<string name="battery_optimization_notification">Las optimizaciones de batería deben estar desactivadas para que ReVanced Manager funcione correctamente en segundo plano. Haz clic aquí para desactivar las optimizaciones.</string>
|
||||
<string name="installing_manager_update">Instalando actualización…</string>
|
||||
<string name="downloading_manager_update">Descargando actualización…</string>
|
||||
<string name="download_manager_failed">Error al descargar la actualización: %s</string>
|
||||
<string name="cancel">Cancelar</string>
|
||||
<string name="save">Guardar</string>
|
||||
<string name="save_with_count">Guardar (%1$s)</string>
|
||||
<string name="update">Actualizar</string>
|
||||
<string name="empty">Vacío</string>
|
||||
<string name="installing_message">"Toca en <b>Actualizar</b> cuando se te solicite.
|
||||
ReVanced Manager se cerrará al actualizar."</string>
|
||||
<string name="no_changelogs_found">No se encontraron registros de cambios</string>
|
||||
<string name="just_now">Justo ahora</string>
|
||||
<string name="minutes_ago">hace %s min</string>
|
||||
<string name="hours_ago">hace %s h</string>
|
||||
<string name="days_ago">hace %s d</string>
|
||||
<string name="invalid_date">Fecha no válida</string>
|
||||
<string name="disable_battery_optimization">Desactivar optimización de batería</string>
|
||||
<string name="input_dialog_value_invalid">Valor no válido</string>
|
||||
<string name="option_required">Esta opción es obligatoria</string>
|
||||
<string name="required_options_screen">Opciones obligatorias</string>
|
||||
<string name="failed_to_check_updates">Error al buscar actualizaciones: %s</string>
|
||||
<string name="no_update_available">No hay actualización disponible</string>
|
||||
<string name="update_check">Buscando actualizaciones…</string>
|
||||
<string name="dismiss_temporary">Ahora no</string>
|
||||
<string name="update_available_dialog_description">Hay una nueva versión de ReVanced Manager (%s) disponible.</string>
|
||||
<string name="failed_to_download_update">Error al descargar la actualización: %s</string>
|
||||
<string name="download">Descargar</string>
|
||||
<string name="download_confirmation_metered">"Actualmente estás en una conexión de uso medido, y se pueden aplicar cargos por datos de tu proveedor de servicios.
|
||||
|
||||
¿Deseas continuar de todos modos?"</string>
|
||||
<string name="download_update_confirmation">¿Descargar actualización?</string>
|
||||
<string name="no_contributors_found">No se encontraron colaboradores</string>
|
||||
<string name="select">Seleccionar</string>
|
||||
<string name="select_deselect_all">Seleccionar o deseleccionar todo</string>
|
||||
<string name="select_patches_type_dialog_description">Añadir nuevos parches desde URL o archivos locales</string>
|
||||
<string name="local_patches_description">Añadir parches desde el almacenamiento local.</string>
|
||||
<string name="remote_patches_description">Añadir parches desde URL. Los parches pueden actualizarse automáticamente.</string>
|
||||
<string name="recommended">Recomendado</string>
|
||||
<string name="installation_failed_dialog_title">Instalación fallida</string>
|
||||
<string name="installation_cancelled_dialog_title">Instalación cancelada</string>
|
||||
<string name="installation_blocked_dialog_title">Instalación bloqueada</string>
|
||||
<string name="installation_conflict_dialog_title">Conflicto de instalación</string>
|
||||
<string name="installation_incompatible_dialog_title">Instalación incompatible</string>
|
||||
<string name="installation_invalid_dialog_title">Instalación no válida</string>
|
||||
<string name="installation_storage_issue_dialog_title">No hay suficiente almacenamiento</string>
|
||||
<string name="installation_timeout_dialog_title">Tiempo de instalación agotado</string>
|
||||
<string name="installation_failed_description">La instalación falló debido a una razón desconocida. ¿Intentar de nuevo?</string>
|
||||
<string name="installation_aborted_description">La instalación fue cancelada manualmente. ¿Intentar de nuevo?</string>
|
||||
<string name="installation_blocked_description">La instalación fue bloqueada. Revisa la configuración de seguridad de tu dispositivo e intenta de nuevo.</string>
|
||||
<string name="installation_conflict_description">La instalación fue impedida por una instalación existente de la aplicación. ¿Desinstalar la aplicación instalada e intentar de nuevo?</string>
|
||||
<string name="installation_incompatible_description">La aplicación es incompatible con este dispositivo. Utiliza un APK que sea compatible con este dispositivo e intenta de nuevo.</string>
|
||||
<string name="installation_invalid_description">La aplicación no es válida. ¿Desinstalar la aplicación e intentar de nuevo?</string>
|
||||
<string name="installation_storage_issue_description">La aplicación no pudo instalarse debido a espacio de almacenamiento insuficiente. Libera algo de espacio e intenta de nuevo.</string>
|
||||
<string name="installation_timeout_description">La instalación tardó demasiado. ¿Intentar de nuevo?</string>
|
||||
<string name="reinstall">Reinstalar</string>
|
||||
<string name="show">Mostrar</string>
|
||||
<string name="debugging">Depuración</string>
|
||||
<string name="about_device">Acerca del dispositivo</string>
|
||||
<string name="enter_url">Introducir URL</string>
|
||||
<string name="next">Siguiente</string>
|
||||
<string name="auto_update">Actualización automática</string>
|
||||
<string name="add_patches">Añadir parches</string>
|
||||
<string name="auto_update_description">Actualizar automáticamente cuando haya una nueva versión disponible</string>
|
||||
<string name="patches_prereleases">Usar versiones de pre-lanzamiento</string>
|
||||
<string name="patches_prereleases_description">Usar versiones de pre-lanzamiento de %s</string>
|
||||
<string name="patches_url">URL de parches</string>
|
||||
<string name="incompatible_patches_dialog">"Estos parches no son compatibles con la versión de la aplicación seleccionada (%1$s).
|
||||
|
||||
Haz clic en los parches para ver más detalles."</string>
|
||||
<string name="incompatible_patch">Parche incompatible</string>
|
||||
<string name="any_version">Cualquiera</string>
|
||||
<string name="never_show_again">No volver a mostrar</string>
|
||||
<string name="show_manager_update_dialog_on_launch">Mostrar mensaje de actualización al inicio</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">Mostrar una notificación emergente cuando haya una nueva actualización disponible al inicio</string>
|
||||
<string name="failed_to_import_keystore">Error al importar el almacén de claves</string>
|
||||
<string name="export">Exportar</string>
|
||||
<string name="confirm">Confirmar</string>
|
||||
</resources>
|
||||
@@ -1,460 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">Paikaja test</string>
|
||||
<string name="patches">Paigad</string>
|
||||
<string name="cli">CLI</string>
|
||||
<string name="manager">Haldur</string>
|
||||
<string name="plugin_host_permission_label">ReVanced Manager plugina host</string>
|
||||
<string name="plugin_host_permission_description">Kasutatakse juurdepääsu kontrollimiseks ReVanced Manageri pluginatele. Ainult ReVanced Manageril on see.</string>
|
||||
<string name="toast_copied_to_clipboard">Kopeeritud!</string>
|
||||
<string name="copy_to_clipboard">Kopeeri lõikepuhvrisse</string>
|
||||
<string name="dashboard">Armatuurlaud</string>
|
||||
<string name="settings">Seaded</string>
|
||||
<string name="select_app">Vali rakendus</string>
|
||||
<string name="patches_count_selected">%1$d/%2$d valitud</string>
|
||||
<string name="new_downloader_plugins_notification">Saadaval on uued allalaadija pluginad. Nende konfigureerimiseks klõpsake siia.</string>
|
||||
<string name="unsupported_architecture_warning">Paigaldamine sellel seadme arhitektuuril pole toetatud ja tõenäoliselt ebaõnnestub.</string>
|
||||
<string name="import_">Impordi</string>
|
||||
<string name="import_patches">Impordi paigad</string>
|
||||
<string name="file_field_set">Valitud</string>
|
||||
<string name="file_field_not_set">Valimata</string>
|
||||
<string name="field_not_set">Määramata</string>
|
||||
<string name="patches_missing">Puudub</string>
|
||||
<string name="patches_error">Viga</string>
|
||||
<string name="patches_error_description">Paikasid ei saanud laadida. Vea vaatamiseks klõpsake.</string>
|
||||
<string name="patches_not_downloaded">Paikasid pole alla laaditud. Selle allalaadimiseks klõpsake siia.</string>
|
||||
<string name="patches_name_default">Paigad</string>
|
||||
<string name="patches_name_fallback">Nimetu</string>
|
||||
<string name="android_11_bug_dialog_title">Android 11 viga</string>
|
||||
<string name="android_11_bug_dialog_description">Rakenduse installimise luba tuleb eelnevalt anda, et vältida Android 11 süsteemi viga, mis mõjutab negatiivselt kasutajakogemust.</string>
|
||||
<string name="no_network_toast">Internetiühendus puudub</string>
|
||||
<string name="selected_app_meta_any_version">Mis tahes saadaolev versioon</string>
|
||||
<string name="app_source_dialog_title">Vali allikas</string>
|
||||
<string name="app_source_dialog_option_auto">Automaatne</string>
|
||||
<string name="app_source_dialog_option_auto_description">Kasuta kõiki saadaolevaid allalaadijaid rakenduse allalaadimiseks</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">Pluginaid pole saadaval</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">Paigaldatud rakendusi ei saa uuesti paigaldada ilma juurdepääsuta (root)</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">Versioon %s ei vasta soovitatud versioonile</string>
|
||||
<string name="patch_item_description">Alusta rakenduse paigaldamist</string>
|
||||
<string name="patch_selector_item">Vali paigad</string>
|
||||
<string name="patch_selector_item_description">%d paika valitud</string>
|
||||
<string name="no_patches_selected">Paikasid pole valitud</string>
|
||||
<string name="network_unavailable_warning">Teie seade pole internetiga ühendatud. Allalaadimine ebaõnnestub hiljem.</string>
|
||||
<string name="network_metered_warning">Olete praegu piiratud andmemahuga ühendusel. Teenusepakkuja võib kohaldada andmeside tasusid.</string>
|
||||
<string name="apk_source_selector_item">Vali APK allikas</string>
|
||||
<string name="apk_source_auto">Kasutatakse kõiki APK allalaadijaid</string>
|
||||
<string name="apk_source_downloader">Kasutatakse %s</string>
|
||||
<string name="apk_source_installed">Kasutatakse installitud APK-d</string>
|
||||
<string name="apk_source_local">Kasutatakse kohalikku APK-faili</string>
|
||||
<string name="legacy_import_failed">Pärandseadeid ei saanud importida</string>
|
||||
<string name="auto_updates_dialog_title">Konfigureeri uuendused</string>
|
||||
<string name="auto_updates_dialog_description">Kas soovite, et ReVanced Manager kontrolliks perioodiliselt uuendusi järgmiste komponentide jaoks?</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">ReVanced Paigad</string>
|
||||
<string name="auto_updates_dialog_note">Neid seadeid saab hiljem muuta.</string>
|
||||
<string name="general">Üldine</string>
|
||||
<string name="general_description">Keel, teema, dünaamiline värv</string>
|
||||
<string name="updates">Uuendused</string>
|
||||
<string name="updates_description">Kontrolli uuendusi ja vaata muutuste logisid</string>
|
||||
<string name="downloads">Allalaadimised</string>
|
||||
<string name="downloads_description">Allalaadija pluginad ja allalaaditud rakendused</string>
|
||||
<string name="import_export">Import & eksport</string>
|
||||
<string name="import_export_description">Võtmehoidla, paiga valikud ja valik</string>
|
||||
<string name="advanced">Täpsemad</string>
|
||||
<string name="advanced_description">API URL, mälupiirang, silumine</string>
|
||||
<string name="about">Teave</string>
|
||||
<string name="opensource_licenses">Avatud lähtekoodiga litsentsid</string>
|
||||
<string name="opensource_licenses_description">Vaata kõiki teeke, mida kasutati selle rakenduse loomiseks</string>
|
||||
<string name="contributors">Kaastöötajad</string>
|
||||
<string name="contributors_description">Vaata ReVancedi kaastöötajaid</string>
|
||||
<string name="dynamic_color">Dünaamiline värv</string>
|
||||
<string name="dynamic_color_description">Kohanda värve taustapildiga</string>
|
||||
<string name="pure_black_theme">Puhas must teema</string>
|
||||
<string name="pure_black_theme_description">Kasuta puhtalt musti taustasid tumedate teemade jaoks</string>
|
||||
<string name="theme">Teema</string>
|
||||
<string name="theme_description">Vali heleda või tumeda teema vahel</string>
|
||||
<string name="language">Keel</string>
|
||||
<string name="language_description">Vali rakenduse kuvakeel</string>
|
||||
<string name="language_system_default">Süsteemi vaikeväärtus</string>
|
||||
<string name="safeguards">Kaitsemeetmed</string>
|
||||
<string name="patch_compat_check">Keela versiooniühilduvuse kontroll</string>
|
||||
<string name="patch_compat_check_description">Ära piira paikasid ühilduvate rakenduse versioonidega</string>
|
||||
<string name="patch_compat_check_confirmation">"Ühildumatute paikade valimine võib põhjustada rakenduse rikkisoleku.
|
||||
|
||||
Kas soovite siiski jätkata?"</string>
|
||||
<string name="suggested_version_safeguard">Nõua soovitatud rakenduse versiooni</string>
|
||||
<string name="suggested_version_safeguard_description">Jõusta soovitatud rakenduse versiooni valimine</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"Rakenduse valimine, mis pole soovitatud versioon, võib põhjustada ootamatuid probleeme.
|
||||
|
||||
Kas soovite siiski jätkata?"</string>
|
||||
<string name="patch_selection_safeguard">Luba muuta paiga valikut ja valikuid</string>
|
||||
<string name="patch_selection_safeguard_description">Ära takista paikade valimist või valiku tühistamist ning valikute kohandamist</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"Paikade valiku muutmine võib põhjustada ootamatuid probleeme.
|
||||
|
||||
Luba siiski?"</string>
|
||||
<string name="universal_patches_safeguard">Luba kasutada universaalseid paikasid</string>
|
||||
<string name="universal_patches_safeguard_description">Ära takista universaalsete paikade kasutamist</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"Universaalsed paigad ei ole nii hästi testitud kui need, mis on suunatud konkreetsetele rakendustele.
|
||||
|
||||
Luba siiski?"</string>
|
||||
<string name="import_keystore">Impordi võtmehoidla</string>
|
||||
<string name="import_keystore_description">Impordi kohandatud võtmehoidla</string>
|
||||
<string name="import_keystore_dialog_title">Sisesta võtmehoidla mandaadid</string>
|
||||
<string name="import_keystore_dialog_description">Selle importimiseks peate sisestama võtmehoidla mandaadid.</string>
|
||||
<string name="import_keystore_dialog_alias_field">Kasutajanimi (Alias)</string>
|
||||
<string name="import_keystore_dialog_password_field">Parool</string>
|
||||
<string name="import_keystore_dialog_button">Impordi</string>
|
||||
<string name="import_keystore_wrong_credentials">Valed võtmehoidla mandaadid</string>
|
||||
<string name="import_keystore_success">Imporditud võtmehoidla</string>
|
||||
<string name="export_keystore">Ekspordi võtmehoidla</string>
|
||||
<string name="export_keystore_description">Ekspordi praegune võtmehoidla</string>
|
||||
<string name="export_keystore_unavailable">Eksporditavat võtmehoidlat pole</string>
|
||||
<string name="export_keystore_success">Eksporditud võtmehoidla</string>
|
||||
<string name="regenerate_keystore">Taasta võtmehoidla</string>
|
||||
<string name="regenerate_keystore_description">Genereeri uus võtmehoidla</string>
|
||||
<string name="regenerate_keystore_dialog_description">"Olete taastamas oma võtmehoidlat, mida haldur paigaldusprotsessi käigus kasutab.
|
||||
|
||||
Te ei saa enam värskendada varem installitud rakendusi sellest allikast."</string>
|
||||
<string name="regenerate_keystore_success">Võtmehoidla on edukalt asendatud</string>
|
||||
<string name="import_patch_selection">Impordi paiga valik</string>
|
||||
<string name="import_patch_selection_description">Impordi paiga valik JSON-failist</string>
|
||||
<string name="import_patch_selection_fail">Paiga valikut ei saanud importida: %s</string>
|
||||
<string name="import_patch_selection_success">Imporditud paiga valik</string>
|
||||
<string name="export_patch_selection">Ekspordi paiga valik</string>
|
||||
<string name="export_patch_selection_description">Ekspordi paiga valik JSON-faili</string>
|
||||
<string name="export_patch_selection_fail">Paiga valikut ei saanud eksportida: %s</string>
|
||||
<string name="export_patch_selection_success">Eksporditud paiga valik</string>
|
||||
<string name="reset_patch_selection">Lähtesta paiga valik</string>
|
||||
<string name="reset_patch_selection_description">Lähtesta salvestatud paiga valik</string>
|
||||
<string name="reset_patch_options">Lähtesta paiga valikud</string>
|
||||
<string name="reset_patch_options_description">Lähtesta salvestatud paiga valikud</string>
|
||||
<string name="reset_patch_selection_success">Paiga valik on lähtestatud</string>
|
||||
<string name="patch_selection_reset_all">Lähtesta paiga valik globaalselt</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">Olete lähtestamas kõiki paiga valikuid. Peate iga paiga uuesti käsitsi valima.</string>
|
||||
<string name="patch_selection_reset_all_description">Lähtestab kõik paiga valikud</string>
|
||||
<string name="patch_selection_reset_package">Lähtesta paiga valik rakenduse jaoks</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">Olete lähtestamas rakenduse \"%s\" paiga valikut. Peate iga paiga uuesti käsitsi valima.</string>
|
||||
<string name="patch_selection_reset_package_description">Lähtestab paigavaliku ühe rakenduse jaoks</string>
|
||||
<string name="patch_selection_reset_patches">Lähtesta paigavalik (üksik)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">Olete kohe lähtestamas paigavaliku \"%s\" jaoks. Peate iga paiga uuesti käsitsi valima.</string>
|
||||
<string name="patch_selection_reset_patches_description">Lähtestab paigavaliku kindla paikade kogumi jaoks</string>
|
||||
<string name="patch_options_reset_package">Lähtesta rakenduse paigasuvandid</string>
|
||||
<string name="patch_options_reset_package_dialog_description">Olete kohe lähtestamas rakenduse \"%s\" paigasuvandid. Peate iga suvandi uuesti rakendama.</string>
|
||||
<string name="patch_options_reset_package_description">Lähtestab paigasuvandid ühe rakenduse jaoks</string>
|
||||
<string name="patch_options_reset_patches">Lähtesta paigasuvandid (üksik)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">Olete kohe lähtestamas \"%s\" paigasuvandid. Peate iga suvandi uuesti rakendama.</string>
|
||||
<string name="patch_options_reset_patches_description">Lähtestab paigasuvandid kindla paikade kogumi jaoks</string>
|
||||
<string name="patch_options_reset_all">Lähtesta paigasuvandid globaalselt</string>
|
||||
<string name="patch_options_reset_all_dialog_description">Olete kohe lähtestamas kõik paigasuvandid. Peate iga suvandi uuesti rakendama.</string>
|
||||
<string name="patch_options_reset_all_description">Lähtestab kõik paigasuvandid</string>
|
||||
<string name="downloader_plugins">Pluginad</string>
|
||||
<string name="downloader_plugin_state_trusted">Usaldusväärne</string>
|
||||
<string name="downloader_plugin_state_failed">Laadimine ebaõnnestus. Klõpsake lisateabe saamiseks</string>
|
||||
<string name="downloader_plugin_state_untrusted">Ebausaldusväärne</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">Usaldada pluginat?</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">Tühistada usaldus?</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">Jätkamine lubab sellel pluginil teie süsteemis töötada.\n\nLubage see plugin ainult siis, kui te seda usaldate. Pluginad võivad käivitada suvalist koodi ja rikkuda teie seadet.</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">Allkiri:\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">Plugin:\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">Kustuta valitud rakendused</string>
|
||||
<string name="downloader_plugin_delete_apps_description">Kas olete kindel, et soovite valitud rakendused kustutada?</string>
|
||||
<string name="downloader_settings_no_apps">Allalaaditud rakendusi ei leitud.</string>
|
||||
<string name="search_apps">Otsi rakendusi…</string>
|
||||
<string name="loading_body">Laadimine…</string>
|
||||
<string name="downloading_patches">Paikade allalaadimine…</string>
|
||||
<string name="options">Suvandid</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="yes">Jah</string>
|
||||
<string name="no">Ei</string>
|
||||
<string name="edit">Muuda</string>
|
||||
<string name="dialog_input_placeholder">Väärtus</string>
|
||||
<string name="reset">Lähtesta</string>
|
||||
<string name="share">Jaga</string>
|
||||
<string name="patch">Paik</string>
|
||||
<string name="select_from_storage">Vali salvestusruumist</string>
|
||||
<string name="select_from_storage_description">Vali APK fail salvestusruumist failivalija abil</string>
|
||||
<string name="suggested_version_info">Soovitatav versioon: %s</string>
|
||||
<string name="type_anything">Jätkamiseks sisesta midagi</string>
|
||||
<string name="search">Otsi paiku…</string>
|
||||
<string name="apply">Rakenda</string>
|
||||
<string name="help">Abi</string>
|
||||
<string name="back">Tagasi</string>
|
||||
<string name="warning">Hoiatus</string>
|
||||
<string name="add">Lisa</string>
|
||||
<string name="close">Sulge</string>
|
||||
<string name="clear">Puhasta</string>
|
||||
<string name="system">Süsteem</string>
|
||||
<string name="light">Hele</string>
|
||||
<string name="dark">Tume</string>
|
||||
<string name="appearance">Välimus</string>
|
||||
<string name="networking">Võrgustik</string>
|
||||
<string name="allow_metered_networks">Luba piiratud andmemahuga võrgud</string>
|
||||
<string name="allow_metered_networks_description">Lubab automaatsed uuendused piiratud andmemahuga võrkudes.\n Rakendus võib siiski hoiatada piiratud andmemahuga võrkude eest käsitsi toimingute puhul.</string>
|
||||
<string name="downloaded_apps">Allalaaditud rakendused</string>
|
||||
<string name="process_runtime">Käivita paika moodul teises protsessis (eksperimentaalne)</string>
|
||||
<string name="process_runtime_description">See on kiirem ja võimaldab paika moodulil rohkem mälu kasutada</string>
|
||||
<string name="process_runtime_memory_limit">Paika mooduli protsessi mälupiirang</string>
|
||||
<string name="process_runtime_memory_limit_description">Maksimaalne mälu hulk, mida paika mooduli protsess saab kasutada (megabaitides)</string>
|
||||
<string name="debug_logs_export">Ekspordi silumispäevikud</string>
|
||||
<string name="debug_logs_export_read_failed">Päevikute lugemine ebaõnnestus (väljumiskood %d)</string>
|
||||
<string name="debug_logs_export_failed">Päevikute eksportimine ebaõnnestus</string>
|
||||
<string name="debug_logs_export_success">Eksporditud päevikud</string>
|
||||
<string name="api_url">API URL</string>
|
||||
<string name="api_url_description">API, mida kasutatakse vajalike failide allalaadimiseks</string>
|
||||
<string name="api_url_dialog_title">Muuda API URL-i</string>
|
||||
<string name="api_url_dialog_description">Muuda ReVanced Manageri API URL-i. ReVanced Manager kasutab API-t paikade ja uuenduste allalaadimiseks.</string>
|
||||
<string name="api_url_dialog_warning">ReVanced Manager ühendub API-ga paikade ja uuenduste allalaadimiseks. Veenduge, et usaldate seda.</string>
|
||||
<string name="api_url_dialog_save">Määra</string>
|
||||
<string name="api_url_dialog_reset">Lähtesta API URL</string>
|
||||
<string name="device">Seade</string>
|
||||
<string name="device_android_version">Androidi versioon</string>
|
||||
<string name="device_model">Mudel</string>
|
||||
<string name="device_architectures">Protsessori arhitektuurid</string>
|
||||
<string name="device_memory_limit">Mälupiirangud</string>
|
||||
<string name="device_memory_limit_format">%1$dMB (Tavaline) - %2$dMB (Suur)</string>
|
||||
<string name="patches_force_download">Sunni kõigi paikade allalaadimine</string>
|
||||
<string name="patches_reset">Lähtesta paigad</string>
|
||||
<string name="patching">Paikamine</string>
|
||||
<string name="signing">Allkirjastamine</string>
|
||||
<string name="storage">Salvestusruum</string>
|
||||
<string name="no_patch_found">Paika ei leitud. Kontrollige oma paikasid</string>
|
||||
<string name="tab_apps">Rakendused</string>
|
||||
<string name="tab_patches">Paigad</string>
|
||||
<string name="delete">Kustuta</string>
|
||||
<string name="refresh">Värskenda</string>
|
||||
<string name="continue_anyways">Jätka igal juhul</string>
|
||||
<string name="download_another_version">Laadi alla teine versioon</string>
|
||||
<string name="download_app">Laadi rakendus alla</string>
|
||||
<string name="download_apk">Laadi alla APK fail</string>
|
||||
<string name="patches_download_fail">Paikade allalaadimine ebaõnnestus: %s</string>
|
||||
<string name="patches_replace_fail">Paikade importimine ebaõnnestus: %s</string>
|
||||
<string name="no_patched_apps_found">Paigatud rakendusi ei leitud</string>
|
||||
<string name="tap_on_patches">Puudutage paiku, et saada nende kohta lisateavet</string>
|
||||
<string name="patches_selected">%s valitud</string>
|
||||
<string name="incompatible_patches">Kokkusobimatud paigad</string>
|
||||
<string name="universal_patches">Universaalsed paigad</string>
|
||||
<string name="patch_selection_reset_toast">Paigavalik ja suvandid on lähtestatud soovitatud vaikeseadetele</string>
|
||||
<string name="patch_options_reset_toast">Paigasuvandid on lähtestatud</string>
|
||||
<string name="non_suggested_version_warning_title">Mitte soovitatud versioon</string>
|
||||
<string name="non_suggested_version_warning_description">"Valitud rakenduse versioon ei ühti soovitatud versiooniga.\nPalun kasutage soovitatud versiooni: %s\n\nJätkamiseks keelake täpsemates seadetes \"Nõua soovitatud rakenduse versiooni\"."</string>
|
||||
<string name="selection_warning_title">Lõpetada vaikeväärtuste kasutamine?</string>
|
||||
<string name="selection_warning_description">"Soovitatav on kasutada vaikeväärtusega paigavalikut ja suvandeid. Nende muutmine võib põhjustada ootamatuid probleeme.\n\nEnne paikade lülitamist peate täpsemates seadetes sisse lülitama \"Luba paikade valiku ja suvandite muutmine\"."</string>
|
||||
<string name="universal_patch_warning_description">"Universaalsed paigad on üldisema otstarbega ega tööta nii usaldusväärselt kui kindlatele rakendustele suunatud paigad. Neid kasutades võite kokku puutuda probleemidega.\n\nEnne universaalsete paikade kasutamist peate täpsemates seadetes sisse lülitama \"Luba universaalsete paikade kasutamine\"."</string>
|
||||
<string name="this_version">See versioon</string>
|
||||
<string name="universal">Mis tahes rakendus</string>
|
||||
<string name="search_patches">Otsi paiku</string>
|
||||
<string name="app_version_not_compatible">"See paik ei ühildu valitud rakenduse versiooniga (%1$s)\n\nSee ühildub ainult järgmiste versioonidega: %2$s"</string>
|
||||
<string name="continue_with_version">Jätkata selle versiooniga?</string>
|
||||
<string name="version_not_compatible">Mitte kõik paigad ei ühildu selle versiooniga (%s). Kas soovite ikkagi jätkata?</string>
|
||||
<string name="download_application">Laadida rakendus alla?</string>
|
||||
<string name="app_not_installed">Valitud rakendus pole installitud. Kas soovite selle alla laadida?</string>
|
||||
<string name="failed_to_load_apk">APK laadimine ebaõnnestus</string>
|
||||
<string name="loading">Laadimine…</string>
|
||||
<string name="not_installed">Pole installitud</string>
|
||||
<string name="installed">Installitud</string>
|
||||
<string name="app_info">Rakenduse info</string>
|
||||
<string name="uninstall">Desinstalli</string>
|
||||
<string name="unpatch">Eemalda paik</string>
|
||||
<string name="repatch">Paika uuesti</string>
|
||||
<string name="install_type">Paigaldustüüp</string>
|
||||
<string name="package_name">Paketi nimi</string>
|
||||
<string name="original_package_name">Algne paketi nimi</string>
|
||||
<string name="applied_patches">Rakendatud parandused</string>
|
||||
<string name="view_applied_patches">Vaata rakendatud parandusi</string>
|
||||
<string name="default_install">Vaikimisi</string>
|
||||
<string name="mount_install">Ühenda</string>
|
||||
<string name="mounted">Ühendatud</string>
|
||||
<string name="not_mounted">Pole ühendatud</string>
|
||||
<string name="mount">Ühenda</string>
|
||||
<string name="unmount">Lahuta</string>
|
||||
<string name="failed_to_mount">Ühendamine ebaõnnestus: %s</string>
|
||||
<string name="failed_to_unmount">Lahutamine ebaõnnestus: %s</string>
|
||||
<string name="unpatch_app">Eemalda parandused rakenduselt?</string>
|
||||
<string name="unpatch_description">Kas olete kindel, et soovite sellelt rakenduselt parandused eemaldada?</string>
|
||||
<string name="downloader_invalid_version">Allalaadija ei laadinud alla õiget versiooni</string>
|
||||
<string name="downloader_app_not_found">Allalaadija ei leidnud rakendust</string>
|
||||
<string name="downloader_error">Allalaadija viga: %s</string>
|
||||
<string name="downloader_no_plugins_installed">Allalaadijat pole installitud.</string>
|
||||
<string name="downloader_no_plugins_available">Allalaadijad on installitud, kuid ükski neist pole usaldusväärne. Kontrollige oma seadeid.</string>
|
||||
<string name="already_patched">Juba parandatud</string>
|
||||
<string name="patch_selector_sheet_filter_title">Filter</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">Ühilduvus</string>
|
||||
<string name="string_option_menu_description">Rohkem valikuid</string>
|
||||
<string name="option_preset_custom_value">Kohandatud väärtus</string>
|
||||
<string name="path_selector">Vali salvestusruumist</string>
|
||||
<string name="path_selector_parent_dir">Eelmine kaust</string>
|
||||
<string name="path_selector_dirs">Kaustad</string>
|
||||
<string name="path_selector_files">Failid</string>
|
||||
<string name="show_password_field">Näita parooli</string>
|
||||
<string name="hide_password_field">Peida parool</string>
|
||||
<string name="installer">Paigaldaja</string>
|
||||
<string name="install_app">Installi</string>
|
||||
<string name="install_app_success">Rakendus installitud</string>
|
||||
<string name="install_app_fail">Rakenduse installimine ebaõnnestus: %s</string>
|
||||
<string name="reinstall_app_fail">Rakenduse uuesti installimine ebaõnnestus: %s</string>
|
||||
<string name="uninstall_app_fail">Rakenduse desinstallimine ebaõnnestus: %s</string>
|
||||
<string name="open_app">Ava</string>
|
||||
<string name="save_apk">Salvesta APK</string>
|
||||
<string name="save_apk_success">APK salvestatud</string>
|
||||
<string name="sign_fail">APK allkirjastamine ebaõnnestus: %s</string>
|
||||
<string name="save_logs">Salvesta logid</string>
|
||||
<string name="plugin_activity_dialog_body">Selle pistikprogrammiga jätkamiseks on vajalik kasutaja sekkumine.</string>
|
||||
<string name="select_install_type">Vali paigaldustüüp</string>
|
||||
<string name="patcher_step_group_preparing">Ettevalmistus</string>
|
||||
<string name="patcher_step_load_patches">Laadi parandused</string>
|
||||
<string name="patcher_step_unpack">Loe APK faili</string>
|
||||
<string name="patcher_step_group_patching">Paranduste rakendamine</string>
|
||||
<string name="patcher_step_group_saving">Salvestamine</string>
|
||||
<string name="patcher_step_write_patched">Kirjuta parandatud APK fail</string>
|
||||
<string name="patcher_step_sign_apk">Allkirjasta parandatud APK fail</string>
|
||||
<string name="patcher_notification_title">Paranduste rakendamine käib…</string>
|
||||
<string name="patcher_notification_text">Puuduta, et naasta parandaja juurde</string>
|
||||
<string name="patcher_stop_confirm_title">Peata parandaja</string>
|
||||
<string name="patcher_stop_confirm_description">Kas olete kindel, et soovite paranduste rakendamise protsessi peatada?</string>
|
||||
<string name="patcher_install_in_progress">Paigaldus on pooleli. Palun oodake</string>
|
||||
<string name="execute_patches">Käivita parandused</string>
|
||||
<string name="executing_patch">Käivita %s</string>
|
||||
<string name="failed_to_execute_patch">Viga %s käivitamisel</string>
|
||||
<string name="step_completed">lõpetatud</string>
|
||||
<string name="step_failed">ebaõnnestus</string>
|
||||
<string name="step_running">käib</string>
|
||||
<string name="step_waiting">ootab</string>
|
||||
<string name="expand_content">laienda</string>
|
||||
<string name="collapse_content">ahenda</string>
|
||||
<string name="drag_handle">järjesta ümber</string>
|
||||
<string name="more">Rohkem</string>
|
||||
<string name="less">Vähem</string>
|
||||
<string name="continue_">Jätka</string>
|
||||
<string name="dismiss">Lükka tagasi</string>
|
||||
<string name="permanent_dismiss">Ära seda enam näita</string>
|
||||
<string name="donate">Anneta</string>
|
||||
<string name="website">Veebisait</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="contact">Kontakt</string>
|
||||
<string name="version">Versioon</string>
|
||||
<string name="submit_feedback">Esita probleem või tagasiside</string>
|
||||
<string name="submit_feedback_description">Aidake meil seda rakendust täiustada</string>
|
||||
<string name="developer_options">Arendaja valikud</string>
|
||||
<string name="developer_options_description">Valikud probleemide silumiseks</string>
|
||||
<string name="patches_update_success">Uuendus õnnestus</string>
|
||||
<string name="patches_update_unavailable">Uuendust pole saadaval</string>
|
||||
<string name="view_patches">Vaata parandusi</string>
|
||||
<string name="patches_view_any_version">Mis tahes versioon</string>
|
||||
<string name="patches_view_any_package">Mis tahes pakett</string>
|
||||
<string name="patches_delete_single_dialog_description">Kas olete kindel, et soovite kustutada \"%s\"?</string>
|
||||
<string name="patches_delete_multiple_dialog_description">Kas olete kindel, et soovite kustutada valitud parandused?</string>
|
||||
<string name="about_revanced_manager">ReVanced Managerist</string>
|
||||
<string name="revanced_manager_description">ReVanced Manager on Androidi rakendus, mis kasutab Androidi rakenduste parandamiseks ReVanced Patcherit. See võimaldab teil alla laadida ja parandada rakendusi kohandatud parandustega ning hallata paranduste rakendamise protsessi.</string>
|
||||
<string name="developer_options_taps">%d puudutust jäänud</string>
|
||||
<string name="developer_options_enabled">Arendaja valikud on lubatud</string>
|
||||
<string name="developer_options_already_enabled">Arendaja valikud on juba lubatud</string>
|
||||
<string name="update_available">Uuendus on saadaval</string>
|
||||
<string name="current_version">Praegune versioon: %s</string>
|
||||
<string name="new_version">Uus versioon: %s</string>
|
||||
<string name="ready_to_install_update">Valmis uuendust installima</string>
|
||||
<string name="update_completed">Uuendus installitud</string>
|
||||
<string name="install_update_manager_failed">Uuenduse installimine ebaõnnestus</string>
|
||||
<string name="manual_update_check">Kontrolli uuendusi</string>
|
||||
<string name="manual_update_check_description">Kontrolli uuendusi käsitsi</string>
|
||||
<string name="update_checking_manager">Kontrolli uuendusi käivitamisel</string>
|
||||
<string name="update_checking_manager_description">Kontrolli ReVanced Manageri uusi versioone, kui rakendus käivitub</string>
|
||||
<string name="manager_prereleases">Kasuta eelväljaandeid</string>
|
||||
<string name="manager_prereleases_description">Kasuta ReVanced Manageri eelväljaandeid</string>
|
||||
<string name="changelog">Vaata muudatuste logi</string>
|
||||
<string name="changelog_loading">Muudatuste logi laadimine</string>
|
||||
<string name="changelog_download_fail">Muudatuste logi allalaadimine ebaõnnestus: %s</string>
|
||||
<string name="changelog_description">Vaadake selle uuenduse viimaseid muudatusi</string>
|
||||
<string name="battery_optimization_notification">Aku optimeerimine peab olema välja lülitatud, et ReVanced Manager taustal korralikult töötaks. Optimeerimise väljalülitamiseks klõpsake siin.</string>
|
||||
<string name="installing_manager_update">Uuenduse installimine…</string>
|
||||
<string name="downloading_manager_update">Uuenduse allalaadimine…</string>
|
||||
<string name="download_manager_failed">Uuenduse allalaadimine ebaõnnestus: %s</string>
|
||||
<string name="cancel">Tühista</string>
|
||||
<string name="save">Salvesta</string>
|
||||
<string name="save_with_count">Salvesta (%1$s)</string>
|
||||
<string name="update">Uuenda</string>
|
||||
<string name="empty">Tühi</string>
|
||||
<string name="installing_message">"Puuduta käsku <b>Uuenda</b>, kui seda küsitakse.
|
||||
ReVanced Manager suletakse uuendamise ajal."</string>
|
||||
<string name="no_changelogs_found">Muudatuste logisid ei leitud</string>
|
||||
<string name="just_now">Just praegu</string>
|
||||
<string name="minutes_ago">%s m tagasi</string>
|
||||
<string name="hours_ago">%s h tagasi</string>
|
||||
<string name="days_ago">%s p tagasi</string>
|
||||
<string name="invalid_date">Vigane kuupäev</string>
|
||||
<string name="disable_battery_optimization">Keela aku optimeerimine</string>
|
||||
<string name="input_dialog_value_invalid">Vigane väärtus</string>
|
||||
<string name="option_required">See valik on kohustuslik</string>
|
||||
<string name="required_options_screen">Kohustuslikud valikud</string>
|
||||
<string name="failed_to_check_updates">Uuenduste kontrollimine ebaõnnestus: %s</string>
|
||||
<string name="no_update_available">Uuendust pole saadaval</string>
|
||||
<string name="update_check">Kontrollin uuendusi…</string>
|
||||
<string name="dismiss_temporary">Mitte praegu</string>
|
||||
<string name="update_available_dialog_description">Saadaval on ReVanced Manageri uus versioon (%s).</string>
|
||||
<string name="failed_to_download_update">Uuenduse allalaadimine ebaõnnestus: %s</string>
|
||||
<string name="download">Lae alla</string>
|
||||
<string name="download_confirmation_metered">"Kasutate praegu piiratud andmesideühendust ja teie teenusepakkuja võib kohaldada andmesidetasusid.
|
||||
|
||||
Kas soovite siiski jätkata?"</string>
|
||||
<string name="download_update_confirmation">Laadida uuendus alla?</string>
|
||||
<string name="no_contributors_found">Kaastöötajaid ei leitud</string>
|
||||
<string name="select">Vali</string>
|
||||
<string name="select_deselect_all">Vali kõik või eemalda valik</string>
|
||||
<string name="select_patches_type_dialog_description">Lisa uusi parandusi URL-ist või kohalikest failidest</string>
|
||||
<string name="local_patches_description">Lisa parandused kohalikust salvestusruumist.</string>
|
||||
<string name="remote_patches_description">Lisa parandused URL-ist. Parandused saavad automaatselt uuendada.</string>
|
||||
<string name="recommended">Soovitatav</string>
|
||||
<string name="installation_failed_dialog_title">Paigaldus ebaõnnestus</string>
|
||||
<string name="installation_cancelled_dialog_title">Paigaldus tühistati</string>
|
||||
<string name="installation_blocked_dialog_title">Paigaldus blokeeritud</string>
|
||||
<string name="installation_conflict_dialog_title">Paigalduskonflikt</string>
|
||||
<string name="installation_incompatible_dialog_title">Paigaldus ühildumatu</string>
|
||||
<string name="installation_invalid_dialog_title">Paigaldus vigane</string>
|
||||
<string name="installation_storage_issue_dialog_title">Ebapiisavalt salvestusruumi</string>
|
||||
<string name="installation_timeout_dialog_title">Paigaldus aegus</string>
|
||||
<string name="installation_failed_description">Paigaldus ebaõnnestus tundmatu põhjuse tõttu. Proovi uuesti?</string>
|
||||
<string name="installation_aborted_description">Paigaldus tühistati käsitsi. Proovi uuesti?</string>
|
||||
<string name="installation_blocked_description">Paigaldus blokeeriti. Vaadake üle oma seadme turvaseaded ja proovige uuesti.</string>
|
||||
<string name="installation_conflict_description">Paigalduse takistas rakenduse olemasolev installatsioon. Desinstallige installitud rakendus ja proovige uuesti?</string>
|
||||
<string name="installation_incompatible_description">Rakendus ei ühildu selle seadmega. Kasutage selle seadmega ühilduvat APK-d ja proovige uuesti.</string>
|
||||
<string name="installation_invalid_description">Rakendus on vigane. Desinstallige rakendus ja proovige uuesti?</string>
|
||||
<string name="installation_storage_issue_description">Rakendust ei saanud paigaldada ebapiisava salvestusruumi tõttu. Vabastage ruumi ja proovige uuesti.</string>
|
||||
<string name="installation_timeout_description">Paigaldus võttis liiga kaua aega. Proovi uuesti?</string>
|
||||
<string name="reinstall">Installi uuesti</string>
|
||||
<string name="show">Näita</string>
|
||||
<string name="debugging">Silumine</string>
|
||||
<string name="about_device">Seadme kohta</string>
|
||||
<string name="enter_url">Sisesta URL</string>
|
||||
<string name="next">Järgmine</string>
|
||||
<string name="auto_update">Automaatne uuendus</string>
|
||||
<string name="add_patches">Lisa parandusi</string>
|
||||
<string name="auto_update_description">Uuenda automaatselt, kui uus versioon on saadaval</string>
|
||||
<string name="patches_prereleases">Kasuta eelväljaandeid</string>
|
||||
<string name="patches_prereleases_description">Kasuta %s eelväljaandeid</string>
|
||||
<string name="patches_url">Paranduste URL</string>
|
||||
<string name="incompatible_patches_dialog">"Need parandused ei ühildu valitud rakenduse versiooniga (%1$s).
|
||||
|
||||
Lisateabe saamiseks klõpsake parandustel."</string>
|
||||
<string name="incompatible_patch">Ühildumatu parandus</string>
|
||||
<string name="any_version">Mis tahes</string>
|
||||
<string name="never_show_again">Ära enam näita</string>
|
||||
<string name="show_manager_update_dialog_on_launch">Näita uuendusteatist käivitamisel</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">Kuva hüpikteatis iga kord, kui käivitamisel on saadaval uus uuendus</string>
|
||||
<string name="failed_to_import_keystore">Võtmehoidla importimine ebaõnnestus</string>
|
||||
<string name="export">Ekspordi</string>
|
||||
<string name="confirm">Kinnita</string>
|
||||
</resources>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources></resources>
|
||||
@@ -1,16 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources></resources>
|
||||
@@ -1,460 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">Korjaajan testi</string>
|
||||
<string name="patches">Korjaukset</string>
|
||||
<string name="cli">CLI</string>
|
||||
<string name="manager">Hallinta</string>
|
||||
<string name="plugin_host_permission_label">ReVanced Manager -liitännäisten isäntä</string>
|
||||
<string name="plugin_host_permission_description">Käytetään hallitsemaan pääsyä ReVanced Manager -liitännäisiin. Vain ReVanced Managerilla on tämä.</string>
|
||||
<string name="toast_copied_to_clipboard">Kopioitu!</string>
|
||||
<string name="copy_to_clipboard">Kopioi leikepöydälle</string>
|
||||
<string name="dashboard">Kojelauta</string>
|
||||
<string name="settings">Asetukset</string>
|
||||
<string name="select_app">Valitse sovellus</string>
|
||||
<string name="patches_count_selected">%1$d/%2$d valittu</string>
|
||||
<string name="new_downloader_plugins_notification">Uusia latausohjelmalaajennuksia saatavilla. Napsauta tästä määrittääksesi ne.</string>
|
||||
<string name="unsupported_architecture_warning">Paikkaus tällä laitearkkitehtuurilla ei ole tuettu ja epäonnistuu todennäköisesti.</string>
|
||||
<string name="import_">Tuo</string>
|
||||
<string name="import_patches">Tuo paikkaukset</string>
|
||||
<string name="file_field_set">Valittu</string>
|
||||
<string name="file_field_not_set">Ei valittu</string>
|
||||
<string name="field_not_set">Ei asetettu</string>
|
||||
<string name="patches_missing">Puuttuu</string>
|
||||
<string name="patches_error">Virhe</string>
|
||||
<string name="patches_error_description">Paikkauksia ei voitu ladata. Napsauta nähdäksesi virheen.</string>
|
||||
<string name="patches_not_downloaded">Paikkauksia ei ole ladattu. Napsauta tästä ladataksesi ne.</string>
|
||||
<string name="patches_name_default">Paikkaukset</string>
|
||||
<string name="patches_name_fallback">Nimetön</string>
|
||||
<string name="android_11_bug_dialog_title">Android 11 -virhe</string>
|
||||
<string name="android_11_bug_dialog_description">Sovelluksen asennusoikeus on myönnettävä etukäteen, jotta vältetään Android 11 -järjestelmän virhe, joka vaikuttaa negatiivisesti käyttökokemukseen.</string>
|
||||
<string name="no_network_toast">Ei internetyhteyttä saatavilla</string>
|
||||
<string name="selected_app_meta_any_version">Mikä tahansa saatavilla oleva versio</string>
|
||||
<string name="app_source_dialog_title">Valitse lähde</string>
|
||||
<string name="app_source_dialog_option_auto">Automaattinen</string>
|
||||
<string name="app_source_dialog_option_auto_description">Käytä kaikkia saatavilla olevia latausohjelmia sovelluksen lataamiseen</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">Ei laajennuksia saatavilla</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">Asennettuja sovelluksia ei voi paikata uudelleen ilman root-oikeuksia.</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">Versio %s ei vastaa ehdotettua versiota</string>
|
||||
<string name="patch_item_description">Aloita sovelluksen paikkaaminen</string>
|
||||
<string name="patch_selector_item">Valitse paikkaukset</string>
|
||||
<string name="patch_selector_item_description">%d paikkausta valittu</string>
|
||||
<string name="no_patches_selected">Ei paikkauksia valittu</string>
|
||||
<string name="network_unavailable_warning">Laitteesi ei ole yhteydessä internetiin. Lataus epäonnistuu myöhemmin.</string>
|
||||
<string name="network_metered_warning">Käytät parhaillaan rajoitettua yhteyttä. Palveluntarjoajasi datamaksuja voidaan soveltaa.</string>
|
||||
<string name="apk_source_selector_item">Valitse APK-lähde</string>
|
||||
<string name="apk_source_auto">Käytetään kaikkia APK-latausohjelmia</string>
|
||||
<string name="apk_source_downloader">Käytetään %s</string>
|
||||
<string name="apk_source_installed">Käytetään asennettua APK:ta</string>
|
||||
<string name="apk_source_local">Käytetään paikallista APK-tiedostoa</string>
|
||||
<string name="legacy_import_failed">Vanhoja asetuksia ei voitu tuoda</string>
|
||||
<string name="auto_updates_dialog_title">Määritä päivitykset</string>
|
||||
<string name="auto_updates_dialog_description">Haluatko, että ReVanced Manager tarkistaa säännöllisesti päivitykset seuraaville komponenteille?</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">ReVanced-paikkaukset</string>
|
||||
<string name="auto_updates_dialog_note">Nämä asetukset voidaan muuttaa myöhemmin.</string>
|
||||
<string name="general">Yleiset</string>
|
||||
<string name="general_description">Kieli, teema, dynaaminen väri</string>
|
||||
<string name="updates">Päivitykset</string>
|
||||
<string name="updates_description">Tarkista päivitykset ja näytä muutosloki</string>
|
||||
<string name="downloads">Lataukset</string>
|
||||
<string name="downloads_description">Latausohjelmalaajennukset ja ladatut sovellukset</string>
|
||||
<string name="import_export">Tuonti/vienti</string>
|
||||
<string name="import_export_description">Avainsäilö, paikkausasetukset ja valinta</string>
|
||||
<string name="advanced">Lisäasetukset</string>
|
||||
<string name="advanced_description">API-URL, muistirajoitus, virheenkorjaus</string>
|
||||
<string name="about">Tietoja</string>
|
||||
<string name="opensource_licenses">Avoimen lähdekoodin lisenssit</string>
|
||||
<string name="opensource_licenses_description">Näytä kaikki tämän sovelluksen luomiseen käytetyt kirjastot</string>
|
||||
<string name="contributors">Osallistujat</string>
|
||||
<string name="contributors_description">Näytä ReVancedin osallistujat</string>
|
||||
<string name="dynamic_color">Dynaaminen väri</string>
|
||||
<string name="dynamic_color_description">Sovita värit taustakuvaan</string>
|
||||
<string name="pure_black_theme">Puhdas musta teema</string>
|
||||
<string name="pure_black_theme_description">Käytä puhtaan mustia taustoja tummalle teemalle</string>
|
||||
<string name="theme">Teema</string>
|
||||
<string name="theme_description">Valitse vaalean tai tumman teeman välillä</string>
|
||||
<string name="language">Kieli</string>
|
||||
<string name="language_description">Valitse sovelluksen näyttökieli</string>
|
||||
<string name="language_system_default">Järjestelmän oletus</string>
|
||||
<string name="safeguards">Suojaukset</string>
|
||||
<string name="patch_compat_check">Poista version yhteensopivuustarkistus käytöstä</string>
|
||||
<string name="patch_compat_check_description">Älä rajoita paikkauksia yhteensopiviin sovellusversioihin</string>
|
||||
<string name="patch_compat_check_confirmation">"Yhteensopimattomien paikkausten valitseminen voi johtaa rikkinäiseen sovellukseen.
|
||||
|
||||
Haluatko silti jatkaa?"</string>
|
||||
<string name="suggested_version_safeguard">Vaadi ehdotettua sovellusversiota</string>
|
||||
<string name="suggested_version_safeguard_description">Pakota ehdotetun sovellusversion valinta</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"Sovelluksen valitseminen, joka ei ole ehdotettu versio, voi aiheuttaa odottamattomia ongelmia.
|
||||
|
||||
Haluatko silti jatkaa?"</string>
|
||||
<string name="patch_selection_safeguard">Salli paikkausvalinnan ja -asetusten muuttaminen</string>
|
||||
<string name="patch_selection_safeguard_description">Älä estä paikkausten valintaa tai poistamista ja asetusten mukauttamista</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"Paikkausvalinnan muuttaminen voi aiheuttaa odottamattomia ongelmia.
|
||||
|
||||
Otetaanko silti käyttöön?"</string>
|
||||
<string name="universal_patches_safeguard">Salli yleisten paikkausten käyttö</string>
|
||||
<string name="universal_patches_safeguard_description">Älä estä yleisten paikkausten käyttöä</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"Yleisiä paikkauksia ei ole testattu yhtä hyvin kuin niitä, jotka kohdistuvat tiettyihin sovelluksiin.
|
||||
|
||||
Otetaanko silti käyttöön?"</string>
|
||||
<string name="import_keystore">Tuo avainsäilö</string>
|
||||
<string name="import_keystore_description">Tuo mukautettu avainsäilö</string>
|
||||
<string name="import_keystore_dialog_title">Anna avainsäilön tunnistetiedot</string>
|
||||
<string name="import_keystore_dialog_description">Sinun on annettava avainsäilön tunnistetiedot tuodaksesi sen.</string>
|
||||
<string name="import_keystore_dialog_alias_field">Käyttäjätunnus (Alias)</string>
|
||||
<string name="import_keystore_dialog_password_field">Salasana</string>
|
||||
<string name="import_keystore_dialog_button">Tuo</string>
|
||||
<string name="import_keystore_wrong_credentials">Väärät avainsäilön tunnistetiedot</string>
|
||||
<string name="import_keystore_success">Tuotu avainsäilö</string>
|
||||
<string name="export_keystore">Vie avainsäilö</string>
|
||||
<string name="export_keystore_description">Vie nykyinen avainsäilö</string>
|
||||
<string name="export_keystore_unavailable">Ei avainsäilöä vietäväksi</string>
|
||||
<string name="export_keystore_success">Viety avainsäilö</string>
|
||||
<string name="regenerate_keystore">Luo avainsäilö uudelleen</string>
|
||||
<string name="regenerate_keystore_description">Luo uusi avainsäilö</string>
|
||||
<string name="regenerate_keystore_dialog_description">"Olet luomassa uudelleen avainsäilöä, jota hallintaohjelma käyttää paikkausprosessin aikana.
|
||||
|
||||
Et voi päivittää aiemmin asennettuja sovelluksia tästä lähteestä."</string>
|
||||
<string name="regenerate_keystore_success">Avainsäilö on korvattu onnistuneesti</string>
|
||||
<string name="import_patch_selection">Tuo paikkausvalinta</string>
|
||||
<string name="import_patch_selection_description">Tuo paikkausvalinta JSON-tiedostosta</string>
|
||||
<string name="import_patch_selection_fail">Paikkausvalintaa ei voitu tuoda: %s</string>
|
||||
<string name="import_patch_selection_success">Tuotu paikkausvalinta</string>
|
||||
<string name="export_patch_selection">Vie paikkausvalinta</string>
|
||||
<string name="export_patch_selection_description">Vie paikkausvalinta JSON-tiedostoon</string>
|
||||
<string name="export_patch_selection_fail">Paikkausvalintaa ei voitu viedä: %s</string>
|
||||
<string name="export_patch_selection_success">Viety paikkausvalinta</string>
|
||||
<string name="reset_patch_selection">Nollaa paikkausvalinta</string>
|
||||
<string name="reset_patch_selection_description">Nollaa tallennettu paikkausvalinta</string>
|
||||
<string name="reset_patch_options">Nollaa paikkausasetukset</string>
|
||||
<string name="reset_patch_options_description">Nollaa tallennetut paikkausasetukset</string>
|
||||
<string name="reset_patch_selection_success">Paikkausvalinta on nollattu</string>
|
||||
<string name="patch_selection_reset_all">Nollaa paikkausvalinta maailmanlaajuisesti</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">Olet aikeissa nollata kaikki paikkausvalinnat. Sinun on valittava jokainen paikkaus uudelleen manuaalisesti.</string>
|
||||
<string name="patch_selection_reset_all_description">Nollaa kaikki paikkausvalinnat</string>
|
||||
<string name="patch_selection_reset_package">Nollaa paikkausvalinta sovellukselle</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">Olet aikeissa nollata sovelluksen \"%s\" paikkausvalinnan. Sinun on valittava jokainen paikkaus uudelleen manuaalisesti.</string>
|
||||
<string name="patch_selection_reset_package_description">Nollaa paikkausvalinnan yksittäiselle sovellukselle</string>
|
||||
<string name="patch_selection_reset_patches">Nollaa korjausvalinta (yksittäinen)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">Olet aikeissa nollata korjausvalinnan kohteelle \"%s\". Sinun on valittava jokainen korjaus uudelleen manuaalisesti.</string>
|
||||
<string name="patch_selection_reset_patches_description">Nollaa korjausvalinnan tietylle korjauskokoelmalle</string>
|
||||
<string name="patch_options_reset_package">Nollaa sovelluksen korjausasetukset</string>
|
||||
<string name="patch_options_reset_package_dialog_description">Olet aikeissa nollata sovelluksen \"%s\" korjausasetukset. Sinun on otettava jokainen asetus uudelleen käyttöön.</string>
|
||||
<string name="patch_options_reset_package_description">Nollaa yhden sovelluksen korjausasetukset</string>
|
||||
<string name="patch_options_reset_patches">Nollaa korjausasetukset (yksittäinen)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">Olet aikeissa nollata kohteen \"%s\" korjausasetukset. Sinun on otettava jokainen asetus uudelleen käyttöön.</string>
|
||||
<string name="patch_options_reset_patches_description">Nollaa korjausasetukset tietylle korjauskokoelmalle</string>
|
||||
<string name="patch_options_reset_all">Nollaa korjausasetukset maailmanlaajuisesti</string>
|
||||
<string name="patch_options_reset_all_dialog_description">Olet aikeissa nollata kaikki korjausasetukset. Sinun on otettava jokainen asetus uudelleen käyttöön.</string>
|
||||
<string name="patch_options_reset_all_description">Nollaa kaikki korjausasetukset</string>
|
||||
<string name="downloader_plugins">Liitännäiset</string>
|
||||
<string name="downloader_plugin_state_trusted">Luotettu</string>
|
||||
<string name="downloader_plugin_state_failed">Lataus epäonnistui. Napsauta saadaksesi lisätietoja</string>
|
||||
<string name="downloader_plugin_state_untrusted">Ei luotettu</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">Luotetaanko liitännäiseen?</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">Peruuta luottamus?</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">Jatkaminen antaa tämän liitännäisen suorittaa järjestelmässäsi.\n\nOta tämä liitännäinen käyttöön vain, jos luotat siihen. Liitännäiset voivat suorittaa mielivaltaista koodia ja vaarantaa laitteesi.</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">Allekirjoitus:\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">Liitännäinen:\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">Poista valitut sovellukset</string>
|
||||
<string name="downloader_plugin_delete_apps_description">Haluatko varmasti poistaa valitut sovellukset?</string>
|
||||
<string name="downloader_settings_no_apps">Ladattuja sovelluksia ei löytynyt.</string>
|
||||
<string name="search_apps">Hae sovelluksia…</string>
|
||||
<string name="loading_body">Ladataan…</string>
|
||||
<string name="downloading_patches">Ladataan korjauksia…</string>
|
||||
<string name="options">Asetukset</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="yes">Kyllä</string>
|
||||
<string name="no">Ei</string>
|
||||
<string name="edit">Muokkaa</string>
|
||||
<string name="dialog_input_placeholder">Arvo</string>
|
||||
<string name="reset">Nollaa</string>
|
||||
<string name="share">Jaa</string>
|
||||
<string name="patch">Korjaa</string>
|
||||
<string name="select_from_storage">Valitse tallennustilasta</string>
|
||||
<string name="select_from_storage_description">Valitse APK-tiedosto tallennustilasta tiedostovalitsimen avulla</string>
|
||||
<string name="suggested_version_info">Ehdotettu versio: %s</string>
|
||||
<string name="type_anything">Jatka kirjoittamalla mitä tahansa</string>
|
||||
<string name="search">Hae korjauksia…</string>
|
||||
<string name="apply">Käytä</string>
|
||||
<string name="help">Ohje</string>
|
||||
<string name="back">Takaisin</string>
|
||||
<string name="warning">Varoitus</string>
|
||||
<string name="add">Lisää</string>
|
||||
<string name="close">Sulje</string>
|
||||
<string name="clear">Tyhjennä</string>
|
||||
<string name="system">Järjestelmä</string>
|
||||
<string name="light">Vaalea</string>
|
||||
<string name="dark">Tumma</string>
|
||||
<string name="appearance">Ulkoasu</string>
|
||||
<string name="networking">Verkko</string>
|
||||
<string name="allow_metered_networks">Salli datakattoiset verkot</string>
|
||||
<string name="allow_metered_networks_description">Sallii automaattiset päivitykset datakattoisissa verkoissa.\n Sovellus saattaa silti varoittaa datakattoisista verkoista manuaalisten toimintojen yhteydessä.</string>
|
||||
<string name="downloaded_apps">Ladatut sovellukset</string>
|
||||
<string name="process_runtime">Suorita paikkaaja eri prosessissa (kokeellinen)</string>
|
||||
<string name="process_runtime_description">Tämä on nopeampaa ja mahdollistaa paikkaajan käyttävän enemmän muistia</string>
|
||||
<string name="process_runtime_memory_limit">Paikkaajan prosessin muistirajoitus</string>
|
||||
<string name="process_runtime_memory_limit_description">Suurin muistimäärä, jonka paikkaajan prosessi voi käyttää (megatavuina)</string>
|
||||
<string name="debug_logs_export">Vie virheenkorjauslokit</string>
|
||||
<string name="debug_logs_export_read_failed">Lokien luku epäonnistui (poistumiskoodi %d)</string>
|
||||
<string name="debug_logs_export_failed">Lokien vienti epäonnistui</string>
|
||||
<string name="debug_logs_export_success">Vietetyt lokit</string>
|
||||
<string name="api_url">API-URL</string>
|
||||
<string name="api_url_description">API, jota käytetään tarvittavien tiedostojen lataamiseen</string>
|
||||
<string name="api_url_dialog_title">Vaihda API-URL</string>
|
||||
<string name="api_url_dialog_description">Vaihda ReVanced Managerin API-URL. ReVanced Manager käyttää APIa lataamaan korjauksia ja päivityksiä.</string>
|
||||
<string name="api_url_dialog_warning">ReVanced Manager muodostaa yhteyden APIin ladatakseen korjauksia ja päivityksiä. Varmista, että luotat siihen.</string>
|
||||
<string name="api_url_dialog_save">Aseta</string>
|
||||
<string name="api_url_dialog_reset">Nollaa API-URL</string>
|
||||
<string name="device">Laite</string>
|
||||
<string name="device_android_version">Android-versio</string>
|
||||
<string name="device_model">Malli</string>
|
||||
<string name="device_architectures">CPU-arkkitehtuurit</string>
|
||||
<string name="device_memory_limit">Muistirajoitukset</string>
|
||||
<string name="device_memory_limit_format">%1$d Mt (normaali) - %2$d Mt (suuri)</string>
|
||||
<string name="patches_force_download">Pakota kaikkien korjausten lataus</string>
|
||||
<string name="patches_reset">Nollaa korjaukset</string>
|
||||
<string name="patching">Paikkaaminen</string>
|
||||
<string name="signing">Allekirjoittaminen</string>
|
||||
<string name="storage">Tallennustila</string>
|
||||
<string name="no_patch_found">Korjausta ei löydy. Tarkista korjauksesi</string>
|
||||
<string name="tab_apps">Sovellukset</string>
|
||||
<string name="tab_patches">Korjaukset</string>
|
||||
<string name="delete">Poista</string>
|
||||
<string name="refresh">Päivitä</string>
|
||||
<string name="continue_anyways">Jatka silti</string>
|
||||
<string name="download_another_version">Lataa toinen versio</string>
|
||||
<string name="download_app">Lataa sovellus</string>
|
||||
<string name="download_apk">Lataa APK-tiedosto</string>
|
||||
<string name="patches_download_fail">Korjausten lataus epäonnistui: %s</string>
|
||||
<string name="patches_replace_fail">Korjausten tuonti epäonnistui: %s</string>
|
||||
<string name="no_patched_apps_found">Paikattuja sovelluksia ei löytynyt</string>
|
||||
<string name="tap_on_patches">Napauta korjauksia saadaksesi lisätietoja niistä</string>
|
||||
<string name="patches_selected">%s valittu</string>
|
||||
<string name="incompatible_patches">Yhteensopimattomat korjaukset</string>
|
||||
<string name="universal_patches">Yleiskorjaukset</string>
|
||||
<string name="patch_selection_reset_toast">Korjausvalinta ja -asetukset on nollattu suositeltuihin oletusarvoihin</string>
|
||||
<string name="patch_options_reset_toast">Korjausasetukset on nollattu</string>
|
||||
<string name="non_suggested_version_warning_title">Ei ehdotettu versio</string>
|
||||
<string name="non_suggested_version_warning_description">"Valitsemasi sovelluksen versio ei vastaa ehdotettua versiota.\nKäytä ehdotettua versiota: %s\n\nJatkaaksesi joka tapauksessa, poista käytöstä \"Vaadi ehdotettua sovellusversiota\" lisäasetuksista."</string>
|
||||
<string name="selection_warning_title">Lopetetaanko oletusasetusten käyttö?</string>
|
||||
<string name="selection_warning_description">"On suositeltavaa käyttää oletusarvoisia korjausvalintoja ja -asetuksia. Niiden muuttaminen voi aiheuttaa odottamattomia ongelmia.\n\nSinun on otettava käyttöön \"Salli korjausvalinnan ja -asetusten muuttaminen\" lisäasetuksista ennen korjausten vaihtamista."</string>
|
||||
<string name="universal_patch_warning_description">"Yleiskorjauksilla on yleisempi käyttö ja ne eivät toimi yhtä luotettavasti kuin tietyille sovelluksille tarkoitetut korjaukset. Niiden käytössä voi esiintyä ongelmia.\n\nSinun on otettava käyttöön \"Salli yleiskorjausten käyttö\" lisäasetuksista ennen yleiskorjausten käyttöä."</string>
|
||||
<string name="this_version">Tämä versio</string>
|
||||
<string name="universal">Mikä tahansa sovellus</string>
|
||||
<string name="search_patches">Hae korjauksia</string>
|
||||
<string name="app_version_not_compatible">"Tämä korjaus ei ole yhteensopiva valitun sovellusversion (%1$s) kanssa.\n\nSe on yhteensopiva vain seuraavien versioiden kanssa: %2$s"</string>
|
||||
<string name="continue_with_version">Jatketaanko tällä versiolla?</string>
|
||||
<string name="version_not_compatible">Kaikki korjaukset eivät ole yhteensopivia tämän version (%s) kanssa. Haluatko jatkaa silti?</string>
|
||||
<string name="download_application">Ladataanko sovellus?</string>
|
||||
<string name="app_not_installed">Valitsemaasi sovellusta ei ole asennettu. Haluatko ladata sen?</string>
|
||||
<string name="failed_to_load_apk">APK:n lataus epäonnistui</string>
|
||||
<string name="loading">Ladataan…</string>
|
||||
<string name="not_installed">Ei asennettu</string>
|
||||
<string name="installed">Asennettu</string>
|
||||
<string name="app_info">Sovelluksen tiedot</string>
|
||||
<string name="uninstall">Poista asennus</string>
|
||||
<string name="unpatch">Poista korjaus</string>
|
||||
<string name="repatch">Paikkaa uudelleen</string>
|
||||
<string name="install_type">Asennustyyppi</string>
|
||||
<string name="package_name">Paketin nimi</string>
|
||||
<string name="original_package_name">Alkuperäinen paketin nimi</string>
|
||||
<string name="applied_patches">Käytetyt paikat</string>
|
||||
<string name="view_applied_patches">Näytä käytetyt paikat</string>
|
||||
<string name="default_install">Oletus</string>
|
||||
<string name="mount_install">Liitä</string>
|
||||
<string name="mounted">Liitetty</string>
|
||||
<string name="not_mounted">Ei liitetty</string>
|
||||
<string name="mount">Liitä</string>
|
||||
<string name="unmount">Irrota</string>
|
||||
<string name="failed_to_mount">Liittäminen epäonnistui: %s</string>
|
||||
<string name="failed_to_unmount">Irrottaminen epäonnistui: %s</string>
|
||||
<string name="unpatch_app">Poista paikka sovelluksesta?</string>
|
||||
<string name="unpatch_description">Haluatko varmasti poistaa paikan tästä sovelluksesta?</string>
|
||||
<string name="downloader_invalid_version">Lataaja ei hakenut oikeaa versiota</string>
|
||||
<string name="downloader_app_not_found">Lataaja ei löytänyt sovellusta</string>
|
||||
<string name="downloader_error">Latausvirhe: %s</string>
|
||||
<string name="downloader_no_plugins_installed">Lataajaa ei ole asennettu.</string>
|
||||
<string name="downloader_no_plugins_available">Lataajia on asennettu, mutta yhtäkään ei luoteta. Tarkista asetuksesi.</string>
|
||||
<string name="already_patched">Jo paikattu</string>
|
||||
<string name="patch_selector_sheet_filter_title">Suodatin</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">Yhteensopivuus</string>
|
||||
<string name="string_option_menu_description">Lisää asetuksia</string>
|
||||
<string name="option_preset_custom_value">Mukautettu arvo</string>
|
||||
<string name="path_selector">Valitse tallennustilasta</string>
|
||||
<string name="path_selector_parent_dir">Edellinen hakemisto</string>
|
||||
<string name="path_selector_dirs">Hakemistot</string>
|
||||
<string name="path_selector_files">Tiedostot</string>
|
||||
<string name="show_password_field">Näytä salasana</string>
|
||||
<string name="hide_password_field">Piilota salasana</string>
|
||||
<string name="installer">Asentaja</string>
|
||||
<string name="install_app">Asenna</string>
|
||||
<string name="install_app_success">Sovellus asennettu</string>
|
||||
<string name="install_app_fail">Sovelluksen asennus epäonnistui: %s</string>
|
||||
<string name="reinstall_app_fail">Sovelluksen uudelleenasennus epäonnistui: %s</string>
|
||||
<string name="uninstall_app_fail">Sovelluksen poisto epäonnistui: %s</string>
|
||||
<string name="open_app">Avaa</string>
|
||||
<string name="save_apk">Tallenna APK</string>
|
||||
<string name="save_apk_success">APK tallennettu</string>
|
||||
<string name="sign_fail">APK:n allekirjoittaminen epäonnistui: %s</string>
|
||||
<string name="save_logs">Tallenna lokit</string>
|
||||
<string name="plugin_activity_dialog_body">Käyttäjän toimia tarvitaan jatkaakseen tämän laajennuksen kanssa.</string>
|
||||
<string name="select_install_type">Valitse asennustyyppi</string>
|
||||
<string name="patcher_step_group_preparing">Valmistellaan</string>
|
||||
<string name="patcher_step_load_patches">Lataa paikat</string>
|
||||
<string name="patcher_step_unpack">Lue APK-tiedosto</string>
|
||||
<string name="patcher_step_group_patching">Paikataan</string>
|
||||
<string name="patcher_step_group_saving">Tallennetaan</string>
|
||||
<string name="patcher_step_write_patched">Kirjoita paikattu APK-tiedosto</string>
|
||||
<string name="patcher_step_sign_apk">Allekirjoita paikattu APK-tiedosto</string>
|
||||
<string name="patcher_notification_title">Paikkaus käynnissä…</string>
|
||||
<string name="patcher_notification_text">Napauta palataksesi paikkaajaan</string>
|
||||
<string name="patcher_stop_confirm_title">Pysäytä paikkaaja</string>
|
||||
<string name="patcher_stop_confirm_description">Haluatko varmasti pysäyttää paikkausprosessin?</string>
|
||||
<string name="patcher_install_in_progress">Asennus on käynnissä. Odota hetki.</string>
|
||||
<string name="execute_patches">Suorita paikat</string>
|
||||
<string name="executing_patch">Suorita %s</string>
|
||||
<string name="failed_to_execute_patch">Suoritus epäonnistui: %s</string>
|
||||
<string name="step_completed">valmis</string>
|
||||
<string name="step_failed">epäonnistui</string>
|
||||
<string name="step_running">käynnissä</string>
|
||||
<string name="step_waiting">odotetaan</string>
|
||||
<string name="expand_content">laajenna</string>
|
||||
<string name="collapse_content">kutista</string>
|
||||
<string name="drag_handle">järjestä uudelleen</string>
|
||||
<string name="more">Lisää</string>
|
||||
<string name="less">Vähemmän</string>
|
||||
<string name="continue_">Jatka</string>
|
||||
<string name="dismiss">Hylkää</string>
|
||||
<string name="permanent_dismiss">Älä näytä tätä uudelleen</string>
|
||||
<string name="donate">Lahjoita</string>
|
||||
<string name="website">Verkkosivusto</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="contact">Yhteystiedot</string>
|
||||
<string name="version">Versio</string>
|
||||
<string name="submit_feedback">Lähetä ongelma tai palaute</string>
|
||||
<string name="submit_feedback_description">Auta meitä parantamaan tätä sovellusta</string>
|
||||
<string name="developer_options">Kehittäjäasetukset</string>
|
||||
<string name="developer_options_description">Asetukset ongelmien virheenkorjaukseen</string>
|
||||
<string name="patches_update_success">Päivitys onnistui</string>
|
||||
<string name="patches_update_unavailable">Ei päivityksiä saatavilla</string>
|
||||
<string name="view_patches">Näytä paikat</string>
|
||||
<string name="patches_view_any_version">Mikä tahansa versio</string>
|
||||
<string name="patches_view_any_package">Mikä tahansa paketti</string>
|
||||
<string name="patches_delete_single_dialog_description">Haluatko varmasti poistaa \"%s\"?</string>
|
||||
<string name="patches_delete_multiple_dialog_description">Haluatko varmasti poistaa valitut paikat?</string>
|
||||
<string name="about_revanced_manager">Tietoja ReVanced Managerista</string>
|
||||
<string name="revanced_manager_description">ReVanced Manager on Android-sovellus, joka käyttää ReVanced Patcheria Android-sovellusten paikkaamiseen. Sen avulla voit ladata ja paikata sovelluksia mukautetuilla paikoilla ja hallita paikkausprosessia.</string>
|
||||
<string name="developer_options_taps">%d napautusta jäljellä</string>
|
||||
<string name="developer_options_enabled">Kehittäjäasetukset käytössä</string>
|
||||
<string name="developer_options_already_enabled">Kehittäjäasetukset ovat jo käytössä</string>
|
||||
<string name="update_available">Päivitys saatavilla</string>
|
||||
<string name="current_version">Nykyinen versio: %s</string>
|
||||
<string name="new_version">Uusi versio: %s</string>
|
||||
<string name="ready_to_install_update">Valmis asentamaan päivityksen</string>
|
||||
<string name="update_completed">Päivitys asennettu</string>
|
||||
<string name="install_update_manager_failed">Päivityksen asennus epäonnistui</string>
|
||||
<string name="manual_update_check">Tarkista päivitykset</string>
|
||||
<string name="manual_update_check_description">Tarkista päivitykset manuaalisesti</string>
|
||||
<string name="update_checking_manager">Tarkista päivitykset käynnistyksen yhteydessä</string>
|
||||
<string name="update_checking_manager_description">Tarkista ReVanced Managerin uudet versiot sovelluksen käynnistyessä</string>
|
||||
<string name="manager_prereleases">Käytä ennakkoversioita</string>
|
||||
<string name="manager_prereleases_description">Käytä ReVanced Managerin esijulkaisuversioita</string>
|
||||
<string name="changelog">Näytä muutoshistoria</string>
|
||||
<string name="changelog_loading">Ladataan muutoshistoriaa</string>
|
||||
<string name="changelog_download_fail">Muutoshistorian lataaminen epäonnistui: %s</string>
|
||||
<string name="changelog_description">Katso uusimmat muutokset tässä päivityksessä</string>
|
||||
<string name="battery_optimization_notification">Akun optimoinnit on poistettava käytöstä, jotta ReVanced Manager toimisi oikein taustalla. Napsauta tästä poistaaksesi optimoinnit käytöstä.</string>
|
||||
<string name="installing_manager_update">Asennetaan päivitystä…</string>
|
||||
<string name="downloading_manager_update">Ladataan päivitystä…</string>
|
||||
<string name="download_manager_failed">Päivityksen lataaminen epäonnistui: %s</string>
|
||||
<string name="cancel">Peruuta</string>
|
||||
<string name="save">Tallenna</string>
|
||||
<string name="save_with_count">Tallenna (%1$s)</string>
|
||||
<string name="update">Päivitä</string>
|
||||
<string name="empty">Tyhjä</string>
|
||||
<string name="installing_message">"Napauta <b>Päivitä</b> pyydettäessä.
|
||||
ReVanced Manager sulkeutuu päivityksen aikana."</string>
|
||||
<string name="no_changelogs_found">Muutoshistoriaa ei löytynyt</string>
|
||||
<string name="just_now">Juuri nyt</string>
|
||||
<string name="minutes_ago">%s min sitten</string>
|
||||
<string name="hours_ago">%s t sitten</string>
|
||||
<string name="days_ago">%s pv sitten</string>
|
||||
<string name="invalid_date">Virheellinen päivämäärä</string>
|
||||
<string name="disable_battery_optimization">Poista akun optimointi käytöstä</string>
|
||||
<string name="input_dialog_value_invalid">Virheellinen arvo</string>
|
||||
<string name="option_required">Tämä asetus on pakollinen</string>
|
||||
<string name="required_options_screen">Pakolliset asetukset</string>
|
||||
<string name="failed_to_check_updates">Päivitysten tarkistus epäonnistui: %s</string>
|
||||
<string name="no_update_available">Ei päivityksiä saatavilla</string>
|
||||
<string name="update_check">Tarkistetaan päivityksiä…</string>
|
||||
<string name="dismiss_temporary">Ei nyt</string>
|
||||
<string name="update_available_dialog_description">Uusi versio ReVanced Managerista (%s) on saatavilla.</string>
|
||||
<string name="failed_to_download_update">Päivityksen lataaminen epäonnistui: %s</string>
|
||||
<string name="download">Lataa</string>
|
||||
<string name="download_confirmation_metered">"Käytössäsi on tällä hetkellä rajoitettu yhteys, ja palveluntarjoajasi saattaa veloittaa tiedonsiirrosta.
|
||||
|
||||
Haluatko silti jatkaa?"</string>
|
||||
<string name="download_update_confirmation">Lataa päivitys?</string>
|
||||
<string name="no_contributors_found">Yhteistyökumppaneita ei löytynyt</string>
|
||||
<string name="select">Valitse</string>
|
||||
<string name="select_deselect_all">Valitse tai poista kaikki valinnat</string>
|
||||
<string name="select_patches_type_dialog_description">Lisää uusia paikkoja URL-osoitteesta tai paikallisista tiedostoista</string>
|
||||
<string name="local_patches_description">Lisää paikkoja paikallisesta tallennustilasta.</string>
|
||||
<string name="remote_patches_description">Lisää paikkoja URL-osoitteesta. Paikat voivat päivittyä automaattisesti.</string>
|
||||
<string name="recommended">Suositeltu</string>
|
||||
<string name="installation_failed_dialog_title">Asennus epäonnistui</string>
|
||||
<string name="installation_cancelled_dialog_title">Asennus peruutettu</string>
|
||||
<string name="installation_blocked_dialog_title">Asennus estetty</string>
|
||||
<string name="installation_conflict_dialog_title">Asennusristiriita</string>
|
||||
<string name="installation_incompatible_dialog_title">Asennus yhteensopimaton</string>
|
||||
<string name="installation_invalid_dialog_title">Asennus virheellinen</string>
|
||||
<string name="installation_storage_issue_dialog_title">Ei tarpeeksi tallennustilaa</string>
|
||||
<string name="installation_timeout_dialog_title">Asennus aikakatkaistu</string>
|
||||
<string name="installation_failed_description">Asennus epäonnistui tuntemattomasta syystä. Yritä uudelleen?</string>
|
||||
<string name="installation_aborted_description">Asennus peruutettiin manuaalisesti. Yritä uudelleen?</string>
|
||||
<string name="installation_blocked_description">Asennus estettiin. Tarkista laitteesi suojausasetukset ja yritä uudelleen.</string>
|
||||
<string name="installation_conflict_description">Asennuksen esti olemassa oleva sovelluksen asennus. Poista asennettu sovellus ja yritä uudelleen?</string>
|
||||
<string name="installation_incompatible_description">Sovellus on yhteensopimaton tämän laitteen kanssa. Käytä tähän laitteeseen yhteensopivaa APK:ta ja yritä uudelleen.</string>
|
||||
<string name="installation_invalid_description">Sovellus on virheellinen. Poista sovellus ja yritä uudelleen?</string>
|
||||
<string name="installation_storage_issue_description">Sovellusta ei voitu asentaa riittämättömän tallennustilan vuoksi. Vapauta tilaa ja yritä uudelleen.</string>
|
||||
<string name="installation_timeout_description">Asennus kesti liian kauan. Yritä uudelleen?</string>
|
||||
<string name="reinstall">Asenna uudelleen</string>
|
||||
<string name="show">Näytä</string>
|
||||
<string name="debugging">Virheenkorjaus</string>
|
||||
<string name="about_device">Tietoja laitteesta</string>
|
||||
<string name="enter_url">Syötä URL-osoite</string>
|
||||
<string name="next">Seuraava</string>
|
||||
<string name="auto_update">Automaattinen päivitys</string>
|
||||
<string name="add_patches">Lisää paikkoja</string>
|
||||
<string name="auto_update_description">Päivitä automaattisesti, kun uusi versio on saatavilla</string>
|
||||
<string name="patches_prereleases">Käytä ennakkoversioita</string>
|
||||
<string name="patches_prereleases_description">Käytä %s:n esijulkaisuversioita</string>
|
||||
<string name="patches_url">Paikkojen URL-osoite</string>
|
||||
<string name="incompatible_patches_dialog">"Nämä paikat eivät ole yhteensopivia valitun sovellusversion (%1$s) kanssa.
|
||||
|
||||
Napsauta paikkoja nähdäksesi lisätietoja."</string>
|
||||
<string name="incompatible_patch">Yhteensopimaton paikka</string>
|
||||
<string name="any_version">Mikä tahansa</string>
|
||||
<string name="never_show_again">Älä näytä enää koskaan</string>
|
||||
<string name="show_manager_update_dialog_on_launch">Näytä päivitys ilmoitus käynnistyksessä</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">Näytä ponnahdusilmoitus aina, kun uusi päivitys on saatavilla käynnistyksen yhteydessä</string>
|
||||
<string name="failed_to_import_keystore">Avainsäilön tuonti epäonnistui</string>
|
||||
<string name="export">Vie</string>
|
||||
<string name="confirm">Vahvista</string>
|
||||
</resources>
|
||||
@@ -1,450 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">Pagsubok ng Patcher</string>
|
||||
<string name="patches">Mga Patch</string>
|
||||
<string name="cli">CLI</string>
|
||||
<string name="manager">Manager</string>
|
||||
<string name="plugin_host_permission_label">Host ng plugin ng ReVanced Manager</string>
|
||||
<string name="plugin_host_permission_description">Ginagamit upang kontrolin ang access sa mga plugin ng ReVanced Manager. Ang ReVanced Manager lang ang mayroon nito.</string>
|
||||
<string name="toast_copied_to_clipboard">Kinopya!</string>
|
||||
<string name="copy_to_clipboard">Kopyahin sa clipboard</string>
|
||||
<string name="dashboard">Dashboard</string>
|
||||
<string name="settings">Mga Setting</string>
|
||||
<string name="select_app">Pumili ng app</string>
|
||||
<string name="patches_count_selected">%1$d/%2$d napili</string>
|
||||
<string name="new_downloader_plugins_notification">Mayroong bagong mga downloader plugin. Mag-click dito upang i-configure ang mga ito.</string>
|
||||
<string name="unsupported_architecture_warning">Hindi suportado ang pag-patch sa arkitektura ng device na ito at malamang na mabigo.</string>
|
||||
<string name="import_">I-import</string>
|
||||
<string name="import_patches">I-import ang mga patch</string>
|
||||
<string name="file_field_set">Napili</string>
|
||||
<string name="file_field_not_set">Hindi napili</string>
|
||||
<string name="field_not_set">Hindi nakatakda</string>
|
||||
<string name="patches_missing">Nawawala</string>
|
||||
<string name="patches_error">Error</string>
|
||||
<string name="patches_error_description">Hindi ma-load ang mga patch. Mag-click upang tingnan ang error</string>
|
||||
<string name="patches_not_downloaded">Hindi pa na-download ang mga patch. Mag-click dito upang i-download ito</string>
|
||||
<string name="patches_name_default">Mga patch</string>
|
||||
<string name="patches_name_fallback">Walang pangalan</string>
|
||||
<string name="android_11_bug_dialog_title">Bug sa Android 11</string>
|
||||
<string name="android_11_bug_dialog_description">Ang pahintulot sa pag-install ng app ay dapat ibigay nang maaga upang maiwasan ang isang bug sa sistema ng Android 11 na magdulot ng negatibong epekto sa karanasan ng gumagamit.</string>
|
||||
<string name="no_network_toast">Walang available na koneksyon sa internet</string>
|
||||
<string name="selected_app_meta_any_version">Anumang available na bersyon</string>
|
||||
<string name="app_source_dialog_title">Pumili ng source</string>
|
||||
<string name="app_source_dialog_option_auto">Awtomatiko</string>
|
||||
<string name="app_source_dialog_option_auto_description">Gamitin ang lahat ng available na downloader upang i-download ang app</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">Walang available na mga plugin</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">Hindi na maaaring i-patch muli ang mga naka-mount na app nang walang root access</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">Hindi tugma ang bersyon %s sa iminungkahing bersyon</string>
|
||||
<string name="patch_item_description">Simulan ang pag-patch ng application</string>
|
||||
<string name="patch_selector_item">Pumili ng mga patch</string>
|
||||
<string name="patch_selector_item_description">%d mga patch ang napili</string>
|
||||
<string name="no_patches_selected">Walang napiling mga patch</string>
|
||||
<string name="network_unavailable_warning">Hindi nakakonekta ang iyong device sa internet. Mabibigo ang pag-download mamaya.</string>
|
||||
<string name="network_metered_warning">Kasalukuyan kang nasa metered connection. Maaaring magkaroon ng data charges mula sa iyong service provider.</string>
|
||||
<string name="apk_source_selector_item">Pumili ng source ng APK</string>
|
||||
<string name="apk_source_auto">Ginagamit ang lahat ng downloader ng APK</string>
|
||||
<string name="apk_source_downloader">Ginagamit ang %s</string>
|
||||
<string name="apk_source_installed">Ginagamit ang naka-install na APK</string>
|
||||
<string name="apk_source_local">Ginagamit ang isang lokal na APK file</string>
|
||||
<string name="legacy_import_failed">Hindi ma-import ang legacy settings</string>
|
||||
<string name="auto_updates_dialog_title">I-configure ang mga update</string>
|
||||
<string name="auto_updates_dialog_description">Gusto mo bang pana-panahong suriin ng ReVanced Manager ang mga update para sa sumusunod na mga component?</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">Mga Patch ng ReVanced</string>
|
||||
<string name="auto_updates_dialog_note">Maaaring baguhin ang mga setting na ito mamaya.</string>
|
||||
<string name="general">Pangkalahatan</string>
|
||||
<string name="general_description">Wika, tema, dynamic na kulay</string>
|
||||
<string name="updates">Mga Update</string>
|
||||
<string name="updates_description">Suriin ang mga update at tingnan ang mga changelog</string>
|
||||
<string name="downloads">Mga Download</string>
|
||||
<string name="downloads_description">Mga downloader plugin at mga na-download na app</string>
|
||||
<string name="import_export">I-import & i-export</string>
|
||||
<string name="import_export_description">Keystore, mga opsyon sa patch at pagpili</string>
|
||||
<string name="advanced">Advanced</string>
|
||||
<string name="advanced_description">API URL, limitasyon sa memory, debugging</string>
|
||||
<string name="about">Tungkol sa</string>
|
||||
<string name="opensource_licenses">Mga lisensya ng open source</string>
|
||||
<string name="opensource_licenses_description">Tingnan ang lahat ng library na ginamit upang gawin ang application na ito</string>
|
||||
<string name="contributors">Mga Kontribyutor</string>
|
||||
<string name="contributors_description">Tingnan ang mga kontribyutor ng ReVanced</string>
|
||||
<string name="dynamic_color">Dynamic na kulay</string>
|
||||
<string name="dynamic_color_description">Iakma ang mga kulay sa wallpaper</string>
|
||||
<string name="pure_black_theme">Purong itim na tema</string>
|
||||
<string name="pure_black_theme_description">Gamitin ang purong itim na background para sa madilim na tema</string>
|
||||
<string name="theme">Tema</string>
|
||||
<string name="theme_description">Pumili sa pagitan ng light o dark theme</string>
|
||||
<string name="language">Wika</string>
|
||||
<string name="language_description">Pumili ng wika ng display ng app</string>
|
||||
<string name="language_system_default">Default ng system</string>
|
||||
<string name="safeguards">Mga Pananggalang</string>
|
||||
<string name="patch_compat_check">I-disable ang check sa compatibility ng bersyon</string>
|
||||
<string name="patch_compat_check_description">Huwag paghigpitan ang mga patch sa mga compatible na bersyon ng app</string>
|
||||
<string name="patch_compat_check_confirmation">"Ang pagpili ng mga hindi compatible na patch ay maaaring magresulta sa sirang app.\n\nGusto mo pa ring magpatuloy?"</string>
|
||||
<string name="suggested_version_safeguard">Kinakailangan ang iminungkahing bersyon ng app</string>
|
||||
<string name="suggested_version_safeguard_description">Ipilit ang pagpili ng iminungkahing bersyon ng app</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"Ang pagpili ng app na hindi iminungkahing bersyon ay maaaring magdulot ng hindi inaasahang problema.\n\nGusto mo pa ring magpatuloy?"</string>
|
||||
<string name="patch_selection_safeguard">Payagan ang pagbabago ng pagpili ng patch at mga opsyon</string>
|
||||
<string name="patch_selection_safeguard_description">Huwag pigilan ang pagpili o pagtanggal ng pagpili ng mga patch at pag-customize ng mga opsyon</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"Ang pagbabago sa pagpili ng mga patch ay maaaring magdulot ng hindi inaasahang problema.\n\nI-enable pa rin?"</string>
|
||||
<string name="universal_patches_safeguard">Payagan ang paggamit ng universal patches</string>
|
||||
<string name="universal_patches_safeguard_description">Huwag pigilan ang paggamit ng universal patches</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"Ang mga universal patch ay hindi kasinghusay na nasubukan tulad ng mga target na partikular na app.\n\nI-enable pa rin?"</string>
|
||||
<string name="import_keystore">I-import ang keystore</string>
|
||||
<string name="import_keystore_description">Mag-import ng custom na keystore</string>
|
||||
<string name="import_keystore_dialog_title">Ilagay ang mga kredensyal ng keystore</string>
|
||||
<string name="import_keystore_dialog_description">Kailangan mong ilagay ang mga kredensyal ng keystore upang i-import ito.</string>
|
||||
<string name="import_keystore_dialog_alias_field">Username (Alias)</string>
|
||||
<string name="import_keystore_dialog_password_field">Password</string>
|
||||
<string name="import_keystore_dialog_button">I-import</string>
|
||||
<string name="import_keystore_wrong_credentials">Maling kredensyal ng keystore</string>
|
||||
<string name="import_keystore_success">Na-import na keystore</string>
|
||||
<string name="export_keystore">I-export ang keystore</string>
|
||||
<string name="export_keystore_description">I-export ang kasalukuyang keystore</string>
|
||||
<string name="export_keystore_unavailable">Walang keystore na i-e-export</string>
|
||||
<string name="export_keystore_success">Na-export na keystore</string>
|
||||
<string name="regenerate_keystore">I-regenerate ang keystore</string>
|
||||
<string name="regenerate_keystore_description">Bumuo ng bagong keystore</string>
|
||||
<string name="regenerate_keystore_dialog_description">"Malapit mo nang i-regenerate ang iyong keystore na gagamitin ng manager sa proseso ng pag-patch.\n\nHindi mo na maa-update ang mga naunang naka-install na app mula sa source na ito."</string>
|
||||
<string name="regenerate_keystore_success">Matagumpay na napalitan ang keystore</string>
|
||||
<string name="import_patch_selection">I-import ang pagpili ng patch</string>
|
||||
<string name="import_patch_selection_description">I-import ang pagpili ng patch mula sa isang JSON file</string>
|
||||
<string name="import_patch_selection_fail">Hindi ma-import ang pagpili ng patch: %s</string>
|
||||
<string name="import_patch_selection_success">Na-import na pagpili ng patch</string>
|
||||
<string name="export_patch_selection">I-export ang pagpili ng patch</string>
|
||||
<string name="export_patch_selection_description">I-export ang pagpili ng patch sa isang JSON file</string>
|
||||
<string name="export_patch_selection_fail">Hindi ma-export ang pagpili ng patch: %s</string>
|
||||
<string name="export_patch_selection_success">Na-export na pagpili ng patch</string>
|
||||
<string name="reset_patch_selection">I-reset ang pagpili ng patch</string>
|
||||
<string name="reset_patch_selection_description">I-reset ang naka-store na pagpili ng patch</string>
|
||||
<string name="reset_patch_options">I-reset ang mga opsyon ng patch</string>
|
||||
<string name="reset_patch_options_description">I-reset ang naka-store na mga opsyon ng patch</string>
|
||||
<string name="reset_patch_selection_success">Na-reset na ang pagpili ng patch</string>
|
||||
<string name="patch_selection_reset_all">I-reset ang pagpili ng patch sa pangkalahatan</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">Malapit mo nang i-reset ang lahat ng pagpili ng patch. Kailangan mong manu-manong piliin muli ang bawat patch.</string>
|
||||
<string name="patch_selection_reset_all_description">I-reset ang lahat ng pagpili ng patch</string>
|
||||
<string name="patch_selection_reset_package">I-reset ang pagpili ng patch para sa app</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">Malapit mo nang i-reset ang pagpili ng patch para sa app na \"%s\". Kailangan mong manu-manong piliin muli ang bawat patch.</string>
|
||||
<string name="patch_selection_reset_package_description">Nire-reset ang pagpili ng patch para sa isang app</string>
|
||||
<string name="patch_selection_reset_patches">I-reset ang pagpili ng patch (isa)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">I-reset mo ang pagpili ng patch para sa \"%s\". Kailangan mong mano-manong piliin muli ang bawat patch.</string>
|
||||
<string name="patch_selection_reset_patches_description">Nire-reset ang pagpili ng patch para sa isang partikular na koleksyon ng mga patch</string>
|
||||
<string name="patch_options_reset_package">I-reset ang mga opsyon ng patch para sa app</string>
|
||||
<string name="patch_options_reset_package_dialog_description">I-reset mo ang mga opsyon ng patch para sa app na \"%s\". Kailangan mong muling ilapat ang bawat opsyon.</string>
|
||||
<string name="patch_options_reset_package_description">Nire-reset ang mga opsyon ng patch para sa isang app</string>
|
||||
<string name="patch_options_reset_patches">I-reset ang mga opsyon ng patch (isa)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">I-reset mo ang mga opsyon ng patch para sa \"%s\". Kailangan mong muling ilapat ang bawat opsyon.</string>
|
||||
<string name="patch_options_reset_patches_description">Nire-reset ang mga opsyon ng patch para sa isang partikular na koleksyon ng mga patch</string>
|
||||
<string name="patch_options_reset_all">I-reset ang mga opsyon ng patch sa pandaigdigan</string>
|
||||
<string name="patch_options_reset_all_dialog_description">I-reset mo ang lahat ng opsyon ng patch. Kailangan mong muling ilapat ang bawat opsyon.</string>
|
||||
<string name="patch_options_reset_all_description">Nire-reset ang lahat ng opsyon ng patch</string>
|
||||
<string name="downloader_plugins">Mga Plugin</string>
|
||||
<string name="downloader_plugin_state_trusted">Pinagkakatiwalaan</string>
|
||||
<string name="downloader_plugin_state_failed">Nabigo ang pag-load. Mag-click para sa higit pang detalye</string>
|
||||
<string name="downloader_plugin_state_untrusted">Hindi pinagkakatiwalaan</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">Pagkakatiwalaan ang plugin?</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">Bawiin ang pagtitiwala?</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">Ang pagpapatuloy ay magbibigay-daan sa plugin na ito na tumakbo sa iyong system.\n\nPaganahin lamang ang plugin na ito kung pinagkakatiwalaan mo ito. Ang mga plugin ay maaaring magpatupad ng arbitraryong code at maaaring ikompromiso ang iyong device.</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">Lagda:\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">Plugin:\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">Burahin ang mga napiling app</string>
|
||||
<string name="downloader_plugin_delete_apps_description">Sigurado ka bang gusto mong burahin ang mga napiling app?</string>
|
||||
<string name="downloader_settings_no_apps">Walang nakitang na-download na apps.</string>
|
||||
<string name="search_apps">Maghanap ng mga app…</string>
|
||||
<string name="loading_body">Naglo-load…</string>
|
||||
<string name="downloading_patches">Nagda-download ng mga patch…</string>
|
||||
<string name="options">Mga Opsyon</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="yes">Oo</string>
|
||||
<string name="no">Hindi</string>
|
||||
<string name="edit">I-edit</string>
|
||||
<string name="dialog_input_placeholder">Halaga</string>
|
||||
<string name="reset">I-reset</string>
|
||||
<string name="share">Ibahagi</string>
|
||||
<string name="patch">Patch</string>
|
||||
<string name="select_from_storage">Pumili mula sa imbakan</string>
|
||||
<string name="select_from_storage_description">Pumili ng isang APK file mula sa imbakan gamit ang file picker</string>
|
||||
<string name="suggested_version_info">Iminungkahing bersyon: %s</string>
|
||||
<string name="type_anything">Mag-type ng anuman upang magpatuloy</string>
|
||||
<string name="search">Maghanap ng mga patch…</string>
|
||||
<string name="apply">Ilapat</string>
|
||||
<string name="help">Tulong</string>
|
||||
<string name="back">Bumalik</string>
|
||||
<string name="warning">Babala</string>
|
||||
<string name="add">Idagdag</string>
|
||||
<string name="close">Isara</string>
|
||||
<string name="clear">I-clear</string>
|
||||
<string name="system">System</string>
|
||||
<string name="light">Maliwanag</string>
|
||||
<string name="dark">Madilim</string>
|
||||
<string name="appearance">Hitsura</string>
|
||||
<string name="networking">Networking</string>
|
||||
<string name="allow_metered_networks">Payagan ang mga network na may metro</string>
|
||||
<string name="allow_metered_networks_description">Pinapayagan ang mga awtomatikong update sa mga network na may metro.\n Maaaring magbigay pa rin ng babala ang application tungkol sa mga network na may metro para sa mga manu-manong operasyon.</string>
|
||||
<string name="downloaded_apps">Mga na-download na app</string>
|
||||
<string name="process_runtime">Patakbuhin ang Patcher sa ibang proseso (eksperimental)</string>
|
||||
<string name="process_runtime_description">Mas mabilis ito at nagpapahintulot sa Patcher na gumamit ng mas maraming memorya</string>
|
||||
<string name="process_runtime_memory_limit">Limitasyon sa memorya ng proseso ng Patcher</string>
|
||||
<string name="process_runtime_memory_limit_description">Ang pinakamataas na dami ng memorya na maaaring gamitin ng proseso ng Patcher (sa megabytes)</string>
|
||||
<string name="debug_logs_export">I-export ang mga debug log</string>
|
||||
<string name="debug_logs_export_read_failed">Nabigong basahin ang mga log (exit code %d)</string>
|
||||
<string name="debug_logs_export_failed">Nabigong i-export ang mga log</string>
|
||||
<string name="debug_logs_export_success">Na-export na mga log</string>
|
||||
<string name="api_url">API URL</string>
|
||||
<string name="api_url_description">Ang API na ginamit para mag-download ng mga kinakailangang file</string>
|
||||
<string name="api_url_dialog_title">Baguhin ang API URL</string>
|
||||
<string name="api_url_dialog_description">Baguhin ang API URL ng ReVanced Manager. Ginagamit ng ReVanced Manager ang API upang mag-download ng mga patch at update.</string>
|
||||
<string name="api_url_dialog_warning">Kumokonekta ang ReVanced Manager sa API upang mag-download ng mga patch at update. Siguraduhin na pinagkakatiwalaan mo ito.</string>
|
||||
<string name="api_url_dialog_save">Itakda</string>
|
||||
<string name="api_url_dialog_reset">I-reset ang API URL</string>
|
||||
<string name="device">Device</string>
|
||||
<string name="device_android_version">Bersyon ng Android</string>
|
||||
<string name="device_model">Modelo</string>
|
||||
<string name="device_architectures">Mga Arkitektura ng CPU</string>
|
||||
<string name="device_memory_limit">Mga limitasyon sa memorya</string>
|
||||
<string name="device_memory_limit_format">%1$dMB (Normal) - %2$dMB (Malaki)</string>
|
||||
<string name="patches_force_download">Piliting i-download ang lahat ng patch</string>
|
||||
<string name="patches_reset">I-reset ang mga patch</string>
|
||||
<string name="patching">Nagpa-patch</string>
|
||||
<string name="signing">Nagpipirma</string>
|
||||
<string name="storage">Imbakan</string>
|
||||
<string name="no_patch_found">Walang makitang patch. Suriin ang iyong mga patch</string>
|
||||
<string name="tab_apps">Mga App</string>
|
||||
<string name="tab_patches">Mga Patch</string>
|
||||
<string name="delete">Burahin</string>
|
||||
<string name="refresh">I-refresh</string>
|
||||
<string name="continue_anyways">Magpatuloy pa rin</string>
|
||||
<string name="download_another_version">Mag-download ng ibang bersyon</string>
|
||||
<string name="download_app">Mag-download ng app</string>
|
||||
<string name="download_apk">Mag-download ng APK file</string>
|
||||
<string name="patches_download_fail">Nabigong mag-download ng mga patch: %s</string>
|
||||
<string name="patches_replace_fail">Nabigong mag-import ng mga patch: %s</string>
|
||||
<string name="no_patched_apps_found">Walang nakitang na-patch na apps</string>
|
||||
<string name="tap_on_patches">I-tap ang mga patch upang makakuha ng higit pang impormasyon tungkol sa mga ito</string>
|
||||
<string name="patches_selected">%s napili</string>
|
||||
<string name="incompatible_patches">Hindi tugmang mga patch</string>
|
||||
<string name="universal_patches">Mga Universal patch</string>
|
||||
<string name="patch_selection_reset_toast">Ang pagpili ng patch at mga opsyon ay na-reset sa inirerekomendang default</string>
|
||||
<string name="patch_options_reset_toast">Na-reset ang mga opsyon ng patch</string>
|
||||
<string name="non_suggested_version_warning_title">Bersyon na hindi iminungkahi</string>
|
||||
<string name="non_suggested_version_warning_description">"Ang bersyon ng app na napili mo ay hindi tumutugma sa iminungkahing bersyon.\nPaki-gamit ang iminungkahing bersyon: %s\n\nUpang magpatuloy pa rin, i-disable ang \"Require suggested app version\" sa advanced settings."</string>
|
||||
<string name="selection_warning_title">Itigil ang paggamit ng mga default?</string>
|
||||
<string name="selection_warning_description">"Inirerekomenda na gamitin ang default na pagpili ng patch at mga opsyon. Ang pagbabago sa mga ito ay maaaring magdulot ng hindi inaasahang isyu.\n\nKailangan mong i-on ang \"Allow changing patch selection and options\" sa advanced settings bago i-toggle ang mga patch."</string>
|
||||
<string name="universal_patch_warning_description">"Ang mga Universal patch ay may mas pangkalahatang gamit at hindi gumagana nang kasing-maaasahan gaya ng mga patch na target ang partikular na apps. Maaari kang makaranas ng mga isyu habang ginagamit ang mga ito.\n\nKailangan mong i-on ang \"Allow using universal patches\" sa advanced settings bago gamitin ang mga universal patch."</string>
|
||||
<string name="this_version">Ang bersyong ito</string>
|
||||
<string name="universal">Anumang app</string>
|
||||
<string name="search_patches">Maghanap ng mga patch</string>
|
||||
<string name="app_version_not_compatible">"Hindi tugma ang patch na ito sa napiling bersyon ng app (%1$s)\n\nTugma lamang ito sa sumusunod na bersyon/mga bersyon: %2$s"</string>
|
||||
<string name="continue_with_version">Magpatuloy sa bersyong ito?</string>
|
||||
<string name="version_not_compatible">Hindi lahat ng patch ay tugma sa bersyong ito (%s). Gusto mo bang magpatuloy pa rin?</string>
|
||||
<string name="download_application">Mag-download ng application?</string>
|
||||
<string name="app_not_installed">Hindi naka-install ang app na napili mo. Gusto mo bang i-download ito?</string>
|
||||
<string name="failed_to_load_apk">Nabigong i-load ang APK</string>
|
||||
<string name="loading">Naglo-load…</string>
|
||||
<string name="not_installed">Hindi naka-install</string>
|
||||
<string name="installed">Naka-install</string>
|
||||
<string name="app_info">Impormasyon ng app</string>
|
||||
<string name="uninstall">I-uninstall</string>
|
||||
<string name="unpatch">Tanggalin ang patch</string>
|
||||
<string name="repatch">Muling i-patch</string>
|
||||
<string name="install_type">Uri ng pag-install</string>
|
||||
<string name="package_name">Pangalan ng package</string>
|
||||
<string name="original_package_name">Orihinal na pangalan ng package</string>
|
||||
<string name="applied_patches">Mga inilapat na patch</string>
|
||||
<string name="view_applied_patches">Tingnan ang mga inilapat na patch</string>
|
||||
<string name="default_install">Default</string>
|
||||
<string name="mount_install">I-mount</string>
|
||||
<string name="mounted">Naka-mount</string>
|
||||
<string name="not_mounted">Hindi naka-mount</string>
|
||||
<string name="mount">I-mount</string>
|
||||
<string name="unmount">I-unmount</string>
|
||||
<string name="failed_to_mount">Nabigo ang pag-mount: %s</string>
|
||||
<string name="failed_to_unmount">Nabigo ang pag-unmount: %s</string>
|
||||
<string name="unpatch_app">I-unpatch ang app?</string>
|
||||
<string name="unpatch_description">Sigurado ka bang gusto mong i-unpatch ang app na ito?</string>
|
||||
<string name="downloader_invalid_version">Hindi nakuha ng downloader ang tamang bersyon</string>
|
||||
<string name="downloader_app_not_found">Hindi nahanap ng downloader ang app</string>
|
||||
<string name="downloader_error">Error sa downloader: %s</string>
|
||||
<string name="downloader_no_plugins_installed">Walang downloader na naka-install.</string>
|
||||
<string name="downloader_no_plugins_available">May mga downloader na naka-install ngunit walang pinagkakatiwalaan. Suriin ang iyong mga setting.</string>
|
||||
<string name="already_patched">Na-patch na</string>
|
||||
<string name="patch_selector_sheet_filter_title">Filter</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">Pagiging tugma</string>
|
||||
<string name="string_option_menu_description">Higit pang opsyon</string>
|
||||
<string name="option_preset_custom_value">Custom na halaga</string>
|
||||
<string name="path_selector">Piliin mula sa storage</string>
|
||||
<string name="path_selector_parent_dir">Nakaraang direktoryo</string>
|
||||
<string name="path_selector_dirs">Mga direktoryo</string>
|
||||
<string name="path_selector_files">Mga file</string>
|
||||
<string name="show_password_field">Ipakita ang password</string>
|
||||
<string name="hide_password_field">Itago ang password</string>
|
||||
<string name="installer">Installer</string>
|
||||
<string name="install_app">I-install</string>
|
||||
<string name="install_app_success">Na-install ang app</string>
|
||||
<string name="install_app_fail">Nabigo ang pag-install ng app: %s</string>
|
||||
<string name="reinstall_app_fail">Nabigo ang pag-reinstall ng app: %s</string>
|
||||
<string name="uninstall_app_fail">Nabigo ang pag-uninstall ng app: %s</string>
|
||||
<string name="open_app">Buksan</string>
|
||||
<string name="save_apk">I-save ang APK</string>
|
||||
<string name="save_apk_success">Na-save ang APK</string>
|
||||
<string name="sign_fail">Nabigo ang pag-sign ng APK: %s</string>
|
||||
<string name="save_logs">I-save ang mga log</string>
|
||||
<string name="plugin_activity_dialog_body">Kinakailangan ang interaksyon ng user upang magpatuloy sa plugin na ito.</string>
|
||||
<string name="select_install_type">Piliin ang uri ng pag-install</string>
|
||||
<string name="patcher_step_group_preparing">Inihahanda</string>
|
||||
<string name="patcher_step_load_patches">I-load ang mga patch</string>
|
||||
<string name="patcher_step_unpack">Basahin ang APK file</string>
|
||||
<string name="patcher_step_group_patching">Nagpa-patch</string>
|
||||
<string name="patcher_step_group_saving">Nagse-save</string>
|
||||
<string name="patcher_step_write_patched">Isulat ang na-patch na APK file</string>
|
||||
<string name="patcher_step_sign_apk">Lagdaan ang na-patch na APK file</string>
|
||||
<string name="patcher_notification_title">Nagpapatuloy ang pag-patch…</string>
|
||||
<string name="patcher_notification_text">I-tap upang bumalik sa patcher</string>
|
||||
<string name="patcher_stop_confirm_title">Ihinto ang patcher</string>
|
||||
<string name="patcher_stop_confirm_description">Sigurado ka bang gusto mong ihinto ang proseso ng pag-patch?</string>
|
||||
<string name="patcher_install_in_progress">Nagpapatuloy ang pag-install. Mangyaring maghintay</string>
|
||||
<string name="execute_patches">Isagawa ang mga patch</string>
|
||||
<string name="executing_patch">Isagawa ang %s</string>
|
||||
<string name="failed_to_execute_patch">Nabigo ang pagsasagawa ng %s</string>
|
||||
<string name="step_completed">nakumpleto</string>
|
||||
<string name="step_failed">nabigo</string>
|
||||
<string name="step_running">tumatakbo</string>
|
||||
<string name="step_waiting">naghihintay</string>
|
||||
<string name="expand_content">palawakin</string>
|
||||
<string name="collapse_content">tiklupin</string>
|
||||
<string name="drag_handle">muling ayusin</string>
|
||||
<string name="more">Higit pa</string>
|
||||
<string name="less">Mas kaunti</string>
|
||||
<string name="continue_">Magpatuloy</string>
|
||||
<string name="dismiss">Balewalain</string>
|
||||
<string name="permanent_dismiss">Huwag ipakita ito muli</string>
|
||||
<string name="donate">Mag-donate</string>
|
||||
<string name="website">Website</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="contact">Makipag-ugnayan</string>
|
||||
<string name="version">Bersyon</string>
|
||||
<string name="submit_feedback">Magsumite ng isyu o feedback</string>
|
||||
<string name="submit_feedback_description">Tulungan kaming pagbutihin ang aplikasyong ito</string>
|
||||
<string name="developer_options">Mga opsyon ng developer</string>
|
||||
<string name="developer_options_description">Mga opsyon para sa pag-debug ng mga isyu</string>
|
||||
<string name="patches_update_success">Matagumpay ang update</string>
|
||||
<string name="patches_update_unavailable">Walang available na update</string>
|
||||
<string name="view_patches">Tingnan ang mga patch</string>
|
||||
<string name="patches_view_any_version">Anumang bersyon</string>
|
||||
<string name="patches_view_any_package">Anumang package</string>
|
||||
<string name="patches_delete_single_dialog_description">Sigurado ka bang gusto mong tanggalin ang \"%s\"?</string>
|
||||
<string name="patches_delete_multiple_dialog_description">Sigurado ka bang gusto mong tanggalin ang mga napiling patch?</string>
|
||||
<string name="about_revanced_manager">Tungkol sa ReVanced Manager</string>
|
||||
<string name="revanced_manager_description">Ang ReVanced Manager ay isang Android application na gumagamit ng ReVanced Patcher upang i-patch ang mga Android app. Pinapayagan ka nitong mag-download at mag-patch ng mga app gamit ang custom na patch, at pamahalaan ang proseso ng pag-patch.</string>
|
||||
<string name="developer_options_taps">%d na taps ang natitira</string>
|
||||
<string name="developer_options_enabled">Pinagana ang mga opsyon ng developer</string>
|
||||
<string name="developer_options_already_enabled">Ang mga opsyon ng developer ay pinagana na</string>
|
||||
<string name="update_available">May available na update</string>
|
||||
<string name="current_version">Kasalukuyang bersyon: %s</string>
|
||||
<string name="new_version">Bagong bersyon: %s</string>
|
||||
<string name="ready_to_install_update">Handa nang i-install ang update</string>
|
||||
<string name="update_completed">Na-install ang update</string>
|
||||
<string name="install_update_manager_failed">Nabigo ang pag-install ng update</string>
|
||||
<string name="manual_update_check">Suriin ang mga update</string>
|
||||
<string name="manual_update_check_description">Manu-manong suriin ang mga update</string>
|
||||
<string name="update_checking_manager">Suriin ang mga update sa paglunsad</string>
|
||||
<string name="update_checking_manager_description">Suriin ang mga bagong bersyon ng ReVanced Manager kapag nagsimula ang aplikasyon</string>
|
||||
<string name="manager_prereleases">Gumamit ng mga pre-release</string>
|
||||
<string name="manager_prereleases_description">Gumamit ng mga pre-release na bersyon ng ReVanced Manager</string>
|
||||
<string name="changelog">Tingnan ang mga changelog</string>
|
||||
<string name="changelog_loading">Naglo-load ng changelog</string>
|
||||
<string name="changelog_download_fail">Nabigo ang pag-download ng changelog: %s</string>
|
||||
<string name="changelog_description">Tingnan ang pinakabagong mga pagbabago sa update na ito</string>
|
||||
<string name="battery_optimization_notification">Dapat i-off ang mga optimisasyon ng baterya upang ang ReVanced Manager ay gumana nang tama sa background. Mag-click dito upang i-off ang mga optimisasyon.</string>
|
||||
<string name="installing_manager_update">Nag-i-install ng update…</string>
|
||||
<string name="downloading_manager_update">Nagda-download ng update…</string>
|
||||
<string name="download_manager_failed">Nabigo ang pag-download ng update: %s</string>
|
||||
<string name="cancel">Kanselahin</string>
|
||||
<string name="save">I-save</string>
|
||||
<string name="save_with_count">I-save (%1$s)</string>
|
||||
<string name="update">Update</string>
|
||||
<string name="empty">Walang laman</string>
|
||||
<string name="installing_message">"I-tap ang <b>Update</b> kapag ipinapahiwatig.
|
||||
Ang ReVanced Manager ay magsasara kapag nag-a-update."</string>
|
||||
<string name="no_changelogs_found">Walang nakitang changelogs</string>
|
||||
<string name="just_now">Ngayon lang</string>
|
||||
<string name="minutes_ago">%sm nakalipas</string>
|
||||
<string name="hours_ago">%sh nakalipas</string>
|
||||
<string name="days_ago">%sd nakalipas</string>
|
||||
<string name="invalid_date">Di-wastong petsa</string>
|
||||
<string name="disable_battery_optimization">I-disable ang optimisasyon ng baterya</string>
|
||||
<string name="input_dialog_value_invalid">Di-wastong halaga</string>
|
||||
<string name="option_required">Kinakailangan ang opsyon na ito</string>
|
||||
<string name="required_options_screen">Kinakailangang mga opsyon</string>
|
||||
<string name="failed_to_check_updates">Nabigo ang pagsuri para sa mga update: %s</string>
|
||||
<string name="no_update_available">Walang available na update</string>
|
||||
<string name="update_check">Sinusuri ang mga update…</string>
|
||||
<string name="dismiss_temporary">Hindi ngayon</string>
|
||||
<string name="update_available_dialog_description">May bagong bersyon ng ReVanced Manager (%s) na available.</string>
|
||||
<string name="failed_to_download_update">Nabigo ang pag-download ng update: %s</string>
|
||||
<string name="download">I-download</string>
|
||||
<string name="download_confirmation_metered">"Kasalukuyan kang gumagamit ng metered na koneksyon, at maaaring magkaroon ng singil sa data mula sa iyong service provider.
|
||||
|
||||
Gusto mo pa ring magpatuloy?"</string>
|
||||
<string name="download_update_confirmation">I-download ang update?</string>
|
||||
<string name="no_contributors_found">Walang nakitang kontribyutor</string>
|
||||
<string name="select">Piliin</string>
|
||||
<string name="select_deselect_all">Piliin o i-deselect lahat</string>
|
||||
<string name="select_patches_type_dialog_description">Magdagdag ng mga bagong patch mula sa URL o lokal na file</string>
|
||||
<string name="local_patches_description">Magdagdag ng mga patch mula sa lokal na storage.</string>
|
||||
<string name="remote_patches_description">Magdagdag ng mga patch mula sa URL. Maaaring awtomatikong mag-update ang mga patch.</string>
|
||||
<string name="recommended">Inirerekomenda</string>
|
||||
<string name="installation_failed_dialog_title">Nabigo ang pag-install</string>
|
||||
<string name="installation_cancelled_dialog_title">Nakansela ang pag-install</string>
|
||||
<string name="installation_blocked_dialog_title">Na-block ang pag-install</string>
|
||||
<string name="installation_conflict_dialog_title">Salungatan sa pag-install</string>
|
||||
<string name="installation_incompatible_dialog_title">Hindi tugma ang pag-install</string>
|
||||
<string name="installation_invalid_dialog_title">Hindi balido ang pag-install</string>
|
||||
<string name="installation_storage_issue_dialog_title">Hindi sapat ang storage</string>
|
||||
<string name="installation_timeout_dialog_title">Nag-timeout ang pag-install</string>
|
||||
<string name="installation_failed_description">Nabigo ang pag-install dahil sa hindi alam na dahilan. Subukan ulit?</string>
|
||||
<string name="installation_aborted_description">Manu-manong nakansela ang pag-install. Subukan ulit?</string>
|
||||
<string name="installation_blocked_description">Na-block ang pag-install. Suriin ang mga setting ng seguridad ng iyong device at subukan ulit.</string>
|
||||
<string name="installation_conflict_description">Napigilan ang pag-install ng isang kasalukuyang pag-install ng app. I-uninstall ang naka-install na app at subukan ulit?</string>
|
||||
<string name="installation_incompatible_description">Hindi tugma ang app sa device na ito. Gumamit ng APK na tugma sa device na ito at subukan ulit.</string>
|
||||
<string name="installation_invalid_description">Hindi balido ang app. I-uninstall ang app at subukan ulit?</string>
|
||||
<string name="installation_storage_issue_description">Hindi ma-install ang app dahil sa hindi sapat na storage. Magbakante ng espasyo at subukan ulit.</string>
|
||||
<string name="installation_timeout_description">Masyadong matagal ang pag-install. Subukan ulit?</string>
|
||||
<string name="reinstall">I-reinstall</string>
|
||||
<string name="show">Ipakita</string>
|
||||
<string name="debugging">Pagde-debug</string>
|
||||
<string name="about_device">Tungkol sa device</string>
|
||||
<string name="enter_url">Ilagay ang URL</string>
|
||||
<string name="next">Susunod</string>
|
||||
<string name="auto_update">Awtomatikong update</string>
|
||||
<string name="add_patches">Magdagdag ng mga patch</string>
|
||||
<string name="auto_update_description">Awtomatikong mag-update kapag may bagong bersyon na available</string>
|
||||
<string name="patches_prereleases">Gumamit ng mga pre-release</string>
|
||||
<string name="patches_prereleases_description">Gumamit ng mga pre-release na bersyon ng %s</string>
|
||||
<string name="patches_url">URL ng mga patch</string>
|
||||
<string name="incompatible_patches_dialog">"Ang mga patch na ito ay hindi tugma sa napiling bersyon ng app (%1$s).
|
||||
|
||||
Mag-click sa mga patch upang makita ang higit pang detalye."</string>
|
||||
<string name="incompatible_patch">Hindi tugmang patch</string>
|
||||
<string name="any_version">Anuman</string>
|
||||
<string name="never_show_again">Huwag nang ipakita muli</string>
|
||||
<string name="show_manager_update_dialog_on_launch">Ipakita ang mensahe ng update sa paglunsad</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">Magpakita ng popup na notipikasyon tuwing may bagong update na available sa paglunsad</string>
|
||||
<string name="failed_to_import_keystore">Nabigo ang pag-import ng keystore</string>
|
||||
<string name="export">I-export</string>
|
||||
<string name="confirm">Kumpirmahin</string>
|
||||
</resources>
|
||||
@@ -1,470 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Strings with new lines must be raw strings, where the string is wrapped in double quotes and new lines are regular line breaks and not \n
|
||||
Raw strings still require escaping embedded double quotes, but single quote characters can be escaped or used as-is.
|
||||
|
||||
Raw strings are required because Crowdin AI translations regularly gets confused and
|
||||
replace \n with an encoded new line character.
|
||||
|
||||
Bad:
|
||||
<string name="summary_key">First \'item\' text\nSecond \"item\" text</string>
|
||||
Good:
|
||||
<string name="summary_key">"First 'item' text
|
||||
Second \"item\" text"</string>
|
||||
|
||||
-->
|
||||
<resources>
|
||||
<string name="app_name">ReVanced Manager</string>
|
||||
<string name="patcher">Test de Patcher</string>
|
||||
<string name="patches">Patchs</string>
|
||||
<string name="cli">CLI</string>
|
||||
<string name="manager">Manager</string>
|
||||
<string name="plugin_host_permission_label">Hôte de plugins ReVanced Manager</string>
|
||||
<string name="plugin_host_permission_description">Utilisé pour contrôler l\'accès aux plugins de ReVanced Manager. Seul ReVanced Manager en dispose.</string>
|
||||
<string name="toast_copied_to_clipboard">Copié !</string>
|
||||
<string name="copy_to_clipboard">Copier dans le presse-papiers</string>
|
||||
<string name="dashboard">Tableau de bord</string>
|
||||
<string name="settings">Paramètres</string>
|
||||
<string name="select_app">Sélectionnez une application</string>
|
||||
<string name="patches_count_selected">%1$d/%2$d sélectionnés</string>
|
||||
<string name="new_downloader_plugins_notification">De nouveaux plugins de téléchargement sont disponibles. Appuyez ici pour les configurer.</string>
|
||||
<string name="unsupported_architecture_warning">Le processus de patching n\'est pas pris en charge sur l\'architecture de cet appareil et échouera très probablement.</string>
|
||||
<string name="import_">Importer</string>
|
||||
<string name="import_patches">Importer des patchs</string>
|
||||
<string name="file_field_set">Sélectionné</string>
|
||||
<string name="file_field_not_set">Non sélectionné</string>
|
||||
<string name="field_not_set">Non défini</string>
|
||||
<string name="patches_missing">Manquants</string>
|
||||
<string name="patches_error">Erreur</string>
|
||||
<string name="patches_error_description">Les patchs n\'ont pas pu être chargés, appuyez pour voir l\'erreur</string>
|
||||
<string name="patches_not_downloaded">Les patchs n\'ont pas été téléchargés, appuyez ici pour les télécharger</string>
|
||||
<string name="patches_name_default">Patchs</string>
|
||||
<string name="patches_name_fallback">Sans nom</string>
|
||||
<string name="android_11_bug_dialog_title">Bug Android 11</string>
|
||||
<string name="android_11_bug_dialog_description">L\'autorisation d\'installation d\'applications doit être accordée à l\'avance pour contourner un bug système dans Android 11 qui affecterait négativement l\'expérience utilisateur.</string>
|
||||
<string name="no_network_toast">Aucune connexion Internet disponible</string>
|
||||
<string name="selected_app_meta_any_version">Toute version disponible</string>
|
||||
<string name="app_source_dialog_title">Sélectionner la source</string>
|
||||
<string name="app_source_dialog_option_auto">Automatique</string>
|
||||
<string name="app_source_dialog_option_auto_description">Utilisez tous les plugins de téléchargement disponibles pour télécharger l\'application</string>
|
||||
<string name="app_source_dialog_option_auto_unavailable">Aucun plugin disponible</string>
|
||||
<string name="app_source_dialog_option_installed_no_root">Les applications montées ne peuvent pas être patchées à nouveau sans accès root</string>
|
||||
<string name="app_source_dialog_option_installed_version_not_suggested">La version %s ne correspond pas à la version suggérée</string>
|
||||
<string name="patch_item_description">Commencez à patcher l\'application</string>
|
||||
<string name="patch_selector_item">Sélectionner des patchs</string>
|
||||
<string name="patch_selector_item_description">%d patchs sélectionnés</string>
|
||||
<string name="no_patches_selected">Aucun patch sélectionné</string>
|
||||
<string name="network_unavailable_warning">Votre appareil n\'est pas connecté à Internet. Le téléchargement va échouer.</string>
|
||||
<string name="network_metered_warning">Vous êtes actuellement sur une connexion facturée à l\'usage. Votre fournisseur de services pourrait vous facturer des frais d\'utilisation des données.</string>
|
||||
<string name="apk_source_selector_item">Sélectionner la source de l\'APK</string>
|
||||
<string name="apk_source_auto">Utilisation de tous les plugins de téléchargement d\'APK</string>
|
||||
<string name="apk_source_downloader">Utilisation de %s</string>
|
||||
<string name="apk_source_installed">Utilisation de l\'APK installé</string>
|
||||
<string name="apk_source_local">Utilisation d\'un fichier APK local</string>
|
||||
<string name="legacy_import_failed">Impossible d\'importer les paramètres hérités</string>
|
||||
<string name="auto_updates_dialog_title">Configurez les mises à jour</string>
|
||||
<string name="auto_updates_dialog_description">Voulez-vous que ReVanced Manager recherche périodiquement des mises à jour pour les composants suivants ?</string>
|
||||
<string name="auto_updates_dialog_manager">ReVanced Manager</string>
|
||||
<string name="auto_updates_dialog_patches">ReVanced Patches</string>
|
||||
<string name="auto_updates_dialog_note">Ces paramètres peuvent être modifiés ultérieurement.</string>
|
||||
<string name="general">Général</string>
|
||||
<string name="general_description">Langue, thème, couleur dynamique</string>
|
||||
<string name="updates">Mises à jour</string>
|
||||
<string name="updates_description">Recherchez des mises à jour et consultez les journaux de modifications</string>
|
||||
<string name="downloads">Téléchargements</string>
|
||||
<string name="downloads_description">Plugins de téléchargement et applications téléchargées</string>
|
||||
<string name="import_export">Importer et exporter</string>
|
||||
<string name="import_export_description">Magasin de clés, options et sélection des patchs</string>
|
||||
<string name="advanced">Avancé</string>
|
||||
<string name="advanced_description">URL de l\'API, limites de mémoire, débogage</string>
|
||||
<string name="about">À propos</string>
|
||||
<string name="opensource_licenses">Licences Open Source</string>
|
||||
<string name="opensource_licenses_description">Consultez la liste des bibliothèques utilisées pour créer cette application</string>
|
||||
<string name="contributors">Contributeurs</string>
|
||||
<string name="contributors_description">Consultez la liste des contributeurs à ReVanced</string>
|
||||
<string name="dynamic_color">Couleur dynamique</string>
|
||||
<string name="dynamic_color_description">Adaptez les couleurs au fond d\'écran</string>
|
||||
<string name="pure_black_theme">Thème noir pur</string>
|
||||
<string name="pure_black_theme_description">Utilisez des arrière-plans noir pur en thème sombre</string>
|
||||
<string name="theme">Thème</string>
|
||||
<string name="theme_description">Choisissez entre le thème clair ou sombre</string>
|
||||
<string name="language">Langue</string>
|
||||
<string name="language_description">Choisissez la langue d\'affichage de l\'application</string>
|
||||
<string name="language_system_default">Langue du système</string>
|
||||
<string name="safeguards">Mesures de protection</string>
|
||||
<string name="patch_compat_check">Désactiver la vérification de compatibilité des versions</string>
|
||||
<string name="patch_compat_check_description">Ne pas restreindre les patchs aux versions d\'application compatibles</string>
|
||||
<string name="patch_compat_check_confirmation">"Sélectionner des patchs incompatibles peut empêcher l'application de fonctionner correctement.
|
||||
|
||||
Voulez-vous quand même continuer ?"</string>
|
||||
<string name="suggested_version_safeguard">Exiger la version d\'application suggérée</string>
|
||||
<string name="suggested_version_safeguard_description">Forcez la sélection de la version suggérée de l\'application</string>
|
||||
<string name="suggested_version_safeguard_confirmation">"Sélectionner une application dont la version n'est pas celle suggérée peut entraîner des problèmes inattendus.
|
||||
|
||||
Voulez-vous quand même continuer ?"</string>
|
||||
<string name="patch_selection_safeguard">Autoriser la modification de la sélection et des options de patchs</string>
|
||||
<string name="patch_selection_safeguard_description">Ne pas empêcher la sélection ou la désélection des patchs et la personnalisation des options</string>
|
||||
<string name="patch_selection_safeguard_confirmation">"Modifier la sélection des patchs peut entraîner des problèmes inattendus.
|
||||
|
||||
Activer quand même ?"</string>
|
||||
<string name="universal_patches_safeguard">Autoriser l\'utilisation de patchs universels</string>
|
||||
<string name="universal_patches_safeguard_description">Ne pas empêcher l\'utilisation de patchs universels</string>
|
||||
<string name="universal_patches_safeguard_confirmation">"Les patchs universels ne sont pas aussi bien testés que ceux qui ciblent des applications spécifiques.
|
||||
|
||||
Activer quand même ?"</string>
|
||||
<string name="import_keystore">Importer un magasin de clés</string>
|
||||
<string name="import_keystore_description">Importez un magasin de clés personnalisé</string>
|
||||
<string name="import_keystore_dialog_title">Saisissez les identifiants du magasin de clés</string>
|
||||
<string name="import_keystore_dialog_description">Vous devrez saisir les identifiants du magasin de clés pour l\'importer.</string>
|
||||
<string name="import_keystore_dialog_alias_field">Nom d\'utilisateur (alias)</string>
|
||||
<string name="import_keystore_dialog_password_field">Mot de passe</string>
|
||||
<string name="import_keystore_dialog_button">Importer</string>
|
||||
<string name="import_keystore_wrong_credentials">Identifiants du magasin de clés incorrects</string>
|
||||
<string name="import_keystore_success">Magasin de clés importé</string>
|
||||
<string name="export_keystore">Exporter le magasin de clés</string>
|
||||
<string name="export_keystore_description">Exportez le magasin de clés actuel</string>
|
||||
<string name="export_keystore_unavailable">Aucun magasin de clés à exporter</string>
|
||||
<string name="export_keystore_success">Magasin de clés exporté</string>
|
||||
<string name="regenerate_keystore">Regénérer le magasin de clés</string>
|
||||
<string name="regenerate_keystore_description">Générez un nouveau magasin de clés</string>
|
||||
<string name="regenerate_keystore_dialog_description">"Vous êtes sur le point de regénérer votre magasin de clés utilisé par Manager pendant l'application des patchs.
|
||||
|
||||
Vous ne pourrez pas mettre à jour les applications précédemment installées à partir de cette source."</string>
|
||||
<string name="regenerate_keystore_success">Le magasin de clés a été remplacé avec succès</string>
|
||||
<string name="import_patch_selection">Importer la sélection de patchs</string>
|
||||
<string name="import_patch_selection_description">Importez la sélection de patchs à partir d\'un fichier JSON</string>
|
||||
<string name="import_patch_selection_fail">Impossible d\'importer la sélection de patchs : %s</string>
|
||||
<string name="import_patch_selection_success">Sélection de patchs importée</string>
|
||||
<string name="export_patch_selection">Exporter la sélection de patchs</string>
|
||||
<string name="export_patch_selection_description">Exportez la sélection de patchs vers un fichier JSON</string>
|
||||
<string name="export_patch_selection_fail">Impossible d\'exporter la sélection de patchs : %s</string>
|
||||
<string name="export_patch_selection_success">Sélection de patchs exportée</string>
|
||||
<string name="reset_patch_selection">Réinitialiser la sélection de patchs</string>
|
||||
<string name="reset_patch_selection_description">Réinitialiser la sélection de patchs stockée</string>
|
||||
<string name="reset_patch_options">Réinitialiser les options de patchs</string>
|
||||
<string name="reset_patch_options_description">Réinitialiser les options de patchs stockées</string>
|
||||
<string name="reset_patch_selection_success">La sélection de patchs a été réinitialisée</string>
|
||||
<string name="patch_selection_reset_all">Réinitialiser la sélection de patchs globalement</string>
|
||||
<string name="patch_selection_reset_all_dialog_description">Vous êtes sur le point de réinitialiser toutes les sélections de patchs. Vous devrez sélectionner manuellement chaque patch à nouveau.</string>
|
||||
<string name="patch_selection_reset_all_description">Réinitialise toutes les sélections de patchs</string>
|
||||
<string name="patch_selection_reset_package">Réinitialiser la sélection de patchs pour l\'application</string>
|
||||
<string name="patch_selection_reset_package_dialog_description">Vous êtes sur le point de réinitialiser la sélection de patchs pour l\'application \"%s\". Vous devrez sélectionner manuellement chaque patch à nouveau.</string>
|
||||
<string name="patch_selection_reset_package_description">Réinitialise la sélection de patchs pour une seule application</string>
|
||||
<string name="patch_selection_reset_patches">Réinitialiser la sélection de patchs (simple)</string>
|
||||
<string name="patch_selection_reset_patches_dialog_description">Vous êtes sur le point de réinitialiser la sélection de patchs pour \"%s\". Vous devrez sélectionner manuellement chaque patch à nouveau.</string>
|
||||
<string name="patch_selection_reset_patches_description">Réinitialise la sélection de patchs pour une collection spécifique de patchs</string>
|
||||
<string name="patch_options_reset_package">Réinitialiser les options de patchs pour une application</string>
|
||||
<string name="patch_options_reset_package_dialog_description">Vous êtes sur le point de réinitialiser les options de patchs pour l\'application \"%s\". Vous devrez réappliquer chaque option à nouveau.</string>
|
||||
<string name="patch_options_reset_package_description">Réinitialise les options de patchs pour une seule application</string>
|
||||
<string name="patch_options_reset_patches">Réinitialiser les options de patchs (unique)</string>
|
||||
<string name="patch_options_reset_patches_dialog_description">Vous êtes sur le point de réinitialiser les options de patchs pour \"%s\". Vous devrez réappliquer chaque option à nouveau.</string>
|
||||
<string name="patch_options_reset_patches_description">Réinitialise les options de patchs pour une collection spécifique de patchs</string>
|
||||
<string name="patch_options_reset_all">Réinitialiser les options de patchs globalement</string>
|
||||
<string name="patch_options_reset_all_dialog_description">Vous êtes sur le point de réinitialiser toutes les options de patchs. Vous devrez réappliquer chaque option à nouveau.</string>
|
||||
<string name="patch_options_reset_all_description">Réinitialise toutes les options de patchs</string>
|
||||
<string name="downloader_plugins">Plugins</string>
|
||||
<string name="downloader_plugin_state_trusted">Approuvé</string>
|
||||
<string name="downloader_plugin_state_failed">Échec du chargement. Appuyez pour plus de détails</string>
|
||||
<string name="downloader_plugin_state_untrusted">Non approuvé</string>
|
||||
<string name="downloader_plugin_trust_dialog_title">Approuver le plugin ?</string>
|
||||
<string name="downloader_plugin_revoke_trust_dialog_title">Révoquer l\'approbation ?</string>
|
||||
<string name="downloader_plugin_trust_dialog_body">En continuant, vous autorisez ce plugin à s\'exécuter sur votre système.\n\nActivez ce plugin uniquement si vous lui faites confiance. Les plugins peuvent exécuter du code arbitraire et pourraient compromettre votre appareil.</string>
|
||||
<string name="downloader_plugin_trust_dialog_signature">Signature :\n\n%s</string>
|
||||
<string name="downloader_plugin_trust_dialog_plugin">Plugin :\n%s</string>
|
||||
<string name="downloader_plugin_delete_apps_title">Supprimer les applications sélectionnées</string>
|
||||
<string name="downloader_plugin_delete_apps_description">Voulez-vous vraiment supprimer les applications sélectionnées ?</string>
|
||||
<string name="downloader_settings_no_apps">Aucune application téléchargée trouvée.</string>
|
||||
<string name="search_apps">Rechercher des applications…</string>
|
||||
<string name="loading_body">Chargement…</string>
|
||||
<string name="downloading_patches">Téléchargement des patchs…</string>
|
||||
<string name="options">Options</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="yes">Oui</string>
|
||||
<string name="no">Non</string>
|
||||
<string name="edit">Modifier</string>
|
||||
<string name="dialog_input_placeholder">Valeur</string>
|
||||
<string name="reset">Réinitialiser</string>
|
||||
<string name="share">Partager</string>
|
||||
<string name="patch">Patcher</string>
|
||||
<string name="select_from_storage">Sélectionner depuis le stockage</string>
|
||||
<string name="select_from_storage_description">Sélectionnez un fichier APK de votre stockage à l\'aide du sélecteur de fichiers</string>
|
||||
<string name="suggested_version_info">Version suggérée : %s</string>
|
||||
<string name="type_anything">Saisissez quelque chose pour continuer</string>
|
||||
<string name="search">Rechercher des patchs…</string>
|
||||
<string name="apply">Appliquer</string>
|
||||
<string name="help">Aide</string>
|
||||
<string name="back">Retour</string>
|
||||
<string name="warning">Avertissement</string>
|
||||
<string name="add">Ajouter</string>
|
||||
<string name="close">Fermer</string>
|
||||
<string name="clear">Effacer</string>
|
||||
<string name="system">Système</string>
|
||||
<string name="light">Claire</string>
|
||||
<string name="dark">Sombre</string>
|
||||
<string name="appearance">Apparence</string>
|
||||
<string name="networking">Réseau</string>
|
||||
<string name="allow_metered_networks">Autoriser les réseaux facturés à l\'usage</string>
|
||||
<string name="allow_metered_networks_description">Permet les mises à jour automatiques sur les réseaux facturés à l\'usage.
|
||||
Il est possible que l\'application vous prévienne de l\'utilisation d\'un réseau facturé à l\'usage lors des opérations manuelles.</string>
|
||||
<string name="downloaded_apps">Applications téléchargées</string>
|
||||
<string name="process_runtime">Exécuter Patcher dans un autre processus (expérimental)</string>
|
||||
<string name="process_runtime_description">Plus rapide et permet à Patcher d\'utiliser plus de mémoire</string>
|
||||
<string name="process_runtime_memory_limit">Limite de mémoire du processus Patcher</string>
|
||||
<string name="process_runtime_memory_limit_description">La quantité maximale de mémoire que le processus Patcher peut utiliser (en mégaoctets)</string>
|
||||
<string name="debug_logs_export">Exporter les journaux de débogage</string>
|
||||
<string name="debug_logs_export_read_failed">Échec de la lecture des journaux (code de sortie %d)</string>
|
||||
<string name="debug_logs_export_failed">Échec de l\'exportation des journaux </string>
|
||||
<string name="debug_logs_export_success">Journaux exportés</string>
|
||||
<string name="api_url">URL de l\'API</string>
|
||||
<string name="api_url_description">L\'API utilisée pour télécharger les fichiers nécessaires</string>
|
||||
<string name="api_url_dialog_title">Modifier l\'URL de l\'API</string>
|
||||
<string name="api_url_dialog_description">Modifiez l\'URL de l\'API de ReVanced Manager. ReVanced Manager utilise l\'API pour télécharger les patchs et les mises à jour.</string>
|
||||
<string name="api_url_dialog_warning">ReVanced Manager se connecte à l\'API pour télécharger les patchs et les mises à jour. Assurez-vous de lui faire confiance.</string>
|
||||
<string name="api_url_dialog_save">Définir</string>
|
||||
<string name="api_url_dialog_reset">Réinitialiser l\'URL de l\'API</string>
|
||||
<string name="device">Appareil</string>
|
||||
<string name="device_android_version">Version d\'Android</string>
|
||||
<string name="device_model">Modèle</string>
|
||||
<string name="device_architectures">Architectures CPU</string>
|
||||
<string name="device_memory_limit">Limites de mémoire</string>
|
||||
<string name="device_memory_limit_format">%1$d Mo (normal) – %2$d Mo (grand)</string>
|
||||
<string name="patches_force_download">Forcer le téléchargement de tous les patchs</string>
|
||||
<string name="patches_reset">Réinitialiser les patchs</string>
|
||||
<string name="patching">Application des patchs</string>
|
||||
<string name="signing">Signature</string>
|
||||
<string name="storage">Stockage</string>
|
||||
<string name="no_patch_found">Les patchs sont introuvables, vérifiez vos patchs</string>
|
||||
<string name="tab_apps">Applis</string>
|
||||
<string name="tab_patches">Patchs</string>
|
||||
<string name="delete">Supprimer</string>
|
||||
<string name="refresh">Actualiser</string>
|
||||
<string name="continue_anyways">Continuer quand même</string>
|
||||
<string name="download_another_version">Télécharger une autre version</string>
|
||||
<string name="download_app">Télécharger l\'application</string>
|
||||
<string name="download_apk">Télécharger le fichier APK</string>
|
||||
<string name="patches_download_fail">Échec du téléchargement des patchs : %s</string>
|
||||
<string name="patches_replace_fail">Échec de l\'importation des patchs : %s</string>
|
||||
<string name="no_patched_apps_found">Aucune application patchée trouvée</string>
|
||||
<string name="tap_on_patches">Appuyez sur les patchs pour obtenir plus d\'informations à leur sujet</string>
|
||||
<string name="patches_selected">Sélectionné : %s</string>
|
||||
<string name="incompatible_patches">Patchs incompatibles</string>
|
||||
<string name="universal_patches">Patchs universels</string>
|
||||
<string name="patch_selection_reset_toast">La sélection et les options de patchs ont été réinitialisées aux valeurs par défaut recommandées</string>
|
||||
<string name="patch_options_reset_toast">Les options de patchs ont été réinitialisées</string>
|
||||
<string name="non_suggested_version_warning_title">Version non suggérée</string>
|
||||
<string name="non_suggested_version_warning_description">"La version de l'application que vous avez sélectionnée ne correspond pas à la version suggérée.
|
||||
Veuillez utiliser la version suggérée : %s
|
||||
|
||||
Pour continuer quand même, désactivez \"Exiger la version d'application suggérée\" dans les paramètres avancés."</string>
|
||||
<string name="selection_warning_title">Arrêter d\'utiliser les paramètres par défaut ?</string>
|
||||
<string name="selection_warning_description">"Il est recommandé d'utiliser la sélection et les options de patchs par défaut. Les modifier peut entraîner des problèmes inattendus.
|
||||
|
||||
Vous devez activer \"Autoriser la modification de la sélection et des options de patchs\" dans les paramètres avancés avant de pouvoir activer/désactiver les patchs."</string>
|
||||
<string name="universal_patch_warning_description">"Les patchs universels sont à un usage plus générique et ne sont pas aussi fiables que les patchs conçus pour des applications spécifiques. Vous pourriez rencontrer des problèmes en les utilisant.
|
||||
|
||||
Vous devez activer \"Autoriser l'utilisation des patchs universels\" dans les paramètres avancés avant de pouvoir utiliser les patchs universels."</string>
|
||||
<string name="this_version">Cette version</string>
|
||||
<string name="universal">N\'importe quelle application</string>
|
||||
<string name="search_patches">Rechercher des patchs</string>
|
||||
<string name="app_version_not_compatible">"Ce patch n'est pas compatible avec la version de l'application sélectionnée (%1$s)
|
||||
|
||||
Il n'est compatible qu'avec les versions suivantes : %2$s"</string>
|
||||
<string name="continue_with_version">Continuer avec cette version ?</string>
|
||||
<string name="version_not_compatible">Tous les patchs ne sont pas compatibles avec cette version (%s). Voulez-vous quand même continuer ?</string>
|
||||
<string name="download_application">Télécharger l\'application ?</string>
|
||||
<string name="app_not_installed">L\'application que vous avez sélectionnée n\'est pas installée. Voulez-vous la télécharger ?</string>
|
||||
<string name="failed_to_load_apk">Échec du chargement de l\'APK</string>
|
||||
<string name="loading">Chargement…</string>
|
||||
<string name="not_installed">Non installée</string>
|
||||
<string name="installed">Installée</string>
|
||||
<string name="app_info">Infos sur l\'appli</string>
|
||||
<string name="uninstall">Désinstaller</string>
|
||||
<string name="unpatch">Dépatcher</string>
|
||||
<string name="repatch">Repatcher</string>
|
||||
<string name="install_type">Type d\'installation</string>
|
||||
<string name="package_name">Nom du package</string>
|
||||
<string name="original_package_name">Nom de package d\'origine</string>
|
||||
<string name="applied_patches">Patchs appliqués</string>
|
||||
<string name="view_applied_patches">Voir les patchs appliqués</string>
|
||||
<string name="default_install">Par défaut</string>
|
||||
<string name="mount_install">Montage</string>
|
||||
<string name="mounted">Montée</string>
|
||||
<string name="not_mounted">Non montée</string>
|
||||
<string name="mount">Monter</string>
|
||||
<string name="unmount">Démonter</string>
|
||||
<string name="failed_to_mount">Échec du montage : %s</string>
|
||||
<string name="failed_to_unmount">Échec du démontage : %s</string>
|
||||
<string name="unpatch_app">Dé-patcher l\'application ?</string>
|
||||
<string name="unpatch_description">Voulez-vous vraiment dé-patcher cette application ?</string>
|
||||
<string name="downloader_invalid_version">Le plugin de téléchargement n\'a pas récupéré la bonne version</string>
|
||||
<string name="downloader_app_not_found">Le plugin de téléchargement n\'a pas trouvé l\'application</string>
|
||||
<string name="downloader_error">Erreur du plugin de téléchargement : %s</string>
|
||||
<string name="downloader_no_plugins_installed">Aucun plugin de téléchargement installé.</string>
|
||||
<string name="downloader_no_plugins_available">Des plugins de téléchargement sont installés mais aucun n\'est approuvé. Vérifiez vos paramètres.</string>
|
||||
<string name="already_patched">Déjà patchée</string>
|
||||
<string name="patch_selector_sheet_filter_title">Filtrer</string>
|
||||
<string name="patch_selector_sheet_filter_compat_title">Compatibilité</string>
|
||||
<string name="string_option_menu_description">Plus d\'options</string>
|
||||
<string name="option_preset_custom_value">Valeur personnalisée</string>
|
||||
<string name="path_selector">Sélectionner à partir du stockage</string>
|
||||
<string name="path_selector_parent_dir">Répertoire précédent</string>
|
||||
<string name="path_selector_dirs">Répertoires</string>
|
||||
<string name="path_selector_files">Fichiers</string>
|
||||
<string name="show_password_field">Afficher le mot de passe</string>
|
||||
<string name="hide_password_field">Masquer le mot de passe</string>
|
||||
<string name="installer">Programme d\'installation</string>
|
||||
<string name="install_app">Installer</string>
|
||||
<string name="install_app_success">Application installée</string>
|
||||
<string name="install_app_fail">Échec de l\'installation de l\'application : %s</string>
|
||||
<string name="reinstall_app_fail">Échec de la réinstallation de l\'application : %s</string>
|
||||
<string name="uninstall_app_fail">Échec de la désinstallation de l\'application : %s</string>
|
||||
<string name="open_app">Ouvrir</string>
|
||||
<string name="save_apk">Enregistrer l\'APK</string>
|
||||
<string name="save_apk_success">APK enregistré</string>
|
||||
<string name="sign_fail">Échec de la signature de l\'APK : %s</string>
|
||||
<string name="save_logs">Enregistrer les journaux</string>
|
||||
<string name="plugin_activity_dialog_body">Une interaction utilisateur est requise pour pouvoir poursuivre avec ce plugin.</string>
|
||||
<string name="select_install_type">Sélectionner le type d\'installation</string>
|
||||
<string name="patcher_step_group_preparing">Préparation</string>
|
||||
<string name="patcher_step_load_patches">Charger les patchs</string>
|
||||
<string name="patcher_step_unpack">Lire le fichier APK</string>
|
||||
<string name="patcher_step_group_patching">Application des patchs</string>
|
||||
<string name="patcher_step_group_saving">Sauvegarde</string>
|
||||
<string name="patcher_step_write_patched">Écrire le fichier APK patché</string>
|
||||
<string name="patcher_step_sign_apk">Signer le fichier APK patché</string>
|
||||
<string name="patcher_notification_title">Application des patchs en cours…</string>
|
||||
<string name="patcher_notification_text">Appuyez pour revenir au patcheur</string>
|
||||
<string name="patcher_stop_confirm_title">Arrêter le patcheur</string>
|
||||
<string name="patcher_stop_confirm_description">Voulez-vous vraiment interrompre le processus de patching ?</string>
|
||||
<string name="patcher_install_in_progress">L\'installation est en cours, veuillez patienter</string>
|
||||
<string name="execute_patches">Exécuter les patchs</string>
|
||||
<string name="executing_patch">Exécuter %s</string>
|
||||
<string name="failed_to_execute_patch">Échec de l\'exécution de %s</string>
|
||||
<string name="step_completed">terminé</string>
|
||||
<string name="step_failed">échec</string>
|
||||
<string name="step_running">en cours</string>
|
||||
<string name="step_waiting">en attente</string>
|
||||
<string name="expand_content">développer</string>
|
||||
<string name="collapse_content">réduire</string>
|
||||
<string name="drag_handle">réorganiser</string>
|
||||
<string name="more">Plus</string>
|
||||
<string name="less">Moins</string>
|
||||
<string name="continue_">Continuer</string>
|
||||
<string name="dismiss">Fermer</string>
|
||||
<string name="permanent_dismiss">Ne plus afficher</string>
|
||||
<string name="donate">Faire un don</string>
|
||||
<string name="website">Site Web</string>
|
||||
<string name="github">GitHub</string>
|
||||
<string name="contact">Contact</string>
|
||||
<string name="version">Version</string>
|
||||
<string name="submit_feedback">Envoyer un rapport de bug ou des commentaires</string>
|
||||
<string name="submit_feedback_description">Aidez-nous à améliorer cette application</string>
|
||||
<string name="developer_options">Options pour les développeurs</string>
|
||||
<string name="developer_options_description">Options pour le débogage des problèmes</string>
|
||||
<string name="patches_update_success">Mise à jour réussie</string>
|
||||
<string name="patches_update_unavailable">Aucune mise à jour disponible</string>
|
||||
<string name="view_patches">Consultez la liste des patchs</string>
|
||||
<string name="patches_view_any_version">Toute version</string>
|
||||
<string name="patches_view_any_package">Tout package</string>
|
||||
<string name="patches_delete_single_dialog_description">Voulez-vous vraiment supprimer \"%s\" ?</string>
|
||||
<string name="patches_delete_multiple_dialog_description">Voulez-vous vraiment supprimer les correctifs sélectionnés ?</string>
|
||||
<string name="about_revanced_manager">À propos de ReVanced Manager</string>
|
||||
<string name="revanced_manager_description">ReVanced Manager est une application Android utilisant ReVanced Patcher pour patcher des applications Android. Elle vous permet de télécharger et d\'appliquer des patchs personnalisés aux applications, et de gérer le processus d\'application des patchs.</string>
|
||||
<string name="developer_options_taps">%d appuis restants</string>
|
||||
<string name="developer_options_enabled">Options pour les développeurs activées</string>
|
||||
<string name="developer_options_already_enabled">Les options pour les développeurs sont déjà activées</string>
|
||||
<string name="update_available">Une mise à jour est disponible</string>
|
||||
<string name="current_version">Version actuelle : %s</string>
|
||||
<string name="new_version">Nouvelle version : %s</string>
|
||||
<string name="ready_to_install_update">Prêt à installer la mise à jour</string>
|
||||
<string name="update_completed">Mise à jour installée</string>
|
||||
<string name="install_update_manager_failed">Échec de l\'installation de la mise à jour</string>
|
||||
<string name="manual_update_check">Rechercher des mises à jour</string>
|
||||
<string name="manual_update_check_description">Recherchez manuellement des mises à jour</string>
|
||||
<string name="update_checking_manager">Rechercher des mises à jour au lancement</string>
|
||||
<string name="update_checking_manager_description">Rechercher des mises à jour de ReVanced Manager au démarrage de l\'application</string>
|
||||
<string name="manager_prereleases">Utiliser les préversions</string>
|
||||
<string name="manager_prereleases_description">Utilisez les versions préliminaires de ReVanced Manager</string>
|
||||
<string name="changelog">Voir les journaux de modifications</string>
|
||||
<string name="changelog_loading">Chargement du journal de modifications</string>
|
||||
<string name="changelog_download_fail">Échec du téléchargement du journal de modifications : %s</string>
|
||||
<string name="changelog_description">Découvrez les dernières modifications apportées dans cette mise à jour</string>
|
||||
<string name="battery_optimization_notification">Les optimisations de batterie doivent être désactivées pour que ReVanced Manager puisse fonctionner correctement en arrière-plan. Appuyez ici pour désactiver les optimisations.</string>
|
||||
<string name="installing_manager_update">Installation de la mise à jour…</string>
|
||||
<string name="downloading_manager_update">Téléchargement de la mise à jour…</string>
|
||||
<string name="download_manager_failed">Échec du téléchargement de la mise à jour : %s</string>
|
||||
<string name="cancel">Annuler</string>
|
||||
<string name="save">Enregistrer</string>
|
||||
<string name="save_with_count">Enregistrer (%1$s)</string>
|
||||
<string name="update">Mettre à jour</string>
|
||||
<string name="empty">Vide</string>
|
||||
<string name="installing_message">"Appuyez sur <b>Mettre à jour</b> lorsque vous y êtes invité.
|
||||
ReVanced Manager se fermera lors de la mise à jour."</string>
|
||||
<string name="no_changelogs_found">Aucun journal de modifications trouvé</string>
|
||||
<string name="just_now">À l\'instant</string>
|
||||
<string name="minutes_ago">il y a %s m</string>
|
||||
<string name="hours_ago">il y a %s h</string>
|
||||
<string name="days_ago">il y a %s j</string>
|
||||
<string name="invalid_date">Date invalide</string>
|
||||
<string name="disable_battery_optimization">Désactiver l\'optimisation de la batterie</string>
|
||||
<string name="input_dialog_value_invalid">Valeur invalide</string>
|
||||
<string name="option_required">Cette option est requise</string>
|
||||
<string name="required_options_screen">Options requises</string>
|
||||
<string name="failed_to_check_updates">Échec de la recherche de mises à jour : %s</string>
|
||||
<string name="no_update_available">Aucune mise à jour disponible</string>
|
||||
<string name="update_check">Recherche de mises à jour…</string>
|
||||
<string name="dismiss_temporary">Pas maintenant</string>
|
||||
<string name="update_available_dialog_description">Une nouvelle version de ReVanced Manager (%s) est disponible.</string>
|
||||
<string name="failed_to_download_update">Échec du téléchargement de la mise à jour : %s</string>
|
||||
<string name="download">Télécharger</string>
|
||||
<string name="download_confirmation_metered">"Vous êtes actuellement connecté à un réseau facturé à l'usage, des frais de données de votre fournisseur de services peuvent s'appliquer.
|
||||
|
||||
Voulez-vous quand même continuer ?"</string>
|
||||
<string name="download_update_confirmation">Télécharger la mise à jour ?</string>
|
||||
<string name="no_contributors_found">Aucun contributeur trouvé</string>
|
||||
<string name="select">Sélectionner</string>
|
||||
<string name="select_deselect_all">Tout sélectionner ou désélectionner</string>
|
||||
<string name="select_patches_type_dialog_description">Ajoutez de nouveaux patchs à partir d\'une URL ou de fichiers locaux</string>
|
||||
<string name="local_patches_description">Ajoutez des patchs à partir du stockage local.</string>
|
||||
<string name="remote_patches_description">Ajoutez des patchs à partir d\'une URL. Les patchs peuvent se mettre à jour automatiquement.</string>
|
||||
<string name="recommended">Recommandé</string>
|
||||
<string name="installation_failed_dialog_title">Échec de l\'installation</string>
|
||||
<string name="installation_cancelled_dialog_title">Installation annulée</string>
|
||||
<string name="installation_blocked_dialog_title">Installation bloquée</string>
|
||||
<string name="installation_conflict_dialog_title">Conflit d\'installation</string>
|
||||
<string name="installation_incompatible_dialog_title">Installation incompatible</string>
|
||||
<string name="installation_invalid_dialog_title">Installation invalide</string>
|
||||
<string name="installation_storage_issue_dialog_title">Stockage insuffisant</string>
|
||||
<string name="installation_timeout_dialog_title">Délai d\'installation dépassé</string>
|
||||
<string name="installation_failed_description">L\'installation a échoué pour une raison inconnue. Réessayer ?</string>
|
||||
<string name="installation_aborted_description">L\'installation a été annulée manuellement. Réessayer ?</string>
|
||||
<string name="installation_blocked_description">L\'installation a été bloquée. Vérifiez les paramètres de sécurité de votre appareil et réessayez.</string>
|
||||
<string name="installation_conflict_description">L\'installation a été empêchée par une installation existante de l\'application. Désinstaller l\'application installée et réessayer ?</string>
|
||||
<string name="installation_incompatible_description">L\'application est incompatible avec cet appareil. Utilisez un APK compatible avec cet appareil et réessayez.</string>
|
||||
<string name="installation_invalid_description">L\'application est invalide. Désinstaller l\'application et réessayer ?</string>
|
||||
<string name="installation_storage_issue_description">L\'application n\'a pas pu être installée car l\'espace de stockage était insuffisant. Libérez de l\'espace et réessayez.</string>
|
||||
<string name="installation_timeout_description">L\'installation a pris trop de temps. Réessayer ?</string>
|
||||
<string name="reinstall">Réinstaller</string>
|
||||
<string name="show">Afficher</string>
|
||||
<string name="debugging">Débogage</string>
|
||||
<string name="about_device">À propos de l\'appareil</string>
|
||||
<string name="enter_url">Saisir l\'URL</string>
|
||||
<string name="next">Suivant</string>
|
||||
<string name="auto_update">Mise à jour automatique</string>
|
||||
<string name="add_patches">Ajouter des patchs</string>
|
||||
<string name="auto_update_description">Mettre à jour automatiquement dès qu\'une nouvelle version est disponible</string>
|
||||
<string name="patches_prereleases">Utiliser les préversions</string>
|
||||
<string name="patches_prereleases_description">Utilisez les versions préliminaires de %s</string>
|
||||
<string name="patches_url">URL des patchs</string>
|
||||
<string name="incompatible_patches_dialog">"Ces patchs ne sont pas compatibles avec la version de l'application sélectionnée (%1$s).
|
||||
|
||||
Appuyez sur les patchs pour obtenir plus de détails."</string>
|
||||
<string name="incompatible_patch">Patch incompatible</string>
|
||||
<string name="any_version">Toutes les versions</string>
|
||||
<string name="never_show_again">Ne plus afficher</string>
|
||||
<string name="show_manager_update_dialog_on_launch">Afficher le message de mise à jour au lancement</string>
|
||||
<string name="show_manager_update_dialog_on_launch_description">Afficher une notification pop-up au lancement dès qu\'une nouvelle mise à jour est disponible</string>
|
||||
<string name="failed_to_import_keystore">Échec de l\'importation du magasin de clés</string>
|
||||
<string name="export">Exporter</string>
|
||||
<string name="confirm">Confirmer</string>
|
||||
</resources>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user