mirror of
https://github.com/ReVanced/revanced-manager.git
synced 2025-06-17 12:18:45 +08:00
Compare commits
39 Commits
v1.24.0
...
skia-v3.29
Author | SHA1 | Date | |
---|---|---|---|
a2f6c3836d | |||
73cb27011b | |||
83fc7f131a | |||
8e4a9088ea | |||
7ee2b1a026 | |||
40c99ab4dc | |||
1752fae9d9 | |||
d264a2a363 | |||
a5e909cfc8 | |||
bdb0317a9e | |||
b0464408f1 | |||
767fa77436 | |||
89b48cebcf | |||
dedcb3c51a | |||
3074766ff2 | |||
722f2b645f | |||
f79aa9edd7 | |||
5127c7f599 | |||
23dcbbecb2 | |||
1c84265dc4 | |||
7ccc689bd3 | |||
007dce800e | |||
ba758f3d8b | |||
a1f9a2786f | |||
b11a720621 | |||
aedf475310 | |||
10f35eb727 | |||
5c7d52c8e9 | |||
841d61278b | |||
534e4c2453 | |||
062f28387f | |||
a8a4ffabed | |||
cde3f8d62c | |||
8182228a46 | |||
7fa5daf623 | |||
221e663e47 | |||
915ec0e260 | |||
783f313ed8 | |||
05575cccfb |
94
.github/workflows/build_pull_request.yml
vendored
94
.github/workflows/build_pull_request.yml
vendored
@ -3,42 +3,18 @@ name: Build pull request
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
# Select pull request
|
||||
pr-number:
|
||||
description: PR number (Without hashtag)
|
||||
description: PR number
|
||||
required: true
|
||||
# Select app flavor
|
||||
app-flavor:
|
||||
description: App flavor
|
||||
default: 'release'
|
||||
default: release
|
||||
type: choice
|
||||
options:
|
||||
- release
|
||||
- debug
|
||||
- profile
|
||||
|
||||
# Flutter Configurations,
|
||||
# it's recommended to be set when you have problem regarding with flutter itself
|
||||
# For most part you do not need to change this.
|
||||
|
||||
# Flutter version to use, note that the version had to exist in whether channel
|
||||
# to grab
|
||||
# Try using exact version or particular version on a specific branch instead of "any"
|
||||
flutter-channel:
|
||||
description: Flutter channel
|
||||
default: 'stable'
|
||||
type: choice
|
||||
options:
|
||||
- stable
|
||||
- beta
|
||||
- dev
|
||||
- any
|
||||
flutter-version:
|
||||
description: Flutter version
|
||||
default: '3.29.x'
|
||||
|
||||
run-name: "Build pull request ${{ inputs.pr-number }}"
|
||||
|
||||
jobs:
|
||||
build:
|
||||
name: Build
|
||||
@ -62,76 +38,34 @@ jobs:
|
||||
- name: Set up Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: ${{ inputs.flutter-channel }}
|
||||
flutter-version: ${{ inputs.flutter-version }}
|
||||
|
||||
channel: stable
|
||||
flutter-version: 3.29.x
|
||||
cache: true
|
||||
|
||||
- name: Cache Gradle
|
||||
uses: burrunan/gradle-cache-action@v3
|
||||
with:
|
||||
build-root-directory: ${{ github.workspace }}/android
|
||||
|
||||
- name: Get dependencies
|
||||
continue-on-error: true
|
||||
run: flutter pub get
|
||||
|
||||
- name: Generate translations
|
||||
continue-on-error: true
|
||||
run: dart run slang
|
||||
|
||||
- name: Generate code files
|
||||
continue-on-error: true
|
||||
run: dart run build_runner build --delete-conflicting-outputs
|
||||
|
||||
- name: Build
|
||||
continue-on-error: true
|
||||
id: flutter-build
|
||||
run: flutter build apk --${{ inputs.app-flavor }}
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Prepare comment
|
||||
id: prepare-comment # This should work now?
|
||||
run: |
|
||||
echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
|
||||
if [[ "${{ steps.flutter-build.outcome }}" == "success" ]]; then
|
||||
MESSAGE="✅ Succeeded build on $COMMIT_HASH."
|
||||
else
|
||||
MESSAGE="🚫 Failed build on $COMMIT_HASH."
|
||||
fi
|
||||
|
||||
- name: "Comment on pull request #${{ inputs.pr-number }}"
|
||||
uses: thollander/actions-comment-pull-request@v3
|
||||
with:
|
||||
github-token: ${{ github.token }}
|
||||
pr-number: ${{ inputs.pr-number }}
|
||||
mode: recreate
|
||||
comment-tag: execution
|
||||
message: |
|
||||
## ⚒️ Build status
|
||||
|
||||
🧪 Workflow triggered by: ${{ github.actor }}
|
||||
|
||||
${{ steps.prepare-comment.outputs.MESSAGE }}
|
||||
|
||||
Details: [_Job execution **${{ github.run_id }}** / attempt **${{ github.run_attempt }}**_](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})!
|
||||
|
||||
### ⚙️ Workflow Steps
|
||||
|
||||
| Step | Status |
|
||||
| :------------------------ | :------------------------------------------------------- |
|
||||
| **Get dependencies** | ${{ steps.get-dependencies.outcome || job.status }} |
|
||||
| **Generate translations** | ${{ steps.generate-translations.outcome || job.status }} |
|
||||
| **Generate code files** | ${{ steps.generate-code-files.outcome || job.status }} |
|
||||
| **Build** | ${{ steps.flutter-build.outcome }} |
|
||||
|
||||
### ⚙️ Workflow Configuration
|
||||
|
||||
| Parameter | Value |
|
||||
| :--------------- | :--------------------------------------- |
|
||||
| App flavor | ${{ inputs.app-flavor }} |
|
||||
| Flutter version | ${{ inputs.flutter-version }} |
|
||||
| Flutter channel | ${{ inputs.flutter-channel }} |
|
||||
|
||||
- name: Upload Artifact
|
||||
- name: Upload artifacts
|
||||
if: steps.flutter-build.outcome == 'success'
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: revanced-manager-(${{ env.COMMIT_HASH }}-${{ inputs.pr-number }}-${{ inputs.app-flavor }}-${{ inputs.flutter-version }})
|
||||
name: revanced-manager-(${{ env.COMMIT_HASH }}
|
||||
path: |
|
||||
build/app/outputs/flutter-apk/app-${{ inputs.app-flavor }}.apk
|
||||
build/app/outputs/flutter-apk/app-${{ inputs.app-flavor }}.apk.sha1
|
||||
build/app/outputs/flutter-apk/app-*.apk
|
||||
|
3
.github/workflows/open_pull_request.yml
vendored
3
.github/workflows/open_pull_request.yml
vendored
@ -12,6 +12,8 @@ env:
|
||||
jobs:
|
||||
pull-request:
|
||||
name: Open pull request
|
||||
permissions:
|
||||
pull-requests: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
@ -25,4 +27,3 @@ jobs:
|
||||
pr_body: |
|
||||
This pull request will ${{ env.MESSAGE }}.
|
||||
pr_draft: true
|
||||
github_token: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
|
||||
|
34
.github/workflows/release.yml
vendored
34
.github/workflows/release.yml
vendored
@ -6,19 +6,13 @@ on:
|
||||
branches:
|
||||
- main
|
||||
- dev
|
||||
paths:
|
||||
- ".github/workflows/release.yml"
|
||||
- "android/**"
|
||||
- "assets/**"
|
||||
- "lib/**"
|
||||
- "pubspec.yaml"
|
||||
|
||||
jobs:
|
||||
release:
|
||||
name: Release
|
||||
permissions:
|
||||
id-token: write
|
||||
contents: write
|
||||
id-token: write
|
||||
attestations: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@ -28,7 +22,10 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Java
|
||||
run: echo "JAVA_HOME=$JAVA_HOME_17_X64" >> $GITHUB_ENV
|
||||
uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v4
|
||||
@ -40,9 +37,16 @@ jobs:
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: stable
|
||||
flutter-version: 3.29.x
|
||||
cache: true
|
||||
|
||||
- name: Cache Gradle
|
||||
uses: burrunan/gradle-cache-action@v3
|
||||
with:
|
||||
build-root-directory: ${{ github.workspace }}/android
|
||||
|
||||
- name: Install dependencies
|
||||
run: npm ci
|
||||
run: npm i
|
||||
|
||||
- name: Get dependencies
|
||||
run: flutter pub get
|
||||
@ -57,17 +61,17 @@ jobs:
|
||||
run: |
|
||||
echo "${{ secrets.KEYSTORE }}" | base64 --decode > "android/app/keystore.jks"
|
||||
|
||||
- name: Release
|
||||
- name: Semantic Release
|
||||
uses: cycjimmy/semantic-release-action@v4
|
||||
id: semantic
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
|
||||
KEYSTORE_ENTRY_ALIAS: ${{ secrets.KEYSTORE_ENTRY_ALIAS }}
|
||||
KEYSTORE_ENTRY_PASSWORD: ${{ secrets.KEYSTORE_ENTRY_PASSWORD }}
|
||||
run: |
|
||||
npx semantic-release
|
||||
|
||||
- name: Generate artifact attestation
|
||||
if: github.ref == 'refs/heads/main'
|
||||
uses: actions/attest-build-provenance@v1
|
||||
- name: Attest
|
||||
if: steps.semantic.outputs.new_release_published == 'true'
|
||||
uses: actions/attest-build-provenance@v2
|
||||
with:
|
||||
subject-path: build/app/outputs/apk/release/revanced-manager-*.apk
|
||||
|
16
.github/workflows/sync_crowdin.yml
vendored
16
.github/workflows/sync_crowdin.yml
vendored
@ -15,15 +15,22 @@ jobs:
|
||||
sync:
|
||||
name: Sync
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: dev
|
||||
fetch-depth: 0
|
||||
clean: true
|
||||
|
||||
- name: Setup Flutter
|
||||
uses: subosito/flutter-action@v2
|
||||
with:
|
||||
channel: stable
|
||||
flutter-version: 3.29.x
|
||||
cache: true
|
||||
|
||||
- name: Sync translations from Crowdin
|
||||
@ -34,15 +41,14 @@ jobs:
|
||||
upload_translations: false
|
||||
download_translations: true
|
||||
localization_branch_name: feat/translations
|
||||
skip_ref_checkout: true
|
||||
create_pull_request: true
|
||||
pull_request_title: "chore: Sync translations"
|
||||
pull_request_body: "Sync translations from [crowdin.com/project/revanced](https://crowdin.com/project/revanced)"
|
||||
pull_request_base_branch_name: "dev"
|
||||
commit_message: "chore: Sync translations"
|
||||
github_user_name: revanced-bot
|
||||
github_user_email: github@revanced.app
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
|
||||
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
|
||||
|
||||
@ -69,8 +75,8 @@ jobs:
|
||||
|
||||
- name: Commit translations
|
||||
run: |
|
||||
git config user.name revanced-bot
|
||||
git config user.email github@revanced.app
|
||||
git config --global user.name 'github-actions[bot]'
|
||||
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
|
||||
sudo chown -R $USER:$USER .git
|
||||
git commit -m "chore: Remove empty values from JSON" assets/i18n/*.i18n.json
|
||||
git push origin HEAD:feat/translations
|
||||
|
46
.gitignore
vendored
46
.gitignore
vendored
@ -1,14 +1,14 @@
|
||||
# Miscellaneous
|
||||
*.class
|
||||
*.lock
|
||||
*.log
|
||||
*.pyc
|
||||
*.swp
|
||||
.DS_Store
|
||||
.atom/
|
||||
.buildlog/
|
||||
.history
|
||||
.svn/
|
||||
migrate_working_dir/
|
||||
|
||||
# packages file containing multi-root paths
|
||||
.packages.generated
|
||||
|
||||
# IntelliJ related
|
||||
*.iml
|
||||
@ -16,33 +16,43 @@ migrate_working_dir/
|
||||
*.iws
|
||||
.idea/
|
||||
|
||||
# The .vscode folder contains launch configuration and tasks you configure in
|
||||
# VS Code which you may wish to be included in version control, so this line
|
||||
# is commented out by default.
|
||||
#.vscode/
|
||||
|
||||
# Flutter/Dart/Pub related
|
||||
**/doc/api/
|
||||
**/ios/Flutter/.last_build_id
|
||||
.dart_tool/
|
||||
.flutter-plugins
|
||||
.flutter-plugins-dependencies
|
||||
.pub-cache/
|
||||
**/generated_plugin_registrant.dart
|
||||
.packages
|
||||
.pub-preload-cache/
|
||||
.pub/
|
||||
/build/
|
||||
build/
|
||||
flutter_*.png
|
||||
linked_*.ds
|
||||
unlinked.ds
|
||||
unlinked_spec.ds
|
||||
|
||||
# Symbolication related
|
||||
# Android related
|
||||
**/android/**/gradle-wrapper.jar
|
||||
.gradle/
|
||||
**/android/captures/
|
||||
**/android/gradlew
|
||||
**/android/gradlew.bat
|
||||
**/android/local.properties
|
||||
**/android/**/GeneratedPluginRegistrant.java
|
||||
**/android/key.properties
|
||||
*.jks
|
||||
|
||||
# Coverage
|
||||
coverage/
|
||||
|
||||
# Symbols
|
||||
app.*.symbols
|
||||
|
||||
# Obfuscation related
|
||||
app.*.map.json
|
||||
|
||||
# Android Studio will place build artifacts here
|
||||
/android/app/debug
|
||||
/android/app/profile
|
||||
/android/app/release
|
||||
|
||||
# Generated files
|
||||
android/app/.cxx
|
||||
**/*.g.dart
|
||||
**/*.locator.dart
|
||||
**/*.router.dart
|
||||
|
@ -15,6 +15,7 @@ analyzer:
|
||||
- lib/app/app.router.dart
|
||||
- lib/models/patch.g.dart
|
||||
- lib/models/patched_application.g.dart
|
||||
- lib/gen/
|
||||
|
||||
linter:
|
||||
rules:
|
||||
|
3
android/app/proguard-rules.pro
vendored
3
android/app/proguard-rules.pro
vendored
@ -12,3 +12,6 @@
|
||||
-dontwarn com.google.j2objc.annotations.*
|
||||
-dontwarn java.awt.**
|
||||
-dontwarn javax.**
|
||||
|
||||
# Required for Share Plus, ref: ReVanced/revanced-manager#2474
|
||||
-keep interface android.content.res.XmlResourceParser { *; }
|
||||
|
@ -39,6 +39,9 @@
|
||||
<meta-data
|
||||
android:name="io.flutter.embedding.android.NormalTheme"
|
||||
android:resource="@style/NormalTheme" />
|
||||
<meta-data
|
||||
android:name="io.flutter.embedding.android.EnableImpeller"
|
||||
android:value="false" />
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
|
Binary file not shown.
@ -9,7 +9,6 @@ import android.os.Handler
|
||||
import android.os.Looper
|
||||
import app.revanced.library.ApkUtils
|
||||
import app.revanced.library.ApkUtils.applyTo
|
||||
import app.revanced.library.installation.installer.LocalInstaller
|
||||
import app.revanced.manager.flutter.utils.Aapt
|
||||
import app.revanced.manager.flutter.utils.packageInstaller.InstallerReceiver
|
||||
import app.revanced.manager.flutter.utils.packageInstaller.UninstallerReceiver
|
||||
@ -169,7 +168,8 @@ class MainActivity : FlutterActivity() {
|
||||
putValue(option.default)
|
||||
|
||||
option.values?.let { values ->
|
||||
put("values",
|
||||
put(
|
||||
"values",
|
||||
JSONObject().apply {
|
||||
values.forEach { (key, value) ->
|
||||
putValue(value, key)
|
||||
@ -257,16 +257,19 @@ class MainActivity : FlutterActivity() {
|
||||
|
||||
// Setup logger
|
||||
Logger.getLogger("").apply {
|
||||
handlers.forEach {
|
||||
it.close()
|
||||
removeHandler(it)
|
||||
handlers.forEach { handler ->
|
||||
handler.close()
|
||||
removeHandler(handler)
|
||||
}
|
||||
|
||||
object : java.util.logging.Handler() {
|
||||
override fun publish(record: LogRecord) {
|
||||
if (record.loggerName?.startsWith("app.revanced") != true || cancel) return
|
||||
|
||||
updateProgress(-1.0, "", record.message)
|
||||
if (cancel) return
|
||||
if (
|
||||
record.loggerName?.startsWith("app.revanced") == true ||
|
||||
// Logger in class brut.util.OS.
|
||||
record.loggerName == ""
|
||||
) updateProgress(-1.0, "", record.message)
|
||||
}
|
||||
|
||||
override fun flush() = Unit
|
||||
|
@ -180,6 +180,9 @@
|
||||
"disablePatchesSelectionWarningText": "أنت على وشك تعطيل تغيير تحديد التعديلات.\nستتم استعادة التحديد الافتراضي للتعديلات.\n\nهل تريد التعطيل على أي حال؟",
|
||||
"autoUpdatePatchesLabel": "تحديث التعديلات تلقائيًا",
|
||||
"autoUpdatePatchesHint": "تحديث التعديلات تلقائيًا إلى الإصدار الأحدث",
|
||||
"usePrereleasesLabel": "استخدام الإصدارات الأولية",
|
||||
"usePrereleasesHint": "استخدام إصدارات ما قبل الإصدار من ReVanced Manager و ReVanced Patches",
|
||||
"usePrereleasesWarningText": "قد يتسبب استخدام الإصدارات الأولية في حدوث مشكلات غير متوقعة.\n\nهل تريد التمكين على أي حال؟",
|
||||
"showUpdateDialogLabel": "عرض مربع حوار التحديث",
|
||||
"showUpdateDialogHint": "عرض مربع حوار عندما يتوفر تحديث جديد",
|
||||
"universalPatchesLabel": "عرض التعديلات العامة",
|
||||
|
@ -34,16 +34,26 @@
|
||||
"updatePatchesSheetTitle": "ReVanced পেট্চবোৰ আপডে’ট কৰক",
|
||||
"updateChangelogTitle": "সলনি-পঞ্জী",
|
||||
"updateDialogText": "${file}-ৰ এটা নতুন আপডে’ট উপলব্ধ।\n\nবৰ্তমানে ইনষ্টল কৰা সংস্কৰণটো হৈছে ${version}।",
|
||||
"downloadConsentDialogTitle": "প্ৰয়োজনীয় ফাইলবোৰ ডাউনল’ড কৰিবনে?"
|
||||
"downloadConsentDialogTitle": "প্ৰয়োজনীয় ফাইলবোৰ ডাউনল’ড কৰিবনে?",
|
||||
"downloadConsentDialogText": "সঠিকভাৱে কাম কৰিবলৈ ReVanced Manager-এ প্ৰয়োজনীয় ফাইলবোৰ ডাউনল'ড কৰিব লাগিব।",
|
||||
"downloadConsentDialogText2": "ই আপোনাক ${url}-ৰ সৈতে সংযুক্ত কৰিব।",
|
||||
"downloadingMessage": "আপডে’ট ডাউনল’ড হৈ আছে...",
|
||||
"downloadedMessage": "আপডে’ট ডাউনল’ড কৰা হ’ল",
|
||||
"installingMessage": "আপডে’ট ইনষ্টল হৈ আছে...",
|
||||
"errorDownloadMessage": "আপডে’ট ডাউনল’ড কৰিব পৰা নগ’ল"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "তথ্য"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"timeagoLabel": "${time} আগত"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "এটা এপ বাছনি কৰক",
|
||||
"widgetTitleSelected": "বাছনি কৰা এপ",
|
||||
"widgetSubtitle": "কোনো এপ বাছনি কৰা নাই",
|
||||
"noAppsLabel": "কোনো এপ্লিকেশ্যন পোৱা নগ’ল"
|
||||
},
|
||||
"applicationItem": {},
|
||||
"latestCommitCard": {},
|
||||
"patcherView": {},
|
||||
"appSelectorCard": {},
|
||||
"patchSelectorCard": {},
|
||||
"socialMediaCard": {},
|
||||
"appSelectorView": {},
|
||||
"patchesSelectorView": {},
|
||||
"patchOptionsView": {
|
||||
"saveOptions": "ছে’ভ কৰক",
|
||||
"unselectPatch": "পেট্চ বাছনি-মুক্ত কৰক",
|
||||
@ -51,8 +61,6 @@
|
||||
"selectFilePath": "ফাইলৰ পথ বাছনি কৰক",
|
||||
"selectFolder": "ফ’ল্ডাৰ বাছনি কৰক"
|
||||
},
|
||||
"patchItem": {},
|
||||
"installerView": {},
|
||||
"settingsView": {
|
||||
"themeModeLabel": "এপৰ থীম",
|
||||
"systemThemeLabel": "ছিষ্টেমৰ",
|
||||
@ -60,9 +68,28 @@
|
||||
"darkThemeLabel": "গাঢ়",
|
||||
"dynamicThemeLabel": "মেটেৰিয়েল ইউ",
|
||||
"languageLabel": "ভাষা",
|
||||
"languageUpdated": "ভাষা আপডে’ট কৰা হ’ল"
|
||||
"languageUpdated": "ভাষা আপডে’ট কৰা হ’ল",
|
||||
"importKeystoreLabel": "কীষ্ট’ৰ ইম্প’ৰ্ট কৰক",
|
||||
"importKeystoreHint": "এপবোৰত চহী কৰিবলৈ ব্যৱহাৰ কৰা কীষ্ট’ৰ এটা ইম্প’ৰ্ট কৰক",
|
||||
"importedKeystore": "কীষ্ট’ৰ ইম্প’ৰ্ট কৰা হ’ল",
|
||||
"selectKeystorePassword": "কীষ্ট’ৰৰ পাছৱৰ্ড",
|
||||
"selectKeystorePasswordHint": "এপবোৰত চহী কৰিবলৈ ব্যৱহাৰ কৰা কীষ্ট’ৰৰ পাছৱৰ্ড বাছনি কৰক",
|
||||
"jsonSelectorErrorMessage": "বাছনি কৰা JSON ফাইলটো ব্যৱহাৰ কৰিব পৰা নগ’ল",
|
||||
"keystoreSelectorErrorMessage": "বাছনি কৰা কীষ্ট’ৰ ফাইলটো ব্যৱহাৰ কৰিব পৰা নগ’ল"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "এপৰ তথ্য",
|
||||
"openButton": "খোলক",
|
||||
"installButton": "ইনষ্টল কৰক",
|
||||
"uninstallButton": "আনইনষ্টল কৰক",
|
||||
"unmountButton": "আনমাউণ্ট কৰক",
|
||||
"exportButton": "এক্সপ’ৰ্ট কৰক",
|
||||
"deleteButton": "মচক",
|
||||
"rootDialogTitle": "ত্ৰুটি",
|
||||
"lastPatchedAppDescription": "এইটো শেষবাৰৰ বাবে পেট্চ কৰা এপটোৰ বেকআপ।",
|
||||
"unmountDialogText": "আপুনি এই এপটো আনমাউণ্ট কৰিব বিচৰাটো নিশ্চিতনে?",
|
||||
"uninstallDialogText": "আপুনি এই এপটো আনইনষ্টল কৰিব বিচৰাটো নিশ্চিতনে?",
|
||||
"rootDialogText": "এপটো ছুপাৰইউজাৰৰ অনুমতিৰে ইনষ্টল কৰা হৈছে, কিন্তু বৰ্তমান ReVanced Manager-ৰ কোনো অনুমতি নাই।\nঅনুগ্ৰহ কৰি প্ৰথমে ছুপাৰইউজাৰৰ অনুমতি দিয়ক।",
|
||||
"removeAppDialogTitle": "এপ মচিবনে?",
|
||||
"removeAppDialogText": "আপুনি এই বেকআপ মচি পেলাব বিচৰাটো নিশ্চিতনে?",
|
||||
"packageNameLabel": "পেকেজৰ নাম",
|
||||
@ -85,14 +112,24 @@
|
||||
"mount_missing_installation": "ইনষ্টলেশ্যন পোৱা নগ’ল",
|
||||
"status_failure_blocked": "ইনষ্টলেশ্যন অৱৰুদ্ধ",
|
||||
"install_failed_verification_failure": "ভেৰিফিকেশ্যন বিফল",
|
||||
"status_failure_invalid": "ইনষ্টলেশ্যন অবৈধ",
|
||||
"install_failed_version_downgrade": "ডাউনগ্ৰে’ড কৰিব নোৱাৰি",
|
||||
"status_failure_conflict": "ইনষ্টলেশ্যনৰ সংঘাত",
|
||||
"status_failure_storage": "ইনষ্টলেশ্যন ষ্ট’ৰেজৰ সমস্যা",
|
||||
"status_failure_incompatible": "ইনষ্টলেশ্যন নিমিলে",
|
||||
"status_failure_timeout": "ইনষ্টলেশ্যনৰ সময় উকলিল",
|
||||
"status_unknown": "ইনষ্টলেশ্যন বিফল",
|
||||
"mount_version_mismatch_description": "ইনষ্টল কৰা এপটো পেট্চ কৰা এপতকৈ বেলেগ সংস্কৰণ হোৱাৰ বাবে ইনষ্টলেশ্যন বিফল হ’ল।\n\nআপুনি মাউণ্ট কৰা এপটোৰ সংস্কৰণ ইনষ্টল কৰি আকৌ চেষ্টা কৰক।",
|
||||
"mount_no_root_description": "ৰুট এক্সেছ নিদিয়াৰ বাবে ইনষ্টলেশ্যন বিফল হ’ল।\n\nReVanced Manager-ক ৰুট এক্সেছ দি আকৌ চেষ্টা কৰক।",
|
||||
"mount_missing_installation_description": "ওপৰত মাউণ্ট কৰিব পৰাকৈ পেট্চ নকৰা এপটো এই ডিভাইচত ইনষ্টল হৈ নথকাৰ বাবে ইনষ্টলেশ্যন বিফল হ’ল।\n\nমাউণ্ট কৰাৰ আগত পেট্চ নকৰা এপটো ইনষ্টল কৰি আকৌ চেষ্টা কৰক।",
|
||||
"status_failure_timeout_description": "ইনষ্টলেশ্যন শেষ হ’বলৈ বহুত সময় লাগিল।\n\nআপুনি আকৌ চেষ্টা কৰিব বিচাৰেনে?",
|
||||
"status_failure_storage_description": "অপৰ্যাপ্ত ষ্ট’ৰে’জৰ বাবে ইনষ্টলেশ্যন বিফল হ’ল।\n\nঅলপ ঠাই খালী কৰি আকৌ চেষ্টা কৰক।",
|
||||
"status_failure_invalid_description": "পেট্চ কৰা এপটো অবৈধ হোৱাৰ বাবে ইনষ্টলেশ্যন বিফল হ’ল।\n\nএপটো আনইনষ্টল কৰি আকৌ চেষ্টা কৰিবনে?",
|
||||
"status_failure_incompatible_description": "এই ডিভাইচৰ সৈতে এপটো সংগতিপূৰ্ণ নহয়।\n\nএই ডিভাইচটোৱে ছাপ’ৰ্ট কৰা এটা APK ব্যৱহাৰ কৰি আকৌ চেষ্টা কৰক।",
|
||||
"status_failure_conflict_description": "এপটোৰ এটা মজুত থকা ইনষ্টলেশ্যনৰ ফলত ইনষ্টলেশ্যনত বাধা আহিছিল।\n\n ইনষ্টল কৰা এপটো আনইনষ্টল কৰি পুনৰ চেষ্টা কৰিবনে?",
|
||||
"status_failure_blocked_description": "ইনষ্টলেশ্যনটো ${packageName}-ৰ দ্বাৰা অৱৰোধ কৰা হৈছে।\n\nআপোনাৰ সুৰক্ষা-সম্বন্ধীয় ছেটিংছ মিলাই লৈ পুনৰ চেষ্টা কৰক।",
|
||||
"install_failed_verification_failure_description": "ভেৰিফিকেশ্যন-সম্বন্ধীয় সমস্যা এটাৰ কাৰণে ইনষ্টলেশ্যন বিফল হ’ল।\n\nআপোনাৰ সুৰক্ষা-সম্বন্ধীয় ছেটিংছ মিলাই লৈ পুনৰ চেষ্টা কৰক।"
|
||||
"install_failed_verification_failure_description": "ভেৰিফিকেশ্যন-সম্বন্ধীয় সমস্যা এটাৰ কাৰণে ইনষ্টলেশ্যন বিফল হ’ল।\n\nআপোনাৰ সুৰক্ষা-সম্বন্ধীয় ছেটিংছ মিলাই লৈ পুনৰ চেষ্টা কৰক।",
|
||||
"install_failed_version_downgrade_description": "পেট্চ কৰা এপটো ইনষ্টল কৰা এপতকৈ আগৰ সংস্কৰণ হোৱাৰ বাবে ইনষ্টলেশ্যন বিফল হ’ল।\n\nএপটো আনইনষ্টল কৰি আকৌ চেষ্টা কৰিবনে?",
|
||||
"status_unknown_description": "অজ্ঞাত কাৰণত ইনষ্টলেশ্যন বিফল হ’ল। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক।"
|
||||
}
|
||||
}
|
@ -30,10 +30,10 @@
|
||||
"noInstallations": "Yamaqlanan tətbiq quraşdırılmayıb",
|
||||
"installUpdate": "Yeniləməni quraşdırmağa davam edilsin?",
|
||||
"updateSheetTitle": "ReVanced Manager-ni Yenilə",
|
||||
"updateDialogTitle": "Yeniləmə mövcuddur",
|
||||
"updatePatchesSheetTitle": "ReVanced Yamaqlarını Yenilə",
|
||||
"updateDialogTitle": "Təzə yeniləmə mövcuddur",
|
||||
"updatePatchesSheetTitle": "ReVanced Patches-i Yenilə",
|
||||
"updateChangelogTitle": "Dəyişiklik jurnalı",
|
||||
"updateDialogText": "${file} üçün yeni yenilənmə var.\n\nCari quraşdırılan versiya: ${version}.",
|
||||
"updateDialogText": "${file} üçün təzə yenilənmə var.\n\nCari quraşdırılan versiya: ${version}.",
|
||||
"downloadConsentDialogTitle": "Zəruri fayllar yüklənilsin?",
|
||||
"downloadConsentDialogText": "\"ReVanced Manager\" düzgün işləməsi üçün zəruri faylları yükləməlidir.",
|
||||
"downloadConsentDialogText2": "Bu, sizlə ${url} arası əlaqə yaradacaq.",
|
||||
@ -41,7 +41,7 @@
|
||||
"downloadedMessage": "Yenilənmə yüklənildi",
|
||||
"installingMessage": "Yenilənmə quraşdırılır...",
|
||||
"errorDownloadMessage": "Yeniləmə yüklənilə bilmir",
|
||||
"errorInstallMessage": "Yeniləmə quraşdırılmır",
|
||||
"errorInstallMessage": "Yenilənmə qurulmur",
|
||||
"noConnection": "İnternet bağlantısı yoxdur"
|
||||
},
|
||||
"applicationItem": {
|
||||
@ -99,7 +99,7 @@
|
||||
"noneChip": "Heç nə",
|
||||
"noneTooltip": "Bütün yamaqlar seçimini sil",
|
||||
"loadPatchesSelection": "Yamaq seçimini yüklə",
|
||||
"noSavedPatches": "Seçilmiş tətbiq üçün saxlanılmış yamaq yoxdur.\nCari seçimi saxlamaq üçün \"Bitdi\"ə toxunun.",
|
||||
"noSavedPatches": "Seçilən tətbiq üçün saxlanılan yamaq seçimi yoxdur.\nCari seçimi saxlamaq üçün \"Bitdi\"ə toxunun.",
|
||||
"noPatchesFound": "Seçilmiş tətbiq üçün yamaqlar tapılmadı",
|
||||
"setRequiredOption": "Bəzi yamaqlar seçimlərin tənzimlənməsin tələb edir:\n\n${patches}\n\nLütfən davam etməzdən əvvəl onları tənzimləyin."
|
||||
},
|
||||
@ -131,10 +131,10 @@
|
||||
"installRootType": "Montajla",
|
||||
"installNonRootType": "Müntəzəm",
|
||||
"warning": "Gözlənilməz problemlərin qarşısını almaq üçün yamaqlanmış tətbiq üçün avto-yeniləmələri qapat.",
|
||||
"pressBackAgain": "Ləğv etmək üçün təkrar geri düyməsinə bas",
|
||||
"pressBackAgain": "Ləğv etmək üçün təkrar geri bas",
|
||||
"openButton": "Aç",
|
||||
"notificationTitle": "ReVanced Manager yamaqlayır",
|
||||
"notificationText": "Quraşdırıcıya qayıtmaq üçün toxunun",
|
||||
"notificationText": "Quraşdırıcıya dönmək üçün toxun",
|
||||
"exportApkButtonTooltip": "Yamaqlı APK-nı ixrac et",
|
||||
"exportLogButtonTooltip": "Jurnalı ixrac et",
|
||||
"screenshotDetected": "Ekran görüntüsü aşkarlandı. Jurnalı paylaşmağa çalışırsınızsa, əvəzində mətn nüsxəsini paylaşın. \n\nJurnal buferə köçürülsün?",
|
||||
@ -149,7 +149,7 @@
|
||||
"advancedSectionTitle": "Qabaqcıl",
|
||||
"exportSectionTitle": "İdxal & ixrac et",
|
||||
"dataSectionTitle": "Məlumat mənbələri",
|
||||
"themeModeLabel": "Tətbiq teması",
|
||||
"themeModeLabel": "Tətbiq tonu",
|
||||
"systemThemeLabel": "Sistem",
|
||||
"lightThemeLabel": "İşıqlı",
|
||||
"darkThemeLabel": "Qaranlıq",
|
||||
@ -160,13 +160,13 @@
|
||||
"sourcesLabel": "Seçmə mənbələr",
|
||||
"sourcesLabelHint": "ReVanced Patches üçün seçmə mənbələri quraşdır",
|
||||
"useAlternativeSources": "Seçmə mənbələri istifadə et",
|
||||
"useAlternativeSourcesHint": "API əvəzinə ReVanced Patches üçün alternativ mənbələr istifadə et",
|
||||
"useAlternativeSourcesHint": "API əvəzinə ReVanced Patches üçün seçmə mənbələr istifadə et",
|
||||
"sourcesResetDialogTitle": "Sıfırla",
|
||||
"sourcesResetDialogText": "Mənbələrinizi ilkin dəyərlərinə sıfırlamaq istədiyinizə əminsiniz?",
|
||||
"apiURLResetDialogText": "API URL-nizi ilkin dəyərinə sıfırlamaq istədiyinizə əminsiz?",
|
||||
"sourcesUpdateNote": "Qeyd: Bu, ReVanced Yamaqlarını birbaşa seçmə mənbələrdən yükləyəcək.\n\nBu sizi alternativ mənbəyə bağlayacaq.",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "ReVanced Manager-in API URL-sini tənzimləyin",
|
||||
"apiURLHint": "ReVanced Manager-in API URL-sini Qurun",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "Yamaq qurucu",
|
||||
"sourcesPatchesLabel": "Yamaqların mənbəyi",
|
||||
@ -180,8 +180,11 @@
|
||||
"disablePatchesSelectionWarningText": "Yamaq seçimi dəyişdirilməsini qapatmaq üzrəsiniz.\nİlkin yamaq seçimi bərpa ediləcək.\n\nYenə də qapadılsın?",
|
||||
"autoUpdatePatchesLabel": "Yamaqları avtomatik yenilə",
|
||||
"autoUpdatePatchesHint": "Yamaqları son versiyaya avtomatik yenilə",
|
||||
"usePrereleasesLabel": "İlkin buraxılışları istifadə et",
|
||||
"usePrereleasesHint": "ReVanced Manager və ReVanced Patches-in buraxılışdan əvvəlki versiyaların istifadə et",
|
||||
"usePrereleasesWarningText": "İlkin buraxılış versiyaların istifadə gözlənilməz problemlərə səbəb ola bilər.\n\nYenə də aktiv edilsin?",
|
||||
"showUpdateDialogLabel": "Yenilənmə dialoqunu göstər",
|
||||
"showUpdateDialogHint": "Yeni yenilənmə mövcud olduqda dialoq pəncərəsi göstər",
|
||||
"showUpdateDialogHint": "Təzə yenilənmə mövcud olduqda dialoq pəncərəsi göstər",
|
||||
"universalPatchesLabel": "Ümumi yamaqları göstər",
|
||||
"universalPatchesHint": "Bütün tətbiqləri və ümumi yamaqları göstər (tətbiq siyahıyaalma yavaşlaya bilər)",
|
||||
"lastPatchedAppLabel": "Yamaqlanmış tətbiqi saxla",
|
||||
|
@ -180,6 +180,7 @@
|
||||
"disablePatchesSelectionWarningText": "আপনি নির্বাচিত প্যাচ পরিবর্তনকে নিষ্ক্রিয় করতে যাচ্ছেন।\nপূর্বনির্ধারিত নির্বাচিত প্যাচসমূহ ফিরিয়ে আনা হবে।\n\nযেকোন ভাবে নিষ্ক্রিয় করতে চান?",
|
||||
"autoUpdatePatchesLabel": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে আপডেট করুন",
|
||||
"autoUpdatePatchesHint": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে সর্বশেষ সংস্করণে আপডেট হবে",
|
||||
"usePrereleasesLabel": "প্রি-রিলিজ ব্যবহার করুন",
|
||||
"showUpdateDialogLabel": "হালনাগাদ ডায়ালগ দেখান",
|
||||
"showUpdateDialogHint": "যখন হালনাগাদ উপলব্ধ থাকবে তখন একটি ডায়ালগ দেখান",
|
||||
"universalPatchesLabel": "বৈশ্বিক প্যাচসমূহ দেখান",
|
||||
|
@ -67,10 +67,10 @@
|
||||
"anyVersion": "Jakákoli verze"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Vybrat patche",
|
||||
"widgetTitle": "Vybrat záplaty",
|
||||
"widgetTitleSelected": "Vybrané patche",
|
||||
"widgetSubtitle": "Nejprve vyberte aplikaci",
|
||||
"widgetEmptySubtitle": "Nejsou vybrány žádné patche"
|
||||
"widgetEmptySubtitle": "Nejsou vybrány žádné záplaty"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Sociální sítě",
|
||||
@ -89,15 +89,15 @@
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Vybrat patche",
|
||||
"searchBarHint": "Vyhledat patche",
|
||||
"searchBarHint": "Vyhledat záplaty",
|
||||
"universalPatches": "Univerzální záplaty",
|
||||
"newPatches": "Nové záplaty",
|
||||
"patches": "Záplaty",
|
||||
"doneButton": "Hotovo",
|
||||
"defaultChip": "Výchozí",
|
||||
"defaultTooltip": "Vybrat všechny výchozí patche",
|
||||
"defaultTooltip": "Vybrat všechny výchozí záplaty",
|
||||
"noneChip": "Žádné",
|
||||
"noneTooltip": "Zrušit výběr všech patchů",
|
||||
"noneTooltip": "Zrušit výběr všech záplat",
|
||||
"loadPatchesSelection": "Načíst výběr záplat",
|
||||
"noSavedPatches": "Žádný uložený výběr patch pro vybranou aplikaci.\nStisknutím Dokončeno uložíte aktuální výběr.",
|
||||
"noPatchesFound": "Pro vybranou aplikaci nebyly nalezeny žádné záplaty",
|
||||
@ -169,7 +169,7 @@
|
||||
"apiURLHint": "Konfigurace URL API ReVanced Manager",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "Organizace patchů",
|
||||
"sourcesPatchesLabel": "Zdroj patchů",
|
||||
"sourcesPatchesLabel": "Zdroj záplat",
|
||||
"contributorsLabel": "Přispěvatelé",
|
||||
"contributorsHint": "Seznam přispěvatelů ReVanced",
|
||||
"logsLabel": "Sdílet záznamy",
|
||||
@ -260,10 +260,10 @@
|
||||
"mountTypeLabel": "Připojit",
|
||||
"regularTypeLabel": "Běžný",
|
||||
"patchedDateLabel": "Datum patchování",
|
||||
"appliedPatchesLabel": "Použité patche",
|
||||
"appliedPatchesLabel": "Použité záplaty",
|
||||
"sizeLabel": "Velikost souboru",
|
||||
"patchedDateHint": "${date} v ${time}",
|
||||
"appliedPatchesHint": "${quantity} použité patche",
|
||||
"appliedPatchesHint": "${quantity} použité záplaty",
|
||||
"updateNotImplemented": "Tato funkce ještě není implementována"
|
||||
},
|
||||
"contributorsView": {
|
||||
|
@ -114,7 +114,7 @@
|
||||
"selectFilePath": "Dateipfad auswählen",
|
||||
"selectFolder": "Ordner auswählen",
|
||||
"requiredOption": "Einstellung dieser Option ist erforderlich",
|
||||
"unsupportedOption": "Dieser Vorgang ist nicht unterstützt.",
|
||||
"unsupportedOption": "Dieser Vorgang ist nicht unterstützt",
|
||||
"requiredOptionNull": "Die folgenden Optionen müssen gesetzt sein:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
@ -131,13 +131,13 @@
|
||||
"installRootType": "Einhängen",
|
||||
"installNonRootType": "Normal",
|
||||
"warning": "Deaktiviere automatische Updates für die gepatchte App, um unerwartete Probleme zu vermeiden.",
|
||||
"pressBackAgain": "Drücken Sie \"Zurück\" noch einmal, um die App zu verlassen",
|
||||
"pressBackAgain": "Drücke \"Zurück\" noch einmal, um die App zu verlassen",
|
||||
"openButton": "Öffnen",
|
||||
"notificationTitle": "ReVanced Manager patcht",
|
||||
"notificationText": "Tippen, um zum Installer zurückzukehren",
|
||||
"exportApkButtonTooltip": "Gepatchte APK exportieren",
|
||||
"exportLogButtonTooltip": "Protokoll exportieren",
|
||||
"screenshotDetected": "Es wurde ein Screenshot erkannt. Wenn Sie versuchen, das Log zu teilen, teilen Sie stattdessen eine Textkopie.\n\nLog in die Zwischenablage kopieren?",
|
||||
"screenshotDetected": "Es wurde ein Screenshot erkannt. Wenn du versuchst, das Log zu teilen, teilst du stattdessen eine Textkopie.\n\nLog in die Zwischenablage kopieren?",
|
||||
"copiedToClipboard": "Das Protokoll wurde in die Zwischenablage kopiert",
|
||||
"noExit": "Der Installer wird noch ausgeführt, kann nicht beendet werden..."
|
||||
},
|
||||
@ -164,9 +164,9 @@
|
||||
"sourcesResetDialogTitle": "Zurücksetzen",
|
||||
"sourcesResetDialogText": "Bist du dir sicher, dass du die benutzerdefinierten Quellen auf ihre Standardwerte zurücksetzen möchtest?",
|
||||
"apiURLResetDialogText": "Bist du dir sicher, dass du die API-URL auf ihren Standardwert zurücksetzen möchtest?",
|
||||
"sourcesUpdateNote": "Hinweis: Dies wird automatisch ReVanced Patches von den alternativen Quellen herunterladen.\n\nDies verbindet Sie mit der alternativen Quelle.",
|
||||
"sourcesUpdateNote": "Hinweis: Dies wird automatisch ReVanced Patches von den alternativen Quellen herunterladen.\n\nDies verbindet dich mit der alternativen Quelle.",
|
||||
"apiURLLabel": "API-URL",
|
||||
"apiURLHint": "Konfigurieren die API URL von ReVanced Manager",
|
||||
"apiURLHint": "Konfiguriere die API URL von ReVanced Manager",
|
||||
"selectApiURL": "API-URL",
|
||||
"orgPatchesLabel": "Patches Organisation",
|
||||
"sourcesPatchesLabel": "Patches Quelle",
|
||||
@ -254,7 +254,7 @@
|
||||
"uninstallDialogText": "Bist du sicher, dass du diese App deinstallieren möchtest?",
|
||||
"rootDialogText": "Die App wurde mit Superuser-Berechtigungen installiert, aber derzeit hat ReVanced Manager keine Berechtigungen.\nBitte erteile zuerst Superuser-Berechtigungen.",
|
||||
"removeAppDialogTitle": "App löschen?",
|
||||
"removeAppDialogText": "Sind Sie sicher, dass Sie diese Sicherung löschen möchten?",
|
||||
"removeAppDialogText": "Bist du sicher, dass du diese Sicherung löschen möchtest?",
|
||||
"packageNameLabel": "Paketname",
|
||||
"installTypeLabel": "Installationsart",
|
||||
"mountTypeLabel": "Einhängen",
|
||||
@ -283,8 +283,8 @@
|
||||
"status_failure_timeout": "Installations-Timeout",
|
||||
"status_unknown": "Installation fehlgeschlagen",
|
||||
"mount_version_mismatch_description": "Die Installation ist fehlgeschlagen, da die installierte App eine andere Version hat als die gepatchte App.\n\nInstallieren Sie die Version der App, die Sie mounten, und versuchen Sie es erneut.",
|
||||
"mount_no_root_description": "Die Installation ist fehlgeschlagen, da der Root-Zugriff nicht gewährt wurde.\n\nGewähre Root-Zugriff für ReVanced Manager und versuche es erneut.",
|
||||
"mount_missing_installation_description": "Die Installation ist fehlgeschlagen, da die nicht gepatchte App auf diesem Gerät fehlt, um sie zu mounten.\n\nInstallieren Sie die nicht gepatchte App bevor Sie mounten und versuchen Sie es erneut.",
|
||||
"mount_no_root_description": "ReVanced ManagerDie Installation ist fehlgeschlagen, da der Root-Zugriff nicht gewährt wurde.\n\nGewähre Root-Zugriff für ReVanced Manager und versuche es erneut.",
|
||||
"mount_missing_installation_description": "The installation failed due to the unpatched app not being installed on this device in order to mount over it.\n\nInstall the unpatched app before mounting and try again.",
|
||||
"status_failure_timeout_description": "Die Installation hat zu lange gedauert.\n\nMöchten Sie es erneut versuchen?",
|
||||
"status_failure_storage_description": "Die Installation ist aufgrund unzureichenden Speichers fehlgeschlagen.\n\nSchaffe etwas Platz und versuche es erneut.",
|
||||
"status_failure_invalid_description": "Die Installation ist fehlgeschlagen, da die gepatchte App ungültig ist.\n\nDie App deinstallieren und erneut versuchen?",
|
||||
|
@ -61,10 +61,10 @@
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Επιλέξτε μία εφαρμογή",
|
||||
"widgetTitleSelected": "Επιλεγμένες εφαρμογές",
|
||||
"widgetTitleSelected": "Επιλεγμένη εφαρμογή",
|
||||
"widgetSubtitle": "Δεν έχει επιλεγεί κάποια εφαρμογή",
|
||||
"noAppsLabel": "Δε βρέθηκαν εφαρμογές",
|
||||
"anyVersion": "Οποιαδήποτε έκδοση"
|
||||
"anyVersion": "Οποιαδήποτε"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Επιλέξτε τροποποιήσεις",
|
||||
@ -83,9 +83,9 @@
|
||||
"selectFromStorageButton": "Επιλογή από αποθηκευτικό χώρο",
|
||||
"errorMessage": "Αδυναμία χρήσης της επιλεγμένης εφαρμογής",
|
||||
"downloadToast": "Η λειτουργία λήψης δεν είναι ακόμη διαθέσιμη",
|
||||
"requireSuggestedAppVersionDialogText": "Η έκδοση της εφαρμογής που επιλέξατε δεν ταιριάζει με την προτεινόμενη έκδοση αυτό μπορεί να προκαλέσει ανεπιθύμητα θέματα. Παρακαλώ επιλέξτε την εφαρμογή που ταιριάζει με την προτεινόμενη έκδοση.\n\nΕπιλεγμένη έκδοση: ${selected}\nΠροτεινόμενη έκδοση: ${suggested}\n\nΓια να προχωρήσετε ούτως ή άλλως, απενεργοποιήστε την «Επιβολή επιλογής της προτεινόμενης έκδοσης εφαρμογής» στις ρυθμίσεις.",
|
||||
"requireSuggestedAppVersionDialogText": "Η έκδοση της εφαρμογής που επιλέξατε δεν ταιριάζει με την προτεινόμενη έκδοση αυτό μπορεί να προκαλέσει ανεπιθύμητα θέματα. Παρακαλώ επιλέξτε την εφαρμογή που ταιριάζει με την προτεινόμενη έκδοση.\n\nΕπιλεγμένη έκδοση: ${selected}\nΠροτεινόμενη έκδοση: ${suggested}\n\nΓια να προχωρήσετε ούτως ή άλλως, απενεργοποιήστε την επιλογή «Να απαιτείται η προτεινόμενη έκδοση εφαρμογής» στις ρυθμίσεις.",
|
||||
"featureNotAvailable": "Η δυνατότητα δεν έχει υλοποιηθεί",
|
||||
"featureNotAvailableText": "Αυτή η εφαρμογή είναι εγκατεστημένη ως split APK οπότε για να μπορέσουμε να την τροποιήσουμε και να την εγκαταστήσουμε αξιόπιστα χρειαζόμαστε πρόσβαση root ώστε να την προσαρτήσουμε. Ωστόσο, μπορείτε να τροποποιήσετε και να εγκαταστήσετε ένα κανονικό αρχείο APK επιλέγοντάς το από το χώρο αποθήκευσης χωρίς να χρειάζεται πρόσβαση root."
|
||||
"featureNotAvailableText": "Αυτή η εφαρμογή είναι εγκατεστημένη ως split APK και μπορεί να τροποποιηθεί και να εγκατασταθεί αξιόπιστα μόνο μέσω προσάρτησης με δικαιώματα root. Ωστόσο, μπορείτε να τροποποιήσετε και να εγκαταστήσετε ένα πλήρες APK κανονικά επιλέγοντάς το από τον χώρο αποθήκευσης."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Επιλέξτε τροποποιήσεις",
|
||||
@ -120,7 +120,7 @@
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Η επιλογή αυτής της τροποποίησης μπορεί να επιφέρει σφάλματα τροποποίησης.\n\nΈκδοση εφαρμογής: ${packageVersion}\nΥποστηριζόμενες εκδόσεις: ${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Η τροποποίηση δεν υποστηρίζεται σε αυτήν την έκδοση της εφαρμογής.",
|
||||
"unsupportedRequiredOption": "Αυτή η τροποποίηση αναγκαστικά περιέχει μια επιλογή η οποία δεν υποστηρίζεται από αυτήν την εφαρμογή",
|
||||
"unsupportedRequiredOption": "Αυτή η τροποποίηση περιέχει μια αναγκαστική επιλογή η οποία δεν υποστηρίζεται από αυτήν την εφαρμογή",
|
||||
"patchesChangeWarningDialogText": "Συνιστάται να χρησιμοποιείτε τις προεπιλεγμένες τροποποιήσεις και επιλογές τους. Η αλλαγή τους μπορεί να οδηγήσει σε μη αναμενόμενα θέματα.\n\nΘα πρέπει να ενεργοποιήσετε το «Να επιτρέπονται αλλαγές επιλογών τροποποιήσεων» στις ρυθμίσεις προτού αλλάξετε οτιδήποτε.",
|
||||
"patchesChangeWarningDialogButton": "Χρήση προεπιλεγμένων επιλογών"
|
||||
},
|
||||
@ -137,7 +137,7 @@
|
||||
"notificationText": "Πατήστε για να επιστρέψετε στο πρόγραμμα εγκατάστασης",
|
||||
"exportApkButtonTooltip": "Εξαγωγή τροποποιημένου αρχείου APK",
|
||||
"exportLogButtonTooltip": "Εξαγωγή αρχείου καταγραφής",
|
||||
"screenshotDetected": "Ανιχνεύθηκε στιγμιότυπο οθόνης. Αν προσπαθείτε να κοινοποιήσετε το αρχείο καταγραφής, παρακαλούμε να κοινοποιήσετε αντίγραφο κειμένου αντ'αυτού.\n\nΑντιγραφή αρχείου καταγραφής στο πρόχειρο;",
|
||||
"screenshotDetected": "Ανιχνεύθηκε στιγμιότυπο οθόνης. Αν προσπαθείτε να κοινοποιήσετε το αρχείο καταγραφής, παρακαλούμε να κοινοποιήσετε αντίγραφο κειμένου αντ' αυτού.\n\nΑντιγραφή αρχείου καταγραφής στο πρόχειρο;",
|
||||
"copiedToClipboard": "Το αρχείο καταγραφής αντιγράφηκε στο πρόχειρο",
|
||||
"noExit": "Το πρόγραμμα εγκατάστασης εκτελείται ακόμη, αδυναμία εξόδου..."
|
||||
},
|
||||
@ -176,10 +176,13 @@
|
||||
"logsHint": "Κοινοποίηση αρχείων καταγραφής του ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Να επιτρέπονται αλλαγές επιλογών τροποποιήσεων",
|
||||
"enablePatchesSelectionHint": "Να μην εμποδίζονται οι επιλογές τροποποιήσεων",
|
||||
"enablePatchesSelectionWarningText": "Αλλαγές στις προεπιλεγμένες επιλογές τροποποιήσεων ίσως επιφέρει μη αναμενόμενα προβλήματα.\n\nΕνεργοποίηση παρόλα αυτά;",
|
||||
"enablePatchesSelectionWarningText": "Οι αλλαγές στις προεπιλεγμένες επιλογές τροποποιήσεων ίσως επιφέρουν μη αναμενόμενα προβλήματα.\n\nΕνεργοποίηση παρόλα αυτά;",
|
||||
"disablePatchesSelectionWarningText": "Πρόκειται να απενεργοποιήσετε τη δυνατότητα αλλαγής των επιλογών τροποποιήσεων.\nΟι προεπιλεγμένες επιλογές τροποποιήσεων θα επαναφερθούν.\n\nΑπενεργοποίηση παρόλα αυτά;",
|
||||
"autoUpdatePatchesLabel": "Αυτόματες ενημερώσεις τροποποιήσεων",
|
||||
"autoUpdatePatchesHint": "Αυτόματη ενημέρωση τροποποιήσεων στην τελευταία έκδοση",
|
||||
"usePrereleasesLabel": "Χρήση πρώιμων εκδόσεων",
|
||||
"usePrereleasesHint": "Χρήση των πρώιμων εκδόσεων του ReVanced Manager και των τροποποιήσεων ReVanced",
|
||||
"usePrereleasesWarningText": "Η χρήση των πρώιμων εκδόσεων ενδέχεται να προκαλέσει μη αναμενόμενα προβλήματα.\n\nΕνεργοποίηση ούτως ή άλλως;",
|
||||
"showUpdateDialogLabel": "Εμφάνιση προτροπής για ενημερώσεις",
|
||||
"showUpdateDialogHint": "Εμφάνιση ειδοποίησης όταν είναι διαθέσιμη κάποια νέα ενημέρωση",
|
||||
"universalPatchesLabel": "Εμφάνιση γενικευμένων τροποποιήσεων",
|
||||
@ -188,9 +191,9 @@
|
||||
"lastPatchedAppHint": "Αποθηκεύστε την τελευταία τροποποίηση για εγκατάσταση ή εξαγωγή αργότερα",
|
||||
"versionCompatibilityCheckLabel": "Έλεγχος συμβατότητας έκδοσης",
|
||||
"versionCompatibilityCheckHint": "Αποκλεισμός επιλογών τροποποιήσεων που δεν είναι συμβατές με την επιλεγμένη έκδοση εφαρμογής",
|
||||
"requireSuggestedAppVersionLabel": "Απαιτείται η προτεινόμενη έκδοση εφαρμογής",
|
||||
"requireSuggestedAppVersionLabel": "Να απαιτείται η προτεινόμενη έκδοση εφαρμογής",
|
||||
"requireSuggestedAppVersionHint": "Αποκλεισμός επιλογής εκδόσεων εφαρμογών που δεν προτείνονται",
|
||||
"requireSuggestedAppVersionDialogText": "Επιλέγοντας μια εφαρμογή που δεν έχει την προτεινόμενη έκδοση μπορεί να προκαλέσει μη αναμενόμενα προβλήματα.\n\nΘέλετε να προχωρήσετε ούτως ή άλλως;",
|
||||
"requireSuggestedAppVersionDialogText": "Η επιλογή μιας εφαρμογής που δεν είναι η προτεινόμενη έκδοση μπορεί να επιφέρει μη αναμενόμενα προβλήματα.\n\nΘέλετε να προχωρήσετε ούτως ή άλλως;",
|
||||
"aboutLabel": "Σχετικά με",
|
||||
"snackbarMessage": "Αντιγράφηκε στο πρόχειρο",
|
||||
"restartAppForChanges": "Επανεκκινήστε την εφαρμογή για να εφαρμόσετε αλλαγές",
|
||||
@ -225,8 +228,8 @@
|
||||
"deletedLogs": "Τα αρχεία καταγραφής έχουν διαγραφεί",
|
||||
"regenerateKeystoreLabel": "Επανέκδοση keystore",
|
||||
"regenerateKeystoreHint": "Επαναφορά του keystore που χρησιμοποιείται για την υπογραφή των εφαρμογών",
|
||||
"regenerateKeystoreDialogTitle": "Επαναφορά keystore;",
|
||||
"regenerateKeystoreDialogText": "Τροποποιημένες εφαρμογές που είχαν υπογράφει με το παλιό keystore δε γίνεται να ενημερώνονται.",
|
||||
"regenerateKeystoreDialogTitle": "Επανέκδοση του keystore;",
|
||||
"regenerateKeystoreDialogText": "Οι τροποποιημένες εφαρμογές που είχαν υπογραφεί με το παλιό keystore δε θα μπορούν πλέον να ενημερώνονται.",
|
||||
"regeneratedKeystore": "Το keystore ανανεώθηκε",
|
||||
"exportKeystoreLabel": "Εξαγωγή keystore",
|
||||
"exportKeystoreHint": "Εξάγετε το κλειδί που χρησιμοποιείται για την υπογραφή των εφαρμογών",
|
||||
@ -252,7 +255,7 @@
|
||||
"lastPatchedAppDescription": "Αυτό είναι ένα αντίγραφο ασφαλείας της εφαρμογής που τροποποιήθηκε τελευταία.",
|
||||
"unmountDialogText": "Είστε βέβαιοι ότι θέλετε να αποπροσαρτήσετε αυτήν την εφαρμογή;",
|
||||
"uninstallDialogText": "Είστε βέβαιοι ότι θέλετε να απεγκαταστήσετε αυτή την εφαρμογή;",
|
||||
"rootDialogText": "Η εφαρμογή εγκαταστάθηκε με πρόσβαση root, αλλά αυτή τη στιγμή το ReVanced Manager δεν έχει πρόσβαση root.\nΠαρακαλώ παραχωρήστε πρόσβαση root.",
|
||||
"rootDialogText": "Η εφαρμογή εγκαταστάθηκε με πρόσβαση root, αλλά αυτή τη στιγμή το ReVanced Manager δεν έχει πρόσβαση root.\nΠαρακαλούμε παραχωρήστε πρόσβαση root.",
|
||||
"removeAppDialogTitle": "Διαγραφή εφαρμογής;",
|
||||
"removeAppDialogText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το αντίγραφο ασφαλείας;",
|
||||
"packageNameLabel": "Όνομα πακέτου",
|
||||
@ -280,19 +283,19 @@
|
||||
"status_failure_conflict": "Η εγκατάσταση αντικρούστηκε",
|
||||
"status_failure_storage": "Πρόβλημα αποθηκευτικού χώρου εγκατάστασης",
|
||||
"status_failure_incompatible": "Μη συμβατή εγκατάσταση",
|
||||
"status_failure_timeout": "Τέλος χρόνου για την εγκατάσταση",
|
||||
"status_failure_timeout": "Τέλος χρονικού ορίου για την εγκατάσταση",
|
||||
"status_unknown": "Η εγκατάσταση απέτυχε",
|
||||
"mount_version_mismatch_description": "Η εγκατάσταση απέτυχε διότι η εγκατεστημένη εφαρμογή έχει διαφορετική έκδοση από την τροποποιημένη εφαρμογή.\n\nΕγκαταστήστε την έκδοση της εφαρμογής που προσαρτήσατε και δοκιμάστε ξανά.",
|
||||
"mount_no_root_description": "Η εγκατάσταση απέτυχε διότι δεν παραχωρήθηκε πρόσβαση root.\n\nΠαραχωρήστε πρόσβαση root στο ReVanced Manager και δοκιμάστε ξανά.",
|
||||
"mount_missing_installation_description": "Η εγκατάσταση απέτυχε διότι η μη τροποποιημένη εφαρμογή δεν έχει εγκατασταθεί σε αυτή τη συσκευή ώστε να την προσαρτήσετε.\n\nΕγκαταστήστε την μη τροποποιημένη εφαρμογή προτού την προσαρτήσετε και δοκιμάστε ξανά.",
|
||||
"status_failure_timeout_description": "Η εγκατάσταση περισσότερη ώρα από το φυσιολογικό για να ολοκληρωθεί.\n\nΘέλετε να δοκιμάσετε ξανά;",
|
||||
"status_failure_timeout_description": "Η εγκατάσταση πήρε περισσότερη ώρα από το φυσιολογικό για να ολοκληρωθεί.\n\nΘέλετε να δοκιμάσετε ξανά;",
|
||||
"status_failure_storage_description": "Η εγκατάσταση απέτυχε λόγο μη επαρκούς χώρου.\n\nΑπελευθερώστε χώρο και δοκιμάστε ξανά.",
|
||||
"status_failure_invalid_description": "Η εγκατάσταση απέτυχε επειδή η τροποποιημένη εφαρμογή είναι μη έγκυρη.\n\nΑπεγκατάσταση εφαρμογής και προσπάθεια ξανά;",
|
||||
"status_failure_incompatible_description": "Η εφαρμογή δεν είναι συμβατή με αυτήν τη συσκευή.\n\nΧρησιμοποιήστε ένα APK που υποστηρίζεται από αυτήν τη συσκευή και δοκιμάστε ξανά.",
|
||||
"status_failure_conflict_description": "Η εγκατάσταση εμποδίστηκε από μια ήδη υπάρχων εγκατάσταση της εφαρμογής.\n\nΑπεγκατάσταση εφαρμογής και προσπάθεια ξανά;",
|
||||
"status_failure_blocked_description": "Η εγκατάσταση αποκλείστηκε από το ${packageName}.\n\nΡυθμίστε τις ρυθμίσεις ασφαλείας σας και δοκιμάστε ξανά.",
|
||||
"install_failed_verification_failure_description": "Η εγκατάσταση απέτυχε λόγο θέματος επαλήθευσης.\n\nΡυθμίστε τις ρυθμίσεις ασφαλείας σας και δοκιμάστε ξανά.",
|
||||
"install_failed_version_downgrade_description": "Η εγκατάσταση απέτυχε διότι η τροποποιημένη εφαρμογή έχει χαμηλότερη έκδοση από την εγκατεστημένη εφαρμογή.\n\nΑπεγκατάσταση εφαρμογής και προσπάθεια ξανά;",
|
||||
"status_unknown_description": "Η εγκατάσταση απέτυχε για κάποιον άγνωστο λόγο.\nΠαρακαλώ δοκιμάστε ξανά."
|
||||
"status_failure_blocked_description": "Η εγκατάσταση αποκλείστηκε από το ${packageName}.\n\nΠροσαρμόστε τις ρυθμίσεις ασφαλείας σας και δοκιμάστε ξανά.",
|
||||
"install_failed_verification_failure_description": "Η εγκατάσταση απέτυχε λόγω προβλήματος επαλήθευσης.\n\nΠροσαρμόστε τις ρυθμίσεις ασφαλείας σας και δοκιμάστε ξανά.",
|
||||
"install_failed_version_downgrade_description": "Η εγκατάσταση απέτυχε διότι η τροποποιημένη εφαρμογή είναι χαμηλότερης έκδοσης από την εγκατεστημένη εφαρμογή.\n\nΑπεγκατάσταση εφαρμογής και προσπάθεια ξανά;",
|
||||
"status_unknown_description": "Η εγκατάσταση απέτυχε για άγνωστο λόγο. Παρακαλούμε δοκιμάστε ξανά."
|
||||
}
|
||||
}
|
@ -180,6 +180,9 @@
|
||||
"disablePatchesSelectionWarningText": "You are about to disable changing the selection of patches.\nThe default selection of patches will be restored.\n\nDisable anyways?",
|
||||
"autoUpdatePatchesLabel": "Auto update patches",
|
||||
"autoUpdatePatchesHint": "Automatically update patches to the latest version",
|
||||
"usePrereleasesLabel": "Use pre-releases",
|
||||
"usePrereleasesHint": "Use pre-release versions of ReVanced Manager and ReVanced Patches",
|
||||
"usePrereleasesWarningText": "Using pre-release versions may cause unexpected issues.\n\nEnable anyways?",
|
||||
"showUpdateDialogLabel": "Show update dialog",
|
||||
"showUpdateDialogHint": "Show a dialog when a new update is available",
|
||||
"universalPatchesLabel": "Show universal patches",
|
||||
|
@ -56,7 +56,7 @@
|
||||
"patchButton": "Parchear",
|
||||
"incompatibleArchWarningDialogText": "Parchear en esta arquitectura aún no está soportado y podría fallar. ¿Continuar de todos modos?",
|
||||
"removedPatchesWarningDialogText": "Parches eliminados desde la última vez que parcheaste esta aplicación:\n\n${patches}\n\n${newPatches}¿Continuar de todos modos?",
|
||||
"addedPatchesDialogText": "Añadidos parches desde la última vez que parcheaste esta aplicación:\n\n${addedPatches}\n\n",
|
||||
"addedPatchesDialogText": "Parches añadidos desde la última vez que parcheaste esta aplicación:\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "Deben establecerse algunas opciones de parche."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
@ -180,6 +180,8 @@
|
||||
"disablePatchesSelectionWarningText": "Estás a punto de desactivar cambiar la selección de parches.\nLa selección predeterminada de parches se restaurará.\n\n¿Deshabilitar de todos modos?",
|
||||
"autoUpdatePatchesLabel": "Actualizar automáticamente los parches",
|
||||
"autoUpdatePatchesHint": "Actualizar automáticamente los parches a la última versión",
|
||||
"usePrereleasesLabel": "Usar versiones preliminares",
|
||||
"usePrereleasesHint": "Usar versiones previas de ReVanced Manager y ReVanced Parches",
|
||||
"showUpdateDialogLabel": "Mostrar diálogo de actualización",
|
||||
"showUpdateDialogHint": "Mostrar un diálogo cuando una nueva actualización esté disponible",
|
||||
"universalPatchesLabel": "Mostrar parches universales",
|
||||
|
@ -29,7 +29,7 @@
|
||||
"noSavedAppFound": "Rakendust ei leitud",
|
||||
"noInstallations": "Parandatud rakendusi pole installitud",
|
||||
"installUpdate": "Kas soovite uuenduse installida?",
|
||||
"updateSheetTitle": "Uuenda ReVanced Managerit",
|
||||
"updateSheetTitle": "Värskenda ReVanced Manager",
|
||||
"updateDialogTitle": "Uus uuendus on saadaval",
|
||||
"updatePatchesSheetTitle": "Uuenda ReVancedi parandusi",
|
||||
"updateChangelogTitle": "Muudatuste log",
|
||||
@ -180,6 +180,7 @@
|
||||
"disablePatchesSelectionWarningText": "Te olete peaaegu keelamas paranduste valiku muutmise.\nParanduste vaikimisi valik taastatakse.\n\nKas keelate ikkagi?",
|
||||
"autoUpdatePatchesLabel": "Automaatne paranduste uuendamine",
|
||||
"autoUpdatePatchesHint": "Uuenda parandused automaatselt uusimasse versiooni",
|
||||
"usePrereleasesLabel": "Kasuta eelväljalaskeid",
|
||||
"showUpdateDialogLabel": "Näita uuenduse dialoogi",
|
||||
"showUpdateDialogHint": "Näita dialoogi, kui on saadaval uus uuendus",
|
||||
"universalPatchesLabel": "Näita universaalseid parandusi",
|
||||
|
@ -55,7 +55,7 @@
|
||||
"widgetTitle": "Paikkaaja",
|
||||
"patchButton": "Paikkaa",
|
||||
"incompatibleArchWarningDialogText": "Paikkaamista ei vielä tueta tällä kokoonpanolla, ja se saattaa epäonnistua. Jatketaanko silti?",
|
||||
"removedPatchesWarningDialogText": "Poistetut paikat viimeisen laastariesi jälkeen tämän sovelluksen:\n\n${patches}\n\n${newPatches}Jatka joka tapauksessa?",
|
||||
"removedPatchesWarningDialogText": "Paikkaukset, jotka on poistettu sen jälkeen, kun viimeksi paikkasit tämän sovelluksen:\n\n${patches}\n\n${newPatches}Jatketaanko silti?",
|
||||
"addedPatchesDialogText": "Sen jälkeen, kun viimeksi paikkasit tämän sovelluksen lisätyt paikkaukset:\n\n${addedPatches}",
|
||||
"requiredOptionDialogText": "Joitakin paikkausasetuksia on määritettävä."
|
||||
},
|
||||
@ -145,7 +145,7 @@
|
||||
"widgetTitle": "Asetukset",
|
||||
"appearanceSectionTitle": "Ulkoasu",
|
||||
"teamSectionTitle": "Tiimi",
|
||||
"debugSectionTitle": "Vianselvitys",
|
||||
"debugSectionTitle": "Virheenkorjaus",
|
||||
"advancedSectionTitle": "Lisäasetukset",
|
||||
"exportSectionTitle": "Tuonti ja vienti",
|
||||
"dataSectionTitle": "Tietolähteet",
|
||||
@ -158,13 +158,13 @@
|
||||
"languageLabel": "Kieli",
|
||||
"languageUpdated": "Kieli on vaihdettu",
|
||||
"sourcesLabel": "Vaihtoehtoiset lähteet",
|
||||
"sourcesLabelHint": "Määritä käytöstä poistettujen paikkojen vaihtoehtoiset lähteet",
|
||||
"sourcesLabelHint": "Määritä ReVanced Patchesien vaihtoehtoiset lähteet",
|
||||
"useAlternativeSources": "Käytä vaihtoehtoisia lähteitä",
|
||||
"useAlternativeSourcesHint": "Käytä vaihtoehtoisia lähteitä ReVanced Patches sijasta API",
|
||||
"useAlternativeSourcesHint": "Käytä vaihtoehtoisia ReVanced Patches -lähteitä API:n sijaan",
|
||||
"sourcesResetDialogTitle": "Palauta",
|
||||
"sourcesResetDialogText": "Haluatko varmasti palauttaa oletuslähteet?",
|
||||
"apiURLResetDialogText": "Haluatko varmasti palauttaa oletusarvoisen API:n URL-osoitteen?",
|
||||
"sourcesUpdateNote": "Huomautus: Tämä lataa automaattisesti ReVanced Patches vaihtoehtoisista lähteistä.\n\nTämä yhdistää sinut vaihtoehtoiseen lähteeseen.",
|
||||
"sourcesUpdateNote": "Huomaa: Tämä lataa automaattisesti ReVanced Patchesin vaihtoehtoisista lähteistä.\n\nTämä yhdistää sinut vaihtoehtoiseen lähteeseen.",
|
||||
"apiURLLabel": "API:n URL-osoite",
|
||||
"apiURLHint": "Määritä ReVanced Managerin API:N URL-osoite",
|
||||
"selectApiURL": "API:n URL-osoite",
|
||||
@ -180,12 +180,15 @@
|
||||
"disablePatchesSelectionWarningText": "Olet poistamassa paikkausvalikoiman muokkauksen käytöstä.\nOletusarvoiset paikkasvalikoimat palautetaan.\n\nEstetäänkö se silti?",
|
||||
"autoUpdatePatchesLabel": "Päivitä paikkaukset automaattisesti",
|
||||
"autoUpdatePatchesHint": "Päivitä paikkaukset automaattisesti uusimpiin versioihin",
|
||||
"usePrereleasesLabel": "Käytä ennakkojulkaisuja",
|
||||
"usePrereleasesHint": "Käytä ReVanced Managerin ja ReVanced Patchesien ennakkojulkaisuversioita",
|
||||
"usePrereleasesWarningText": "Ennakkojulkaisuversioiden käyttäminen voi aiheuttaa odottamattomia ongelmia.\n\nOtetaanko se silti käyttöön?",
|
||||
"showUpdateDialogLabel": "Näytä päivitysruutu",
|
||||
"showUpdateDialogHint": "Näytä ilmoitus, kun uusi päivitys on saatavilla",
|
||||
"universalPatchesLabel": "Näytä yleispaikkaukset",
|
||||
"universalPatchesHint": "Näytä kaikki sovellukset ja yleispaikkaukset (voi hidastaa sovelluslistausta)",
|
||||
"lastPatchedAppLabel": "Tallenna paikattu sovellus",
|
||||
"lastPatchedAppHint": "Tallenna viimeinen laastari asentaaksesi tai vieäksesi myöhemmin",
|
||||
"lastPatchedAppHint": "Tallenna viimeisin paikkaus myöhempää asennusta tai vientiä varten",
|
||||
"versionCompatibilityCheckLabel": "Version yhteensopivuustarkastus",
|
||||
"versionCompatibilityCheckHint": "Estä valitsemasta valitun sovellusversion kanssa yhteensopimattomia paikkauksia",
|
||||
"requireSuggestedAppVersionLabel": "Vaadi ehdotettu sovellusversio",
|
||||
|
@ -60,7 +60,7 @@
|
||||
"requiredOptionDialogText": "Kailangan mo i-set ang ilang mga opsyon para sa patch."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Pumili ka ng app",
|
||||
"widgetTitle": "Pumili ka ng apps",
|
||||
"widgetTitleSelected": "Piniling app",
|
||||
"widgetSubtitle": "Walang app na pinili",
|
||||
"noAppsLabel": "Walang nakitang aplikasyon",
|
||||
@ -180,6 +180,7 @@
|
||||
"disablePatchesSelectionWarningText": "Ikaw ay malapit nang magdisable sa pagpalit ng mga pinili na patches.\nDahil dyan, ang karaniwang pagpili ng mga patch ay maibalik.\n\nI-disable pa rin?",
|
||||
"autoUpdatePatchesLabel": "Auto update patches",
|
||||
"autoUpdatePatchesHint": "Awtomatikong i-update ang mga patch sa pinakabagong bersyon",
|
||||
"usePrereleasesLabel": "Gumamit ng mga pre-release",
|
||||
"showUpdateDialogLabel": "Ipakita ang dialog ng update",
|
||||
"showUpdateDialogHint": "Ipakita ang isang dialog kapag magagamit ang isang bagong update",
|
||||
"universalPatchesLabel": "Ipakita ang mga pangkalahatang patch",
|
||||
|
@ -4,7 +4,7 @@
|
||||
"dismissButton": "Ignorer",
|
||||
"quitButton": "Quitter",
|
||||
"updateButton": "Mettre à jour",
|
||||
"suggested": "Version suggérée : ${version}",
|
||||
"suggested": "Suggéré : ${version}",
|
||||
"yesButton": "Oui",
|
||||
"noButton": "Non",
|
||||
"warning": "Avertissement",
|
||||
@ -12,8 +12,8 @@
|
||||
"noShowAgain": "Ne plus afficher",
|
||||
"add": "Ajouter",
|
||||
"remove": "Retirer",
|
||||
"showChangelogButton": "Journal des modifications",
|
||||
"showUpdateButton": "Afficher les mises à jour",
|
||||
"showChangelogButton": "Voir l'historique",
|
||||
"showUpdateButton": "Voir la mise à jour",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Tableau de bord",
|
||||
"patcherTab": "Patcheur",
|
||||
@ -23,20 +23,20 @@
|
||||
"refreshSuccess": "Actualisé avec succès",
|
||||
"widgetTitle": "Tableau de bord",
|
||||
"updatesSubtitle": "Mises à jour",
|
||||
"lastPatchedAppSubtitle": "Dernière application patchée",
|
||||
"patchedSubtitle": "Applications installées",
|
||||
"lastPatchedAppSubtitle": "Dernière appli patchée",
|
||||
"patchedSubtitle": "Applis installées",
|
||||
"changeLaterSubtitle": "Vous pouvez changer cela dans les paramètres ultérieurement.",
|
||||
"noSavedAppFound": "Aucune application trouvée",
|
||||
"noSavedAppFound": "Aucune appli trouvée",
|
||||
"noInstallations": "Aucune application patchée installée",
|
||||
"installUpdate": "Continuer à installer la mise à jour ?",
|
||||
"installUpdate": "Continuer à installer la mise à jour ?",
|
||||
"updateSheetTitle": "Mettre à jour ReVanced Manager",
|
||||
"updateDialogTitle": "Nouvelle mise à jour disponible",
|
||||
"updatePatchesSheetTitle": "Mettre à jour les patchs ReVanced",
|
||||
"updateChangelogTitle": "Journal des modifications",
|
||||
"updateDialogText": "Une nouvelle mise à jour est disponible pour ${file}.\n\nLa version actuellement installée est la version ${version}.",
|
||||
"downloadConsentDialogTitle": "Télécharger les fichiers nécessaires ?",
|
||||
"downloadConsentDialogText": "ReVanced Manager doit télécharger les fichiers nécessaires pour fonctionner correctement.",
|
||||
"downloadConsentDialogText2": "Vous allez être connecté à ${url}.",
|
||||
"downloadConsentDialogTitle": "Télécharger les fichiers requis ?",
|
||||
"downloadConsentDialogText": "ReVanced Manager doit télécharger les fichiers nécessaires à son bon fonctionnement.",
|
||||
"downloadConsentDialogText2": "Cette opération vous connectera à ${url}.",
|
||||
"downloadingMessage": "Téléchargement de la mise à jour...",
|
||||
"downloadedMessage": "Mise à jour téléchargée",
|
||||
"installingMessage": "Installation de la mise à jour...",
|
||||
@ -45,7 +45,7 @@
|
||||
"noConnection": "Aucune connexion internet"
|
||||
},
|
||||
"applicationItem": {
|
||||
"infoButton": "Info"
|
||||
"infoButton": "Infos"
|
||||
},
|
||||
"latestCommitCard": {
|
||||
"loadingLabel": "Chargement...",
|
||||
@ -54,9 +54,9 @@
|
||||
"patcherView": {
|
||||
"widgetTitle": "Patcheur",
|
||||
"patchButton": "Patcher",
|
||||
"incompatibleArchWarningDialogText": "La correction sur cette architecture n'est pas encore prise en charge et pourrait échouer. Continuer quand même ?",
|
||||
"removedPatchesWarningDialogText": "Les patchs supprimés depuis la dernière fois que vous avez patché cette application :\n\n${patches}\n\n${newPatches}Continuer quand même ?",
|
||||
"addedPatchesDialogText": "Ajout de correctifs depuis la dernière fois que vous avez patché cette application :\n\n${addedPatches}\n\n",
|
||||
"incompatibleArchWarningDialogText": "Patcher sur cette architecture n'est pas encore pris en charge et pourrait échouer. Continuer quand même ?",
|
||||
"removedPatchesWarningDialogText": "Patchs supprimés depuis la dernière fois que vous avez patché cette application :\n\n${patches}\n\n${newPatches}Continuer quand même ?",
|
||||
"addedPatchesDialogText": "Patchs ajoutés depuis la dernière fois que vous avez patché cette application :\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "Certaines options de patch doivent être définies."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
@ -77,18 +77,18 @@
|
||||
"widgetSubtitle": "Nous sommes en ligne !"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Sélectionner une application",
|
||||
"viewTitle": "Sélectionnez une appli",
|
||||
"searchBarHint": "Rechercher une application",
|
||||
"storageButton": "Stockage",
|
||||
"selectFromStorageButton": "Sélectionner depuis le stockage",
|
||||
"selectFromStorageButton": "Sélectionner à partir du stockage",
|
||||
"errorMessage": "Impossible d'utiliser l'application sélectionnée",
|
||||
"downloadToast": "La fonction de téléchargement est actuellement indisponible",
|
||||
"requireSuggestedAppVersionDialogText": "La version de l'application que vous avez sélectionné ne correspond pas à la version recommandée ce qui pourrait créer des problèmes inattendus. Veuillez utiliser la version recommendée.\n\nVersion sélectionnée : ${selected}\nVersion recommendée : ${suggested}\n\nPour continuer quand même, désactivez \"Exiger la version recommendée de l'application\" dans les paramètres.",
|
||||
"requireSuggestedAppVersionDialogText": "La version de l'application que vous avez sélectionnée ne correspond pas à la version recommandée, ce qui pourrait engendrer des problèmes inattendus. Veuillez utiliser la version suggérée.\n\nVersion sélectionnée : ${selected}\nVersion suggérée : ${suggested}\n\nPour continuer quand même, désactivez \"Exiger la version suggérée de l'appli\" dans les paramètres.",
|
||||
"featureNotAvailable": "Fonctionnalité non implémentée",
|
||||
"featureNotAvailableText": "Cette application est un APK fractionné et ne peut être corrigée et installée de manière fiable qu'en la montant avec les autorisations administrateur. Toutefois, vous pouvez patcher et installer un APK complet en le sélectionnant depuis le stockage."
|
||||
"featureNotAvailableText": "Cette appli est un APK fractionné et ne peut être patchée et installée de manière fiable uniquement en la montant avec les privilèges root. Vous pouvez toutefois patcher et installer un APK classique en le sélectionnant à partir du stockage."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Sélectionner les patchs",
|
||||
"viewTitle": "Choix des patchs",
|
||||
"searchBarHint": "Rechercher des patchs",
|
||||
"universalPatches": "Patchs universels",
|
||||
"newPatches": "Nouveaux patchs",
|
||||
@ -98,101 +98,104 @@
|
||||
"defaultTooltip": "Sélectionner tous les patchs par défaut",
|
||||
"noneChip": "Aucun",
|
||||
"noneTooltip": "Désélectionner tous les patchs",
|
||||
"loadPatchesSelection": "Charger les patchs sélectionnés",
|
||||
"noSavedPatches": "Aucune sélection de patchs enregistrée pour l'application sélectionnée.\nAppuyez sur Terminé pour sauvegarder la sélection actuelle.",
|
||||
"loadPatchesSelection": "Charger la sélection de patchs",
|
||||
"noSavedPatches": "Aucune sélection de patchs enregistrée pour l'application sélectionnée.\nAppuyez sur Terminé pour enregistrer la sélection actuelle.",
|
||||
"noPatchesFound": "Aucun patch n'a été trouvé pour l'application sélectionnée",
|
||||
"setRequiredOption": "Certains correctifs nécessitent des options à définir :\n\n${patches}\n\nVeuillez les définir avant de continuer."
|
||||
"setRequiredOption": "Certains patchs ont des options qui doivent obligatoirement être définies :\n\n${patches}\n\nVeuillez les définir avant de continuer."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Valeur personnalisée",
|
||||
"setToNull": "Définir à NULL",
|
||||
"nullValue": "Cette valeur d'option est actuellement nulle",
|
||||
"setToNull": "Définir sur null",
|
||||
"nullValue": "Cette option est actuellement définie sur null",
|
||||
"viewTitle": "Options de patch",
|
||||
"saveOptions": "Enregistrer",
|
||||
"unselectPatch": "Désélectionner le correctif",
|
||||
"tooltip": "Plus d'options d'entrée",
|
||||
"selectFilePath": "Sélectionner l'emplacement du fichier",
|
||||
"selectFolder": "Sélectionner le dossier",
|
||||
"unselectPatch": "Désélectionner le patch",
|
||||
"tooltip": "Plus d'options de saisie",
|
||||
"selectFilePath": "Sélectionner un emplacement de fichier",
|
||||
"selectFolder": "Sélectionner un dossier",
|
||||
"requiredOption": "Définir cette option est nécessaire",
|
||||
"unsupportedOption": "Cette option n'est pas prise en charge",
|
||||
"requiredOptionNull": "Les options suivantes doivent être définies :\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Sélectionner ce patch peut entrainer des erreurs dans la modification.\n\nVersion de l'application : ${packageVersion}\nVersions prises en charge :\n${supportedVersions}",
|
||||
"unsupportedDialogText": "Sélectionner ce patch peut engendrer des erreurs de patching.\n\nVersion de l'application : ${packageVersion}\nVersions prises en charge :\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Le patch n'est pas pris en charge pour cette version de l'application.",
|
||||
"unsupportedRequiredOption": "Ce patch contient une option requise qui n'est pas prise en charge par cette application",
|
||||
"patchesChangeWarningDialogText": "Il est recommandé d'utiliser les patchs et options par défaut. Leur modification peut entraîner des problèmes inattendus.\n\nVous aurez besoin d'activer « Autoriser la modification de la sélection de patchs » dans les paramètres avant de modifier toute sélection de patchs.",
|
||||
"patchesChangeWarningDialogText": "Il est recommandé d'utiliser la sélection de patchs et les options par défaut. En les modifiant, vous vous exposez à des problèmes inattendus.\n\nAvant de modifier une sélection de patchs, vous devez activer \"Autoriser la modification de la sélection de patchs\" dans les paramètres.",
|
||||
"patchesChangeWarningDialogButton": "Utiliser la sélection par défaut"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Choisissez le mode d'installation",
|
||||
"installType": "Sélectionnez un type d'installation",
|
||||
"installTypeDescription": "Sélectionner le mode d'installation avec lequel continuer.",
|
||||
"installButton": "Installer",
|
||||
"installRootType": "Monter",
|
||||
"installRootType": "Montage",
|
||||
"installNonRootType": "Standard",
|
||||
"warning": "Désactivez les mises à jour automatiques pour l'application patchée afin d'éviter des problèmes inattendus.",
|
||||
"pressBackAgain": "Appuyez sur retour une nouvelle fois pour quitter",
|
||||
"pressBackAgain": "Appuyez à nouveau sur retour pour annuler",
|
||||
"openButton": "Ouvrir",
|
||||
"notificationTitle": "ReVanced Manager est en train de patcher",
|
||||
"notificationText": "Appuyer pour revenir à l’installateur",
|
||||
"exportApkButtonTooltip": "Exporter l'APK corrigé",
|
||||
"exportLogButtonTooltip": "Exporter les journaux",
|
||||
"screenshotDetected": "Une capture d’écran a été détectée. Si vous essayez de partager le journal, veuillez plutôt partager une copie du texte.\n\nCopier les logs dans le presse-papiers ?",
|
||||
"notificationText": "Appuyez pour revenir à l'installation",
|
||||
"exportApkButtonTooltip": "Exporter l'APK patché",
|
||||
"exportLogButtonTooltip": "Exporter le journal",
|
||||
"screenshotDetected": "Une capture d’écran a été détectée. Si vous essayez de partager le journal, veuillez plutôt partager une copie textuelle.\n\nCopier le journal dans le presse-papiers ?",
|
||||
"copiedToClipboard": "Journal copié dans le presse-papiers",
|
||||
"noExit": "L'installateur est toujours en fonctionnement, impossible de quitter..."
|
||||
"noExit": "L'installateur s'exécute encore, impossible de quitter..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Paramètres",
|
||||
"appearanceSectionTitle": "Apparence",
|
||||
"teamSectionTitle": "Équipe",
|
||||
"debugSectionTitle": "Débogage",
|
||||
"advancedSectionTitle": "Avancé",
|
||||
"exportSectionTitle": "Import et export",
|
||||
"advancedSectionTitle": "Avancés",
|
||||
"exportSectionTitle": "Importer et exporter",
|
||||
"dataSectionTitle": "Sources de données",
|
||||
"themeModeLabel": "Thème de l'application",
|
||||
"themeModeLabel": "Thème de l'appli",
|
||||
"systemThemeLabel": "Système",
|
||||
"lightThemeLabel": "Clair",
|
||||
"darkThemeLabel": "Sombre",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Profitez d'une expérience plus proche de votre appareil",
|
||||
"dynamicThemeHint": "Profitez d'une expérience en harmonie avec votre appareil",
|
||||
"languageLabel": "Langue",
|
||||
"languageUpdated": "Langue mise à jour",
|
||||
"sourcesLabel": "Sources alternatives",
|
||||
"sourcesLabelHint": "Configurer les sources alternatives pour les correctifs ReVanced",
|
||||
"sourcesLabelHint": "Configurez les sources alternatives pour les patchs ReVanced",
|
||||
"useAlternativeSources": "Utiliser les sources alternatives",
|
||||
"useAlternativeSourcesHint": "Utiliser des sources alternatives pour les correctifs ReVanced au lieu de l'API",
|
||||
"useAlternativeSourcesHint": "Utilisez des sources alternatives pour les patchs ReVanced plutôt que celles de l'API",
|
||||
"sourcesResetDialogTitle": "Réinitialiser",
|
||||
"sourcesResetDialogText": "Êtes-vous sûr de vouloir réinitialiser vos sources à leurs valeurs par défaut ?",
|
||||
"apiURLResetDialogText": "Êtes-vous sûr de vouloir réinitialiser l'URL d'API à sa valeur par défaut ?",
|
||||
"sourcesUpdateNote": "Remarque : Cela téléchargera automatiquement les correctifs ReVanced à partir des sources alternatives.\n\nCela vous connectera à la source alternative.",
|
||||
"sourcesUpdateNote": "Remarque : Les patchs ReVanced seront téléchargés automatiquement à partir des sources alternatives.\n\nCela vous connectera à la source alternative.",
|
||||
"apiURLLabel": "URL de l'API",
|
||||
"apiURLHint": "Configurer l'URL de l'API de ReVanced Manager",
|
||||
"selectApiURL": "URL de l'API",
|
||||
"orgPatchesLabel": "Organisation des correctifs",
|
||||
"orgPatchesLabel": "Organisation des patchs",
|
||||
"sourcesPatchesLabel": "Source des patchs",
|
||||
"contributorsLabel": "Contributeurs",
|
||||
"contributorsHint": "Liste des contributeurs de ReVanced",
|
||||
"contributorsHint": "Liste des personnes qui contribuent à ReVanced",
|
||||
"logsLabel": "Partager les journaux",
|
||||
"logsHint": "Partager les journaux de ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Autoriser la modification de la sélection de patchs",
|
||||
"enablePatchesSelectionHint": "Ne pas empêcher la sélection ou la désélection des correctifs",
|
||||
"enablePatchesSelectionWarningText": "Le changement de sélection par défaut des correctifs peut causer des problèmes inattendus \n\nActiver quand même ?",
|
||||
"disablePatchesSelectionWarningText": "Vous êtes sur le point de désactiver le changement de sélection par défaut des correctifs.\nLa sélection par défaut des correctifs sera restaurée.\n\nDésactiver quand même ?",
|
||||
"autoUpdatePatchesLabel": "Mise à jour automatique des correctifs",
|
||||
"autoUpdatePatchesHint": "Mise à jour automatique des correctifs ReVanced vers la dernière version",
|
||||
"enablePatchesSelectionHint": "Ne pas empêcher la sélection ou la désélection des patchs",
|
||||
"enablePatchesSelectionWarningText": "Modifier la sélection de patchs peut engendrer des problèmes inattendus.\n\nActiver quand même ?",
|
||||
"disablePatchesSelectionWarningText": "Vous êtes sur le point de désactiver la modification de la sélection de patchs.\nLa sélection de patchs par défaut sera rétablie.\n\nDésactiver quand même ?",
|
||||
"autoUpdatePatchesLabel": "Mise à jour auto. des patchs",
|
||||
"autoUpdatePatchesHint": "Mettre à jour automatiquement les patchs vers la dernière version",
|
||||
"usePrereleasesLabel": "Utiliser les préversions",
|
||||
"usePrereleasesHint": "Utilisez les versions préliminaires de ReVanced Manager et ReVanced Patches",
|
||||
"usePrereleasesWarningText": "L'utilisation de versions préliminaires peut entraîner des problèmes inattendus.\n\nActiver quand même ?",
|
||||
"showUpdateDialogLabel": "Afficher la boîte de dialogue de mise à jour",
|
||||
"showUpdateDialogHint": "Affiche une boîte de dialogue quand une nouvelle mise à jour est disponible",
|
||||
"universalPatchesLabel": "Afficher les correctifs universels",
|
||||
"universalPatchesHint": "Afficher toutes les applications et les correctifs universels (peut ralentir la liste des applications)",
|
||||
"lastPatchedAppLabel": "Enregistrer l'application corrigée",
|
||||
"lastPatchedAppHint": "Enregistrer le dernier correctif pour installer ou exporter plus tard",
|
||||
"showUpdateDialogHint": "Afficher une boîte de dialogue lorsqu'une nouvelle mise à jour est disponible",
|
||||
"universalPatchesLabel": "Afficher les patchs universels",
|
||||
"universalPatchesHint": "Afficher toutes les applis et les patchs universels (peut ralentir la liste d'applis)",
|
||||
"lastPatchedAppLabel": "Enregistrer l'application patchée",
|
||||
"lastPatchedAppHint": "Enregistrer le dernier patch pour l'installer ou l'exporter plus tard",
|
||||
"versionCompatibilityCheckLabel": "Vérification de la compatibilité des versions",
|
||||
"versionCompatibilityCheckHint": "Empêcher la sélection de correctifs qui ne sont pas compatibles avec la version sélectionnée de l'application",
|
||||
"requireSuggestedAppVersionLabel": "Requiert la version suggérée de l'application",
|
||||
"requireSuggestedAppVersionHint": "Empêcher la sélection d'une application avec une version qui n'est pas celle suggérée",
|
||||
"requireSuggestedAppVersionDialogText": "La sélection d'une application qui n'est pas la version suggérée peut causer des problèmes inattendus.\n\nVoulez-vous quand même continuer ?",
|
||||
"versionCompatibilityCheckHint": "Empêcher de sélectionner des patchs qui ne sont pas compatibles avec la version sélectionnée de l'appli",
|
||||
"requireSuggestedAppVersionLabel": "Exiger la version suggérée de l'appli",
|
||||
"requireSuggestedAppVersionHint": "Empêcher la sélection d'une appli dont la version n'est pas celle suggérée",
|
||||
"requireSuggestedAppVersionDialogText": "Sélectionner une appli dont la version n'est pas celle suggérée peut engendrer des problèmes inattendus.\n\nVoulez-vous quand même continuer ?",
|
||||
"aboutLabel": "À propos",
|
||||
"snackbarMessage": "Copié dans le presse-papier",
|
||||
"snackbarMessage": "Copié dans le presse-papiers",
|
||||
"restartAppForChanges": "Redémarrez l'application pour appliquer les changements",
|
||||
"deleteTempDirLabel": "Supprimer les fichiers temporaires",
|
||||
"deleteTempDirHint": "Supprimer les fichiers temporaires inutilisés",
|
||||
@ -203,30 +206,30 @@
|
||||
"importSettingsLabel": "Importer les paramètres",
|
||||
"importSettingsHint": "Importer les paramètres depuis un fichier JSON",
|
||||
"importedSettings": "Paramètres importés",
|
||||
"exportPatchesLabel": "Exporter la sélection de correctifs",
|
||||
"exportPatchesHint": "Exporter la sélection de correctifs vers un fichier JSON",
|
||||
"exportedPatches": "Sélection de correctifs exportée",
|
||||
"noExportFileFound": "Aucune sélection de correctif à exporter",
|
||||
"importPatchesLabel": "Importer une sélection de correctifs",
|
||||
"importPatchesHint": "Importer une sélection de correctifs depuis un fichier JSON",
|
||||
"importedPatches": "Sélection de correctifs importée",
|
||||
"resetStoredPatchesLabel": "Réinitialiser la sélection des correctifs",
|
||||
"resetStoredPatchesHint": "Réinitialiser la sélection des correctifs sauvegardés",
|
||||
"resetStoredPatchesDialogTitle": "Réinitialiser la sélection des correctifs ?",
|
||||
"resetStoredPatchesDialogText": "La sélection par défaut des correctifs sera restaurée.",
|
||||
"resetStoredPatches": "La sélection des correctifs a été réinitialisée",
|
||||
"resetStoredOptionsLabel": "Réinitialiser les options de correctif",
|
||||
"resetStoredOptionsHint": "Réinitialiser toutes les options de correctif",
|
||||
"resetStoredOptionsDialogTitle": "Réinitialiser les options de correctif ?",
|
||||
"resetStoredOptionsDialogText": "La réinitialisation des options de correctif supprimera toutes les options enregistrées.",
|
||||
"exportPatchesLabel": "Exporter la sélection de patchs",
|
||||
"exportPatchesHint": "Exporter la sélection de patchs vers un fichier JSON",
|
||||
"exportedPatches": "Sélection de patchs exportée",
|
||||
"noExportFileFound": "Aucune sélection de patchs à exporter",
|
||||
"importPatchesLabel": "Importer une sélection de patchs",
|
||||
"importPatchesHint": "Importer une sélection de patchs depuis un fichier JSON",
|
||||
"importedPatches": "Sélection de patchs importée",
|
||||
"resetStoredPatchesLabel": "Réinitialiser la sélection de patchs",
|
||||
"resetStoredPatchesHint": "Réinitialiser la sélection de patchs sauvegardée",
|
||||
"resetStoredPatchesDialogTitle": "Réinitialiser la sélection de patchs ?",
|
||||
"resetStoredPatchesDialogText": "La sélection de patchs par défaut sera restaurée.",
|
||||
"resetStoredPatches": "La sélection de patchs a été réinitialisée",
|
||||
"resetStoredOptionsLabel": "Réinitialiser les options des patchs",
|
||||
"resetStoredOptionsHint": "Réinitialiser toutes les options des patchs",
|
||||
"resetStoredOptionsDialogTitle": "Réinitialiser les options des patchs ?",
|
||||
"resetStoredOptionsDialogText": "Réinitialiser les options des patchs aura pour effet de supprimer toutes les options enregistrées.",
|
||||
"resetStoredOptions": "Les options ont été réinitialisées",
|
||||
"deleteLogsLabel": "Effacer les journaux",
|
||||
"deleteLogsHint": "Supprimer les journaux collectés de ReVanced Manager",
|
||||
"deleteLogsHint": "Supprimer les journaux collectés par ReVanced Manager",
|
||||
"deletedLogs": "Journaux supprimés",
|
||||
"regenerateKeystoreLabel": "Régénérer le magasin de clés",
|
||||
"regenerateKeystoreHint": "Régénérer le magasin de clés utilisé pour signer l'application",
|
||||
"regenerateKeystoreHint": "Recréer le magasin de clés utilisé pour signer les applications",
|
||||
"regenerateKeystoreDialogTitle": "Régénérer le magasin de clés ?",
|
||||
"regenerateKeystoreDialogText": "Les applications corrigées signées avec l’ancien magasin de clés ne pourront plus être mises à jour.",
|
||||
"regenerateKeystoreDialogText": "Les applications patchées qui ont été signées avec l'ancien stockage de clés ne pourront plus être mises à jour.",
|
||||
"regeneratedKeystore": "Magasin de clés régénéré",
|
||||
"exportKeystoreLabel": "Exporter le magasin de clés",
|
||||
"exportKeystoreHint": "Exporter le magasin de clés utilisé pour signer les applications",
|
||||
@ -238,10 +241,10 @@
|
||||
"selectKeystorePassword": "Mot de passe du magasin de clés",
|
||||
"selectKeystorePasswordHint": "Sélectionner le mot de passe du magasin de clés utilisé pour signer les applications",
|
||||
"jsonSelectorErrorMessage": "Impossible d'utiliser le fichier JSON sélectionné",
|
||||
"keystoreSelectorErrorMessage": "Impossible d'utiliser le fichier de magasin de clés sélectionné"
|
||||
"keystoreSelectorErrorMessage": "Impossible d'utiliser le fichier de stockage de clés sélectionné"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Infos de l'application",
|
||||
"widgetTitle": "Infos sur l'appli",
|
||||
"openButton": "Ouvrir",
|
||||
"installButton": "Installer",
|
||||
"uninstallButton": "Désinstaller",
|
||||
@ -249,22 +252,22 @@
|
||||
"exportButton": "Exporter",
|
||||
"deleteButton": "Supprimer",
|
||||
"rootDialogTitle": "Erreur",
|
||||
"lastPatchedAppDescription": "Il s'agit d'une sauvegarde de la dernière application qui a été corrigée. ",
|
||||
"lastPatchedAppDescription": "Il s'agit d'une sauvegarde de la dernière application qui a été patchée.",
|
||||
"unmountDialogText": "Êtes-vous sûr de vouloir démonter cette application ?",
|
||||
"uninstallDialogText": "Êtes-vous sûr de vouloir désinstaller cette application ?",
|
||||
"rootDialogText": "L'application a été installée avec les permissions administrateur, mais ReVanced Manager n'a actuellement aucune permission.\nVeuillez d'abord accorder l'accès administrateur.",
|
||||
"rootDialogText": "L'application a été installée avec les autorisations superutilisateur, mais ReVanced Manager n'a actuellement aucune autorisation.\nVeuillez commencer par accorder les autorisations superutilisateur.",
|
||||
"removeAppDialogTitle": "Supprimer l'application ?",
|
||||
"removeAppDialogText": "Êtes-vous sûr de vouloir supprimer cette sauvegarde ?",
|
||||
"packageNameLabel": "Nom du paquet",
|
||||
"installTypeLabel": "Type d'installation",
|
||||
"mountTypeLabel": "Monter",
|
||||
"mountTypeLabel": "Montage",
|
||||
"regularTypeLabel": "Standard",
|
||||
"patchedDateLabel": "Date de correction",
|
||||
"appliedPatchesLabel": "Correctifs appliqués",
|
||||
"sizeLabel": "Taille du fichier",
|
||||
"patchedDateHint": "le ${date} à ${time}",
|
||||
"appliedPatchesHint": "${quantity} correctifs appliqués",
|
||||
"updateNotImplemented": "Cette fonctionnalité n'est pas encore disponible"
|
||||
"patchedDateLabel": "Patché le",
|
||||
"appliedPatchesLabel": "Patchs appliqués",
|
||||
"sizeLabel": "Taille de fichier",
|
||||
"patchedDateHint": "${date} à ${time}",
|
||||
"appliedPatchesHint": "${quantity} patchs appliqués",
|
||||
"updateNotImplemented": "Cette fonctionnalité n'a pas encore été implémentée"
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Contributeurs"
|
||||
@ -276,23 +279,23 @@
|
||||
"status_failure_blocked": "Installation bloquée",
|
||||
"install_failed_verification_failure": "Échec de la vérification",
|
||||
"status_failure_invalid": "Installation invalide",
|
||||
"install_failed_version_downgrade": "Impossible de rétrograder",
|
||||
"install_failed_version_downgrade": "Impossible d'installer une version antérieure",
|
||||
"status_failure_conflict": "Conflit d'installation",
|
||||
"status_failure_storage": "Problème de stockage de l'installation",
|
||||
"status_failure_storage": "Problème de stockage",
|
||||
"status_failure_incompatible": "Installation incompatible",
|
||||
"status_failure_timeout": "Délai d'installation dépassé",
|
||||
"status_failure_timeout": "Temps d'installation écoulé",
|
||||
"status_unknown": "Échec de l'installation",
|
||||
"mount_version_mismatch_description": "L'installation a échoué car l'application installée est une version différente de l'application corrigée.\n\nInstallez la version de l'application que vous montez et réessayez.",
|
||||
"mount_no_root_description": "L'installation a échoué parce que l'accès administrateur n'est pas accordé.\n\nAccordez l'accès administrateur à ReVanced Manager et réessayer.",
|
||||
"mount_missing_installation_description": "L'installation a échoué parce que l'application non corrigée n'est pas installée sur cet appareil afin de la monter. \n\nInstallez l'application non corrigée avant de monter et réessayez.",
|
||||
"status_failure_timeout_description": "L'installation a pris trop de temps.\n\nVoulez-vous réessayer ?",
|
||||
"mount_version_mismatch_description": "L'installation a échoué car l'application installée n'a pas la même version que l'application patchée.\n\nInstallez la version de l'application que vous essayez de monter et réessayez.",
|
||||
"mount_no_root_description": "L'installation a échoué parce que l'accès root n'a pas été accordé.\n\nAccordez l'accès root à ReVanced Manager et réessayez.",
|
||||
"mount_missing_installation_description": "L'installation a échoué parce que l'application non patchée n'est pas installée sur cet appareil, il est donc impossible d'effectuer le montage sur celle-ci.\n\nInstallez l'application non patchée avant d'essayer d'effectuer le montage et réessayez.",
|
||||
"status_failure_timeout_description": "L'installation a pris trop de temps.\n\nVoulez-vous réessayer ?",
|
||||
"status_failure_storage_description": "L'installation a échoué en raison d'un espace de stockage insuffisant.\n\nLibérez de l'espace et réessayez.",
|
||||
"status_failure_invalid_description": "L'installation a échoué car l'application corrigée est invalide.\n\nDésinstaller l'application et réessayer ?",
|
||||
"status_failure_invalid_description": "L'installation a échoué car l'application patchée est invalide.\n\nDésinstaller l'application et réessayer ?",
|
||||
"status_failure_incompatible_description": "L'application est incompatible avec cet appareil.\n\nUtilisez un APK pris en charge par cet appareil et réessayez.",
|
||||
"status_failure_conflict_description": "L'installation a été empêchée par une installation existante de l'application.\n\nDésinstaller l'application et réessayer ?",
|
||||
"status_failure_conflict_description": "L'installation a été empêchée par une installation existante de l'application.\n\nDésinstaller l'application et réessayer ?",
|
||||
"status_failure_blocked_description": "L'installation a été bloquée par ${packageName}.\n\nAjustez vos paramètres de sécurité et réessayez.",
|
||||
"install_failed_verification_failure_description": "L'installation a échoué en raison d'un problème de vérification.\n\nAjustez vos paramètres de sécurité et réessayez.",
|
||||
"install_failed_version_downgrade_description": "L'installation a échoué car l'application corrigée a une version inférieure à l'application installée.\n\nDésinstaller l'application et réessayer ?",
|
||||
"install_failed_version_downgrade_description": "L'installation a échoué car la version de l'application patchée est inférieure à celle de l'application installée.\n\nDésinstaller l'application et réessayer ?",
|
||||
"status_unknown_description": "L'installation a échoué pour une raison inconnue. Veuillez réessayer."
|
||||
}
|
||||
}
|
@ -180,6 +180,9 @@
|
||||
"disablePatchesSelectionWarningText": "Tá tú ar tí roghnú paistí a athrú a dhíchumasú.\nCuirfear an rogha réamhshocraithe paistí ar ais.\n\nDíchumasú ar aon chaoi?",
|
||||
"autoUpdatePatchesLabel": "Paistí nuashonruithe uathoibríoch",
|
||||
"autoUpdatePatchesHint": "Nuashonraigh go huathoibríoch paistí go dtí an leagan is déanaí",
|
||||
"usePrereleasesLabel": "Úsáid réamheisiúintí",
|
||||
"usePrereleasesHint": "Úsáid leaganacha réamheisiúna de ReVanced Manager agus ReVanced Patches",
|
||||
"usePrereleasesWarningText": "D’fhéadfadh fadhbanna gan choinne a bheith mar thoradh ar úsáid a bhaint as leaganacha réamhscaoilte.\n\nAr mhaith leat é a chumasú ar aon nós?",
|
||||
"showUpdateDialogLabel": "Taispeáin dialóg nuashonrú",
|
||||
"showUpdateDialogHint": "Taispeáin dialóg nuair a bhíonn nuashonrú nua ar fáil",
|
||||
"universalPatchesLabel": "Taispeáin paistí uilíocha",
|
||||
|
@ -23,7 +23,9 @@
|
||||
"refreshSuccess": "रीफ्रेश हो गया है",
|
||||
"widgetTitle": "नियंत्रण-पट्ट",
|
||||
"updatesSubtitle": "अपडेट",
|
||||
"patchedSubtitle": "इंस्टॉल किए गए ऐप",
|
||||
"changeLaterSubtitle": "आप बाद में सेटिंग में जाकर इसे बदल सकते हैं।",
|
||||
"noSavedAppFound": "कोई ऐप्लिकेशन नहीं मिला\n\t",
|
||||
"noInstallations": "कोई पैच किया गया एप्लिकेशन इंस्टॉल नहीं किया गया",
|
||||
"installUpdate": "अपडेट इंस्टॉल करना जारी रखें?",
|
||||
"updateSheetTitle": "ReVanced Manager अपडेट करें ",
|
||||
@ -142,6 +144,5 @@
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "योगदान कर्ता"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
}
|
||||
}
|
@ -73,7 +73,6 @@
|
||||
"noneTooltip": "Poništi odabir svih zakrpa",
|
||||
"noPatchesFound": "Za odabranu aplikaciju nije pronađena nijedna zakrpa"
|
||||
},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Odabirom ove zakrpe mogu se pojaviti greške pri krpanju.\n\nVerzija aplikacije: ${packageVersion}\nPodržane verzije:\n${supportedVersions}"
|
||||
},
|
||||
@ -131,6 +130,5 @@
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Pridonositelji"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
}
|
||||
}
|
@ -26,7 +26,7 @@
|
||||
"lastPatchedAppSubtitle": "Aplikasi terakhir ditambal",
|
||||
"patchedSubtitle": "Aplikasi terpasang",
|
||||
"changeLaterSubtitle": "Anda dapat mengubahnya di pengaturan nanti.",
|
||||
"noSavedAppFound": "App tidak ditemukan",
|
||||
"noSavedAppFound": "Aplikasi tidak ditemukan",
|
||||
"noInstallations": "Aplikasi tertambal tidak terpasang",
|
||||
"installUpdate": "Lanjut mengunduh pembaruan?",
|
||||
"updateSheetTitle": "Perbarui ReVanced Manager",
|
||||
@ -180,6 +180,7 @@
|
||||
"disablePatchesSelectionWarningText": "Anda akan menonaktifkan pengubahan pilihan tambalan.\nPilihan tambalan bawaan akan dikembalikan.\n\nTetap nonaktifkan?",
|
||||
"autoUpdatePatchesLabel": "Otomatis perbarui tambalan",
|
||||
"autoUpdatePatchesHint": "Otomatis perbarui tambalan ke versi terbaru",
|
||||
"usePrereleasesLabel": "Gunakan rilis pra-rilis",
|
||||
"showUpdateDialogLabel": "Tampilkan dialog pembaruan",
|
||||
"showUpdateDialogHint": "Tampilkan dialog ketika pembaruan tersedia",
|
||||
"universalPatchesLabel": "Tampilkan tambalan universal",
|
||||
|
@ -100,7 +100,6 @@
|
||||
"selectFilePath": "Veldu skráarslóð",
|
||||
"selectFolder": "Veldu mappa"
|
||||
},
|
||||
"patchItem": {},
|
||||
"installerView": {
|
||||
"installButton": "Setja upp",
|
||||
"installNonRootType": "Venjulegur",
|
||||
@ -140,6 +139,5 @@
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Framlagsaðilar"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
}
|
||||
}
|
@ -5,7 +5,7 @@
|
||||
"quitButton": "Esci",
|
||||
"updateButton": "Aggiorna",
|
||||
"suggested": "Consigliata: ${version}",
|
||||
"yesButton": "Si",
|
||||
"yesButton": "Sì",
|
||||
"noButton": "No",
|
||||
"warning": "Attenzione",
|
||||
"notice": "Avviso",
|
||||
@ -55,7 +55,7 @@
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "Patch",
|
||||
"incompatibleArchWarningDialogText": "La patch su questa architettura non è ancora supportata e potrebbe non riuscire. Continuare comunque?",
|
||||
"removedPatchesWarningDialogText": "Le patch rimosse dall'ultima volta che hai patchato questa app:\n\n${patches}\n\n${newPatches}Continuare comunque?",
|
||||
"removedPatchesWarningDialogText": "Patch rimosse dall'ultima volta che hai patchato questa app:\n\n${patches}\n\n${newPatches}Continuare comunque?",
|
||||
"addedPatchesDialogText": "Patch aggiunte dall'ultima volta che hai patchato questa app:\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "Alcune opzioni di patch devono essere impostate."
|
||||
},
|
||||
|
@ -1,10 +1,10 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "キャンセル",
|
||||
"dismissButton": "閉じる",
|
||||
"dismissButton": "取り消す",
|
||||
"quitButton": "終了",
|
||||
"updateButton": "更新",
|
||||
"suggested": "推奨: ${version}",
|
||||
"suggested": "推奨バージョン: ${version}",
|
||||
"yesButton": "はい",
|
||||
"noButton": "いいえ",
|
||||
"warning": "警告",
|
||||
@ -23,19 +23,19 @@
|
||||
"refreshSuccess": "正常に更新されました",
|
||||
"widgetTitle": "ダッシュボード",
|
||||
"updatesSubtitle": "更新",
|
||||
"lastPatchedAppSubtitle": "前回パッチを適用したアプリ",
|
||||
"lastPatchedAppSubtitle": "最後にパッチを適用したアプリ",
|
||||
"patchedSubtitle": "インストール済みのアプリ",
|
||||
"changeLaterSubtitle": "この設定は後から変更できます",
|
||||
"noSavedAppFound": "アプリが見つかりません",
|
||||
"noInstallations": "パッチ済みのアプリはインストールされていません",
|
||||
"installUpdate": "更新を適用しますか?",
|
||||
"updateSheetTitle": "ReVanced Managerを更新",
|
||||
"updateDialogTitle": "新しいアップデートが利用可能",
|
||||
"updateDialogTitle": "新しいアップデートが利用可能です",
|
||||
"updatePatchesSheetTitle": "ReVanced Patchesを更新",
|
||||
"updateChangelogTitle": "変更履歴",
|
||||
"updateChangelogTitle": "更新履歴",
|
||||
"updateDialogText": "${file} の更新が利用可能です。\n現在のバージョン: ${version} ",
|
||||
"downloadConsentDialogTitle": "必要なファイルをダウンロードしますか?",
|
||||
"downloadConsentDialogText": "ReVanced Managerを正常に動作させるためのファイルをダウンロードする必要があります。",
|
||||
"downloadConsentDialogText": "ReVanced Managerを正常に動作させるために必要なファイルをダウンロードする必要があります。",
|
||||
"downloadConsentDialogText2": "${url} に接続します。",
|
||||
"downloadingMessage": "更新データをダウンロードしています...",
|
||||
"downloadedMessage": "アップデートのダウンロードが完了しました",
|
||||
@ -54,9 +54,9 @@
|
||||
"patcherView": {
|
||||
"widgetTitle": "パッチャー",
|
||||
"patchButton": "パッチ",
|
||||
"incompatibleArchWarningDialogText": "このアーキテクチャへのパッチ適用はまだサポートされておらず、失敗する可能性があります。とにかく続けますか?",
|
||||
"removedPatchesWarningDialogText": "前回このアプリにパッチを適用した時以降に削除されたパッチ:\n\n${patches}\n\n${newPatches}とにかく続けますか?",
|
||||
"addedPatchesDialogText": "前回このアプリにパッチを適用した時以降に追加されたパッチ:\n\n${addedPatches}\n",
|
||||
"incompatibleArchWarningDialogText": "このアーキテクチャへのパッチ適用はまだサポートされておらず、失敗する可能性があります。続行しますか?",
|
||||
"removedPatchesWarningDialogText": "前回このアプリにパッチを適用し、それ以降に削除されたパッチ:\n\n${patches}\n\n${newPatches}続行しますか?",
|
||||
"addedPatchesDialogText": "前回このアプリにパッチを適用し、それ以降に追加されたパッチ:\n\n${addedPatches}",
|
||||
"requiredOptionDialogText": "一部のパッチオプションを設定する必要があります。"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
@ -74,7 +74,7 @@
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "SNS",
|
||||
"widgetSubtitle": "私たちはここにいます!"
|
||||
"widgetSubtitle": "私たちはここにいます!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "アプリを選択",
|
||||
@ -82,10 +82,10 @@
|
||||
"storageButton": "APKファイルを選択",
|
||||
"selectFromStorageButton": "ストレージから選択",
|
||||
"errorMessage": "選択したアプリは使用できません",
|
||||
"downloadToast": "ダウンロード機能は現在開発中です",
|
||||
"downloadToast": "ダウンロード機能はまだ実装されていないため、利用できません",
|
||||
"requireSuggestedAppVersionDialogText": "選択したアプリのバージョンは推奨バージョンではありません。予期せぬ問題が発生する可能性があります。\n推奨バージョンを選択してください。\n\n選択されたバージョン ${selected}\n推奨バージョン ${suggested}\n\n選択されたバージョンを使用する場合、設定から「推奨バージョンの使用を強制」を無効にしてください。",
|
||||
"featureNotAvailable": "この機能は未実装です",
|
||||
"featureNotAvailableText": "このアプリは分割APKであり、パッチの適用とインストールにはroot権限でマウントする必要があります。ただし、ストレージから単一APKを選択することでパッチの適用とインストールが可能です。"
|
||||
"featureNotAvailableText": "このアプリは分割APKであり、パッチの適用とインストールにはルート権限でマウントする必要があります。ただし、ストレージから単一APKを選択することでパッチの適用とインストールが可能です。"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "パッチを選択",
|
||||
@ -94,7 +94,7 @@
|
||||
"newPatches": "新しいパッチ",
|
||||
"patches": "パッチ",
|
||||
"doneButton": "完了",
|
||||
"defaultChip": "既定",
|
||||
"defaultChip": "デフォルト",
|
||||
"defaultTooltip": "すべてのデフォルトのパッチを選択",
|
||||
"noneChip": "なし",
|
||||
"noneTooltip": "すべてのパッチの選択を解除",
|
||||
@ -105,15 +105,15 @@
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "カスタム値",
|
||||
"setToNull": "null に設定",
|
||||
"setToNull": "nullに設定",
|
||||
"nullValue": "このオプション値は現在nullです",
|
||||
"viewTitle": "パッチオプション",
|
||||
"saveOptions": "保存",
|
||||
"unselectPatch": "パッチの選択を解除",
|
||||
"tooltip": "他の入力オプション",
|
||||
"selectFilePath": "ファイルパスを選択",
|
||||
"selectFolder": "フォルダーを選択",
|
||||
"requiredOption": "このオプションを設定する必要があります",
|
||||
"selectFilePath": "ファイルのパスを選択",
|
||||
"selectFolder": "フォルダを選択",
|
||||
"requiredOption": "このオプションは必須です",
|
||||
"unsupportedOption": "このオプションはサポートされていません",
|
||||
"requiredOptionNull": "以下のオプションを設定する必要があります:\n\n${options}"
|
||||
},
|
||||
@ -130,12 +130,12 @@
|
||||
"installButton": "インストール",
|
||||
"installRootType": "マウント",
|
||||
"installNonRootType": "標準",
|
||||
"warning": "予期しない問題を避けるため、パッチを適用したアプリの自動更新を無効にします。",
|
||||
"pressBackAgain": "キャンセルするには、もう一度戻るを押してください",
|
||||
"warning": "予期しない問題を避けるため、パッチを適用したアプリの自動更新を無効にすることを推奨します。",
|
||||
"pressBackAgain": "キャンセルするには、もう一度戻るボタンを押してください",
|
||||
"openButton": "開く",
|
||||
"notificationTitle": "ReVanced Manager はパッチを適用しています",
|
||||
"notificationTitle": "ReVanced Managerはパッチを適用しています",
|
||||
"notificationText": "インストーラーに戻るにはタップしてください",
|
||||
"exportApkButtonTooltip": "パッチ済みの APK をエクスポート",
|
||||
"exportApkButtonTooltip": "パッチ済みのAPKをエクスポート",
|
||||
"exportLogButtonTooltip": "ログをエクスポート",
|
||||
"screenshotDetected": "スクリーンショットが検出されました。ログを共有しようとしてる場合は、代わりにテキストをコピーしてください。\n\nクリップボードにログをコピーしますか?",
|
||||
"copiedToClipboard": "ログをクリップボードにコピーしました",
|
||||
@ -147,47 +147,48 @@
|
||||
"teamSectionTitle": "開発チーム",
|
||||
"debugSectionTitle": "デバッグ",
|
||||
"advancedSectionTitle": "高度な設定",
|
||||
"exportSectionTitle": "インポート&エクスポート",
|
||||
"exportSectionTitle": "インポート/エクスポート",
|
||||
"dataSectionTitle": "データソース",
|
||||
"themeModeLabel": "アプリのテーマ",
|
||||
"systemThemeLabel": "システム",
|
||||
"systemThemeLabel": "システムの設定に従う",
|
||||
"lightThemeLabel": "ライト",
|
||||
"darkThemeLabel": "ダーク",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "よりデバイスに近い体験が楽しめます",
|
||||
"dynamicThemeHint": "お使いのデバイスに近い体験をお楽しみください",
|
||||
"languageLabel": "言語",
|
||||
"languageUpdated": "言語が更新されました",
|
||||
"sourcesLabel": "代替ソース",
|
||||
"sourcesLabelHint": "ReVanded Patches の代替ソースを構成する",
|
||||
"sourcesLabelHint": "ReVanded Patchesの代替ソースを構成します",
|
||||
"useAlternativeSources": "他のソースを使用",
|
||||
"useAlternativeSourcesHint": "APIの代わりにReVended Patchesの代替ソースを使用する",
|
||||
"useAlternativeSourcesHint": "APIの代わりにReVended Patchesの代替ソースを使用します",
|
||||
"sourcesResetDialogTitle": "リセット",
|
||||
"sourcesResetDialogText": "ソースをデフォルト値にリセットしてもよろしいですか?",
|
||||
"apiURLResetDialogText": "API の URL をデフォルト値にリセットしてもよろしいですか?",
|
||||
"sourcesUpdateNote": "注: ReVanced Patchesを代替ソースから自動的にダウンロードします。\n\nこれにより、代替ソースとの通信が発生します。",
|
||||
"apiURLLabel": "API の URL",
|
||||
"apiURLHint": "ReVanced ManagerのAPIのURLを設定する",
|
||||
"selectApiURL": "API の URL",
|
||||
"apiURLResetDialogText": "APIのURLをデフォルト値にリセットしてもよろしいですか?",
|
||||
"sourcesUpdateNote": "注意: 自動的に代替ソースからReVanced Patchesをダウンロードします。\n\nこれにより、代替ソースに接続されます。",
|
||||
"apiURLLabel": "APIのURL",
|
||||
"apiURLHint": "ReVanced ManagerのAPI URLを設定します",
|
||||
"selectApiURL": "APIのURL",
|
||||
"orgPatchesLabel": "Patches の組織",
|
||||
"sourcesPatchesLabel": "Patches のソース",
|
||||
"contributorsLabel": "貢献者",
|
||||
"contributorsHint": "ReVancedの貢献者一覧",
|
||||
"logsLabel": "ログを共有",
|
||||
"logsHint": "ReVanced Manager のログを共有します",
|
||||
"logsHint": "ReVanced Managerのログを共有します",
|
||||
"enablePatchesSelectionLabel": "パッチ選択の変更を許可",
|
||||
"enablePatchesSelectionHint": "パッチの選択・解除を禁止しません",
|
||||
"enablePatchesSelectionHint": "パッチの選択/解除を禁止しません",
|
||||
"enablePatchesSelectionWarningText": "パッチの選択を変更すると、予期せぬ問題が起こる可能性があります。\n\n有効にしますか?",
|
||||
"disablePatchesSelectionWarningText": "パッチ選択の変更を無効にしようとしています。\nデフォルトのパッチの選択が復元されます。\n\n無効にしますか?",
|
||||
"autoUpdatePatchesLabel": "パッチの自動アップデート",
|
||||
"autoUpdatePatchesHint": "パッチを自動的に最新バージョンに更新する",
|
||||
"usePrereleasesHint": "ReVanced ManagerとReVanced Patchesのプレリリース版を使用します",
|
||||
"showUpdateDialogLabel": "アップデートの通知を表示",
|
||||
"showUpdateDialogHint": "新しいアップデートが利用可能な場合にダイアログを表示する",
|
||||
"showUpdateDialogHint": "新しいアップデートが利用可能な場合にダイアログを表示します",
|
||||
"universalPatchesLabel": "共通パッチの表示",
|
||||
"universalPatchesHint": "すべてのアプリと共通パッチを表示します(アプリ一覧の読み込みが遅くなる可能性があります)",
|
||||
"universalPatchesHint": "すべてのアプリと共通パッチを表示します (アプリ一覧の読み込みが遅くなる可能性があります)",
|
||||
"lastPatchedAppLabel": "パッチを適用したアプリを保存",
|
||||
"lastPatchedAppHint": "インストールまたはエクスポートする最後のパッチを保存する",
|
||||
"lastPatchedAppHint": "最後にパッチされた内容を保存して、後でインストールまたはエクスポートできます",
|
||||
"versionCompatibilityCheckLabel": "バージョンの互換性の確認",
|
||||
"versionCompatibilityCheckHint": "選択したアプリのバージョンと互換性のないパッチの選択を禁止する",
|
||||
"versionCompatibilityCheckHint": "選択したアプリのバージョンと互換性のないパッチの選択を防止します",
|
||||
"requireSuggestedAppVersionLabel": "推奨バージョンの使用を強制",
|
||||
"requireSuggestedAppVersionHint": "推奨されていないバージョンのアプリを選択できないようにします",
|
||||
"requireSuggestedAppVersionDialogText": "推奨バージョンではないアプリを選択すると、予期しない問題が発生する可能性があります。\n\nこのまま続行しますか?",
|
||||
@ -195,24 +196,24 @@
|
||||
"snackbarMessage": "クリップボードにコピーしました",
|
||||
"restartAppForChanges": "変更を適用するにはアプリを再起動してください",
|
||||
"deleteTempDirLabel": "一時ファイルを削除",
|
||||
"deleteTempDirHint": "未使用の一時ファイルを削除",
|
||||
"deleteTempDirHint": "未使用の一時ファイルを削除します",
|
||||
"deletedTempDir": "一時ファイルを削除しました",
|
||||
"exportSettingsLabel": "設定をエクスポート",
|
||||
"exportSettingsHint": "設定を JSON ファイルにエクスポート",
|
||||
"exportSettingsHint": "設定をJSONファイルにエクスポートします",
|
||||
"exportedSettings": "設定をエクスポートしました",
|
||||
"importSettingsLabel": "設定をインポート",
|
||||
"importSettingsHint": "JSONファイルから設定をインポート",
|
||||
"importedSettings": "設定がインポートされました",
|
||||
"importSettingsHint": "JSONファイルから設定をインポートします",
|
||||
"importedSettings": "設定をインポートしました",
|
||||
"exportPatchesLabel": "パッチ選択をエクスポート",
|
||||
"exportPatchesHint": "パッチ選択を JSON ファイルにエクスポートします",
|
||||
"exportPatchesHint": "パッチ選択をJSONファイルにエクスポートします",
|
||||
"exportedPatches": "パッチ選択をエクスポートしました",
|
||||
"noExportFileFound": "エクスポートするパッチの選択がありません",
|
||||
"importPatchesLabel": "パッチ選択をインポート",
|
||||
"importPatchesHint": "パッチ選択を JSON ファイルからインポートします",
|
||||
"importPatchesHint": "パッチ選択をJSONファイルからインポートします",
|
||||
"importedPatches": "パッチ選択をインポートしました",
|
||||
"resetStoredPatchesLabel": "パッチの選択をリセット",
|
||||
"resetStoredPatchesHint": "保存されたパッチの選択をリセットする",
|
||||
"resetStoredPatchesDialogTitle": "パッチの選択をリセット",
|
||||
"resetStoredPatchesDialogTitle": "パッチの選択をリセットしますか?",
|
||||
"resetStoredPatchesDialogText": "デフォルトのパッチの選択が復元されます。",
|
||||
"resetStoredPatches": "パッチの選択をリセットしました",
|
||||
"resetStoredOptionsLabel": "パッチオプションをリセット",
|
||||
@ -221,7 +222,7 @@
|
||||
"resetStoredOptionsDialogText": "パッチオプションをリセットすると、保存されたすべてのオプションが削除されます。",
|
||||
"resetStoredOptions": "オプションをリセットしました",
|
||||
"deleteLogsLabel": "ログを削除",
|
||||
"deleteLogsHint": "収集された ReVanced Manager のログを削除します",
|
||||
"deleteLogsHint": "収集されたReVanced Managerのログを削除します",
|
||||
"deletedLogs": "ログを削除しました",
|
||||
"regenerateKeystoreLabel": "キーストアを再生成",
|
||||
"regenerateKeystoreHint": "アプリの署名に使われるキーストアを再生成します",
|
||||
@ -237,11 +238,11 @@
|
||||
"importedKeystore": "キーストアをインポートしました",
|
||||
"selectKeystorePassword": "キーストアのパスワード",
|
||||
"selectKeystorePasswordHint": "アプリの署名に使用するキーストアのパスワードを入力してください",
|
||||
"jsonSelectorErrorMessage": "選択したJSON ファイルは使用できません",
|
||||
"jsonSelectorErrorMessage": "選択したJSONファイルは使用できません",
|
||||
"keystoreSelectorErrorMessage": "選択したキーストアファイルは使用できません"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "アプリ情報",
|
||||
"widgetTitle": "アプリの情報",
|
||||
"openButton": "開く",
|
||||
"installButton": "インストール",
|
||||
"uninstallButton": "アンインストール",
|
||||
@ -250,11 +251,11 @@
|
||||
"deleteButton": "削除",
|
||||
"rootDialogTitle": "エラー",
|
||||
"lastPatchedAppDescription": "これは最後にパッチを適用したアプリのバックアップです。",
|
||||
"unmountDialogText": "このアプリをアンマウントしてもよろしいですか?",
|
||||
"uninstallDialogText": "本当にこのアプリをアンインストールしますか?",
|
||||
"rootDialogText": "アプリはスーパーユーザー権限でインストールされましたが、現在 ReVanced Manager にはその権限がありません。 スーパーユーザー権限を付与してください。",
|
||||
"unmountDialogText": "このアプリをマウント解除してもよろしいですか?",
|
||||
"uninstallDialogText": "このアプリをアンインストールしてもよろしいですか?",
|
||||
"rootDialogText": "アプリはルート権限でインストールされましたが、現在ReVanced Managerにはその権限がありません。 ルート権限を付与してください。",
|
||||
"removeAppDialogTitle": "アプリを削除しますか?",
|
||||
"removeAppDialogText": "このバックアップを削除してもよろしいですか?",
|
||||
"removeAppDialogText": "バックアップを削除してもよろしいですか?",
|
||||
"packageNameLabel": "パッケージ名",
|
||||
"installTypeLabel": "インストールの種類",
|
||||
"mountTypeLabel": "マウント",
|
||||
@ -263,7 +264,7 @@
|
||||
"appliedPatchesLabel": "適用されたパッチ",
|
||||
"sizeLabel": "ファイルのサイズ",
|
||||
"patchedDateHint": "${date} ${time}",
|
||||
"appliedPatchesHint": "${quantity} 個の適用されたパッチ",
|
||||
"appliedPatchesHint": "${quantity}個の適用されたパッチ",
|
||||
"updateNotImplemented": "この機能はまだ実装されていません"
|
||||
},
|
||||
"contributorsView": {
|
||||
@ -271,7 +272,7 @@
|
||||
},
|
||||
"installErrorDialog": {
|
||||
"mount_version_mismatch": "バージョンが一致しません",
|
||||
"mount_no_root": "ルート権限がありません",
|
||||
"mount_no_root": "ルート権限が付与されていません",
|
||||
"mount_missing_installation": "インストールが見つかりませんでした",
|
||||
"status_failure_blocked": "インストールはブロックされました",
|
||||
"install_failed_verification_failure": "検証に失敗しました",
|
||||
@ -283,16 +284,16 @@
|
||||
"status_failure_timeout": "インストールがタイムアウトしました",
|
||||
"status_unknown": "インストールに失敗しました",
|
||||
"mount_version_mismatch_description": "インストールされたアプリがパッチを当てたアプリとは異なるバージョンであるため、インストールに失敗しました。\n\nマウントしているアプリのバージョンをインストールし、再度お試しください。",
|
||||
"mount_no_root_description": "ルートアクセスが許可されていないためインストールに失敗しました。\n\nReVanced Managerへのルートアクセスを許可し、もう一度お試しください。",
|
||||
"mount_no_root_description": "ルート権限が付与されていないためインストールに失敗しました。\n\nReVanced Managerへのルート権限を許可し、もう一度お試しください。",
|
||||
"mount_missing_installation_description": "パッチが適用されていないアプリがマウントされていないためインストールに失敗しました。\n\nマウントする前にパッチが適用されていないアプリをインストールし、もう一度お試しください。",
|
||||
"status_failure_timeout_description": "インストールに時間がかかりすぎました。\n\nもう一度やり直しますか?",
|
||||
"status_failure_timeout_description": "インストールに時間がかかりすぎたため、完了しませんでした。\n\nもう一度やり直しますか?",
|
||||
"status_failure_storage_description": "ストレージが不足しているためインストールに失敗しました。\n\n空き領域を解放して再度お試し下さい。",
|
||||
"status_failure_invalid_description": "パッチ適用されたアプリが無効なためインストールに失敗しました。\n\nアプリをアンインストールしてもう一度お試しください。",
|
||||
"status_failure_incompatible_description": "アプリはこのデバイスと互換性がありません。\n\nこのデバイスでサポートされているAPKを使用して、もう一度お試しください。",
|
||||
"status_failure_conflict_description": "インストールはアプリの既存のインストールによって中止されました。\n\nインストールされたアプリをアンインストールし、もう一度やり直してください。",
|
||||
"status_failure_blocked_description": "インストールは ${packageName} によってブロックされました。\n\nセキュリティ設定を調整して、もう一度お試しください。",
|
||||
"install_failed_verification_failure_description": "認証の問題によりインストールに失敗しました。\n\nセキュリティ設定を調整して、もう一度お試しください。",
|
||||
"install_failed_version_downgrade_description": "インストールに失敗しました。パッチを当てたアプリがインストールされたアプリよりも低いバージョンであるためです。\n\nアプリをアンインストールしてもう一度お試しください。",
|
||||
"status_failure_incompatible_description": "アプリはこのデバイスと互換性がありません。\n\nこのデバイスに対応しているAPKを使用して、もう一度お試しください。",
|
||||
"status_failure_conflict_description": "既にインストールされているアプリがあるため、インストールが中止されました。\n\nインストールされているアプリをアンインストールして、再試行しますか?",
|
||||
"status_failure_blocked_description": "インストールは${packageName}によってブロックされました。\n\nセキュリティ設定を確認して、もう一度お試しください。",
|
||||
"install_failed_verification_failure_description": "認証の問題によりインストールに失敗しました。\n\nセキュリティ設定を確認して、もう一度お試しください。",
|
||||
"install_failed_version_downgrade_description": "インストールに失敗しました。パッチが適用されたアプリがインストールされたアプリよりも低いバージョンであるためです。\n\nアプリをアンインストールしてもう一度お試しください。",
|
||||
"status_unknown_description": "不明な理由によりインストールに失敗しました。もう一度やり直してください。"
|
||||
}
|
||||
}
|
@ -46,8 +46,6 @@
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Қолданбаны таңдаңыз"
|
||||
},
|
||||
"patchSelectorCard": {},
|
||||
"socialMediaCard": {},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Қолданбаны таңдаңыз"
|
||||
},
|
||||
@ -58,7 +56,6 @@
|
||||
"patchOptionsView": {
|
||||
"selectFolder": "Буманы таңдаңыз"
|
||||
},
|
||||
"patchItem": {},
|
||||
"installerView": {
|
||||
"installButton": "Орнату",
|
||||
"installNonRootType": "Қалыпты"
|
||||
@ -77,6 +74,5 @@
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Үлес қосушылар"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
}
|
||||
}
|
@ -29,24 +29,11 @@
|
||||
"updateDialogTitle": "មានបច្ចុប្បន្នភាពថ្មិ",
|
||||
"updateChangelogTitle": "កំណត់ហេតុផ្លាស់ប្ដូរ"
|
||||
},
|
||||
"applicationItem": {},
|
||||
"latestCommitCard": {},
|
||||
"patcherView": {
|
||||
"widgetTitle": "ផាត់ឆើ"
|
||||
},
|
||||
"appSelectorCard": {},
|
||||
"patchSelectorCard": {},
|
||||
"socialMediaCard": {},
|
||||
"appSelectorView": {},
|
||||
"patchesSelectorView": {},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {},
|
||||
"installerView": {},
|
||||
"settingsView": {
|
||||
"widgetTitle": "ការកំណត់",
|
||||
"sourcesResetDialogTitle": "កំណត់ឡើងវិញ"
|
||||
},
|
||||
"appInfoView": {},
|
||||
"contributorsView": {},
|
||||
"installErrorDialog": {}
|
||||
}
|
||||
}
|
@ -11,7 +11,7 @@
|
||||
"notice": "알림",
|
||||
"noShowAgain": "다시 보지 않기",
|
||||
"add": "추가",
|
||||
"remove": "제거",
|
||||
"remove": "삭제",
|
||||
"showChangelogButton": "변경 사항 보기",
|
||||
"showUpdateButton": "업데이트 보기",
|
||||
"navigationView": {
|
||||
@ -25,18 +25,18 @@
|
||||
"updatesSubtitle": "업데이트",
|
||||
"lastPatchedAppSubtitle": "마지막으로 패치된 앱",
|
||||
"patchedSubtitle": "설치된 앱",
|
||||
"changeLaterSubtitle": "나중에 설정에서 변경할 수 있습니다",
|
||||
"changeLaterSubtitle": "나중에 설정에서 변경할 수 있습니다.",
|
||||
"noSavedAppFound": "앱을 찾을 수 없습니다",
|
||||
"noInstallations": "패치된 앱이 설치되어 있지 않습니다",
|
||||
"installUpdate": "업데이트를 계속 설치하시겠습니까?",
|
||||
"updateSheetTitle": "ReVanced Manager 업데이트",
|
||||
"updateDialogTitle": "새 업데이트가 있습니다",
|
||||
"updatePatchesSheetTitle": "ReVanced 패치 업데이트",
|
||||
"updateDialogTitle": "새로운 업데이트가 있습니다",
|
||||
"updatePatchesSheetTitle": "ReVanced Patches 업데이트",
|
||||
"updateChangelogTitle": "변경 사항",
|
||||
"updateDialogText": "'${file}'에 대한 새 업데이트를 할 수 있습니다\n\n현재 설치된 버전은 '${version}' 입니다",
|
||||
"updateDialogText": "'${file}'에 대한 새로운 업데이트를 할 수 있습니다.\n\n현재 설치된 버전은 '${version}' 입니다.",
|
||||
"downloadConsentDialogTitle": "필요한 파일을 다운로드하시겠습니까?",
|
||||
"downloadConsentDialogText": "ReVanced Manager가 제대로 작동하려면 필요한 파일을 다운로드해야 합니다",
|
||||
"downloadConsentDialogText2": "진행하면 '${url}' 에 연결됩니다",
|
||||
"downloadConsentDialogText": "ReVanced Manager가 제대로 작동하려면 필요한 파일을 다운로드해야 합니다.",
|
||||
"downloadConsentDialogText2": "진행하면 '${url}' 에 연결됩니다.",
|
||||
"downloadingMessage": "업데이트 다운로드 중 ...",
|
||||
"downloadedMessage": "업데이트를 다운로드 완료하였습니다",
|
||||
"installingMessage": "업데이트 설치 중 ...",
|
||||
@ -55,9 +55,9 @@
|
||||
"widgetTitle": "Patcher",
|
||||
"patchButton": "패치하기",
|
||||
"incompatibleArchWarningDialogText": "이 아키텍처에 대한 패치는 아직 지원되지 않으므로 실패할 수 있습니다. 그래도 계속하시겠습니까?",
|
||||
"removedPatchesWarningDialogText": "이 앱을 마지막으로 패치한 이후 제거된 패치입니다:\n\n${patches}\n\n${newPatches}그래도 계속하시겠습니까?",
|
||||
"removedPatchesWarningDialogText": "이 앱을 마지막으로 패치한 이후 삭제된 패치입니다:\n\n${patches}\n\n${newPatches}\n\n그래도 계속하시겠습니까?",
|
||||
"addedPatchesDialogText": "이 앱을 마지막으로 패치한 이후 추가된 패치입니다:\n\n${addedPatches}",
|
||||
"requiredOptionDialogText": "일부 패치 옵션을 설정해야 합니다"
|
||||
"requiredOptionDialogText": "일부 패치 옵션을 설정해야 합니다."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "앱 선택하기",
|
||||
@ -83,15 +83,15 @@
|
||||
"selectFromStorageButton": "기기 저장소에서 선택",
|
||||
"errorMessage": "선택한 앱을 사용할 수 없습니다",
|
||||
"downloadToast": "다운로드 기능은 아직 사용할 수 없습니다",
|
||||
"requireSuggestedAppVersionDialogText": "선택한 앱 버전이 권장 앱 버전과 일치하지 않아서 예상되지 않은 문제점이 발생할 수 있습니다. 권장 앱 버전을 사용하세요\n\n선택한 앱 버전: ${selected}\n권장 앱 버전: ${suggested}\n\n계속하려면 설정에서 '권장 앱 버전 요구'를 비활성화하세요",
|
||||
"requireSuggestedAppVersionDialogText": "선택한 앱 버전이 권장 앱 버전과 일치하지 않아서 예상되지 않은 문제점이 발생할 수 있습니다. 권장 앱 버전을 사용하세요.\n\n선택한 앱 버전: ${selected}\n권장 앱 버전: ${suggested}\n\n계속하려면 설정에서 '권장 앱 버전 요구'를 비활성화하세요.",
|
||||
"featureNotAvailable": "기능이 구현되지 않았습니다",
|
||||
"featureNotAvailableText": "이 기기에서 추출할 수 있는 앱이 분할된 APK 파일이므로 Root 권한으로 마운트해야만 안정적으로 패치 및 설치할 수 있습니다. 그러나 Non-Root 사용자는 기기 저장소에서 '외부에서 다운로드한 완전한 APK 파일'을 선택하여 패치 및 설치할 수 있습니다"
|
||||
"featureNotAvailableText": "이 기기에서 추출할 수 있는 앱이 분할 APK 파일이므로 Root 권한으로 마운트해야만 안정적으로 패치 및 설치할 수 있습니다. 그러나 Non-Root 사용자는 기기 저장소에서 '외부에서 다운로드한 완전한 APK 파일'을 선택하여 패치 및 설치할 수 있습니다."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "패치 선택하기",
|
||||
"searchBarHint": "패치 검색하기",
|
||||
"universalPatches": "공용 패치",
|
||||
"newPatches": "새 패치",
|
||||
"newPatches": "새로운 패치",
|
||||
"patches": "패치",
|
||||
"doneButton": "선택완료",
|
||||
"defaultChip": "기본값",
|
||||
@ -99,9 +99,9 @@
|
||||
"noneChip": "선택안함",
|
||||
"noneTooltip": "모든 패치 선택 해제",
|
||||
"loadPatchesSelection": "패치 선택목록 가져오기",
|
||||
"noSavedPatches": "선택한 앱에 적용할 패치가 저장되지 않았습니다\n'선택완료' 버튼을 눌러서 현재 선택목록을 저장하세요",
|
||||
"noSavedPatches": "선택한 앱에 적용할 패치가 저장되지 않았습니다.\n'선택완료' 버튼을 눌러서 현재 선택목록을 저장하세요.",
|
||||
"noPatchesFound": "선택한 앱에 대한 패치를 찾을 수 없습니다",
|
||||
"setRequiredOption": "옵션을 설정해야 하는 패치가 있습니다:\n\n${patches}\n\n진행하기 전 설정을 마쳐주세요"
|
||||
"setRequiredOption": "옵션을 설정해야 하는 패치가 있습니다:\n\n${patches}\n\n진행하기 전 설정을 마쳐주세요."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "사용자 정의 값",
|
||||
@ -118,26 +118,26 @@
|
||||
"requiredOptionNull": "다음 옵션들이 설정되어 있어야 합니다:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "이 패치는 문제점을 발생시킬 수 있습니다\n\n앱 버전: ${packageVersion}\n지원되는 버전:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "패치가 이 앱 버전을 지원하지 않습니다",
|
||||
"unsupportedDialogText": "이 패치는 문제점을 발생시킬 수 있습니다.\n\n앱 버전: ${packageVersion}\n지원되는 버전:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "패치가 이 앱 버전을 지원하지 않습니다.",
|
||||
"unsupportedRequiredOption": "패치에 이 앱을 지원하지 않는 필수 옵션이 포함되어 있습니다",
|
||||
"patchesChangeWarningDialogText": "기본 패치 선택을 사용하는 것을 권장합니다. 설정을 변경할 경우에는 예상되지 않은 문제점의 원인이 될 수 있습니다\n\n패치 선택을 변경하기 위해서는 설정에서 \"패치 선택 변경 허용\"을 활성화해야 합니다",
|
||||
"patchesChangeWarningDialogText": "기본 패치 선택을 사용하는 것을 권장합니다. 설정을 변경할 경우에는 예상되지 않은 문제점의 원인이 될 수 있습니다.\n\n패치 선택을 변경하기 위해서는 설정에서 \"패치 선택 변경 허용\"을 활성화해야 합니다.",
|
||||
"patchesChangeWarningDialogButton": "기본 선택목록 사용"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "설치 유형 선택",
|
||||
"installTypeDescription": "설치를 진행할 유형을 선택해주세요",
|
||||
"installTypeDescription": "설치를 진행할 유형을 선택해주세요.",
|
||||
"installButton": "설치하기",
|
||||
"installRootType": "마운트",
|
||||
"installNonRootType": "일반",
|
||||
"warning": "패치된 앱의 자동 업데이트를 비활성화하여 예상되지 않은 문제점을 방지하세요",
|
||||
"warning": "패치된 앱의 자동 업데이트를 비활성화하여 예상되지 않은 문제점을 방지하세요.",
|
||||
"pressBackAgain": "취소하려면 뒤로가기 버튼을 다시 누르세요",
|
||||
"openButton": "열기",
|
||||
"notificationTitle": "ReVanced Manager가 패치 중입니다",
|
||||
"notificationText": "설치 관리자로 돌아가려면 여기를 누르세요",
|
||||
"exportApkButtonTooltip": "패치된 APK 내보내기",
|
||||
"exportLogButtonTooltip": "로그 내보내기",
|
||||
"screenshotDetected": "스크린샷이 감지되었습니다. 로그를 공유할 목적이라면, 대신 텍스트 사본으로 공유해주세요\n\n로그를 클립보드에 복사하시겠습니까?",
|
||||
"screenshotDetected": "스크린샷이 감지되었습니다. 로그를 공유할 목적이라면, 대신 텍스트 사본으로 공유해주세요.\n\n로그를 클립보드에 복사하시겠습니까?",
|
||||
"copiedToClipboard": "로그를 클립보드에 복사하였습니다",
|
||||
"noExit": "설치 관리자가 실행 중이므로 중단할 수 없습니다 ..."
|
||||
},
|
||||
@ -164,9 +164,9 @@
|
||||
"sourcesResetDialogTitle": "초기화",
|
||||
"sourcesResetDialogText": "정말 사용자 정의 소스를 기본값으로 초기화하시겠습니까?",
|
||||
"apiURLResetDialogText": "정말 API URL을 기본값으로 초기화하시겠습니까?",
|
||||
"sourcesUpdateNote": "알림: 변경하면 대체 소스에서 ReVanced Patches가 자동으로 다운로드됩니다\n\n그 이후에는 대체 소스로 연결됩니다",
|
||||
"sourcesUpdateNote": "알림: 변경하면 대체 소스에서 ReVanced Patches가 자동으로 다운로드됩니다.\n\n그 이후에는 대체 소스로 연결됩니다.",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "ReVanced Manager의 API URL를 설정할 수 있습니다.",
|
||||
"apiURLHint": "ReVanced Manager의 API URL를 설정할 수 있습니다",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "Patches 구성",
|
||||
"sourcesPatchesLabel": "Patches 소스",
|
||||
@ -176,12 +176,15 @@
|
||||
"logsHint": "수집된 ReVanced Manager 로그를 공유합니다",
|
||||
"enablePatchesSelectionLabel": "패치 선택 변경 허용",
|
||||
"enablePatchesSelectionHint": "패치를 선택하거나 선택 해제할 수 있습니다",
|
||||
"enablePatchesSelectionWarningText": "패치 선택을 변경하는 경우에는 예상되지 않은 문제점이 발생할 수 있습니다\n\n그래도 활성화하시겠습니까?",
|
||||
"disablePatchesSelectionWarningText": "패치 선택 변경을 비활성화하려 합니다\n기본 패치 선택목록으로 복원될 것입니다\n\n그래도 비활성화하시겠습니까?",
|
||||
"enablePatchesSelectionWarningText": "패치 선택을 변경하는 경우에는 예상되지 않은 문제점이 발생할 수 있습니다.\n\n그래도 활성화하시겠습니까?",
|
||||
"disablePatchesSelectionWarningText": "패치 선택 변경을 비활성화하려 합니다.\n기본 패치 선택목록으로 복원될 것입니다.\n\n그래도 비활성화하시겠습니까?",
|
||||
"autoUpdatePatchesLabel": "패치 자동 업데이트",
|
||||
"autoUpdatePatchesHint": "자동으로 패치를 최신 버전으로 업데이트합니다",
|
||||
"autoUpdatePatchesHint": "ReVanced Patches를 최신 버전으로 자동 업데이트합니다",
|
||||
"usePrereleasesLabel": "Pre-Releases 버전 사용",
|
||||
"usePrereleasesHint": "ReVanced Manager 및 ReVanced Patches의 Pre-Releases 버전을 사용합니다",
|
||||
"usePrereleasesWarningText": "Pre-Releases 버전을 사용하면 예상되지 않은 문제점이 발생할 수 있습니다.\n\n그래도 활성화하시겠습니까?",
|
||||
"showUpdateDialogLabel": "업데이트 팝업창 보기",
|
||||
"showUpdateDialogHint": "새 업데이트가 있으면 팝업창을 표시합니다",
|
||||
"showUpdateDialogHint": "새로운 업데이트가 있으면 팝업창을 표시합니다",
|
||||
"universalPatchesLabel": "공용 패치 보기",
|
||||
"universalPatchesHint": "기기에 설치된 모든 앱과 공용 패치를 표시합니다 (앱 목록이 느려질 수 있음)",
|
||||
"lastPatchedAppLabel": "패치된 앱 저장",
|
||||
@ -190,18 +193,18 @@
|
||||
"versionCompatibilityCheckHint": "선택한 앱 버전과 호환되지 않는 패치를 선택할 수 없습니다",
|
||||
"requireSuggestedAppVersionLabel": "권장 앱 버전 요구",
|
||||
"requireSuggestedAppVersionHint": "권장되지 않은 앱 버전은 선택할 수 없습니다",
|
||||
"requireSuggestedAppVersionDialogText": "권장 앱 버전이 아닌 앱을 선택하는 경우에는 예상되지 않은 문제점이 발생할 수 있습니다\n\n그래도 계속하시겠습니까?",
|
||||
"requireSuggestedAppVersionDialogText": "권장 앱 버전이 아닌 앱을 선택하는 경우에는 예상되지 않은 문제점이 발생할 수 있습니다.\n\n그래도 계속하시겠습니까?",
|
||||
"aboutLabel": "정보",
|
||||
"snackbarMessage": "클립보드에 복사하였습니다",
|
||||
"restartAppForChanges": "변경 사항을 적용하려면 앱을 다시 시작하세요",
|
||||
"deleteTempDirLabel": "임시 파일 제거",
|
||||
"deleteTempDirHint": "사용하지 않는 임시 파일을 제거합니다",
|
||||
"deletedTempDir": "임시 파일을 제거하였습니다",
|
||||
"deleteTempDirLabel": "임시 파일 삭제",
|
||||
"deleteTempDirHint": "사용하지 않는 임시 파일을 삭제합니다",
|
||||
"deletedTempDir": "임시 파일을 삭제하였습니다",
|
||||
"exportSettingsLabel": "설정 내보내기",
|
||||
"exportSettingsHint": "설정을 JSON 파일로 내보낼 수 있습니다",
|
||||
"exportSettingsHint": "설정을 JSON 파일로 내보냅니다",
|
||||
"exportedSettings": "설정을 내보냈습니다",
|
||||
"importSettingsLabel": "설정 가져오기",
|
||||
"importSettingsHint": "설정을 JSON 파일에서 가져올 수 있습니다",
|
||||
"importSettingsHint": "설정을 JSON 파일에서 가져옵니다",
|
||||
"importedSettings": "설정을 가져왔습니다",
|
||||
"exportPatchesLabel": "패치 선택목록 내보내기",
|
||||
"exportPatchesHint": "패치 선택목록을 JSON 파일로 내보냅니다",
|
||||
@ -218,15 +221,15 @@
|
||||
"resetStoredOptionsLabel": "패치 옵션 초기화",
|
||||
"resetStoredOptionsHint": "모든 패치 옵션을 초기화합니다",
|
||||
"resetStoredOptionsDialogTitle": "패치 옵션을 초기화하시겠습니까?",
|
||||
"resetStoredOptionsDialogText": "패치 옵션을 초기화하면 저장한 모든 옵션이 제거됩니다",
|
||||
"resetStoredOptionsDialogText": "패치 옵션을 초기화하면 저장한 모든 옵션이 삭제됩니다.",
|
||||
"resetStoredOptions": "옵션을 초기화하였습니다",
|
||||
"deleteLogsLabel": "로그 제거하기",
|
||||
"deleteLogsHint": "수집된 ReVanced Manager 로그를 제거합니다",
|
||||
"deletedLogs": "로그를 제거하였습니다",
|
||||
"deleteLogsLabel": "로그 삭제하기",
|
||||
"deleteLogsHint": "수집된 ReVanced Manager 로그를 삭제합니다",
|
||||
"deletedLogs": "로그를 삭제하였습니다",
|
||||
"regenerateKeystoreLabel": "키스토어 재생성",
|
||||
"regenerateKeystoreHint": "앱을 서명할 때 사용한 키스토어를 재생성합니다",
|
||||
"regenerateKeystoreDialogTitle": "키스토어를 재생성하시겠습니까?",
|
||||
"regenerateKeystoreDialogText": "기존 키스토어로 서명한 패치된 앱을 더 이상 업데이트할 수 없게 됩니다",
|
||||
"regenerateKeystoreDialogText": "기존 키스토어로 서명한 패치된 앱을 더 이상 업데이트할 수 없게 됩니다.",
|
||||
"regeneratedKeystore": "키스토어를 재생성하였습니다",
|
||||
"exportKeystoreLabel": "키스토어 내보내기",
|
||||
"exportKeystoreHint": "앱을 서명할 때 사용한 키스토어를 내보냅니다",
|
||||
@ -244,17 +247,17 @@
|
||||
"widgetTitle": "앱 정보",
|
||||
"openButton": "열기",
|
||||
"installButton": "설치하기",
|
||||
"uninstallButton": "제거하기",
|
||||
"uninstallButton": "삭제하기",
|
||||
"unmountButton": "마운트 해제",
|
||||
"exportButton": "내보내기",
|
||||
"deleteButton": "제거하기",
|
||||
"deleteButton": "삭제하기",
|
||||
"rootDialogTitle": "오류",
|
||||
"lastPatchedAppDescription": "마지막으로 패치된 앱의 백업입니다",
|
||||
"lastPatchedAppDescription": "마지막으로 패치된 앱의 백업입니다.",
|
||||
"unmountDialogText": "이 앱의 마운트를 해제하시겠습니까?",
|
||||
"uninstallDialogText": "이 앱을 제거하시겠습니까?",
|
||||
"rootDialogText": "앱이 슈퍼유저 권한으로 설치되었으나 현재 ReVanced Manager에는 권한이 없습니다\n먼저 슈퍼유저 권한을 부여하세요",
|
||||
"removeAppDialogTitle": "앱을 제거하시겠습니까?",
|
||||
"removeAppDialogText": "이 백업을 제거하시겠습니까?",
|
||||
"uninstallDialogText": "이 앱을 삭제하시겠습니까?",
|
||||
"rootDialogText": "앱이 슈퍼유저 권한으로 설치되었으나 현재 ReVanced Manager에는 권한이 없습니다.\n먼저 슈퍼유저 권한을 부여하세요.",
|
||||
"removeAppDialogTitle": "앱을 삭제하시겠습니까?",
|
||||
"removeAppDialogText": "이 백업을 삭제하시겠습니까?",
|
||||
"packageNameLabel": "패키지 이름",
|
||||
"installTypeLabel": "설치 유형",
|
||||
"mountTypeLabel": "마운트",
|
||||
@ -282,17 +285,17 @@
|
||||
"status_failure_incompatible": "설치 미호환",
|
||||
"status_failure_timeout": "설치 시간 초과",
|
||||
"status_unknown": "설치 실패",
|
||||
"mount_version_mismatch_description": "패치된 앱과 설치된 앱의 버전이 달라서 설치에 실패하였습니다\n\n마운트하고 있는 앱의 버전으로 설치한 후에 다시 시도하세요",
|
||||
"mount_no_root_description": "Root 권한이 주어지지 않아서 설치에 실패하였습니다\n\nReVanced Manager에 Root 권한을 부여한 후에 다시 시도하세요",
|
||||
"mount_missing_installation_description": "패치되지 않은 앱이 이 기기에 설치되지 않아서 마운트를 진행할 수 없어서 설치에 실패하였습니다\n\n마운트하기 전 패치되지 않은 앱을 설치한 후에 다시 시도하세요",
|
||||
"status_failure_timeout_description": "설치하는 데 시간이 너무 오래 걸립니다\n\n다시 시도하시겠습니까?",
|
||||
"status_failure_storage_description": "저장소 공간이 충분하지 않아서 설치에 실패하였습니다\n\n저장소 공간을 확보한 후에 다시 시도하세요",
|
||||
"status_failure_invalid_description": "패치된 앱이 유효하지 않아서 설치에 실패하였습니다\n\n앱을 제거한 후에 다시 시도하시겠습니까?",
|
||||
"status_failure_incompatible_description": "이 앱은 이 기기와 호환되지 않습니다\n\n이 기기에서 지원되는 APK를 사용하여 다시 시도하세요",
|
||||
"status_failure_conflict_description": "기존에 설치된 앱이 설치를 방해하였습니다\n\n설치된 앱을 제거한 후에 다시 시도하시겠습니까?",
|
||||
"status_failure_blocked_description": "설치가 '${packageName}'에 의해 차단되었습니다\n\n보안 설정을 조정한 후에 다시 시도하세요",
|
||||
"install_failed_verification_failure_description": "인증 문제로 인해 설치에 실패하였습니다\n\n보안 설정을 조정한 후에 다시 시도하세요",
|
||||
"install_failed_version_downgrade_description": "패치된 앱의 버전이 설치된 앱의 버전보다 낮아서 설치에 실패하였습니다\n\n앱을 제거한 후에 다시 시도하시겠습니까?",
|
||||
"status_unknown_description": "알 수 없는 이유로 설치에 실패하였습니다. 다시 시도하세요"
|
||||
"mount_version_mismatch_description": "패치된 앱과 설치된 앱의 버전이 달라서 설치에 실패하였습니다.\n\n마운트하고 있는 앱의 버전으로 설치한 후에 다시 시도하세요.",
|
||||
"mount_no_root_description": "Root 권한이 주어지지 않아서 설치에 실패하였습니다.\n\nReVanced Manager에 Root 권한을 부여한 후에 다시 시도하세요.",
|
||||
"mount_missing_installation_description": "패치되지 않은 앱이 이 기기에 설치되지 않아서 마운트를 진행할 수 없어서 설치에 실패하였습니다.\n\n마운트하기 전 패치되지 않은 앱을 설치한 후에 다시 시도하세요.",
|
||||
"status_failure_timeout_description": "설치하는 데 시간이 너무 오래 걸립니다.\n\n다시 시도하시겠습니까?",
|
||||
"status_failure_storage_description": "저장소 공간이 충분하지 않아서 설치에 실패하였습니다.\n\n저장소 공간을 확보한 후에 다시 시도하세요.",
|
||||
"status_failure_invalid_description": "패치된 앱이 유효하지 않아서 설치에 실패하였습니다.\n\n앱을 삭제한 후에 다시 시도하시겠습니까?",
|
||||
"status_failure_incompatible_description": "이 앱은 이 기기와 호환되지 않습니다.\n\n이 기기에서 지원되는 APK를 사용하여 다시 시도하세요.",
|
||||
"status_failure_conflict_description": "기존에 설치된 앱이 설치를 방해하였습니다.\n\n설치된 앱을 삭제한 후에 다시 시도하시겠습니까?",
|
||||
"status_failure_blocked_description": "설치가 '${packageName}'에 의해 차단되었습니다.\n\n보안 설정을 조정한 후에 다시 시도하세요.",
|
||||
"install_failed_verification_failure_description": "인증 문제로 인해 설치에 실패하였습니다.\n\n보안 설정을 조정한 후에 다시 시도하세요.",
|
||||
"install_failed_version_downgrade_description": "패치된 앱의 버전이 설치된 앱의 버전보다 낮아서 설치에 실패하였습니다.\n\n앱을 삭제한 후에 다시 시도하시겠습니까?",
|
||||
"status_unknown_description": "알 수 없는 이유로 설치에 실패하였습니다. 다시 시도하세요."
|
||||
}
|
||||
}
|
@ -180,6 +180,7 @@
|
||||
"disablePatchesSelectionWarningText": "Jūs gatavojaties atspējot labojumu izvēles maiņu.\nTiksies atjaunota labojumu noklusējuma izvēle.\n\nTomēr atspējot?",
|
||||
"autoUpdatePatchesLabel": "Automātiski atjaunināt ielāpus",
|
||||
"autoUpdatePatchesHint": "Automātiski atjaunināt ielāpus uz jaunāko versiju",
|
||||
"usePrereleasesLabel": "Lietot pirmizlaidumus",
|
||||
"showUpdateDialogLabel": "Rādīt atjauninājuma dialoglodziņu",
|
||||
"showUpdateDialogHint": "Rādīt dialoglodziņu, kad ir pieejams jauns atjauninājums",
|
||||
"universalPatchesLabel": "Rādīt universālos ielāpus",
|
||||
|
@ -1,18 +1,41 @@
|
||||
{
|
||||
"okButton": "OK",
|
||||
"cancelButton": "Batal",
|
||||
"dismissButton": "Melepaskan",
|
||||
"quitButton": "Henti",
|
||||
"updateButton": "Kemas kini",
|
||||
"suggested": "Versi dicadangkan: ${version}",
|
||||
"yesButton": "Ya",
|
||||
"noButton": "Tidak",
|
||||
"warning": "Amaran",
|
||||
"notice": "Notis",
|
||||
"noShowAgain": "Jangan tunjukkan lagi",
|
||||
"add": "Tambah",
|
||||
"remove": "Buang",
|
||||
"showChangelogButton": "Tunjuk log perubahan",
|
||||
"showUpdateButton": "Tunjuk kemas kini",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Papan Pemuka",
|
||||
"patcherTab": "Pemodifikasi",
|
||||
"settingsTab": "Tetapan"
|
||||
},
|
||||
"homeView": {
|
||||
"refreshSuccess": "Muat semula berjaya",
|
||||
"widgetTitle": "Papan Pemuka",
|
||||
"updatesSubtitle": "Kemas Kini",
|
||||
"lastPatchedAppSubtitle": "Aplikasi tampalan terakhir",
|
||||
"patchedSubtitle": "Apl yang telah di pasang",
|
||||
"changeLaterSubtitle": "Anda boleh menukar tetapan pada waktu lain",
|
||||
"noSavedAppFound": "Tiada aplikasi di jumpai",
|
||||
"noInstallations": "Tiada aplikasi tampalan telah di pasang",
|
||||
"installUpdate": "Teruskan untuk pasang kemaskini? ",
|
||||
"updateSheetTitle": "Kemaskini ReVanced Manager",
|
||||
"updateDialogTitle": "Kemas kini baharu tersedia",
|
||||
"updatePatchesSheetTitle": "Kemaskini ReVanced Patches",
|
||||
"updateChangelogTitle": "Log perubahan",
|
||||
"updateDialogText": "Kemas kini baharu tersedia untuk ${file}\n\nVersi yang terpasang adalah ${version}",
|
||||
"downloadConsentDialogTitle": "Muat turun fail yang diperlukan?",
|
||||
"downloadConsentDialogText": "ReVanced Manager perlu memuat turun fail penting untuk berfungsi dengan baik.",
|
||||
"downloadingMessage": "Memuat turun pengemaskinian...",
|
||||
"downloadedMessage": "Kemaskini dimuat turun",
|
||||
"installingMessage": "Memasang pengemaskinian...",
|
||||
@ -54,7 +77,6 @@
|
||||
"noneChip": "Tiada",
|
||||
"noPatchesFound": "Tiada modifikasi dijumpai untuk apl pilihan"
|
||||
},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Memilih modifikasi mungkin menyebabkan ralat ketika modifikasi.\n\nVersi aplikasi: ${packageVersion}\nVersi disokong:\n${supportedVersions}"
|
||||
},
|
||||
@ -104,6 +126,5 @@
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Penyumbang"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
}
|
||||
}
|
@ -3,22 +3,5 @@
|
||||
"cancelButton": "ပယ်ဖျက်မည်",
|
||||
"dismissButton": "မလုပ်တော့ပါ",
|
||||
"quitButton": "ထွက်မည်",
|
||||
"updateButton": "အပ်ပဒိတ်",
|
||||
"navigationView": {},
|
||||
"homeView": {},
|
||||
"applicationItem": {},
|
||||
"latestCommitCard": {},
|
||||
"patcherView": {},
|
||||
"appSelectorCard": {},
|
||||
"patchSelectorCard": {},
|
||||
"socialMediaCard": {},
|
||||
"appSelectorView": {},
|
||||
"patchesSelectorView": {},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {},
|
||||
"installerView": {},
|
||||
"settingsView": {},
|
||||
"appInfoView": {},
|
||||
"contributorsView": {},
|
||||
"installErrorDialog": {}
|
||||
"updateButton": "အပ်ပဒိတ်"
|
||||
}
|
@ -1,9 +1,9 @@
|
||||
// ignore_for_file: avoid_print
|
||||
// ignore_for_file: avoid_print, prefer_foreach
|
||||
|
||||
import 'dart:convert';
|
||||
import 'dart:io';
|
||||
|
||||
T? removeBlankEntries<T>(T? json) {
|
||||
dynamic removeBlankEntries(dynamic json) {
|
||||
// This function is protected by BSD 3-Clause License
|
||||
// Changes made to this section are allow removing of '' values from JSON
|
||||
|
||||
@ -37,23 +37,47 @@ T? removeBlankEntries<T>(T? json) {
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
if (json == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (json is List) {
|
||||
json.removeWhere((e) => e == null);
|
||||
json.forEach(removeBlankEntries);
|
||||
// If the list is empty after removing nulls, return null to remove it.
|
||||
for (int i = json.length - 1; i >= 0; i--) {
|
||||
final processedElement = removeBlankEntries(json[i]);
|
||||
if (processedElement == null) {
|
||||
json.removeAt(i);
|
||||
} else {
|
||||
json[i] = processedElement;
|
||||
}
|
||||
}
|
||||
return json.isEmpty ? null : json;
|
||||
} else if (json is Map) {
|
||||
json.removeWhere(
|
||||
(key, value) => key == null || value == null || value == '',
|
||||
);
|
||||
json.values.forEach(removeBlankEntries);
|
||||
// If the map is empty after removing blank entries, return null to remove it.
|
||||
return json.isEmpty ? null : json;
|
||||
final keysToRemove = <dynamic>{};
|
||||
final keys = json.keys.toList();
|
||||
|
||||
for (final key in keys) {
|
||||
if (key == null) {
|
||||
keysToRemove.add(key);
|
||||
continue;
|
||||
}
|
||||
final processedValue = removeBlankEntries(json[key]);
|
||||
if (processedValue == null || processedValue == '') {
|
||||
keysToRemove.add(key);
|
||||
} else {
|
||||
json[key] = processedValue;
|
||||
}
|
||||
}
|
||||
for (final key in keysToRemove) {
|
||||
json.remove(key);
|
||||
}
|
||||
return json.isEmpty ? null : json;
|
||||
}
|
||||
|
||||
if (json is String && json.isEmpty) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return json;
|
||||
}
|
||||
|
||||
@ -62,33 +86,44 @@ Future<void> processJsonFiles() async {
|
||||
final List<FileSystemEntity> files = directory.listSync();
|
||||
|
||||
for (final file in files) {
|
||||
if (!file.path.endsWith('.json') || file is! File) {
|
||||
continue;
|
||||
}
|
||||
try {
|
||||
if (file is File && file.path.endsWith('.json')) {
|
||||
final String contents = await file.readAsString();
|
||||
final dynamic json = jsonDecode(contents);
|
||||
final dynamic processedJson = removeBlankEntries(json);
|
||||
bool isEmpty = false;
|
||||
|
||||
if (processedJson is Map) {
|
||||
isEmpty = processedJson.values.every((value) => value is Map && value.isEmpty);
|
||||
}
|
||||
|
||||
if (processedJson == null || isEmpty) {
|
||||
await file.delete();
|
||||
print('🗑️ File deleted: ${file.path}');
|
||||
} else {
|
||||
await file.writeAsString(
|
||||
const JsonEncoder.withIndent(' ').convert(processedJson),
|
||||
);
|
||||
print('🥞 Task successful on: ${file.path}');
|
||||
}
|
||||
final contents = await file.readAsString();
|
||||
if (contents.trim().isEmpty) {
|
||||
print('🗑️ File is empty, deleting: ${file.path}');
|
||||
await file.delete();
|
||||
continue;
|
||||
}
|
||||
} catch (e) {
|
||||
|
||||
dynamic jsonInput;
|
||||
try {
|
||||
jsonInput = jsonDecode(contents);
|
||||
} on FormatException catch (e, stackTrace) {
|
||||
print('💥 Invalid JSON in file: ${file.path}: $e');
|
||||
print(stackTrace);
|
||||
continue;
|
||||
}
|
||||
|
||||
final dynamic processedJson = removeBlankEntries(jsonInput);
|
||||
if (processedJson == null) {
|
||||
await file.delete();
|
||||
print('🗑️ File resulted in empty JSON, deleted: ${file.path}');
|
||||
} else {
|
||||
final prettyJson = const JsonEncoder.withIndent(
|
||||
' ', // Two spaces
|
||||
).convert(processedJson);
|
||||
await file.writeAsString(prettyJson);
|
||||
print('🥞 Task successful on: ${file.path}');
|
||||
}
|
||||
} catch (e, stackTrace) {
|
||||
print('💥 Task failed on: ${file.path}: $e');
|
||||
print(stackTrace);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void main() async {
|
||||
processJsonFiles();
|
||||
await processJsonFiles();
|
||||
}
|
||||
|
@ -21,8 +21,6 @@
|
||||
"widgetTitle": "ରଫୁକାର",
|
||||
"patchButton": "ରଫୁ"
|
||||
},
|
||||
"appSelectorCard": {},
|
||||
"patchSelectorCard": {},
|
||||
"socialMediaCard": {
|
||||
"widgetSubtitle": "ଆମେ ଅନଲାଇନ୍ ଅଛୁ!"
|
||||
},
|
||||
@ -34,9 +32,6 @@
|
||||
"defaultChip": "ଡିଫଲ୍ଟ",
|
||||
"defaultTooltip": "ସମସ୍ତ ଡିଫଲ୍ଟ ରଫୁ ଚୟନ କର"
|
||||
},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {},
|
||||
"installerView": {},
|
||||
"settingsView": {
|
||||
"widgetTitle": "ସେଟିଂ",
|
||||
"appearanceSectionTitle": "ରୂପ",
|
||||
@ -57,7 +52,5 @@
|
||||
"appInfoView": {
|
||||
"widgetTitle": "ଆପ୍ ସୂଚନା",
|
||||
"rootDialogTitle": "ତ୍ରୁଟି"
|
||||
},
|
||||
"contributorsView": {},
|
||||
"installErrorDialog": {}
|
||||
}
|
||||
}
|
@ -7,7 +7,7 @@
|
||||
"suggested": "Sugerowana wersja: ${version}",
|
||||
"yesButton": "Tak",
|
||||
"noButton": "Nie",
|
||||
"warning": "Ostrzeżenie",
|
||||
"warning": "Uwaga",
|
||||
"notice": "Komunikat",
|
||||
"noShowAgain": "Nie pokazuj ponownie",
|
||||
"add": "Dodaj",
|
||||
@ -23,13 +23,13 @@
|
||||
"refreshSuccess": "Odświeżono pomyślnie",
|
||||
"widgetTitle": "Panel główny",
|
||||
"updatesSubtitle": "Aktualizacje",
|
||||
"lastPatchedAppSubtitle": "Ostatnio poprawiona aplikacja",
|
||||
"lastPatchedAppSubtitle": "Ostatnio załatana aplikacja",
|
||||
"patchedSubtitle": "Zainstalowane aplikacje",
|
||||
"changeLaterSubtitle": "Możesz to zmienić w ustawieniach w późniejszym czasie.",
|
||||
"noSavedAppFound": "Nie znaleziono aplikacji",
|
||||
"noInstallations": "Nie zainstalowano żadnych łatanych aplikacji",
|
||||
"installUpdate": "Kontynuować instalację aktualizacji?",
|
||||
"updateSheetTitle": "Zaktualizuj Menedżera ReVanced",
|
||||
"updateSheetTitle": "Zaktualizuj ReVanced Manager",
|
||||
"updateDialogTitle": "Dostępna jest nowa aktualizacja",
|
||||
"updatePatchesSheetTitle": "Zaktualizuj łatki ReVanced",
|
||||
"updateChangelogTitle": "Lista zmian",
|
||||
@ -52,7 +52,7 @@
|
||||
"timeagoLabel": "${time} temu"
|
||||
},
|
||||
"patcherView": {
|
||||
"widgetTitle": "Łataj",
|
||||
"widgetTitle": "Łatanie",
|
||||
"patchButton": "Załataj",
|
||||
"incompatibleArchWarningDialogText": "Łatanie na tej architekturze nie jest jeszcze obsługiwane i może się nie powieść. Czy chcesz kontynuować mimo to?",
|
||||
"removedPatchesWarningDialogText": "Łatki usunięte od czasu Twojego ostatniego łatania aplikacji:\n\n${patches}\n\n${newPatches}Kontynuować?",
|
||||
@ -79,7 +79,7 @@
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Wybierz aplikację",
|
||||
"searchBarHint": "Wyszukaj aplikację",
|
||||
"storageButton": "Pamięć",
|
||||
"storageButton": "Wybierz z pamięci",
|
||||
"selectFromStorageButton": "Wybierz z pamięci",
|
||||
"errorMessage": "Nie można użyć wybranej aplikacji",
|
||||
"downloadToast": "Funkcja pobierania jest jeszcze niedostępna",
|
||||
@ -107,7 +107,7 @@
|
||||
"customValue": "Niestandardowa wartość",
|
||||
"setToNull": "Ustaw na zerowy",
|
||||
"nullValue": "Ta opcja jest obecnie pusta",
|
||||
"viewTitle": "Opcje łatek",
|
||||
"viewTitle": "Opcje łatki",
|
||||
"saveOptions": "Zapisz",
|
||||
"unselectPatch": "Odznacz łatkę",
|
||||
"tooltip": "Więcej opcji wejściowych",
|
||||
@ -154,9 +154,9 @@
|
||||
"lightThemeLabel": "Jasny",
|
||||
"darkThemeLabel": "Ciemny",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Ciesz się wrażeniami bliższymi twojemu urządzeniu",
|
||||
"dynamicThemeHint": "Ciesz się wyglądem dopasowanym do twojego urządzenia",
|
||||
"languageLabel": "Język",
|
||||
"languageUpdated": "Zaktualizowano język",
|
||||
"languageUpdated": "Zmieniono język",
|
||||
"sourcesLabel": "Alternatywne źródło",
|
||||
"sourcesLabelHint": "Skonfiguruj alternatywne źródła dla łatek ReVanced",
|
||||
"useAlternativeSources": "Używaj alternatywnych źródeł",
|
||||
|
@ -180,6 +180,7 @@
|
||||
"disablePatchesSelectionWarningText": "Você irá desabilitar a mudança da pré-seleção dos patches.\nA seleção padrão dos patches será restaurada.\n\nDesabilitar mesmo assim?",
|
||||
"autoUpdatePatchesLabel": "Atualizar patches automaticamente",
|
||||
"autoUpdatePatchesHint": "Atualize automaticamente os patches para a versão mais recente",
|
||||
"usePrereleasesLabel": "Usar versões preliminares",
|
||||
"showUpdateDialogLabel": "Mostrar alerta de atualização",
|
||||
"showUpdateDialogHint": "Mostra um aviso quando uma nova atualização estiver disponível",
|
||||
"universalPatchesLabel": "Mostrar patches universais",
|
||||
|
@ -12,8 +12,8 @@
|
||||
"noShowAgain": "Não mostrar isto novamente",
|
||||
"add": "Adicionar",
|
||||
"remove": "Remover",
|
||||
"showChangelogButton": "Mostrar correções",
|
||||
"showUpdateButton": "Mostrar atualização",
|
||||
"showChangelogButton": "Mostrar as alterações",
|
||||
"showUpdateButton": "Mostrar a atualização",
|
||||
"navigationView": {
|
||||
"dashboardTab": "Painel de Controlo",
|
||||
"patcherTab": "Modificador",
|
||||
@ -23,15 +23,15 @@
|
||||
"refreshSuccess": "Atualizado com sucesso",
|
||||
"widgetTitle": "Painel de Controlo",
|
||||
"updatesSubtitle": "Atualizações",
|
||||
"lastPatchedAppSubtitle": "Última aplicação corrigida",
|
||||
"lastPatchedAppSubtitle": "Última aplicação modificada",
|
||||
"patchedSubtitle": "Aplicações instaladas",
|
||||
"changeLaterSubtitle": "Podes modificar esta definição mais tarde.",
|
||||
"noSavedAppFound": "Nenhuma aplicação encontrada",
|
||||
"noInstallations": "Nenhuma aplicação modificada instalada",
|
||||
"installUpdate": "Continuar para instalar a atualização?",
|
||||
"installUpdate": "Continuar a instalação da atualização?",
|
||||
"updateSheetTitle": "Atualizar o ReVanced Manager",
|
||||
"updateDialogTitle": "Nova atualização disponível",
|
||||
"updatePatchesSheetTitle": "Atualizar o ReVanced Manager",
|
||||
"updatePatchesSheetTitle": "Atualizar as Modificações do ReVanced",
|
||||
"updateChangelogTitle": "Alterações",
|
||||
"updateDialogText": "Está disponível uma nova atualização para ${file}.\n\nA versão que está atualmente instalada é ${version}.",
|
||||
"downloadConsentDialogTitle": "Transferir os ficheiros necessários?",
|
||||
@ -54,92 +54,92 @@
|
||||
"patcherView": {
|
||||
"widgetTitle": "Modificador",
|
||||
"patchButton": "Modificar",
|
||||
"incompatibleArchWarningDialogText": "A modificação nesta arquitetura ainda não é suportada e pode falhar. Continuar na mesma?",
|
||||
"removedPatchesWarningDialogText": "Modificações removidas desde a última vez que corrigiu esta aplicação:\n\n${patches}\n\n${newPatches}Continuar mesmo assim?",
|
||||
"addedPatchesDialogText": "Modificações adicionadas desde a última vez que corrigiu esta aplicação:\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "Algumas opções das Modificações precisam ser definidas."
|
||||
"incompatibleArchWarningDialogText": "A arquitetura deste dispositivo ainda não é suportada para aplicar modificações a aplicações e possivelmente irá falhar. Continuar na mesma?",
|
||||
"removedPatchesWarningDialogText": "Modificações removidas desde a última vez que modificaste esta aplicação:\n\n${patches}\n\n${newPatches}Continuar na mesma?",
|
||||
"addedPatchesDialogText": "Modificações adicionadas desde a última vez que modificaste esta aplicação:\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "É necessário definir as opções de algumas modificações."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Selecionar uma aplicação",
|
||||
"widgetTitleSelected": "Aplicação selecionada",
|
||||
"widgetSubtitle": "Nenhuma aplicação selecionada",
|
||||
"widgetTitle": "Escolha uma aplicação",
|
||||
"widgetTitleSelected": "Aplicação escolhida",
|
||||
"widgetSubtitle": "Nenhuma aplicação escolhida",
|
||||
"noAppsLabel": "Nenhuma aplicação encontrada",
|
||||
"anyVersion": "Qualquer versão"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "Selecionar modificações",
|
||||
"widgetTitleSelected": "Modificações selecionadas",
|
||||
"widgetTitle": "Escolher modificações",
|
||||
"widgetTitleSelected": "Modificações escolhidas",
|
||||
"widgetSubtitle": "Selecionar primeiro uma aplicação",
|
||||
"widgetEmptySubtitle": "Nenhuma modificação selecionada"
|
||||
"widgetEmptySubtitle": "Nenhuma modificação escolhida"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
"widgetTitle": "Redes Sociais",
|
||||
"widgetSubtitle": "Nós estamos online!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Selecionar uma aplicação",
|
||||
"viewTitle": "Escolha uma aplicação",
|
||||
"searchBarHint": "Procurar aplicação",
|
||||
"storageButton": "Armazenamento",
|
||||
"selectFromStorageButton": "Selecionar do armazenamento",
|
||||
"selectFromStorageButton": "Escolher do armazenamento",
|
||||
"errorMessage": "Não foi possível utilizar a aplicação selecionada",
|
||||
"downloadToast": "A função da transferência ainda não está disponível",
|
||||
"requireSuggestedAppVersionDialogText": "A versão da aplicação que selecionaste não corresponde à versão sugerida, o que pode levar a problemas inesperados. Utiliza a versão recomendada.\n\nVersão selecionada: ${selected}\nVersão recomendada: ${suggested}\n\nPara continuar na mesma, desactive a opção \"Exigir a versão recomendada da aplicação\" nas definições.",
|
||||
"requireSuggestedAppVersionDialogText": "A versão da aplicação que escolheste não corresponde à versão recomendada, o que pode levar a problemas inesperados. Por favor, utilize a versão recomendada.\n\nVersão escolhida: ${selected}\nVersão recomendada: ${suggested}\n\nNo entanto para continuar à mesma, desativa a opção “Exigir a versão recomendada da aplicação” nas definições.",
|
||||
"featureNotAvailable": "A funcionalidade não está implementada",
|
||||
"featureNotAvailableText": "Esta aplicação é um APK dividido e só pode ser modificado e instalado de forma fiável através da montagem com permissões root. No entanto, é possível dar patch e instalar um APK completo selecionando ele a partir do armazenamento."
|
||||
"featureNotAvailableText": "Esta aplicação é uma APK dividida que só pode ser modificada e instalada de forma fiável através da montagem com permissões root. No entanto, ainda podes modificar e instalar uma APK completa ao escolher a partir do armazenamento."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Selecionar modificações",
|
||||
"viewTitle": "Escolher modificações",
|
||||
"searchBarHint": "Procurar modificações",
|
||||
"universalPatches": "Modificações universais",
|
||||
"newPatches": "Novas modificações",
|
||||
"patches": "Modificações",
|
||||
"doneButton": "Concluído",
|
||||
"defaultChip": "Predefinição",
|
||||
"defaultTooltip": "Selecionar todas as modificações padrão",
|
||||
"defaultChip": "Padrão",
|
||||
"defaultTooltip": "Escolher todas as modificações predefinidas",
|
||||
"noneChip": "Nenhum",
|
||||
"noneTooltip": "Desselecionar todas as modificações",
|
||||
"loadPatchesSelection": "Carregar a seleção de modificações",
|
||||
"noSavedPatches": "Não há nenhuma modificação guardada para a aplicação selecionada.\nPrima Concluído para guardar a seleção atual.",
|
||||
"noPatchesFound": "Nenhuma modificação encontrada para a aplicação selecionada",
|
||||
"setRequiredOption": "Algumas modificações requerem a definição de opções:\n\n${patches}\n\nPor favor, configure-as antes de continuar."
|
||||
"noneTooltip": "Remover todas as modificações",
|
||||
"loadPatchesSelection": "Carregar as modificações selecionadas",
|
||||
"noSavedPatches": "Não existe nenhum conjunto de modificações guardadas para a aplicação escolhida.\nPrima \"Concluído\" para guardar a escolha atualmente feita.",
|
||||
"noPatchesFound": "Não foram encontradas modificações para a aplicação escolhida",
|
||||
"setRequiredOption": "Algumas modificações precisam que as suas opções sejam definidas:\n\n${patches}\n\nPor favor, configure-as antes de continuar."
|
||||
},
|
||||
"patchOptionsView": {
|
||||
"customValue": "Valor personalizado",
|
||||
"setToNull": "Definir como nulo",
|
||||
"nullValue": "Atualmente, este valor de opção é nulo",
|
||||
"viewTitle": "Opções de modificação",
|
||||
"nullValue": "O valor desta opção é atualmente nulo",
|
||||
"viewTitle": "Opções da Modificação",
|
||||
"saveOptions": "Guardar",
|
||||
"unselectPatch": "Desmarque o patch",
|
||||
"unselectPatch": "Remover modificação",
|
||||
"tooltip": "Mais opções de entrada",
|
||||
"selectFilePath": "Selecionar caminho do ficheiro",
|
||||
"selectFolder": "Selecionar pasta",
|
||||
"selectFilePath": "Escolha o diretório do ficheiro",
|
||||
"selectFolder": "Escolha a pasta",
|
||||
"requiredOption": "É necessário definir esta opção",
|
||||
"unsupportedOption": "Esta opção não é suportada",
|
||||
"requiredOptionNull": "As seguintes opções devem ser definidas:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "Selecionar esta modificação pode resultar em erros.\n\nVersão da aplicação: ${packageVersion}\nVersões suportadas:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "A Modificação não é suportada para esta versão da aplicação.",
|
||||
"unsupportedDialogText": "A escolha desta modificação poderá resultar em erros inesperados na construção da aplicação.\n\nVersão da aplicação: ${packageVersion}\nVersões suportadas:\n${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Esta modificação não é suportada para versão desta aplicação.",
|
||||
"unsupportedRequiredOption": "Esta modificação contém uma opção obrigatória que não é suportada por esta aplicação",
|
||||
"patchesChangeWarningDialogText": "Recomenda-se a utilização das modificações e opções padrão. Alterar as opções poderá resultar em problemas inesperados.\n\nTens que ativar a opção \"Permitir alterar a seleção de Modificações\" nas definições antes de ativares ou desativares qualquer modificação.",
|
||||
"patchesChangeWarningDialogButton": "Utilizar a seleção predefinida"
|
||||
"patchesChangeWarningDialogText": "É recomendado utilizar a seleção de modificações predefinida e as suas respetivas opções. Adicionar ou remover modificações poderá resultar em problemas inesperados.\n\nTu irás precisar de ativar a opção “Permitir a alteração da seleção de modificações” nas definições antes de tentares adicionar ou remover alguma modificação.",
|
||||
"patchesChangeWarningDialogButton": "Utilizar a escolha predefinida"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Seleciona o tipo de instalação",
|
||||
"installType": "Escolha o tipo da instalação",
|
||||
"installTypeDescription": "Seleciona o tipo de instalação para continuar.",
|
||||
"installButton": "Instalar",
|
||||
"installRootType": "Montar",
|
||||
"installNonRootType": "Normal",
|
||||
"warning": "Desative as atualizações automáticas do app patcheado para evitar problemas inesperados.",
|
||||
"pressBackAgain": "Pressione voltar novamente para cancelar",
|
||||
"warning": "Desativa as atualizações automáticas da aplicação modificada para evitar problemas inesperados.",
|
||||
"pressBackAgain": "Premir novamente para cancelar",
|
||||
"openButton": "Abrir",
|
||||
"notificationTitle": "O ReVanced Manager está a fazer as modificações",
|
||||
"notificationTitle": "O ReVanced Manager está a aplicar as modificações",
|
||||
"notificationText": "Toca para voltar ao instalador",
|
||||
"exportApkButtonTooltip": "Exportar APK com o patch",
|
||||
"exportApkButtonTooltip": "Exportar o APK modificado",
|
||||
"exportLogButtonTooltip": "Exportar o registo",
|
||||
"screenshotDetected": "Foi detetada uma captura de ecrã. Se estiver a tentar partilhar o registo, partilhe antes uma cópia de texto.\n\nCopiar o registo para a área de transferência?",
|
||||
"screenshotDetected": "Foi detetada uma captura de ecrã. Se estiveres a tentar partilhar o registo, por favor partilha antes uma cópia de texto.\n\nCopiar o registo para a área de transferência?",
|
||||
"copiedToClipboard": "Registo copiado para a área de transferência",
|
||||
"noExit": "O instalador ainda está em execução, não é possível sair..."
|
||||
"noExit": "O instalador ainda está a ser executado, não é possível sair..."
|
||||
},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Definições",
|
||||
@ -154,43 +154,43 @@
|
||||
"lightThemeLabel": "Claro",
|
||||
"darkThemeLabel": "Escuro",
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "Aproveite uma experiência mais próxima do tema do seu dispositivo",
|
||||
"dynamicThemeHint": "Desfrute duma experiência mais próxima do teu dispositivo",
|
||||
"languageLabel": "Idioma",
|
||||
"languageUpdated": "Idioma atualizado",
|
||||
"sourcesLabel": "Fontes alternativas",
|
||||
"sourcesLabelHint": "Configure as fontes alternativas para Correções ReVanced",
|
||||
"sourcesLabelHint": "Configurar as fontes alternativas para as Modificações do ReVanced",
|
||||
"useAlternativeSources": "Utilizar as fontes alternativas",
|
||||
"useAlternativeSourcesHint": "Usar fontes alternativas para correções redistribuídas em vez da API",
|
||||
"useAlternativeSourcesHint": "Utilizar fontes alternativas para as Modificações do ReVanced em vez da API",
|
||||
"sourcesResetDialogTitle": "Repor",
|
||||
"sourcesResetDialogText": "Tens a certeza de que pretendes repor os valores predefinidos das fontes?",
|
||||
"apiURLResetDialogText": "Tens a certeza de que pretendes repor a URL da API para o seu valor predefinido?",
|
||||
"sourcesUpdateNote": "Nota: Esta ação descarrega automaticamente as Modificações do ReVanced de fontes alternativas.\n\nIsto ligá-lo-á à fonte alternativa.",
|
||||
"apiURLResetDialogText": "Tens a certeza de que pretendes repor a tua URL da API para o seu valor predefinido?",
|
||||
"sourcesUpdateNote": "Nota: Esta ação irá descarregar automaticamente as Modificações do ReVanced a partir de fontes alternativas.\n\nIsto irá estabelecer uma conexão com as fontes alternativas.",
|
||||
"apiURLLabel": "URL da API",
|
||||
"apiURLHint": "Configurar a URL da API do ReVanced Manager",
|
||||
"selectApiURL": "URL da API",
|
||||
"orgPatchesLabel": "Organização de Modificações",
|
||||
"orgPatchesLabel": "Organização das Modificações",
|
||||
"sourcesPatchesLabel": "Fonte das Modificações",
|
||||
"contributorsLabel": "Contribuidores",
|
||||
"contributorsHint": "Uma lista de contribuidores do ReVanced",
|
||||
"logsLabel": "Partilhar os registos",
|
||||
"logsHint": "Partilhar os registos do ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Permitir alterar a seleção de Modificações",
|
||||
"enablePatchesSelectionHint": "Não prevenir a seleção ou a desseleção das modificações",
|
||||
"enablePatchesSelectionWarningText": "Alterar a seleção de Modificações pode causar problemas inesperados.\n\nAtivar de qualquer forma?",
|
||||
"disablePatchesSelectionWarningText": "Estás prestes a desativar a alteração da seleção de Modificações.\nA seleção predefinida de Modificações será restaurada.\n\nDesativar de qualquer forma?",
|
||||
"enablePatchesSelectionLabel": "Permitir a alteração da seleção de modificações",
|
||||
"enablePatchesSelectionHint": "Não impedir a escolha de modificações",
|
||||
"enablePatchesSelectionWarningText": "A alteração da seleção de modificações poderá causar problemas inesperados.\n\nAtivar na mesma?",
|
||||
"disablePatchesSelectionWarningText": "Estás prestes a desativar a permissão para alterar a seleção de modificações.\nA seleção de modificações predefinida será restaurada.\n\nDesativar na mesma?",
|
||||
"autoUpdatePatchesLabel": "Atualizar automaticamente as modificações",
|
||||
"autoUpdatePatchesHint": "Atualizar automaticamente as Modificações para a versão mais recente",
|
||||
"showUpdateDialogLabel": "Mostrar a notificação de atualização",
|
||||
"autoUpdatePatchesHint": "Atualizar automaticamente as modificações para a versão mais recente",
|
||||
"showUpdateDialogLabel": "Mostrar a notificação da atualização",
|
||||
"showUpdateDialogHint": "Mostrar uma notificação quando uma atualização estiver disponível",
|
||||
"universalPatchesLabel": "Mostrar Modificações universais",
|
||||
"universalPatchesHint": "Mostrar todas as aplicações e Modificações universais (pode tornar a lista de aplicações mais lenta)",
|
||||
"lastPatchedAppLabel": "Salvar aplicativo corrigido",
|
||||
"lastPatchedAppHint": "Salve o último patch para instalar ou exportar mais tarde",
|
||||
"universalPatchesLabel": "Mostrar modificações universais",
|
||||
"universalPatchesHint": "Mostrar todas as aplicações e modificações universais (pode tornar a lista de aplicações mais lenta)",
|
||||
"lastPatchedAppLabel": "Guardar a aplicação modificada",
|
||||
"lastPatchedAppHint": "Guardar a última aplicação modificada para instalar ou exportar mais tarde",
|
||||
"versionCompatibilityCheckLabel": "Verificação da compatibilidade das versões",
|
||||
"versionCompatibilityCheckHint": "Impedir a seleção de modificações que não são compatíveis com a versão selecionada do aplicativo",
|
||||
"requireSuggestedAppVersionLabel": "Exigir a versão sugerida da aplicação",
|
||||
"requireSuggestedAppVersionHint": "Impedir a seleção de uma aplicação com uma versão diferente da sugerida",
|
||||
"requireSuggestedAppVersionDialogText": "A seleção de uma aplicação diferente da versão sugerida poderá causar problemas inesperados.\n\nQueres continuar na mesma?",
|
||||
"versionCompatibilityCheckHint": "Impedir a seleção de modificações que não sejam compatíveis com a versão da aplicação selecionada",
|
||||
"requireSuggestedAppVersionLabel": "Exigir a versão recomendada da aplicação",
|
||||
"requireSuggestedAppVersionHint": "Impedir a escolha de uma aplicação com uma versão que não seja a recomendada",
|
||||
"requireSuggestedAppVersionDialogText": "A escolha de uma aplicação que não seja a versão recomendada poderá causar problemas inesperados.\n\nQueres continuar mesmo assim?",
|
||||
"aboutLabel": "Sobre",
|
||||
"snackbarMessage": "Copiado para a área de transferência",
|
||||
"restartAppForChanges": "Reinicia a aplicação para aplicar as alterações",
|
||||
@ -203,42 +203,42 @@
|
||||
"importSettingsLabel": "Importar definições",
|
||||
"importSettingsHint": "Importar definições a partir de um ficheiro JSON",
|
||||
"importedSettings": "Definições importadas",
|
||||
"exportPatchesLabel": "Exportar a seleção de Modificações",
|
||||
"exportPatchesHint": "Exportar a seleção de Modificações para um ficheiro JSON",
|
||||
"exportedPatches": "Seleção de Modificações exportada",
|
||||
"noExportFileFound": "Não há Modificações selecionadas para exportar",
|
||||
"importPatchesLabel": "Importar seleção de Modificações",
|
||||
"importPatchesHint": "Importar a seleção de Modificações de um ficheiro JSON",
|
||||
"importedPatches": "Modificações selecionadas importadas",
|
||||
"resetStoredPatchesLabel": "Repor a seleção de Modificações",
|
||||
"resetStoredPatchesHint": "Repor a seleção de Modificações armazenada",
|
||||
"resetStoredPatchesDialogTitle": "Repor a seleção de Modificações?",
|
||||
"resetStoredPatchesDialogText": "A seleção predefinida de Modificações será restaurada.",
|
||||
"resetStoredPatches": "A seleção de patches foi reposta",
|
||||
"resetStoredOptionsLabel": "Repor opções de Modificação",
|
||||
"resetStoredOptionsHint": "Repor todas as opções das modificações",
|
||||
"resetStoredOptionsDialogTitle": "Repor opções de Modificação?",
|
||||
"resetStoredOptionsDialogText": "A reposição das opções das Modificações removerá todas as opções guardadas.",
|
||||
"resetStoredOptions": "As opções foram redefinidas",
|
||||
"exportPatchesLabel": "Exportar uma seleção de modificações",
|
||||
"exportPatchesHint": "Exportar a seleção de modificações para um ficheiro JSON",
|
||||
"exportedPatches": "A seleção de modificações foi exportada",
|
||||
"noExportFileFound": "Não há nenhuma modificação selecionada para exportar",
|
||||
"importPatchesLabel": "Importar uma seleção de modificações",
|
||||
"importPatchesHint": "Importar uma seleção de modificações a partir de um ficheiro JSON",
|
||||
"importedPatches": "A seleção de modificações foi importada",
|
||||
"resetStoredPatchesLabel": "Repor a seleção de modificações",
|
||||
"resetStoredPatchesHint": "Repor a seleção de modificações armazenadas",
|
||||
"resetStoredPatchesDialogTitle": "Repor a seleção das modificações?",
|
||||
"resetStoredPatchesDialogText": "A seleção de modificações predefinida será restaurada.",
|
||||
"resetStoredPatches": "A seleção de modificações foi reposta",
|
||||
"resetStoredOptionsLabel": "Repor as opções de modificação",
|
||||
"resetStoredOptionsHint": "Repor todas as opções de modificação",
|
||||
"resetStoredOptionsDialogTitle": "Repor as opções de modificação?",
|
||||
"resetStoredOptionsDialogText": "A reposição das opções de modificação irá remover todas as opções guardadas.",
|
||||
"resetStoredOptions": "As opções foram repostas",
|
||||
"deleteLogsLabel": "Limpar os registos",
|
||||
"deleteLogsHint": "Eliminar os registos recolhidos pelo ReVanced Manager",
|
||||
"deletedLogs": "Registos eliminados",
|
||||
"regenerateKeystoreLabel": "Regenerar o armazenamento de chaves",
|
||||
"regenerateKeystoreHint": "Regenerar o armazenamento de chaves utilizado para assinar aplicações",
|
||||
"regenerateKeystoreDialogTitle": "Regenerar o armazenamento de chaves?",
|
||||
"regenerateKeystoreDialogText": "As aplicações Modificadas assinadas com o antigo armazenamento de chaves deixarão de poder ser atualizadas.",
|
||||
"regeneratedKeystore": "Armazenamento de chaves regenerado",
|
||||
"exportKeystoreLabel": "Exportar armazenamento de chaves",
|
||||
"exportKeystoreHint": "Exportar o armazenamento de chaves utilizado para assinar aplicações",
|
||||
"exportedKeystore": "Armazenamento de chaves regenerado",
|
||||
"noKeystoreExportFileFound": "Nenhum Armazenamento de chaves para exportar",
|
||||
"importKeystoreLabel": "Importar Armazenamento de chaves",
|
||||
"importKeystoreHint": "Importar um armazenamento de chaves utilizado para assinar aplicações",
|
||||
"importedKeystore": "Armazenamento de chaves importado",
|
||||
"selectKeystorePassword": "Palavra-passe do armazenamento de chaves",
|
||||
"selectKeystorePasswordHint": "Selecionar a palavra-passe do armazenamento de chaves utilizada para assinar aplicações",
|
||||
"jsonSelectorErrorMessage": "Não é possível usar o arquivo JSON selecionado",
|
||||
"keystoreSelectorErrorMessage": "Não é possível utilizar o ficheiro de armazenamento de chaves selecionado"
|
||||
"regenerateKeystoreLabel": "Regenerar o Repositório de Certificados",
|
||||
"regenerateKeystoreHint": "Regenerar o Repositório de Certificados utilizado para assinar aplicações",
|
||||
"regenerateKeystoreDialogTitle": "Regenerar o Repositório de Certificados?",
|
||||
"regenerateKeystoreDialogText": "As aplicações com modificações já assinadas com o Repositório de Certificados antigo vão deixar de poder ser atualizadas.",
|
||||
"regeneratedKeystore": "Repositório de Certificados regenerado",
|
||||
"exportKeystoreLabel": "Exportar Repositório de Certificados",
|
||||
"exportKeystoreHint": "Exportar o Repositório de Certificados utilizado para assinar aplicações",
|
||||
"exportedKeystore": "Repositório de Certificados exportado",
|
||||
"noKeystoreExportFileFound": "Nenhum Repositório de Certificados para exportar",
|
||||
"importKeystoreLabel": "Importar Repositório de Certificados",
|
||||
"importKeystoreHint": "Importar um Repositório de Certificados utilizado para assinar aplicações",
|
||||
"importedKeystore": "Repositório de Certificados importado",
|
||||
"selectKeystorePassword": "Palavra-passe do Repositório de Certificados",
|
||||
"selectKeystorePasswordHint": "Escolha a palavra-passe do Repositório de Certificados utilizada para assinar aplicações",
|
||||
"jsonSelectorErrorMessage": "Não é possível utilizar o ficheiro JSON escolhido",
|
||||
"keystoreSelectorErrorMessage": "Não é possível utilizar o ficheiro do Repositório de Certificados escolhido"
|
||||
},
|
||||
"appInfoView": {
|
||||
"widgetTitle": "Informações da aplicação",
|
||||
@ -249,21 +249,21 @@
|
||||
"exportButton": "Exportar",
|
||||
"deleteButton": "Apagar",
|
||||
"rootDialogTitle": "Erro",
|
||||
"lastPatchedAppDescription": "Este é um backup da aplicação que foi modificado pela última vez.",
|
||||
"unmountDialogText": "Tens a certeza que queres remover as modificações desta aplicação?",
|
||||
"uninstallDialogText": "Tem certeza que quer desinstalar esta aplicação?",
|
||||
"rootDialogText": "A aplicação foi instalada com permissões de Super-Utilizador, mas atualmente o ReVanced Manager não tem permissões.\nPor favor, conceda permissões de Super-Utilizador primeiro.",
|
||||
"lastPatchedAppDescription": "Isto é uma cópia de segurança da última aplicação modificada.",
|
||||
"unmountDialogText": "Tens a certeza de que queres desmontar esta aplicação?",
|
||||
"uninstallDialogText": "Tens a certeza de que queres desinstalar esta aplicação?",
|
||||
"rootDialogText": "A aplicação foi instalada com permissões de Super-Utilizador (Acesso Root), mas atualmente o ReVanced Manager não tem essas permissões.\n\nConceda primeiro as permissões de Super-Utilizador.",
|
||||
"removeAppDialogTitle": "Apagar a aplicação?",
|
||||
"removeAppDialogText": "Tem certeza que deseja apagar este backup?",
|
||||
"removeAppDialogText": "Tens a certeza de que queres apagar esta cópia de segurança?",
|
||||
"packageNameLabel": "Nome do pacote",
|
||||
"installTypeLabel": "Tipo de instalação",
|
||||
"mountTypeLabel": "Montar",
|
||||
"regularTypeLabel": "Normal",
|
||||
"patchedDateLabel": "Data do patch",
|
||||
"patchedDateLabel": "Data da Modificação",
|
||||
"appliedPatchesLabel": "Modificações aplicadas",
|
||||
"sizeLabel": "Tamanho do ficheiro",
|
||||
"patchedDateHint": "${date} às ${time}",
|
||||
"appliedPatchesHint": "${quantity} modificação/ões aplicada/s",
|
||||
"appliedPatchesHint": "${quantity} modificações aplicadas",
|
||||
"updateNotImplemented": "Esta funcionalidade ainda não foi implementada"
|
||||
},
|
||||
"contributorsView": {
|
||||
@ -278,21 +278,21 @@
|
||||
"status_failure_invalid": "Instalação inválida",
|
||||
"install_failed_version_downgrade": "Não é possível fazer downgrade",
|
||||
"status_failure_conflict": "Conflito na instalação",
|
||||
"status_failure_storage": "Problema de armazenamento de instalação",
|
||||
"status_failure_storage": "Problemas de Armazenamento durante a instalação",
|
||||
"status_failure_incompatible": "Instalação incompatível",
|
||||
"status_failure_timeout": "O tempo de instalação foi esgotado",
|
||||
"status_unknown": "A instalação falhou",
|
||||
"mount_version_mismatch_description": "A instalação falhou devido ao facto da aplicação instalada ser uma versão diferente da aplicação modificada.\n\nInstala a versão da aplicação que estás a montar e tenta novamente.",
|
||||
"mount_no_root_description": "A instalação falhou devido ao facto que o acesso ao root não ter sido atribuído.\n\nAtribua o acesso de root ao ReVanced Manager e tente novamente.",
|
||||
"mount_missing_installation_description": "A instalação falhou devido ao facto da aplicação não modificada não estar instalada neste dispositivo para poder ser montada sobre o mesmo.\n\nInstale a aplicação não corrigida antes de montar e tente novamente.",
|
||||
"status_failure_timeout_description": "A instalação demorou demasiado tempo para terminar.\n\nGostarias de tentar novamente?",
|
||||
"status_failure_storage_description": "A instalação falhou devido ao armazenamento insuficiente.\n\nLiberta algum espaço e tenta novamente.",
|
||||
"status_failure_invalid_description": "A instalação falhou porque o app patcheado era inválido.\n\nDesinstalar o app e tentar de novo?",
|
||||
"status_failure_incompatible_description": "O aplicativo é incompatível com este dispositivo.\n\nUse um APK que seja suportado por este dispositivo e tente novamente.",
|
||||
"status_failure_conflict_description": "A instalação foi impedida por uma instalação existente da aplicação\n\nDesinstalar a aplicação instalada e tentar de novo?",
|
||||
"status_failure_blocked_description": "A instalação foi bloqueada por ${packageName}.\n\nAjuste as suas definições de segurança e tenta novamente.",
|
||||
"install_failed_verification_failure_description": "A instalação falhou por problemas de verificação.\n\nAjusta as tuas definições de segurança e tenta novamente.",
|
||||
"install_failed_version_downgrade_description": "A instalação falhou porque a aplicação com o patch era de versão inferior à aplicação instalada.\n\nDesinstalar a aplicação e tentar de novo?",
|
||||
"status_unknown_description": "A instalação falhou por razões desconhecidas. Por favor, tenta novamente."
|
||||
"mount_version_mismatch_description": "A instalação falhou porque a aplicação instalada está numa versão diferente da aplicação modificada.\n\nInstala a mesma versão da aplicação que estás a montar e tenta novamente.",
|
||||
"mount_no_root_description": "A instalação falhou porque o acesso root não foi concedido.\n\nConceda o acesso de root ao ReVanced Manager e tenta novamente.",
|
||||
"mount_missing_installation_description": "A instalação falhou porque a aplicação original (não modificada) não está instalada neste dispositivo para se poder ser montada sobre ela.\n\nInstala a aplicação original (não modificada) antes de tentar montar uma nova aplicação e tenta novamente.",
|
||||
"status_failure_timeout_description": "A instalação demorou demasiado tempo a terminar.\n\nGostaria de tentar novamente?",
|
||||
"status_failure_storage_description": "A instalação falhou por falta de espaço no armazenamento.\n\nLiberta algum espaço e tenta novamente.",
|
||||
"status_failure_invalid_description": "A instalação falhou porque a aplicação modificada é inválida.\n\nDesinstalar a aplicação e tentar novamente?",
|
||||
"status_failure_incompatible_description": "A aplicação é incompatível com este dispositivo.\n\nUtiliza uma APK que seja suportada por este dispositivo e tenta novamente.",
|
||||
"status_failure_conflict_description": "A instalação foi impedida por uma instalação já existente da mesma aplicação.\n\nDesinstalar a aplicação instalada e tentar novamente?",
|
||||
"status_failure_blocked_description": "A instalação foi bloqueada por ${packageName}.\n\nAjusta as tuas definições de segurança e tenta novamente.",
|
||||
"install_failed_verification_failure_description": "A instalação falhou devido a um problema de verificação.\n\nAjusta as tuas definições de segurança e tenta novamente.",
|
||||
"install_failed_version_downgrade_description": "A instalação falhou porque a aplicação modificada está numa versão inferior à da aplicação já instalada.\n\nDesinstalar a aplicação instalada e tentar novamente?",
|
||||
"status_unknown_description": "A instalação falhou devido a um motivo desconhecido. Por favor, tente novamente."
|
||||
}
|
||||
}
|
@ -29,7 +29,7 @@
|
||||
"noSavedAppFound": "Не найдено приложений",
|
||||
"noInstallations": "Пропатченные приложения не установлены",
|
||||
"installUpdate": "Продолжить установку обновления?",
|
||||
"updateSheetTitle": "Обновить Revanced Менеджер",
|
||||
"updateSheetTitle": "Обновить ReVanced Manager",
|
||||
"updateDialogTitle": "Доступно обновление",
|
||||
"updatePatchesSheetTitle": "Обновить патчи ReVanced",
|
||||
"updateChangelogTitle": "Список изменений",
|
||||
@ -180,6 +180,9 @@
|
||||
"disablePatchesSelectionWarningText": "Вы собираетесь выключить измененную выборку патчей.\nБудет восстановлен стандартный выбор патчей.\n\nВсе равно выключить?",
|
||||
"autoUpdatePatchesLabel": "Автообновление патчей",
|
||||
"autoUpdatePatchesHint": "Автоматически обновлять патчи до последней версии",
|
||||
"usePrereleasesLabel": "Использовать предварительные версии",
|
||||
"usePrereleasesHint": "Использовать предварительные версии ReVanced Manager и ReVanced Patches",
|
||||
"usePrereleasesWarningText": "Использование предварительных версий может привести к непредвиденным проблемам.\n\nВключить в любом случае?",
|
||||
"showUpdateDialogLabel": "Показать диалог обновления",
|
||||
"showUpdateDialogHint": "Показывать диалоговое окно, когда доступно новое обновление",
|
||||
"universalPatchesLabel": "Показать универсальные патчи",
|
||||
|
@ -8,7 +8,7 @@
|
||||
"yesButton": "Da",
|
||||
"noButton": "Ne",
|
||||
"warning": "Opozorilo",
|
||||
"notice": "Notice",
|
||||
"notice": "Obvestilo",
|
||||
"noShowAgain": "Ne prikazuj več",
|
||||
"add": "Dodaj",
|
||||
"remove": "Odstrani",
|
||||
|
@ -60,7 +60,7 @@
|
||||
"requiredOptionDialogText": "Disa opsione të përditësimit duhet të vendosen."
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "Zgjidhni një aplikacion",
|
||||
"widgetTitle": "Pumili ka ng app",
|
||||
"widgetTitleSelected": "Aplikacioni i zgjedhur",
|
||||
"widgetSubtitle": "Nuk është zgjedhur asnjë aplikacion",
|
||||
"noAppsLabel": "Nuk u gjeten aplikacione",
|
||||
|
@ -180,6 +180,9 @@
|
||||
"disablePatchesSelectionWarningText": "Upravo ćete da onemogućite promenu izbora pečeva.\nPodrazumevani izbor pečeva će biti vraćen.\n\nIpak onemogućiti?",
|
||||
"autoUpdatePatchesLabel": "Automatski ažuriraj pečeve",
|
||||
"autoUpdatePatchesHint": "Instalira najnoviju verziju pečeva automatski",
|
||||
"usePrereleasesLabel": "Koristi predizdanja",
|
||||
"usePrereleasesHint": "Korišćenje verzije predizdanja ReVanced Managera i ReVanced pečeva",
|
||||
"usePrereleasesWarningText": "Korišćenje verzija predizdanja može izazvati neočekivane probleme.\n\nIpak omogućiti?",
|
||||
"showUpdateDialogLabel": "Prikaži dijalog o ažuriranju",
|
||||
"showUpdateDialogHint": "Prikazivanje dijaloga kada je novo ažuriranje dostupno",
|
||||
"universalPatchesLabel": "Prikaži univerzalne pečeve",
|
||||
|
@ -180,6 +180,9 @@
|
||||
"disablePatchesSelectionWarningText": "Управо ћете да онемогућите промену избора печева.\nПодразумевани избор печева ће бити враћен.\n\nИпак онемогућити?",
|
||||
"autoUpdatePatchesLabel": "Аутоматски ажурирај печеве",
|
||||
"autoUpdatePatchesHint": "Инсталира најновију верзију печева аутоматски",
|
||||
"usePrereleasesLabel": "Користи предиздања",
|
||||
"usePrereleasesHint": "Коришћење верзија предиздања ReVanced Manager-а и ReVanced печева",
|
||||
"usePrereleasesWarningText": "Коришћење верзија предиздања може изазвати неочекиване проблеме.\n\nИпак омогућити?",
|
||||
"showUpdateDialogLabel": "Прикажи дијалог о ажурирању",
|
||||
"showUpdateDialogHint": "Приказивање дијалога када је ново ажурирање доступно",
|
||||
"universalPatchesLabel": "Прикажи универзалне печеве",
|
||||
|
@ -1,21 +1,5 @@
|
||||
{
|
||||
"navigationView": {},
|
||||
"homeView": {},
|
||||
"applicationItem": {},
|
||||
"latestCommitCard": {},
|
||||
"patcherView": {},
|
||||
"appSelectorCard": {},
|
||||
"patchSelectorCard": {
|
||||
"widgetSubtitle": "Chagua programu kwanza"
|
||||
},
|
||||
"socialMediaCard": {},
|
||||
"appSelectorView": {},
|
||||
"patchesSelectorView": {},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {},
|
||||
"installerView": {},
|
||||
"settingsView": {},
|
||||
"appInfoView": {},
|
||||
"contributorsView": {},
|
||||
"installErrorDialog": {}
|
||||
}
|
||||
}
|
@ -29,7 +29,7 @@
|
||||
"noSavedAppFound": "செயலிகள் எதுவும் கண்டறியப்படவில்லை",
|
||||
"noInstallations": "பிறழப்பட்ட செயலிகள் எதுவும் நிறுவப்படவில்லை",
|
||||
"installUpdate": "புதுப்பிப்பை நிறுவுவதைத் தொடரவா?",
|
||||
"updateSheetTitle": "ரிவன்ஸ்ட் மேனேஜரை புதுப்பிக்கவும்",
|
||||
"updateSheetTitle": "ReVanced Manager ஐப் புதுப்பிக்கவும்",
|
||||
"updateDialogTitle": "புதிய பதிவு உள்ளது",
|
||||
"updatePatchesSheetTitle": "ரிவன்ஸ்ட் பிறழ்களை புதுப்பிக்கவும்",
|
||||
"updateChangelogTitle": "மாற்றங்களின் பதிவு",
|
||||
@ -166,6 +166,5 @@
|
||||
},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "பங்களிப்பாளர்கள்"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
}
|
||||
}
|
@ -71,7 +71,6 @@
|
||||
"patchOptionsView": {
|
||||
"saveOptions": "భద్రపరచు"
|
||||
},
|
||||
"patchItem": {},
|
||||
"installerView": {
|
||||
"installButton": "స్థాపించు",
|
||||
"openButton": "తెరువు",
|
||||
|
@ -180,6 +180,7 @@
|
||||
"disablePatchesSelectionWarningText": "คุณกำลังจะปิดใช้งานการเปลี่ยนการเลือกการแก้ไข\nการเลือกการแก้ไขเริ่มต้นจะถูกคืนค่า\n\nปิดใช้งานอยู่ดี?",
|
||||
"autoUpdatePatchesLabel": "อัปเดตการแก้ไขโดยอัตโนมัติ",
|
||||
"autoUpdatePatchesHint": "อัปเดตการแก้ไขเป็นเวอร์ชันล่าสุดโดยอัตโนมัติ",
|
||||
"usePrereleasesLabel": "ใช้รุ่นก่อนเผยแพร่",
|
||||
"showUpdateDialogLabel": "แสดงกล่องโต้ตอบการอัปเดต",
|
||||
"showUpdateDialogHint": "แสดงกล่องโต้ตอบเมื่อมีการอัปเดตใหม่",
|
||||
"universalPatchesLabel": "แสดงการแก้ไขแบบสากล",
|
||||
|
@ -77,7 +77,7 @@
|
||||
"widgetSubtitle": "Sosyal medyadayız!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "Bir uygulama seç",
|
||||
"viewTitle": "Bir uygulama seçin",
|
||||
"searchBarHint": "Uygulama ara",
|
||||
"storageButton": "Depolama",
|
||||
"selectFromStorageButton": "Depolama alanından seçin",
|
||||
@ -180,6 +180,9 @@
|
||||
"disablePatchesSelectionWarningText": "Yama seçimini değiştirmeyi devre dışı bırakmak üzeresiniz.\nVarsayılan yama seçimi geri yüklenecektir.\n\nYine de devre dışı bırakılsın mı?",
|
||||
"autoUpdatePatchesLabel": "Yamaları otomatik güncelle",
|
||||
"autoUpdatePatchesHint": "Yamaları otomatik olarak en son sürüme güncelle",
|
||||
"usePrereleasesLabel": "Ön sürümleri kullan",
|
||||
"usePrereleasesHint": "ReVanced Manager ve ReVanced Yamaları'nın ön sürüm versiyonlarını kullan",
|
||||
"usePrereleasesWarningText": "Ön sürüm versiyonlarını kullanmak beklenmedik sorunlara neden olabilir.\n\nYine de etkinleştirmek istiyor musunuz?",
|
||||
"showUpdateDialogLabel": "Güncelleme penceresini göster",
|
||||
"showUpdateDialogHint": "Yeni bir güncelleme mevcut olduğunda bir pencere göster",
|
||||
"universalPatchesLabel": "Ortak yamaları göster",
|
||||
|
@ -180,6 +180,9 @@
|
||||
"disablePatchesSelectionWarningText": "Ви збираєтеся вимкнути зміну вибору патчів.\nБуде відновлено стандартний вибір патчів.\n\nВсе одно вимкнути?",
|
||||
"autoUpdatePatchesLabel": "Автоматичне оновлення патчів",
|
||||
"autoUpdatePatchesHint": "Автоматично оновлювати патчі до останньої версії",
|
||||
"usePrereleasesLabel": "Використовувати передрелізи",
|
||||
"usePrereleasesHint": "Використовувати передрелізні версії ReVanced Manager та ReVanced Patches",
|
||||
"usePrereleasesWarningText": "Використання передрелізних версій може спричинити несподівані проблеми.\n\nВсе одно увімкнути?",
|
||||
"showUpdateDialogLabel": "Показувати вікно оновлення",
|
||||
"showUpdateDialogHint": "Показувати діалогове вікно, коли доступне нове оновлення",
|
||||
"universalPatchesLabel": "Показувати універсальні патчі",
|
||||
|
@ -25,7 +25,7 @@
|
||||
"changeLaterSubtitle": "Keyinroq sozlamalardan o'zgartirishingiz mumkin.",
|
||||
"noInstallations": "Patchlangan dasturlar o'rnatilmagan",
|
||||
"installUpdate": "Yangilanish o'rnatilishi davom ettirilsinmi?",
|
||||
"updateSheetTitle": "ReVanced Managerni yangilash",
|
||||
"updateSheetTitle": "ReVanced Manager yangilash",
|
||||
"updateDialogTitle": "Yangilanish mavjud",
|
||||
"updatePatchesSheetTitle": "ReVanched Patchlarni yangilash",
|
||||
"updateChangelogTitle": "O'zgarishlar",
|
||||
@ -56,15 +56,10 @@
|
||||
"widgetTitleSelected": "Tanlangan patchlar",
|
||||
"widgetSubtitle": "Ilovani birinchi tanlang"
|
||||
},
|
||||
"socialMediaCard": {},
|
||||
"appSelectorView": {},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Patchlarni tanlang",
|
||||
"patches": "Patches"
|
||||
},
|
||||
"patchOptionsView": {},
|
||||
"patchItem": {},
|
||||
"installerView": {},
|
||||
"settingsView": {
|
||||
"widgetTitle": "Sozlamalar",
|
||||
"exportSectionTitle": "Import & eksport",
|
||||
@ -77,9 +72,7 @@
|
||||
"aboutLabel": "Haqida",
|
||||
"snackbarMessage": "Vaqtinchalik xotiraga nusxalandi"
|
||||
},
|
||||
"appInfoView": {},
|
||||
"contributorsView": {
|
||||
"widgetTitle": "Yordamchilar"
|
||||
},
|
||||
"installErrorDialog": {}
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"okButton": "Đồng ý",
|
||||
"cancelButton": "Hủy",
|
||||
"dismissButton": "Từ bỏ",
|
||||
"dismissButton": "Đóng",
|
||||
"quitButton": "Thoát",
|
||||
"updateButton": "Cập nhật",
|
||||
"suggested": "Được đề xuất: ${version}",
|
||||
@ -9,7 +9,7 @@
|
||||
"noButton": "Không",
|
||||
"warning": "Cảnh báo",
|
||||
"notice": "Lưu ý",
|
||||
"noShowAgain": "Không hiển thị lại điều này",
|
||||
"noShowAgain": "Không hiển thị lại nội dung này",
|
||||
"add": "Thêm",
|
||||
"remove": "Loại bỏ",
|
||||
"showChangelogButton": "Hiển thị nhật ký thay đổi",
|
||||
@ -25,7 +25,7 @@
|
||||
"updatesSubtitle": "Các bản cập nhật",
|
||||
"lastPatchedAppSubtitle": "Ứng dụng đã vá lần cuối",
|
||||
"patchedSubtitle": "Các ứng dụng đã cài đặt",
|
||||
"changeLaterSubtitle": "Bạn có thể thay đổi cài đặt này sau.",
|
||||
"changeLaterSubtitle": "Bạn có thể thay đổi cài đặt này sau đó.",
|
||||
"noSavedAppFound": "Không tìm thấy ứng dụng",
|
||||
"noInstallations": "Không có ứng dụng đã vá nào được cài đặt",
|
||||
"installUpdate": "Tiếp tục cài đặt bản cập nhật?",
|
||||
@ -33,7 +33,7 @@
|
||||
"updateDialogTitle": "Có bản cập nhật mới",
|
||||
"updatePatchesSheetTitle": "Cập nhật Các bản vá ReVanced",
|
||||
"updateChangelogTitle": "Nhật ký thay đổi",
|
||||
"updateDialogText": "Có một bản cập nhật cho ${file}.\n\nPhiên bản đã cài hiện tại là ${version}.",
|
||||
"updateDialogText": "${file} đã có bản cập nhật mới.\n\nBạn đang dùng phiên bản ${version}.",
|
||||
"downloadConsentDialogTitle": "Tải các tập tin cần thiết?",
|
||||
"downloadConsentDialogText": "ReVanced Manager cần tải các tập tin cần thiết để hoạt động đúng cách.",
|
||||
"downloadConsentDialogText2": "Điều này sẽ kết nối bạn đến ${url}.",
|
||||
@ -54,7 +54,7 @@
|
||||
"patcherView": {
|
||||
"widgetTitle": "Trình vá",
|
||||
"patchButton": "Vá",
|
||||
"incompatibleArchWarningDialogText": "Việc vá ứng dụng trên kiến trúc này hiện chưa được hỗ trợ và có thể thất bại. Bạn vẫn muốn tiếp tục?",
|
||||
"incompatibleArchWarningDialogText": "Việc vá trên kiến trúc này hiện chưa được hỗ trợ và có thể không thành công. Vẫn tiếp tục dù sao?",
|
||||
"removedPatchesWarningDialogText": "Các bản vá đã loại bỏ từ lần cuối cùng bạn vá ứng dụng này:\n\n${patches}\n\n${newPatches}Vẫn tiếp tục?",
|
||||
"addedPatchesDialogText": "Các bản vá đã thêm vào từ lần cuối cùng bạn vá ứng dụng này:\n\n${addedPatches}",
|
||||
"requiredOptionDialogText": "Một số tùy chọn bản vá cần được thiết đặt."
|
||||
@ -83,9 +83,9 @@
|
||||
"selectFromStorageButton": "Chọn từ bộ nhớ",
|
||||
"errorMessage": "Không thể dùng ứng dụng đã chọn",
|
||||
"downloadToast": "Tính năng tải về chưa khả dụng",
|
||||
"requireSuggestedAppVersionDialogText": "Phiên bản của ứng dụng bạn đã chọn không trùng khớp vói phiên bản được đề xuất có thể dẫn đến các phát sinh không mong muốn. Xin chọn ứng dụng khớp với phiên bản được đề xuất.\n\nPhiên bản đã chọn: ${selected}\nPhiên bản được đề xuất: ${suggested}\n\nĐể tiếp tục, tắt \"Yêu cầu phiên bản ứng dụng được đề xuất\" trong cài đặt.",
|
||||
"requireSuggestedAppVersionDialogText": "Phiên bản của ứng dụng bạn đã chọn không khớp với phiên bản được đề xuất có thể dẫn đến các sự cố không mong muốn. Vui lòng sử dụng phiên bản đề xuất.\n\nPhiên bản đã chọn: ${selected}\nPhiên bản được đề xuất: ${suggested}\n\nĐể tiếp tục, hãy tắt \"Yêu cầu phiên bản ứng dụng được đề xuất\" trong cài đặt.",
|
||||
"featureNotAvailable": "Tính năng chưa triển khai",
|
||||
"featureNotAvailableText": "Ứng dụng này là một APK tách rời và chỉ có thể được vá và cài một cách tin cậy bằng cách gắn kết với quyền root. Tuy nhiên, bạn có thể vá và cài APK đầy đủ bằng cách chọn chúng từ lưu trữ."
|
||||
"featureNotAvailableText": "Ứng dụng này là một APK tách rời và chỉ có thể được vá và cài đặt một cách tin cậy bằng cách gắn kết với quyền root. Tuy nhiên, bạn có thể vá và cài đặt APK đầy đủ bằng cách chọn chúng từ kho lưu trữ."
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "Chọn bản vá",
|
||||
@ -99,7 +99,7 @@
|
||||
"noneChip": "Không có",
|
||||
"noneTooltip": "Bỏ chọn tất cả bản vá",
|
||||
"loadPatchesSelection": "Nạp các bản vá được chọn",
|
||||
"noSavedPatches": "Không có bản vá cho ứng dụng được chọn\nNhấn Hoàn tất để lưu lựa chọn hiện tại.",
|
||||
"noSavedPatches": "Không có bản vá nào được lưu cho ứng dụng đã chọn.\nNhấn Hoàn tất để lưu lựa chọn hiện tại.",
|
||||
"noPatchesFound": "Không tìm thấy bản vá cho ứng dụng đã chọn",
|
||||
"setRequiredOption": "Một số bản vá yêu cầu thiết đặt tùy chọn:\n\n${patches}\n\nXin thiết đặt chúng trước khi tiếp tục."
|
||||
},
|
||||
@ -121,12 +121,12 @@
|
||||
"unsupportedDialogText": "Chọn bản vá này có thể gây lỗi khi vá.\n\nPhiên bản ứng dụng: ${packageVersion}\nPhiên bản được hỗ trợ: ${supportedVersions}",
|
||||
"unsupportedPatchVersion": "Bản vá không được hỗ trợ cho phiên bản ứng dụng này.",
|
||||
"unsupportedRequiredOption": "Bản vá này chứa một tùy chọn bắt buộc không được hỗ trợ bởi ứng dụng này",
|
||||
"patchesChangeWarningDialogText": "Bạn nên sử dụng lựa chọn bản vá mặc định và các tùy chọn. Thay đổi chúng có thể dẫn đến các vấn đề không mong muốn.\n\nBạn cần bật \"Cho phép thay đổi lựa chọn đường dẫn\" trong cài đặt trước khi thay đổi bất kỳ lựa chọn đường dẫn nào.",
|
||||
"patchesChangeWarningDialogText": "Nên sử dụng các tùy chọn và lựa chọn bản vá mặc định. Thay đổi chúng có thể dẫn đến các sự cố không mong muốn.\n\nBạn cần bật \"Cho phép thay đổi lựa chọn bản vá\" trong cài đặt trước khi thay đổi bất kỳ lựa chọn bản vá nào.",
|
||||
"patchesChangeWarningDialogButton": "Dùng lựa chọn mặc định"
|
||||
},
|
||||
"installerView": {
|
||||
"installType": "Chọn kiểu cài đặt",
|
||||
"installTypeDescription": "Chọn kiểu cài đặt để thực hiện với nó.",
|
||||
"installTypeDescription": "Chọn kiểu cài đặt để tiếp tục.",
|
||||
"installButton": "Cài đặt",
|
||||
"installRootType": "Gắn kết",
|
||||
"installNonRootType": "Thông thường",
|
||||
@ -137,8 +137,8 @@
|
||||
"notificationText": "Nhấn để trở lại trình cài đặt",
|
||||
"exportApkButtonTooltip": "Xuất APK đã vá",
|
||||
"exportLogButtonTooltip": "Xuất nhật ký",
|
||||
"screenshotDetected": "Một ảnh chụp màn hình đã được phát hiện. Nếu bạn đang cố chia sẻ nhật ký, xin thay bằng chia sẻ văn bản sao chép.\n\nSao chép nhật ký vào bảng tạm?",
|
||||
"copiedToClipboard": "Đã sao chép nhật ký vào bảng tạm",
|
||||
"screenshotDetected": "Đã phát hiện ảnh chụp màn hình. Nếu bạn đang cố chia sẻ nhật ký, vui lòng thay thế bằng chia sẻ văn bản sao chép.\n\nSao chép nhật ký vào bảng nhớ tạm?",
|
||||
"copiedToClipboard": "Đã sao chép nhật ký vào bảng nhớ tạm",
|
||||
"noExit": "Trình cài đặt vẫn đang chạy, không thể thoát..."
|
||||
},
|
||||
"settingsView": {
|
||||
@ -152,15 +152,15 @@
|
||||
"themeModeLabel": "Chủ đề ứng dụng",
|
||||
"systemThemeLabel": "Hệ thống",
|
||||
"lightThemeLabel": "Sáng",
|
||||
"darkThemeLabel": "Chế độ tối",
|
||||
"darkThemeLabel": "Tối",
|
||||
"dynamicThemeLabel": "Cá nhân",
|
||||
"dynamicThemeHint": "Tận hưởng trải nghiệm gần hơn với thiết bị của bạn",
|
||||
"languageLabel": "Ngôn ngữ",
|
||||
"languageUpdated": "Ngôn ngữ đã cập nhập",
|
||||
"languageUpdated": "Ngôn ngữ đã được cập nhập",
|
||||
"sourcesLabel": "Nguồn thay thế",
|
||||
"sourcesLabelHint": "Cấu hình nguồn thay thế cho Bản vá ReVanced",
|
||||
"sourcesLabelHint": "Cấu hình nguồn thay thế cho ReVanced Patches",
|
||||
"useAlternativeSources": "Dùng nguồn thay thế",
|
||||
"useAlternativeSourcesHint": "Dùng nguồn thay thế cho Bản vá ReVanced thay cho API",
|
||||
"useAlternativeSourcesHint": "Dùng nguồn thay thế cho ReVanced Patches thay vì dùng API",
|
||||
"sourcesResetDialogTitle": "Đặt lại",
|
||||
"sourcesResetDialogText": "Bạn có chắc chắn muốn đặt lại nguồn của mình về giá trị mặc định không?",
|
||||
"apiURLResetDialogText": "Bạn có chắc bạn muốn đặt lại API URL của bạn về giá trị mặc định của nó không?",
|
||||
@ -175,11 +175,13 @@
|
||||
"logsLabel": "Chia sẻ nhật ký",
|
||||
"logsHint": "Chia sẻ nhật ký ReVanced Manager",
|
||||
"enablePatchesSelectionLabel": "Cho phép thay đổi lựa chọn bản vá",
|
||||
"enablePatchesSelectionHint": "Không ngăn chặn việc chọn hoặc bỏ chọn các bản vá",
|
||||
"enablePatchesSelectionWarningText": "Thay đổi lựa chọn mặc định của các bản vá có thể gây vấn đề không ngờ tới.\n\nVẫn bật?",
|
||||
"enablePatchesSelectionHint": "Không ngăn chặn chọn hoặc bỏ chọn các bản vá",
|
||||
"enablePatchesSelectionWarningText": "Thay đổi lựa chọn mặc định của các bản vá có thể gây ra các sự cố không mong muốn.\n\nVẫn tiếp tục bật?",
|
||||
"disablePatchesSelectionWarningText": "Bạn chuẩn bị tắt thay đổi lựa chọn các bản vá.\nLựa chọn mặc định các bản vá sẽ được khôi phục.\n\nVẫn tắt?",
|
||||
"autoUpdatePatchesLabel": "Tự động cập nhật các bản vá",
|
||||
"autoUpdatePatchesHint": "Tự động cập nhật các bản vá lên phiên bản mới nhất",
|
||||
"usePrereleasesLabel": "Sử dụng bản phát hành trước",
|
||||
"usePrereleasesWarningText": "Sử dụng các phiên bản phát hành trước có thể gây ra các sự cố không mong muốn.\n\nVẫn tiếp tục bật?",
|
||||
"showUpdateDialogLabel": "Hiện hộp thoại cập nhật",
|
||||
"showUpdateDialogHint": "Hiện một hộp thoại khi có một bản cập nhật",
|
||||
"universalPatchesLabel": "Các bản vá phổ quát",
|
||||
@ -290,8 +292,8 @@
|
||||
"status_failure_invalid_description": "Việc cài đặt đã thất bại do ứng dụng đã vá không hợp lệ.\n\nGỡ cài đặt ứng dụng và thử lại?",
|
||||
"status_failure_incompatible_description": "Ứng dụng không tương thích với thiết bị này.\n\nDùng một APK được hỗ trợ bởi thiết bị và thử lại.",
|
||||
"status_failure_conflict_description": "Việc cài đặt đã bị ngăn chặn bởi bản cài đã có của ứng dụng.\n\nGỡ cài đặt ứng dụng đã cài và thử lại?",
|
||||
"status_failure_blocked_description": "Việc cài đặt đã đã bị chặn bởi ${packageName}.\n\nĐiều chỉnh thiết lập bảo mật của bạn và thử lại.",
|
||||
"install_failed_verification_failure_description": "Việc cài đặt đã thất bại do phát sinh xác minh.\n\nĐiều chỉnh thiết lập bảo mật của bạn và thử lại.",
|
||||
"status_failure_blocked_description": "Quá trình cài đặt đã bị chặn bởi ${packageName}.\n\nĐiều chỉnh cài đặt bảo mật của bạn và thử lại.",
|
||||
"install_failed_verification_failure_description": "Quá trình cài đặt không thành công do gặp lỗi xác minh.\n\nĐiều chỉnh cài đặt bảo mật của bạn và thử lại.",
|
||||
"install_failed_version_downgrade_description": "Việc cài đặt đã thất bại do ứng dụng đã vá có phiên bản nhỏ hơn ứng dụng đã cài đặt.\n\nGỡ cài đặt ứng dụng và thử lại?",
|
||||
"status_unknown_description": "Việc cài đặt đã thất bại do một lý do chưa rõ. Xin thử lại."
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"okButton": "確認",
|
||||
"okButton": "確定",
|
||||
"cancelButton": "取消",
|
||||
"dismissButton": "忽略",
|
||||
"quitButton": "離開",
|
||||
@ -8,12 +8,12 @@
|
||||
"yesButton": "是",
|
||||
"noButton": "否",
|
||||
"warning": "警告",
|
||||
"notice": "提示",
|
||||
"noShowAgain": "不再顯示此內容",
|
||||
"notice": "請注意",
|
||||
"noShowAgain": "不再顯示此訊息",
|
||||
"add": "新增",
|
||||
"remove": "移除",
|
||||
"showChangelogButton": "顯示更新日誌",
|
||||
"showUpdateButton": "顯示更新",
|
||||
"showChangelogButton": "顯示變更紀錄",
|
||||
"showUpdateButton": "顯示更新內容",
|
||||
"navigationView": {
|
||||
"dashboardTab": "儀表板",
|
||||
"patcherTab": "修補工具",
|
||||
@ -23,20 +23,20 @@
|
||||
"refreshSuccess": "重新整理成功",
|
||||
"widgetTitle": "儀表板",
|
||||
"updatesSubtitle": "更新",
|
||||
"lastPatchedAppSubtitle": "最後修補的應用程式",
|
||||
"patchedSubtitle": "已安裝的應用程式",
|
||||
"changeLaterSubtitle": "您可以稍後在設定中變更此設定。",
|
||||
"lastPatchedAppSubtitle": "最近的已修補應用程式",
|
||||
"patchedSubtitle": "已安裝應用程式",
|
||||
"changeLaterSubtitle": "你稍後可以在設定中變更此選項。",
|
||||
"noSavedAppFound": "找不到應用程式",
|
||||
"noInstallations": "未安裝已修補的應用程式",
|
||||
"installUpdate": "是否要繼續安裝這個更新?",
|
||||
"noInstallations": "未安裝已修補應用程式",
|
||||
"installUpdate": "是否要繼續更新?",
|
||||
"updateSheetTitle": "更新 ReVanced Manager",
|
||||
"updateDialogTitle": "有可用的更新",
|
||||
"updatePatchesSheetTitle": "更新 ReVanced 的修補檔",
|
||||
"updateChangelogTitle": "更新日誌",
|
||||
"updateDialogText": "${file} 有新的更新可用。\n\n目前安裝的版本是 ${version}。",
|
||||
"downloadConsentDialogTitle": "要下載必要檔案嗎?",
|
||||
"downloadConsentDialogText": "ReVanced Manager 需要下載必要檔案才能正常執行。",
|
||||
"downloadConsentDialogText2": "這將帶您前往至 ${url}。",
|
||||
"updatePatchesSheetTitle": "更新 ReVanced 修補檔",
|
||||
"updateChangelogTitle": "變更紀錄",
|
||||
"updateDialogText": "${file} 已有全新版本可供更新。\n\n目前安裝的版本為 ${version}。",
|
||||
"downloadConsentDialogTitle": "是否下載所需檔案?",
|
||||
"downloadConsentDialogText": "ReVanced Manager 要有所需檔案才能正常運作。",
|
||||
"downloadConsentDialogText2": "你將前往 ${url} 進行下載。",
|
||||
"downloadingMessage": "正在下載更新...",
|
||||
"downloadedMessage": "已下載更新",
|
||||
"installingMessage": "正在安裝更新...",
|
||||
@ -54,22 +54,22 @@
|
||||
"patcherView": {
|
||||
"widgetTitle": "修補工具",
|
||||
"patchButton": "修補",
|
||||
"incompatibleArchWarningDialogText": "此架構尚未支援修補,可能會失敗。仍要繼續嗎?",
|
||||
"removedPatchesWarningDialogText": "自您上次修補此應用程式以來移除的修補程式:\n\n${patches}\n\n${newPatches}仍要繼續嗎?",
|
||||
"addedPatchesDialogText": "自您上次修補此應用程式以來新增的修補程式:\n\n${addedPatches}",
|
||||
"requiredOptionDialogText": "某些修補檔選項需要進行設定。"
|
||||
"incompatibleArchWarningDialogText": "由於處理器架構尚不支援,有可能無法完成修補。是否仍要繼續?",
|
||||
"removedPatchesWarningDialogText": "自應用程式移除的既存修補檔:\n\n${patches}\n\n${newPatches}是否仍要繼續?",
|
||||
"addedPatchesDialogText": "新增至應用程式的全新修補檔:\n\n${addedPatches}\n\n",
|
||||
"requiredOptionDialogText": "部分修補檔選項必須進行設定。"
|
||||
},
|
||||
"appSelectorCard": {
|
||||
"widgetTitle": "選擇一個應用程式",
|
||||
"widgetTitleSelected": "已選取的應用程式",
|
||||
"widgetSubtitle": "未選取任何應用程式",
|
||||
"widgetTitle": "選擇應用程式",
|
||||
"widgetTitleSelected": "目標應用程式",
|
||||
"widgetSubtitle": "尚未選擇應用程式",
|
||||
"noAppsLabel": "找不到應用程式",
|
||||
"anyVersion": "任何版本"
|
||||
},
|
||||
"patchSelectorCard": {
|
||||
"widgetTitle": "選取修補檔",
|
||||
"widgetTitleSelected": "已選取的修補檔",
|
||||
"widgetSubtitle": "請先選取應用程式",
|
||||
"widgetTitle": "選擇修補檔",
|
||||
"widgetTitleSelected": "已選擇的修補檔",
|
||||
"widgetSubtitle": "請先選擇應用程式",
|
||||
"widgetEmptySubtitle": "未選取修補檔"
|
||||
},
|
||||
"socialMediaCard": {
|
||||
@ -77,29 +77,29 @@
|
||||
"widgetSubtitle": "掃榻以待,歡迎造訪!"
|
||||
},
|
||||
"appSelectorView": {
|
||||
"viewTitle": "選取應用程式",
|
||||
"viewTitle": "選擇應用程式",
|
||||
"searchBarHint": "搜尋應用程式",
|
||||
"storageButton": "儲存空間",
|
||||
"selectFromStorageButton": "從儲存空間中選取",
|
||||
"errorMessage": "無法使用所選的應用程式",
|
||||
"selectFromStorageButton": "從儲存空間中選擇",
|
||||
"errorMessage": "無法使用所選應用程式",
|
||||
"downloadToast": "下載功能尚不可用",
|
||||
"requireSuggestedAppVersionDialogText": "您選取的應用程式版本與建議版本不符,可能會導致非預期的問題。請使用建議的版本。\n\n選取的版本:${selected}\n建議的版本:${suggested}\n\n如果仍要繼續,請在設定中停用「要求使用建議的應用程式版本」。",
|
||||
"requireSuggestedAppVersionDialogText": "你所選的應用程式與建議版本不符,無法保證其穩定性。請改用建議版本進行修補。\n\n所選版本:${selected}\n建議版本:${suggested}\n\n如果仍要繼續,請前往設定頁面停用「要求應用程式使用建議版本」。",
|
||||
"featureNotAvailable": "功能尚未實作",
|
||||
"featureNotAvailableText": "該應用程式為分割 APK,只能在具有 root 權限的情況下完成修補及安裝。不過,您也可以直接從儲存空間選取完整 APK 以修補及安裝。"
|
||||
},
|
||||
"patchesSelectorView": {
|
||||
"viewTitle": "選取修補檔",
|
||||
"viewTitle": "選擇修補檔",
|
||||
"searchBarHint": "搜尋修補檔",
|
||||
"universalPatches": "通用修補檔",
|
||||
"newPatches": "新修補檔",
|
||||
"patches": "修補檔",
|
||||
"doneButton": "完成",
|
||||
"defaultChip": "預設",
|
||||
"defaultTooltip": "選取全部預設修補檔",
|
||||
"defaultTooltip": "選擇所有預設修補檔",
|
||||
"noneChip": "無",
|
||||
"noneTooltip": "取消選取修補檔",
|
||||
"loadPatchesSelection": "載入上次所選的補丁",
|
||||
"noSavedPatches": "未儲存應用程式選定的修補選項。\n按下 [完成] 以儲存目前的選取。",
|
||||
"loadPatchesSelection": "載入修補檔選項",
|
||||
"noSavedPatches": "所選的應用程式沒有已儲存的修補選項。\n按下「完成」以儲存目前的修補選項。",
|
||||
"noPatchesFound": "找不到適合所選應用程式的修補檔",
|
||||
"setRequiredOption": "某些修補檔選項需要進行設定:\n\n${patches}\n\n請在繼續之前進行設定。"
|
||||
},
|
||||
@ -114,14 +114,14 @@
|
||||
"selectFilePath": "請選取檔案路徑",
|
||||
"selectFolder": "請選取資料夾",
|
||||
"requiredOption": "此選項必須設定",
|
||||
"unsupportedOption": "此選項不支援本應用程式",
|
||||
"unsupportedOption": "不支援此選項",
|
||||
"requiredOptionNull": "以下選項需要進行設定:\n\n${options}"
|
||||
},
|
||||
"patchItem": {
|
||||
"unsupportedDialogText": "選取此修補檔可能導致修補錯誤。\n應用程式版本: ${packageVersion}\n支援的版本: ${supportedVersions}",
|
||||
"unsupportedDialogText": "選取此修補檔可能導致修補錯誤。\n應用程式版本:${packageVersion}\n支援的版本:${supportedVersions}",
|
||||
"unsupportedPatchVersion": "此版本的應用程式不支援此修補檔。",
|
||||
"unsupportedRequiredOption": "此修補檔內含不支援此應用程式的必填選項。",
|
||||
"patchesChangeWarningDialogText": "建議使用預設的修補程式選擇和選項。變更這些設定可能會導致非預期的問題。\n\n您需要在設定中開啟「允許變更修補選項」後,才能變更任何修補檔選擇。",
|
||||
"patchesChangeWarningDialogText": "建議使用預設的修補檔選擇和選項。變更這些設定可能會導致非預期的問題。\n\n你需要在設定中開啟「允許變更修補檔選擇」後,才能變更任何修補檔選擇。",
|
||||
"patchesChangeWarningDialogButton": "採用預設設定選項"
|
||||
},
|
||||
"installerView": {
|
||||
@ -131,7 +131,7 @@
|
||||
"installRootType": "掛載",
|
||||
"installNonRootType": "普通",
|
||||
"warning": "停用「已修補應用程式的自動更新」,以避免非預期的問題。",
|
||||
"pressBackAgain": "再按一次 [返回] 以取消操作",
|
||||
"pressBackAgain": "再按一次「返回」以取消操作",
|
||||
"openButton": "開啟",
|
||||
"notificationTitle": "ReVanced Manager 正在修補",
|
||||
"notificationText": "輕觸以返回安裝程式",
|
||||
@ -147,7 +147,7 @@
|
||||
"teamSectionTitle": "團隊",
|
||||
"debugSectionTitle": "偵錯",
|
||||
"advancedSectionTitle": "進階",
|
||||
"exportSectionTitle": "匯入和匯出",
|
||||
"exportSectionTitle": "匯入及匯出",
|
||||
"dataSectionTitle": "資料來源",
|
||||
"themeModeLabel": "應用程式主題",
|
||||
"systemThemeLabel": "系統預設",
|
||||
@ -164,7 +164,7 @@
|
||||
"sourcesResetDialogTitle": "重設",
|
||||
"sourcesResetDialogText": "確定要將來源重設為預設值嗎?",
|
||||
"apiURLResetDialogText": "確定要將 API URL 重設為預設值嗎?",
|
||||
"sourcesUpdateNote": "注意:這將會自動從替代來源下載 ReVanced 修補檔。\n\n這會將您連線到替代來源。",
|
||||
"sourcesUpdateNote": "注意:這將會自動從替代來源下載 ReVanced 修補檔。\n\n這會將你連線到替代來源。",
|
||||
"apiURLLabel": "API URL",
|
||||
"apiURLHint": "設定 ReVanced Manager 的 API URL",
|
||||
"selectApiURL": "API URL",
|
||||
@ -174,21 +174,21 @@
|
||||
"contributorsHint": "ReVanced 貢獻者清單",
|
||||
"logsLabel": "分享記錄檔",
|
||||
"logsHint": "分享 ReVanced Manager 記錄檔",
|
||||
"enablePatchesSelectionLabel": "允許變更修補選項",
|
||||
"enablePatchesSelectionLabel": "允許變更修補檔選擇",
|
||||
"enablePatchesSelectionHint": "不要阻止選擇或取消選擇修補檔",
|
||||
"enablePatchesSelectionWarningText": "如果變更修補選項,可能會導致非預期的問題。\n\n仍要啟用嗎?",
|
||||
"disablePatchesSelectionWarningText": "即將停用修補選項的變更功能,並還原到預設選項。\n\n仍要停用嗎?",
|
||||
"autoUpdatePatchesLabel": "自動更新修補檔",
|
||||
"autoUpdatePatchesHint": "自動更新修補檔至最新版本",
|
||||
"showUpdateDialogLabel": "顯示更新對話框",
|
||||
"autoUpdatePatchesHint": "自動將修補檔更新至最新版本",
|
||||
"showUpdateDialogLabel": "顯示更新對話方塊",
|
||||
"showUpdateDialogHint": "當有新更新可用時,顯示對話方塊",
|
||||
"universalPatchesLabel": "顯示通用修補檔",
|
||||
"universalPatchesHint": "顯示所有應用程式和通用修補檔(可能會拖慢應用程式列表的速度)",
|
||||
"universalPatchesHint": "顯示所有應用程式和通用修補檔(可能會減慢應用程式清單的顯示速度)",
|
||||
"lastPatchedAppLabel": "儲存已修補的安裝檔",
|
||||
"lastPatchedAppHint": "儲存最後一次修補以便稍後安裝或匯出",
|
||||
"versionCompatibilityCheckLabel": "檢查版本相容性",
|
||||
"versionCompatibilityCheckHint": "防止選擇與所選應用程式版本不相容的修補檔",
|
||||
"requireSuggestedAppVersionLabel": "要求使用建議的應用程式版本",
|
||||
"requireSuggestedAppVersionLabel": "要求應用程式使用建議版本",
|
||||
"requireSuggestedAppVersionHint": "防止選取非建議版本的應用程式",
|
||||
"requireSuggestedAppVersionDialogText": "目前選取的應用程式並非建議版本,可能造成非預期的問題發生。\n\n確定仍要繼續執行嗎?",
|
||||
"aboutLabel": "關於",
|
||||
@ -203,18 +203,18 @@
|
||||
"importSettingsLabel": "匯入設定",
|
||||
"importSettingsHint": "從 JSON 檔案匯入設定",
|
||||
"importedSettings": "已匯入設定",
|
||||
"exportPatchesLabel": "匯出修補選取",
|
||||
"exportPatchesHint": "匯出修補選取到 JSON 檔案",
|
||||
"exportedPatches": "已匯出修補選取",
|
||||
"noExportFileFound": "沒有可匯出的修補選取",
|
||||
"importPatchesLabel": "匯入修補選取",
|
||||
"importPatchesHint": "從 JSON 檔案匯入修補選取",
|
||||
"importedPatches": "已匯入修補選取",
|
||||
"resetStoredPatchesLabel": "重設修補選取",
|
||||
"resetStoredPatchesHint": "重設已儲存的修補選取",
|
||||
"resetStoredPatchesDialogTitle": "確定要重設修補選取嗎?",
|
||||
"resetStoredPatchesDialogText": "將還原為預設的修補檔選項。",
|
||||
"resetStoredPatches": "已重設修補選取",
|
||||
"exportPatchesLabel": "匯出修補選項",
|
||||
"exportPatchesHint": "從 JSON 檔案匯出修補選項",
|
||||
"exportedPatches": "已匯出修補選項",
|
||||
"noExportFileFound": "沒有可匯出的修補選項",
|
||||
"importPatchesLabel": "匯入修補選項",
|
||||
"importPatchesHint": "從 JSON 檔案匯入修補選項",
|
||||
"importedPatches": "已匯入修補選項",
|
||||
"resetStoredPatchesLabel": "重設修補選項",
|
||||
"resetStoredPatchesHint": "重設已儲存的修補選項",
|
||||
"resetStoredPatchesDialogTitle": "確定要重設修補選項嗎?",
|
||||
"resetStoredPatchesDialogText": "將還原為預設的修補檔選擇。",
|
||||
"resetStoredPatches": "已重設修補選項",
|
||||
"resetStoredOptionsLabel": "重設修補選項",
|
||||
"resetStoredOptionsHint": "重設所有修補選項",
|
||||
"resetStoredOptionsDialogTitle": "確定要重設修補選項嗎?",
|
||||
@ -290,7 +290,7 @@
|
||||
"status_failure_invalid_description": "由於已修補的應用程式為無效,導致無法安裝。\n\n確定要解除安裝應用程式,然後再試一次?",
|
||||
"status_failure_incompatible_description": "應用程式與此裝置不相容。\n\n請使用支援此裝置的 APK 檔,然後再試一次。",
|
||||
"status_failure_conflict_description": "安裝被應用程式的現有安裝阻止。\n\n請解除安裝已安裝的應用程式,然後再試一次?",
|
||||
"status_failure_blocked_description": "安裝被 ${packageName} 阻止。\n\n請調整您的安全設定,然後再試一次。",
|
||||
"status_failure_blocked_description": "安裝被 ${packageName} 阻止。\n\n請調整你的安全設定,然後再試一次。",
|
||||
"install_failed_verification_failure_description": "由於驗證問題,導致無法安裝。\n\n請調整您的安全設定,然後再試一次。",
|
||||
"install_failed_version_downgrade_description": "由於已修補的應用程式版本低於已安裝的應用程式,導致無法安裝。\n\n請解除安裝應用程式,然後再試一次?",
|
||||
"status_unknown_description": "由於未知原因,導致無法安裝。請再試一次。"
|
||||
|
3
devtools_options.yaml
Normal file
3
devtools_options.yaml
Normal file
@ -0,0 +1,3 @@
|
||||
description: This file stores settings for Dart & Flutter DevTools.
|
||||
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
|
||||
extensions:
|
@ -33,13 +33,16 @@ class GithubAPI {
|
||||
});
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>?> getLatestRelease(
|
||||
String repoName,
|
||||
) async {
|
||||
Future<Map<String, dynamic>?> getLatestRelease(String repoName) async {
|
||||
final String target =
|
||||
_managerAPI.usePrereleases() ? '?per_page=1' : '/latest';
|
||||
try {
|
||||
final response = await _dioGetSynchronously(
|
||||
'/repos/$repoName/releases/latest',
|
||||
'/repos/$repoName/releases$target',
|
||||
);
|
||||
if (_managerAPI.usePrereleases()) {
|
||||
return response.data.first;
|
||||
}
|
||||
return response.data;
|
||||
} on Exception catch (e) {
|
||||
if (kDebugMode) {
|
||||
@ -50,17 +53,19 @@ class GithubAPI {
|
||||
}
|
||||
|
||||
Future<String?> getChangelogs(bool isPatches) async {
|
||||
final String repoName = isPatches
|
||||
? _managerAPI.getPatchesRepo()
|
||||
: _managerAPI.defaultManagerRepo;
|
||||
final String repoName =
|
||||
isPatches
|
||||
? _managerAPI.getPatchesRepo()
|
||||
: _managerAPI.defaultManagerRepo;
|
||||
try {
|
||||
final response = await _dioGetSynchronously(
|
||||
'/repos/$repoName/releases?per_page=50',
|
||||
);
|
||||
final buffer = StringBuffer();
|
||||
final String version = isPatches
|
||||
? _managerAPI.getLastUsedPatchesVersion()
|
||||
: await _managerAPI.getCurrentManagerVersion();
|
||||
final String version =
|
||||
isPatches
|
||||
? _managerAPI.getLastUsedPatchesVersion()
|
||||
: await _managerAPI.getCurrentManagerVersion();
|
||||
int releases = 0;
|
||||
for (final release in response.data) {
|
||||
if (release['tag_name'] == version) {
|
||||
@ -70,7 +75,7 @@ class GithubAPI {
|
||||
}
|
||||
break;
|
||||
}
|
||||
if (release['prerelease']) {
|
||||
if (!_managerAPI.usePrereleases() && release['prerelease']) {
|
||||
continue;
|
||||
}
|
||||
buffer.writeln(release['body']);
|
||||
@ -96,25 +101,21 @@ class GithubAPI {
|
||||
) async {
|
||||
try {
|
||||
if (url.isNotEmpty) {
|
||||
return await _downloadManager.getSingleFile(
|
||||
url,
|
||||
);
|
||||
return await _downloadManager.getSingleFile(url);
|
||||
}
|
||||
final response = await _dioGetSynchronously(
|
||||
'/repos/$repoName/releases/tags/$version',
|
||||
);
|
||||
final Map<String, dynamic>? release = response.data;
|
||||
if (release != null) {
|
||||
final Map<String, dynamic>? asset =
|
||||
(release['assets'] as List<dynamic>).firstWhereOrNull(
|
||||
(asset) => (asset['name'] as String).endsWith(extension),
|
||||
);
|
||||
final Map<String, dynamic>? asset = (release['assets'] as List<dynamic>)
|
||||
.firstWhereOrNull(
|
||||
(asset) => (asset['name'] as String).endsWith(extension),
|
||||
);
|
||||
if (asset != null) {
|
||||
final String downloadUrl = asset['browser_download_url'];
|
||||
_managerAPI.setPatchesDownloadURL(downloadUrl);
|
||||
return await _downloadManager.getSingleFile(
|
||||
downloadUrl,
|
||||
);
|
||||
return await _downloadManager.getSingleFile(downloadUrl);
|
||||
}
|
||||
}
|
||||
} on Exception catch (e) {
|
||||
|
@ -36,7 +36,6 @@ class ManagerAPI {
|
||||
Patch? selectedPatch;
|
||||
BuildContext? ctx;
|
||||
bool isRooted = false;
|
||||
bool releaseBuild = false;
|
||||
bool suggestedAppVersionSelected = true;
|
||||
bool isDynamicThemeAvailable = false;
|
||||
bool isScopedStorageAvailable = false;
|
||||
@ -63,11 +62,9 @@ class ManagerAPI {
|
||||
isScopedStorageAvailable = sdkVersion >= 30; // ANDROID_11_SDK_VERSION = 30
|
||||
storedPatchesFile =
|
||||
(await getApplicationDocumentsDirectory()).path + storedPatchesFile;
|
||||
if (kReleaseMode) {
|
||||
releaseBuild = !(await getCurrentManagerVersion()).contains('-dev');
|
||||
}
|
||||
|
||||
final hasMigratedToNewMigrationSystem = _prefs.getBool('migratedToNewApiPrefSystem') ?? false;
|
||||
final hasMigratedToNewMigrationSystem =
|
||||
_prefs.getBool('migratedToNewApiPrefSystem') ?? false;
|
||||
if (!hasMigratedToNewMigrationSystem) {
|
||||
final apiUrl = getApiUrl().toLowerCase();
|
||||
|
||||
@ -168,6 +165,18 @@ class ManagerAPI {
|
||||
return _prefs.getBool('patchesAutoUpdate') ?? false;
|
||||
}
|
||||
|
||||
bool usePrereleases() {
|
||||
return _prefs.getBool('usePrereleases') ?? false;
|
||||
}
|
||||
|
||||
void setPrereleases(bool value) {
|
||||
_prefs.setBool('usePrereleases', value);
|
||||
if (isPatchesAutoUpdate()) {
|
||||
setCurrentPatchesVersion('0.0.0');
|
||||
_toast.showBottom(t.settingsView.restartAppForChanges);
|
||||
}
|
||||
}
|
||||
|
||||
bool isPatchesChangeEnabled() {
|
||||
return _prefs.getBool('patchesChangeEnabled') ?? false;
|
||||
}
|
||||
@ -207,32 +216,36 @@ class ManagerAPI {
|
||||
List<Patch> getSavedPatches(String packageName) {
|
||||
final List<String> patchesJson =
|
||||
_prefs.getStringList('savedPatches-$packageName') ?? [];
|
||||
final List<Patch> patches = patchesJson.map((String patchJson) {
|
||||
return Patch.fromJson(jsonDecode(patchJson));
|
||||
}).toList();
|
||||
final List<Patch> patches =
|
||||
patchesJson.map((String patchJson) {
|
||||
return Patch.fromJson(jsonDecode(patchJson));
|
||||
}).toList();
|
||||
return patches;
|
||||
}
|
||||
|
||||
Future<void> savePatches(List<Patch> patches, String packageName) async {
|
||||
final List<String> patchesJson = patches.map((Patch patch) {
|
||||
return jsonEncode(patch.toJson());
|
||||
}).toList();
|
||||
final List<String> patchesJson =
|
||||
patches.map((Patch patch) {
|
||||
return jsonEncode(patch.toJson());
|
||||
}).toList();
|
||||
await _prefs.setStringList('savedPatches-$packageName', patchesJson);
|
||||
}
|
||||
|
||||
List<Patch> getUsedPatches(String packageName) {
|
||||
final List<String> patchesJson =
|
||||
_prefs.getStringList('usedPatches-$packageName') ?? [];
|
||||
final List<Patch> patches = patchesJson.map((String patchJson) {
|
||||
return Patch.fromJson(jsonDecode(patchJson));
|
||||
}).toList();
|
||||
final List<Patch> patches =
|
||||
patchesJson.map((String patchJson) {
|
||||
return Patch.fromJson(jsonDecode(patchJson));
|
||||
}).toList();
|
||||
return patches;
|
||||
}
|
||||
|
||||
Future<void> setUsedPatches(List<Patch> patches, String packageName) async {
|
||||
final List<String> patchesJson = patches.map((Patch patch) {
|
||||
return jsonEncode(patch.toJson());
|
||||
}).toList();
|
||||
final List<String> patchesJson =
|
||||
patches.map((Patch patch) {
|
||||
return jsonEncode(patch.toJson());
|
||||
}).toList();
|
||||
await _prefs.setStringList('usedPatches-$packageName', patchesJson);
|
||||
}
|
||||
|
||||
@ -246,8 +259,9 @@ class ManagerAPI {
|
||||
}
|
||||
|
||||
Option? getPatchOption(String packageName, String patchName, String key) {
|
||||
final String? optionJson =
|
||||
_prefs.getString('patchOption-$packageName-$patchName-$key');
|
||||
final String? optionJson = _prefs.getString(
|
||||
'patchOption-$packageName-$patchName-$key',
|
||||
);
|
||||
if (optionJson != null) {
|
||||
final Option option = Option.fromJson(jsonDecode(optionJson));
|
||||
return option;
|
||||
@ -325,7 +339,7 @@ class ManagerAPI {
|
||||
}
|
||||
|
||||
String getLocale() {
|
||||
return _prefs.getString('locale') ?? 'en';
|
||||
return _prefs.getString('locale') ?? Platform.localeName;
|
||||
}
|
||||
|
||||
Future<void> setLocale(String value) async {
|
||||
@ -340,9 +354,7 @@ class ManagerAPI {
|
||||
}
|
||||
|
||||
Future<void> deleteKeystore() async {
|
||||
final File keystore = File(
|
||||
keystoreFile,
|
||||
);
|
||||
final File keystore = File(keystoreFile);
|
||||
if (await keystore.exists()) {
|
||||
await keystore.delete();
|
||||
}
|
||||
@ -364,17 +376,13 @@ class ManagerAPI {
|
||||
|
||||
Future<void> setLastPatchedApp(
|
||||
PatchedApplication app,
|
||||
File outFile,
|
||||
File outFile
|
||||
) async {
|
||||
deleteLastPatchedApp();
|
||||
final Directory appCache = await getApplicationSupportDirectory();
|
||||
app.patchedFilePath =
|
||||
outFile.copySync('${appCache.path}/lastPatchedApp.apk').path;
|
||||
app.fileSize = outFile.lengthSync();
|
||||
await _prefs.setString(
|
||||
'lastPatchedApp',
|
||||
json.encode(app.toJson()),
|
||||
);
|
||||
await _prefs.setString('lastPatchedApp', json.encode(app.toJson()));
|
||||
}
|
||||
|
||||
List<PatchedApplication> getPatchedApps() {
|
||||
@ -382,9 +390,7 @@ class ManagerAPI {
|
||||
return apps.map((a) => PatchedApplication.fromJson(jsonDecode(a))).toList();
|
||||
}
|
||||
|
||||
Future<void> setPatchedApps(
|
||||
List<PatchedApplication> patchedApps,
|
||||
) async {
|
||||
Future<void> setPatchedApps(List<PatchedApplication> patchedApps) async {
|
||||
if (patchedApps.length > 1) {
|
||||
patchedApps.sort((a, b) => a.name.compareTo(b.name));
|
||||
}
|
||||
@ -397,10 +403,8 @@ class ManagerAPI {
|
||||
Future<void> savePatchedApp(PatchedApplication app) async {
|
||||
final List<PatchedApplication> patchedApps = getPatchedApps();
|
||||
patchedApps.removeWhere((a) => a.packageName == app.packageName);
|
||||
final ApplicationWithIcon? installed = await DeviceApps.getApp(
|
||||
app.packageName,
|
||||
true,
|
||||
) as ApplicationWithIcon?;
|
||||
final ApplicationWithIcon? installed =
|
||||
await DeviceApps.getApp(app.packageName, true) as ApplicationWithIcon?;
|
||||
if (installed != null) {
|
||||
app.name = installed.appName;
|
||||
app.version = installed.versionName!;
|
||||
@ -440,14 +444,13 @@ class ManagerAPI {
|
||||
try {
|
||||
final String patchesJson = await PatcherAPI.patcherChannel.invokeMethod(
|
||||
'getPatches',
|
||||
{
|
||||
'patchBundleFilePath': patchBundleFile.path,
|
||||
},
|
||||
{'patchBundleFilePath': patchBundleFile.path},
|
||||
);
|
||||
final List<dynamic> patchesJsonList = jsonDecode(patchesJson);
|
||||
patches = patchesJsonList
|
||||
.map((patchJson) => Patch.fromJson(patchJson))
|
||||
.toList();
|
||||
patches =
|
||||
patchesJsonList
|
||||
.map((patchJson) => Patch.fromJson(patchJson))
|
||||
.toList();
|
||||
return patches;
|
||||
} on Exception catch (e) {
|
||||
if (kDebugMode) {
|
||||
@ -492,8 +495,9 @@ class ManagerAPI {
|
||||
} else {
|
||||
final release = await _githubAPI.getLatestRelease(getPatchesRepo());
|
||||
if (release != null) {
|
||||
final DateTime timestamp =
|
||||
DateTime.parse(release['created_at'] as String);
|
||||
final DateTime timestamp = DateTime.parse(
|
||||
release['created_at'] as String,
|
||||
);
|
||||
return format(timestamp, locale: 'en_short');
|
||||
} else {
|
||||
return null;
|
||||
@ -502,22 +506,16 @@ class ManagerAPI {
|
||||
}
|
||||
|
||||
Future<String?> getLatestManagerReleaseTime() async {
|
||||
return await _revancedAPI.getLatestReleaseTime(
|
||||
'manager',
|
||||
);
|
||||
return await _revancedAPI.getLatestReleaseTime('manager');
|
||||
}
|
||||
|
||||
Future<String?> getLatestManagerVersion() async {
|
||||
return await _revancedAPI.getLatestReleaseVersion(
|
||||
'manager',
|
||||
);
|
||||
return await _revancedAPI.getLatestReleaseVersion('manager');
|
||||
}
|
||||
|
||||
Future<String?> getLatestPatchesVersion() async {
|
||||
if (!isUsingAlternativeSources()) {
|
||||
return await _revancedAPI.getLatestReleaseVersion(
|
||||
'patches',
|
||||
);
|
||||
return await _revancedAPI.getLatestReleaseVersion('patches');
|
||||
} else {
|
||||
final release = await _githubAPI.getLatestRelease(getPatchesRepo());
|
||||
if (release != null) {
|
||||
@ -531,8 +529,9 @@ class ManagerAPI {
|
||||
String getLastUsedPatchesVersion() {
|
||||
final String lastPatchesVersions =
|
||||
_prefs.getString('lastUsedPatchesVersion') ?? '{}';
|
||||
final Map<String, dynamic> lastPatchesVersionMap =
|
||||
jsonDecode(lastPatchesVersions);
|
||||
final Map<String, dynamic> lastPatchesVersionMap = jsonDecode(
|
||||
lastPatchesVersions,
|
||||
);
|
||||
final String repo = getPatchesRepo();
|
||||
return lastPatchesVersionMap[repo] ?? '0.0.0';
|
||||
}
|
||||
@ -540,8 +539,9 @@ class ManagerAPI {
|
||||
void setLastUsedPatchesVersion({String? version}) {
|
||||
final String lastPatchesVersions =
|
||||
_prefs.getString('lastUsedPatchesVersion') ?? '{}';
|
||||
final Map<String, dynamic> lastPatchesVersionMap =
|
||||
jsonDecode(lastPatchesVersions);
|
||||
final Map<String, dynamic> lastPatchesVersionMap = jsonDecode(
|
||||
lastPatchesVersions,
|
||||
);
|
||||
final repo = getPatchesRepo();
|
||||
final String lastPatchesVersion =
|
||||
version ?? lastPatchesVersionMap[repo] ?? '0.0.0';
|
||||
@ -598,10 +598,8 @@ class ManagerAPI {
|
||||
if (hasRootPermissions) {
|
||||
final List<String> installedApps = await _rootAPI.getInstalledApps();
|
||||
for (final String packageName in installedApps) {
|
||||
final ApplicationWithIcon? application = await DeviceApps.getApp(
|
||||
packageName,
|
||||
true,
|
||||
) as ApplicationWithIcon?;
|
||||
final ApplicationWithIcon? application =
|
||||
await DeviceApps.getApp(packageName, true) as ApplicationWithIcon?;
|
||||
if (application != null) {
|
||||
mountedApps.add(
|
||||
PatchedApplication(
|
||||
@ -622,55 +620,55 @@ class ManagerAPI {
|
||||
}
|
||||
|
||||
Future<void> showPatchesChangeWarningDialog(BuildContext context) {
|
||||
final ValueNotifier<bool> noShow =
|
||||
ValueNotifier(!showPatchesChangeWarning());
|
||||
final ValueNotifier<bool> noShow = ValueNotifier(
|
||||
!showPatchesChangeWarning(),
|
||||
);
|
||||
return showDialog(
|
||||
barrierDismissible: false,
|
||||
context: context,
|
||||
builder: (context) => PopScope(
|
||||
canPop: false,
|
||||
child: AlertDialog(
|
||||
title: Text(t.warning),
|
||||
content: ValueListenableBuilder(
|
||||
valueListenable: noShow,
|
||||
builder: (context, value, child) {
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
t.patchItem.patchesChangeWarningDialogText,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
HapticCheckboxListTile(
|
||||
value: value,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
title: Text(
|
||||
t.noShowAgain,
|
||||
),
|
||||
onChanged: (selected) {
|
||||
noShow.value = selected!;
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
actions: [
|
||||
FilledButton(
|
||||
onPressed: () {
|
||||
setPatchesChangeWarning(noShow.value);
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.okButton),
|
||||
builder:
|
||||
(context) => PopScope(
|
||||
canPop: false,
|
||||
child: AlertDialog(
|
||||
title: Text(t.warning),
|
||||
content: ValueListenableBuilder(
|
||||
valueListenable: noShow,
|
||||
builder: (context, value, child) {
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
t.patchItem.patchesChangeWarningDialogText,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
HapticCheckboxListTile(
|
||||
value: value,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
title: Text(t.noShowAgain),
|
||||
onChanged: (selected) {
|
||||
noShow.value = selected!;
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
actions: [
|
||||
FilledButton(
|
||||
onPressed: () {
|
||||
setPatchesChangeWarning(noShow.value);
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.okButton),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@ -678,29 +676,21 @@ class ManagerAPI {
|
||||
final List<PatchedApplication> patchedApps = getPatchedApps();
|
||||
|
||||
// Remove apps that are not installed anymore.
|
||||
final List<PatchedApplication> toRemove =
|
||||
await getAppsToRemove(patchedApps);
|
||||
final List<PatchedApplication> toRemove = await getAppsToRemove(
|
||||
patchedApps,
|
||||
);
|
||||
patchedApps.removeWhere((a) => toRemove.contains(a));
|
||||
|
||||
// Determine all apps that are installed by mounting.
|
||||
final List<PatchedApplication> mountedApps = await getMountedApps();
|
||||
mountedApps.removeWhere(
|
||||
(app) => patchedApps
|
||||
.any((patchedApp) => patchedApp.packageName == app.packageName),
|
||||
(app) => patchedApps.any(
|
||||
(patchedApp) => patchedApp.packageName == app.packageName,
|
||||
),
|
||||
);
|
||||
patchedApps.addAll(mountedApps);
|
||||
|
||||
await setPatchedApps(patchedApps);
|
||||
|
||||
// Delete the saved app if the file is not found.
|
||||
final PatchedApplication? lastPatchedApp = getLastPatchedApp();
|
||||
if (lastPatchedApp != null) {
|
||||
final File file = File(lastPatchedApp.patchedFilePath);
|
||||
if (!file.existsSync()) {
|
||||
deleteLastPatchedApp();
|
||||
_prefs.remove('lastPatchedApp');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> isAppUninstalled(PatchedApplication app) async {
|
||||
@ -726,10 +716,7 @@ class ManagerAPI {
|
||||
return app != null && app.isSplit;
|
||||
}
|
||||
|
||||
Future<void> setSelectedPatches(
|
||||
String app,
|
||||
List<String> patches,
|
||||
) async {
|
||||
Future<void> setSelectedPatches(String app, List<String> patches) async {
|
||||
final File selectedPatchesFile = File(storedPatchesFile);
|
||||
final Map<String, dynamic> patchesMap = await readSelectedPatchesFile();
|
||||
if (patches.isEmpty) {
|
||||
@ -785,9 +772,9 @@ class ManagerAPI {
|
||||
final Map<String, dynamic> settings = _prefs
|
||||
.getKeys()
|
||||
.fold<Map<String, dynamic>>({}, (Map<String, dynamic> map, String key) {
|
||||
map[key] = _prefs.get(key);
|
||||
return map;
|
||||
});
|
||||
map[key] = _prefs.get(key);
|
||||
return map;
|
||||
});
|
||||
return jsonEncode(settings);
|
||||
}
|
||||
|
||||
@ -812,11 +799,11 @@ class ManagerAPI {
|
||||
}
|
||||
|
||||
void resetAllOptions() {
|
||||
_prefs.getKeys().where((key) => key.startsWith('patchOption-')).forEach(
|
||||
(key) {
|
||||
_prefs.remove(key);
|
||||
},
|
||||
);
|
||||
_prefs.getKeys().where((key) => key.startsWith('patchOption-')).forEach((
|
||||
key,
|
||||
) {
|
||||
_prefs.remove(key);
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> resetLastSelectedPatches() async {
|
||||
|
@ -14,6 +14,7 @@ import 'package:timeago/timeago.dart';
|
||||
class RevancedAPI {
|
||||
late final Dio _dio;
|
||||
late final DownloadManager _downloadManager = locator<DownloadManager>();
|
||||
late final ManagerAPI _managerAPI = locator<ManagerAPI>();
|
||||
|
||||
final Lock getToolsLock = Lock();
|
||||
|
||||
@ -43,15 +44,15 @@ class RevancedAPI {
|
||||
return contributors;
|
||||
}
|
||||
|
||||
Future<Map<String, dynamic>?> _getLatestRelease(
|
||||
String toolName,
|
||||
) {
|
||||
Future<Map<String, dynamic>?> _getLatestRelease(String toolName) {
|
||||
if (!locator<ManagerAPI>().getDownloadConsent()) {
|
||||
return Future(() => null);
|
||||
}
|
||||
return getToolsLock.synchronized(() async {
|
||||
try {
|
||||
final response = await _dio.get('/$toolName');
|
||||
final response = await _dio.get(
|
||||
'/$toolName?prerelease=${_managerAPI.usePrereleases()}',
|
||||
);
|
||||
return response.data;
|
||||
} on Exception catch (e) {
|
||||
if (kDebugMode) {
|
||||
@ -62,13 +63,9 @@ class RevancedAPI {
|
||||
});
|
||||
}
|
||||
|
||||
Future<String?> getLatestReleaseVersion(
|
||||
String toolName,
|
||||
) async {
|
||||
Future<String?> getLatestReleaseVersion(String toolName) async {
|
||||
try {
|
||||
final Map<String, dynamic>? release = await _getLatestRelease(
|
||||
toolName,
|
||||
);
|
||||
final Map<String, dynamic>? release = await _getLatestRelease(toolName);
|
||||
if (release != null) {
|
||||
return release['version'];
|
||||
}
|
||||
@ -81,13 +78,9 @@ class RevancedAPI {
|
||||
return null;
|
||||
}
|
||||
|
||||
Future<File?> getLatestReleaseFile(
|
||||
String toolName,
|
||||
) async {
|
||||
Future<File?> getLatestReleaseFile(String toolName) async {
|
||||
try {
|
||||
final Map<String, dynamic>? release = await _getLatestRelease(
|
||||
toolName,
|
||||
);
|
||||
final Map<String, dynamic>? release = await _getLatestRelease(toolName);
|
||||
if (release != null) {
|
||||
final String url = release['download_url'];
|
||||
return await _downloadManager.getSingleFile(url);
|
||||
@ -136,16 +129,13 @@ class RevancedAPI {
|
||||
return outputFile;
|
||||
}
|
||||
|
||||
Future<String?> getLatestReleaseTime(
|
||||
String toolName,
|
||||
) async {
|
||||
Future<String?> getLatestReleaseTime(String toolName) async {
|
||||
try {
|
||||
final Map<String, dynamic>? release = await _getLatestRelease(
|
||||
toolName,
|
||||
);
|
||||
final Map<String, dynamic>? release = await _getLatestRelease(toolName);
|
||||
if (release != null) {
|
||||
final DateTime timestamp =
|
||||
DateTime.parse(release['created_at'] as String);
|
||||
final DateTime timestamp = DateTime.parse(
|
||||
release['created_at'] as String,
|
||||
);
|
||||
return format(timestamp, locale: 'en_short');
|
||||
}
|
||||
} on Exception catch (e) {
|
||||
|
@ -82,10 +82,13 @@ class HomeViewModel extends BaseViewModel {
|
||||
);
|
||||
flutterLocalNotificationsPlugin
|
||||
.resolvePlatformSpecificImplementation<
|
||||
AndroidFlutterLocalNotificationsPlugin>()
|
||||
AndroidFlutterLocalNotificationsPlugin
|
||||
>()
|
||||
?.requestNotificationsPermission();
|
||||
final bool isConnected = !(await Connectivity().checkConnectivity())
|
||||
.contains(ConnectivityResult.none);
|
||||
final bool isConnected =
|
||||
!(await Connectivity().checkConnectivity()).contains(
|
||||
ConnectivityResult.none,
|
||||
);
|
||||
if (!isConnected) {
|
||||
_toast.showBottom(t.homeView.noConnection);
|
||||
}
|
||||
@ -106,8 +109,10 @@ class HomeViewModel extends BaseViewModel {
|
||||
void navigateToAppInfo(PatchedApplication app, bool isLastPatchedApp) {
|
||||
_navigationService.navigateTo(
|
||||
Routes.appInfoView,
|
||||
arguments:
|
||||
AppInfoViewArguments(app: app, isLastPatchedApp: isLastPatchedApp),
|
||||
arguments: AppInfoViewArguments(
|
||||
app: app,
|
||||
isLastPatchedApp: isLastPatchedApp,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@ -118,8 +123,8 @@ class HomeViewModel extends BaseViewModel {
|
||||
|
||||
Future<void> navigateToPatcher(PatchedApplication app) async {
|
||||
locator<PatcherViewModel>().selectedApp = app;
|
||||
locator<PatcherViewModel>().selectedPatches =
|
||||
await _patcherAPI.getAppliedPatches(app.appliedPatches);
|
||||
locator<PatcherViewModel>().selectedPatches = await _patcherAPI
|
||||
.getAppliedPatches(app.appliedPatches);
|
||||
locator<PatcherViewModel>().notifyListeners();
|
||||
locator<NavigationViewModel>().setIndex(1);
|
||||
}
|
||||
@ -135,9 +140,6 @@ class HomeViewModel extends BaseViewModel {
|
||||
}
|
||||
|
||||
Future<bool> hasManagerUpdates() async {
|
||||
if (!_managerAPI.releaseBuild) {
|
||||
return false;
|
||||
}
|
||||
latestManagerVersion =
|
||||
await _managerAPI.getLatestManagerVersion() ?? _currentManagerVersion;
|
||||
|
||||
@ -151,10 +153,12 @@ class HomeViewModel extends BaseViewModel {
|
||||
latestPatchesVersion = await _managerAPI.getLatestPatchesVersion();
|
||||
if (latestPatchesVersion != null) {
|
||||
try {
|
||||
final int latestVersionInt =
|
||||
int.parse(latestPatchesVersion!.replaceAll(RegExp('[^0-9]'), ''));
|
||||
final int currentVersionInt =
|
||||
int.parse(_currentPatchesVersion.replaceAll(RegExp('[^0-9]'), ''));
|
||||
final int latestVersionInt = int.parse(
|
||||
latestPatchesVersion!.replaceAll(RegExp('[^0-9]'), ''),
|
||||
);
|
||||
final int currentVersionInt = int.parse(
|
||||
_currentPatchesVersion.replaceAll(RegExp('[^0-9]'), ''),
|
||||
);
|
||||
return latestVersionInt > currentVersionInt;
|
||||
} on Exception catch (e) {
|
||||
if (kDebugMode) {
|
||||
@ -187,123 +191,128 @@ class HomeViewModel extends BaseViewModel {
|
||||
await showDialog(
|
||||
context: context,
|
||||
barrierDismissible: false,
|
||||
builder: (context) => PopScope(
|
||||
canPop: false,
|
||||
child: AlertDialog(
|
||||
title: Text(t.homeView.downloadConsentDialogTitle),
|
||||
content: ValueListenableBuilder(
|
||||
valueListenable: autoUpdate,
|
||||
builder: (context, value, child) {
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
t.homeView.downloadConsentDialogText,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 10),
|
||||
child: Text(
|
||||
t.homeView.downloadConsentDialogText2(
|
||||
url: _managerAPI.defaultApiUrl.split('/')[2],
|
||||
builder:
|
||||
(context) => PopScope(
|
||||
canPop: false,
|
||||
child: AlertDialog(
|
||||
title: Text(t.homeView.downloadConsentDialogTitle),
|
||||
content: ValueListenableBuilder(
|
||||
valueListenable: autoUpdate,
|
||||
builder: (context, value, child) {
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
t.homeView.downloadConsentDialogText,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Theme.of(context).colorScheme.error,
|
||||
Padding(
|
||||
padding: const EdgeInsets.symmetric(vertical: 10),
|
||||
child: Text(
|
||||
t.homeView.downloadConsentDialogText2(
|
||||
url: _managerAPI.defaultApiUrl.split('/')[2],
|
||||
),
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Theme.of(context).colorScheme.error,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
_managerAPI.setDownloadConsent(false);
|
||||
SystemNavigator.pop();
|
||||
},
|
||||
child: Text(t.quitButton),
|
||||
),
|
||||
FilledButton(
|
||||
onPressed: () async {
|
||||
_managerAPI.setDownloadConsent(true);
|
||||
_managerAPI.setPatchesAutoUpdate(autoUpdate.value);
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.okButton),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
_managerAPI.setDownloadConsent(false);
|
||||
SystemNavigator.pop();
|
||||
},
|
||||
child: Text(t.quitButton),
|
||||
),
|
||||
FilledButton(
|
||||
onPressed: () async {
|
||||
_managerAPI.setDownloadConsent(true);
|
||||
_managerAPI.setPatchesAutoUpdate(autoUpdate.value);
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.okButton),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void showUpdateDialog(BuildContext context, bool isPatches) {
|
||||
final ValueNotifier<bool> noShow =
|
||||
ValueNotifier(!_managerAPI.showUpdateDialog());
|
||||
final ValueNotifier<bool> noShow = ValueNotifier(
|
||||
!_managerAPI.showUpdateDialog(),
|
||||
);
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (innerContext) => AlertDialog(
|
||||
title: Text(t.homeView.updateDialogTitle),
|
||||
content: ValueListenableBuilder(
|
||||
valueListenable: noShow,
|
||||
builder: (context, value, child) {
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
t.homeView.updateDialogText(
|
||||
file: isPatches ? 'ReVanced Patches' : 'ReVanced Manager',
|
||||
version: isPatches
|
||||
? _currentPatchesVersion
|
||||
: _currentManagerVersion,
|
||||
),
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
HapticCheckboxListTile(
|
||||
value: value,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
title: Text(t.noShowAgain),
|
||||
subtitle: Text(t.homeView.changeLaterSubtitle),
|
||||
onChanged: (selected) {
|
||||
noShow.value = selected!;
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
_managerAPI.setShowUpdateDialog(!noShow.value);
|
||||
Navigator.pop(innerContext);
|
||||
},
|
||||
child: Text(t.dismissButton), // Decide later
|
||||
builder:
|
||||
(innerContext) => AlertDialog(
|
||||
title: Text(t.homeView.updateDialogTitle),
|
||||
content: ValueListenableBuilder(
|
||||
valueListenable: noShow,
|
||||
builder: (context, value, child) {
|
||||
return Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
t.homeView.updateDialogText(
|
||||
file:
|
||||
isPatches ? 'ReVanced Patches' : 'ReVanced Manager',
|
||||
version:
|
||||
isPatches
|
||||
? _currentPatchesVersion
|
||||
: _currentManagerVersion,
|
||||
),
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
HapticCheckboxListTile(
|
||||
value: value,
|
||||
contentPadding: EdgeInsets.zero,
|
||||
title: Text(t.noShowAgain),
|
||||
subtitle: Text(t.homeView.changeLaterSubtitle),
|
||||
onChanged: (selected) {
|
||||
noShow.value = selected!;
|
||||
},
|
||||
),
|
||||
],
|
||||
);
|
||||
},
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () async {
|
||||
_managerAPI.setShowUpdateDialog(!noShow.value);
|
||||
Navigator.pop(innerContext);
|
||||
},
|
||||
child: Text(t.dismissButton), // Decide later
|
||||
),
|
||||
FilledButton(
|
||||
onPressed: () async {
|
||||
_managerAPI.setShowUpdateDialog(!noShow.value);
|
||||
Navigator.pop(innerContext);
|
||||
await showUpdateConfirmationDialog(context, isPatches);
|
||||
},
|
||||
child: Text(t.showUpdateButton),
|
||||
),
|
||||
],
|
||||
),
|
||||
FilledButton(
|
||||
onPressed: () async {
|
||||
_managerAPI.setShowUpdateDialog(!noShow.value);
|
||||
Navigator.pop(innerContext);
|
||||
await showUpdateConfirmationDialog(context, isPatches);
|
||||
},
|
||||
child: Text(t.showUpdateButton),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@ -326,94 +335,95 @@ class HomeViewModel extends BaseViewModel {
|
||||
_toast.showBottom(t.homeView.downloadingMessage);
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => ValueListenableBuilder(
|
||||
valueListenable: downloaded,
|
||||
builder: (context, value, child) {
|
||||
return AlertDialog(
|
||||
title: Text(
|
||||
!value
|
||||
? t.homeView.downloadingMessage
|
||||
: t.homeView.downloadedMessage,
|
||||
),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
if (!value)
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
StreamBuilder<double>(
|
||||
initialData: 0.0,
|
||||
stream: _revancedAPI.managerUpdateProgress.stream,
|
||||
builder: (context, snapshot) {
|
||||
return LinearProgressIndicator(
|
||||
value: snapshot.data! * 0.01,
|
||||
valueColor: AlwaysStoppedAnimation<Color>(
|
||||
Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 16.0),
|
||||
Align(
|
||||
alignment: Alignment.centerRight,
|
||||
child: FilledButton(
|
||||
onPressed: () {
|
||||
_revancedAPI.disposeManagerUpdateProgress();
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.cancelButton),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
if (value)
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
t.homeView.installUpdate,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16.0),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
builder:
|
||||
(context) => ValueListenableBuilder(
|
||||
valueListenable: downloaded,
|
||||
builder: (context, value, child) {
|
||||
return AlertDialog(
|
||||
title: Text(
|
||||
!value
|
||||
? t.homeView.downloadingMessage
|
||||
: t.homeView.downloadedMessage,
|
||||
),
|
||||
content: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
children: [
|
||||
if (!value)
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
StreamBuilder<double>(
|
||||
initialData: 0.0,
|
||||
stream: _revancedAPI.managerUpdateProgress.stream,
|
||||
builder: (context, snapshot) {
|
||||
return LinearProgressIndicator(
|
||||
value: snapshot.data! * 0.01,
|
||||
valueColor: AlwaysStoppedAnimation<Color>(
|
||||
Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 16.0),
|
||||
Align(
|
||||
alignment: Alignment.centerRight,
|
||||
child: TextButton(
|
||||
child: FilledButton(
|
||||
onPressed: () {
|
||||
_revancedAPI.disposeManagerUpdateProgress();
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.cancelButton),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 8.0),
|
||||
Align(
|
||||
alignment: Alignment.centerRight,
|
||||
child: FilledButton(
|
||||
onPressed: () async {
|
||||
await _patcherAPI.installApk(
|
||||
context,
|
||||
downloadedApk!.path,
|
||||
);
|
||||
},
|
||||
child: Text(t.updateButton),
|
||||
],
|
||||
),
|
||||
if (value)
|
||||
Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
t.homeView.installUpdate,
|
||||
style: TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
),
|
||||
),
|
||||
const SizedBox(height: 16.0),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Align(
|
||||
alignment: Alignment.centerRight,
|
||||
child: TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.cancelButton),
|
||||
),
|
||||
),
|
||||
const SizedBox(width: 8.0),
|
||||
Align(
|
||||
alignment: Alignment.centerRight,
|
||||
child: FilledButton(
|
||||
onPressed: () async {
|
||||
await _patcherAPI.installApk(
|
||||
context,
|
||||
downloadedApk!.path,
|
||||
);
|
||||
},
|
||||
child: Text(t.updateButton),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
},
|
||||
),
|
||||
);
|
||||
final File? managerApk = await downloadManager();
|
||||
if (managerApk != null) {
|
||||
@ -468,10 +478,11 @@ class HomeViewModel extends BaseViewModel {
|
||||
shape: const RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.vertical(top: Radius.circular(24.0)),
|
||||
),
|
||||
builder: (context) => UpdateConfirmationSheet(
|
||||
isPatches: isPatches,
|
||||
changelog: changelog,
|
||||
),
|
||||
builder:
|
||||
(context) => UpdateConfirmationSheet(
|
||||
isPatches: isPatches,
|
||||
changelog: changelog,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -125,7 +125,7 @@ class InstallerViewModel extends BaseViewModel {
|
||||
});
|
||||
await WakelockPlus.enable();
|
||||
await handlePlatformChannelMethods();
|
||||
await runPatcher(context);
|
||||
await runPatcher();
|
||||
}
|
||||
|
||||
Future<dynamic> handlePlatformChannelMethods() async {
|
||||
@ -164,6 +164,16 @@ class InstallerViewModel extends BaseViewModel {
|
||||
_managerAPI.setLastUsedPatchesVersion(
|
||||
version: _managerAPI.patchesVersion,
|
||||
);
|
||||
_app.appliedPatches = _patches.map((p) => p.name).toList();
|
||||
if (_managerAPI.isLastPatchedAppEnabled()) {
|
||||
await _managerAPI.setLastPatchedApp(_app, _patcherAPI.outFile!);
|
||||
} else {
|
||||
_app.patchedFilePath = _patcherAPI.outFile!.path;
|
||||
}
|
||||
final homeViewModel = locator<HomeViewModel>();
|
||||
_managerAPI
|
||||
.reAssessPatchedApps()
|
||||
.then((_) => homeViewModel.getPatchedApps());
|
||||
} else if (value == -100.0) {
|
||||
isPatching = false;
|
||||
hasErrors = true;
|
||||
@ -187,7 +197,7 @@ class InstallerViewModel extends BaseViewModel {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
Future<void> runPatcher(BuildContext context) async {
|
||||
Future<void> runPatcher() async {
|
||||
try {
|
||||
await _patcherAPI.runPatcher(
|
||||
_app.packageName,
|
||||
@ -195,16 +205,6 @@ class InstallerViewModel extends BaseViewModel {
|
||||
_patches,
|
||||
_app.isFromStorage,
|
||||
);
|
||||
_app.appliedPatches = _patches.map((p) => p.name).toList();
|
||||
if (_managerAPI.isLastPatchedAppEnabled()) {
|
||||
await _managerAPI.setLastPatchedApp(_app, _patcherAPI.outFile!);
|
||||
} else {
|
||||
_app.patchedFilePath = _patcherAPI.outFile!.path;
|
||||
}
|
||||
final homeViewModel = locator<HomeViewModel>();
|
||||
_managerAPI
|
||||
.reAssessPatchedApps()
|
||||
.then((_) => homeViewModel.getPatchedApps());
|
||||
} on Exception catch (e) {
|
||||
update(
|
||||
-100.0,
|
||||
@ -506,7 +506,7 @@ class InstallerViewModel extends BaseViewModel {
|
||||
_app.isRooted = installAsRoot;
|
||||
if (headerLogs != 'Installing...') {
|
||||
update(
|
||||
.85,
|
||||
-1.0,
|
||||
'Installing...',
|
||||
_app.isRooted ? 'Mounting patched app' : 'Installing patched app',
|
||||
);
|
||||
@ -534,7 +534,7 @@ class InstallerViewModel extends BaseViewModel {
|
||||
update(1.0, 'Installed', 'Installed');
|
||||
} else if (response == 3) {
|
||||
update(
|
||||
.85,
|
||||
-1.0,
|
||||
'Installation canceled',
|
||||
'Installation canceled',
|
||||
);
|
||||
@ -542,7 +542,7 @@ class InstallerViewModel extends BaseViewModel {
|
||||
installResult(context, installAsRoot);
|
||||
} else {
|
||||
update(
|
||||
.85,
|
||||
-1.0,
|
||||
'Installation failed',
|
||||
'Installation failed',
|
||||
);
|
||||
|
@ -40,6 +40,10 @@ class SettingsViewModel extends BaseViewModel {
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
bool usePrereleases() {
|
||||
return _managerAPI.usePrereleases();
|
||||
}
|
||||
|
||||
bool showUpdateDialog() {
|
||||
return _managerAPI.showUpdateDialog();
|
||||
}
|
||||
@ -64,6 +68,45 @@ class SettingsViewModel extends BaseViewModel {
|
||||
return _managerAPI.isUsingAlternativeSources();
|
||||
}
|
||||
|
||||
Future<void> showUsePrereleasesDialog(
|
||||
BuildContext context,
|
||||
bool value,
|
||||
) async {
|
||||
if (value) {
|
||||
return showDialog(
|
||||
context: context,
|
||||
builder:
|
||||
(context) => AlertDialog(
|
||||
title: Text(t.warning),
|
||||
content: Text(
|
||||
t.settingsView.usePrereleasesWarningText,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
_managerAPI.setPrereleases(true);
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.yesButton),
|
||||
),
|
||||
FilledButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.noButton),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
} else {
|
||||
_managerAPI.setPrereleases(false);
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> showPatchesChangeEnableDialog(
|
||||
bool value,
|
||||
BuildContext context,
|
||||
@ -71,63 +114,65 @@ class SettingsViewModel extends BaseViewModel {
|
||||
if (value) {
|
||||
return showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text(t.warning),
|
||||
content: Text(
|
||||
t.settingsView.enablePatchesSelectionWarningText,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
builder:
|
||||
(context) => AlertDialog(
|
||||
title: Text(t.warning),
|
||||
content: Text(
|
||||
t.settingsView.enablePatchesSelectionWarningText,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
_managerAPI.setChangingToggleModified(true);
|
||||
_managerAPI.setPatchesChangeEnabled(true);
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.yesButton),
|
||||
),
|
||||
FilledButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.noButton),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
_managerAPI.setChangingToggleModified(true);
|
||||
_managerAPI.setPatchesChangeEnabled(true);
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.yesButton),
|
||||
),
|
||||
FilledButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.noButton),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text(t.warning),
|
||||
content: Text(
|
||||
t.settingsView.disablePatchesSelectionWarningText,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
builder:
|
||||
(context) => AlertDialog(
|
||||
title: Text(t.warning),
|
||||
content: Text(
|
||||
t.settingsView.disablePatchesSelectionWarningText,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.noButton),
|
||||
),
|
||||
FilledButton(
|
||||
onPressed: () {
|
||||
_managerAPI.setChangingToggleModified(true);
|
||||
_patchesSelectorViewModel.selectDefaultPatches();
|
||||
_managerAPI.setPatchesChangeEnabled(false);
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.yesButton),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.noButton),
|
||||
),
|
||||
FilledButton(
|
||||
onPressed: () {
|
||||
_managerAPI.setChangingToggleModified(true);
|
||||
_patchesSelectorViewModel.selectDefaultPatches();
|
||||
_managerAPI.setPatchesChangeEnabled(false);
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.yesButton),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -173,31 +218,32 @@ class SettingsViewModel extends BaseViewModel {
|
||||
if (!value) {
|
||||
return showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
title: Text(t.warning),
|
||||
content: Text(
|
||||
t.settingsView.requireSuggestedAppVersionDialogText,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
builder:
|
||||
(context) => AlertDialog(
|
||||
title: Text(t.warning),
|
||||
content: Text(
|
||||
t.settingsView.requireSuggestedAppVersionDialogText,
|
||||
style: const TextStyle(
|
||||
fontSize: 16,
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
_managerAPI.enableRequireSuggestedAppVersionStatus(false);
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.yesButton),
|
||||
),
|
||||
FilledButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.noButton),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
_managerAPI.enableRequireSuggestedAppVersionStatus(false);
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.yesButton),
|
||||
),
|
||||
FilledButton(
|
||||
onPressed: () {
|
||||
Navigator.of(context).pop();
|
||||
},
|
||||
child: Text(t.noButton),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
} else {
|
||||
_managerAPI.enableRequireSuggestedAppVersionStatus(true);
|
||||
@ -249,9 +295,7 @@ class SettingsViewModel extends BaseViewModel {
|
||||
Future<void> importSettings() async {
|
||||
try {
|
||||
final String? result = await FlutterFileDialog.pickFile(
|
||||
params: const OpenFileDialogParams(
|
||||
fileExtensionsFilter: ['json'],
|
||||
),
|
||||
params: const OpenFileDialogParams(fileExtensionsFilter: ['json']),
|
||||
);
|
||||
if (result != null) {
|
||||
final File inFile = File(result);
|
||||
@ -298,9 +342,7 @@ class SettingsViewModel extends BaseViewModel {
|
||||
if (isPatchesChangeEnabled()) {
|
||||
try {
|
||||
final String? result = await FlutterFileDialog.pickFile(
|
||||
params: const OpenFileDialogParams(
|
||||
fileExtensionsFilter: ['json'],
|
||||
),
|
||||
params: const OpenFileDialogParams(fileExtensionsFilter: ['json']),
|
||||
);
|
||||
if (result != null) {
|
||||
final File inFile = File(result);
|
||||
@ -393,8 +435,9 @@ class SettingsViewModel extends BaseViewModel {
|
||||
.replaceAll(':', '')
|
||||
.replaceAll('T', '')
|
||||
.replaceAll('.', '');
|
||||
final File logcat =
|
||||
File('${logDir.path}/revanced-manager_logcat_$dateTime.log');
|
||||
final File logcat = File(
|
||||
'${logDir.path}/revanced-manager_logcat_$dateTime.log',
|
||||
);
|
||||
final String logs = await Logcat.execute();
|
||||
logcat.writeAsStringSync(logs);
|
||||
await Share.shareXFiles([XFile(logcat.path)]);
|
||||
|
@ -85,7 +85,7 @@ class _IntAndStringPatchOptionState extends State<IntAndStringPatchOption> {
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
TextFieldForPatchOption(
|
||||
value: value,
|
||||
value: value.toString(),
|
||||
patchOption: widget.patchOption,
|
||||
selectedKey: getKey(),
|
||||
onChanged: (value) {
|
||||
|
@ -5,6 +5,7 @@ import 'package:revanced_manager/gen/strings.g.dart';
|
||||
import 'package:revanced_manager/ui/views/settings/settingsFragment/settings_manage_api_url.dart';
|
||||
import 'package:revanced_manager/ui/widgets/settingsView/settings_section.dart';
|
||||
import 'package:revanced_manager/ui/widgets/settingsView/settings_use_alternative_sources.dart';
|
||||
import 'package:revanced_manager/ui/widgets/settingsView/settings_use_prereleases.dart';
|
||||
|
||||
class SDataSection extends StatelessWidget {
|
||||
const SDataSection({super.key});
|
||||
@ -15,6 +16,7 @@ class SDataSection extends StatelessWidget {
|
||||
title: t.settingsView.dataSectionTitle,
|
||||
children: const <Widget>[
|
||||
SManageApiUrlUI(),
|
||||
SUsePrereleases(),
|
||||
SUseAlternativeSources(),
|
||||
],
|
||||
);
|
||||
|
32
lib/ui/widgets/settingsView/settings_use_prereleases.dart
Normal file
32
lib/ui/widgets/settingsView/settings_use_prereleases.dart
Normal file
@ -0,0 +1,32 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:revanced_manager/gen/strings.g.dart';
|
||||
import 'package:revanced_manager/ui/views/settings/settings_viewmodel.dart';
|
||||
import 'package:revanced_manager/ui/widgets/shared/haptics/haptic_switch_list_tile.dart';
|
||||
|
||||
class SUsePrereleases extends StatefulWidget {
|
||||
const SUsePrereleases({super.key});
|
||||
|
||||
@override
|
||||
State<SUsePrereleases> createState() => _SUsePrereleasesState();
|
||||
}
|
||||
|
||||
final _settingsViewModel = SettingsViewModel();
|
||||
|
||||
class _SUsePrereleasesState extends State<SUsePrereleases> {
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return HapticSwitchListTile(
|
||||
contentPadding: const EdgeInsets.symmetric(horizontal: 20.0),
|
||||
title: Text(
|
||||
t.settingsView.usePrereleasesLabel,
|
||||
style: const TextStyle(fontSize: 20, fontWeight: FontWeight.w500),
|
||||
),
|
||||
subtitle: Text(t.settingsView.usePrereleasesHint),
|
||||
value: _settingsViewModel.usePrereleases(),
|
||||
onChanged: (value) async {
|
||||
await _settingsViewModel.showUsePrereleasesDialog(context, value);
|
||||
setState(() {});
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
@ -1,3 +1,4 @@
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:revanced_manager/app/app.locator.dart';
|
||||
import 'package:revanced_manager/models/patch.dart';
|
||||
import 'package:revanced_manager/models/patched_application.dart';
|
||||
@ -17,12 +18,12 @@ bool isPatchSupported(Patch patch) {
|
||||
bool hasUnsupportedRequiredOption(List<Option> options, Patch patch) {
|
||||
final List<String> requiredOptionsType = [];
|
||||
final List<String> supportedOptionsType = [
|
||||
'String',
|
||||
'Boolean',
|
||||
'Int',
|
||||
'StringArray',
|
||||
'IntArray',
|
||||
'LongArray',
|
||||
'kotlin.String',
|
||||
'kotlin.Int',
|
||||
'kotlin.Boolean',
|
||||
'kotlin.StringArray',
|
||||
'kotlin.IntArray',
|
||||
'kotlin.LongArray',
|
||||
];
|
||||
for (final Option option in options) {
|
||||
if (option.required &&
|
||||
@ -38,6 +39,9 @@ bool hasUnsupportedRequiredOption(List<Option> options, Patch patch) {
|
||||
}
|
||||
for (final String optionType in requiredOptionsType) {
|
||||
if (!supportedOptionsType.contains(optionType)) {
|
||||
if (kDebugMode) {
|
||||
print('PatchCompatibilityCheck: ${patch.name} has unsupported required patch option type: $requiredOptionsType');
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
226
pubspec.lock
226
pubspec.lock
@ -34,10 +34,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: args
|
||||
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
|
||||
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.6.0"
|
||||
version: "2.7.0"
|
||||
async:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -74,10 +74,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: build_daemon
|
||||
sha256: "294a2edaf4814a378725bfe6358210196f5ea37af89ecd81bfa32960113d4948"
|
||||
sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.0.3"
|
||||
version: "4.0.4"
|
||||
build_resolvers:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -114,10 +114,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: built_value
|
||||
sha256: "28a712df2576b63c6c005c465989a348604960c0958d28be5303ba9baa841ac2"
|
||||
sha256: "082001b5c3dc495d4a42f1d5789990505df20d8547d42507c29050af6933ee27"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "8.9.3"
|
||||
version: "8.10.1"
|
||||
characters:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -162,10 +162,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: connectivity_plus
|
||||
sha256: "04bf81bb0b77de31557b58d052b24b3eee33f09a6e7a8c68a3e247c7df19ec27"
|
||||
sha256: "051849e2bd7c7b3bc5844ea0d096609ddc3a859890ec3a9ac4a65a2620cc1f99"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.1.3"
|
||||
version: "6.1.4"
|
||||
connectivity_plus_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -210,18 +210,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dart_style
|
||||
sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab"
|
||||
sha256: "7306ab8a2359a48d22310ad823521d723acfed60ee1f7e37388e8986853b6820"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.7"
|
||||
version: "2.3.8"
|
||||
dbus:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dbus
|
||||
sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
|
||||
sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.10"
|
||||
version: "0.7.11"
|
||||
device_apps:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -235,10 +235,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: device_info_plus
|
||||
sha256: "306b78788d1bb569edb7c55d622953c2414ca12445b41c9117963e03afc5c513"
|
||||
sha256: "0c6396126421b590089447154c5f98a5de423b70cfb15b1578fd018843ee6f53"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "11.3.3"
|
||||
version: "11.4.0"
|
||||
device_info_plus_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -251,10 +251,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: dio
|
||||
sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260"
|
||||
sha256: "253a18bbd4851fecba42f7343a1df3a9a4c1d31a2c1b37e221086b4fa8c8dbc9"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.7.0"
|
||||
version: "5.8.0+1"
|
||||
dio_cache_interceptor:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -267,10 +267,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: dio_web_adapter
|
||||
sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8"
|
||||
sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.0"
|
||||
version: "2.1.1"
|
||||
dynamic_color:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -299,10 +299,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: fake_async
|
||||
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
|
||||
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.3"
|
||||
version: "1.3.2"
|
||||
ffi:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -323,10 +323,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: file_picker
|
||||
sha256: "7423298f08f6fc8cce05792bae329f9a93653fc9c08712831b1a55540127995d"
|
||||
sha256: "77f8e81d22d2a07d0dee2c62e1dda71dc1da73bf43bb2d45af09727406167964"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "9.0.2"
|
||||
version: "10.1.9"
|
||||
fixnum:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -405,18 +405,18 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_markdown
|
||||
sha256: e7bbc718adc9476aa14cfddc1ef048d2e21e4e8f18311aaac723266db9f9e7b5
|
||||
sha256: "08fb8315236099ff8e90cb87bb2b935e0a724a3af1623000a9cec930468e0f27"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.6+2"
|
||||
version: "0.7.7+1"
|
||||
flutter_plugin_android_lifecycle:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: flutter_plugin_android_lifecycle
|
||||
sha256: "615a505aef59b151b46bbeef55b36ce2b6ed299d160c51d84281946f0aa0ce0e"
|
||||
sha256: f948e346c12f8d5480d2825e03de228d0eb8c3a737e4cdaa122267b89c022b5e
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.24"
|
||||
version: "2.0.28"
|
||||
flutter_test:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
@ -463,10 +463,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: get
|
||||
sha256: e4e7335ede17452b391ed3b2ede016545706c01a02292a6c97619705e7d2a85e
|
||||
sha256: c79eeb4339f1f3deffd9ec912f8a923834bec55f7b49c9e882b8fef2c139d425
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.6.6"
|
||||
version: "4.7.2"
|
||||
get_it:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -479,10 +479,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: glob
|
||||
sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
|
||||
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.2"
|
||||
version: "2.1.3"
|
||||
google_fonts:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -503,10 +503,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http
|
||||
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
|
||||
sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.2"
|
||||
version: "1.4.0"
|
||||
http_multi_server:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -519,10 +519,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: http_parser
|
||||
sha256: "76d306a1c3afb33fe82e2bbacad62a61f409b5634c915fceb0d799de1a913360"
|
||||
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.1.1"
|
||||
version: "4.1.2"
|
||||
injectable:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -543,10 +543,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: intl
|
||||
sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
|
||||
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.20.2"
|
||||
version: "0.19.0"
|
||||
io:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -559,18 +559,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: js
|
||||
sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
|
||||
sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.7.1"
|
||||
json2yaml:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: json2yaml
|
||||
sha256: da94630fbc56079426fdd167ae58373286f603371075b69bf46d848d63ba3e51
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
version: "0.7.2"
|
||||
json_annotation:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -599,10 +591,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker
|
||||
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
|
||||
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "10.0.9"
|
||||
version: "10.0.8"
|
||||
leak_tracker_flutter_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -623,10 +615,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: lints
|
||||
sha256: "4a16b3f03741e1252fda5de3ce712666d010ba2122f8e912c94f9f7b90e1a4c3"
|
||||
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.1.0"
|
||||
version: "5.1.1"
|
||||
logcat:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -664,10 +656,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: markdown
|
||||
sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051
|
||||
sha256: "935e23e1ff3bc02d390bad4d4be001208ee92cc217cb5b5a6c19bc14aaa318c1"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.2.2"
|
||||
version: "7.3.0"
|
||||
matcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -720,10 +712,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: package_config
|
||||
sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67"
|
||||
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.1"
|
||||
version: "2.2.0"
|
||||
package_info_plus:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -760,10 +752,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path_provider_android
|
||||
sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2"
|
||||
sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.15"
|
||||
version: "2.2.17"
|
||||
path_provider_foundation:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -800,26 +792,26 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: permission_handler
|
||||
sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849"
|
||||
sha256: "2d070d8684b68efb580a5997eb62f675e8a885ef0be6e754fb9ef489c177470f"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "11.4.0"
|
||||
version: "12.0.0+1"
|
||||
permission_handler_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: permission_handler_android
|
||||
sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc
|
||||
sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "12.1.0"
|
||||
version: "13.0.1"
|
||||
permission_handler_apple:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: permission_handler_apple
|
||||
sha256: f84a188e79a35c687c132a0a0556c254747a08561e99ab933f12f6ca71ef3c98
|
||||
sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "9.4.6"
|
||||
version: "9.4.7"
|
||||
permission_handler_html:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -848,10 +840,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: petitparser
|
||||
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
|
||||
sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.0.2"
|
||||
version: "6.1.0"
|
||||
platform:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -880,26 +872,26 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: provider
|
||||
sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
|
||||
sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.1.2"
|
||||
version: "6.1.5"
|
||||
pub_semver:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pub_semver
|
||||
sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd"
|
||||
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.5"
|
||||
version: "2.2.0"
|
||||
pubspec_parse:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: pubspec_parse
|
||||
sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
|
||||
sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.0"
|
||||
version: "1.5.0"
|
||||
recase:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -954,18 +946,18 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: shared_preferences
|
||||
sha256: "846849e3e9b68f3ef4b60c60cf4b3e02e9321bc7f4d8c4692cf87ffa82fc8a3a"
|
||||
sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.5.2"
|
||||
version: "2.5.3"
|
||||
shared_preferences_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_android
|
||||
sha256: "02a7d8a9ef346c9af715811b01fbd8e27845ad2c41148eefd31321471b41863d"
|
||||
sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.0"
|
||||
version: "2.4.10"
|
||||
shared_preferences_foundation:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -994,10 +986,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_web
|
||||
sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
|
||||
sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.2"
|
||||
version: "2.4.3"
|
||||
shared_preferences_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1018,10 +1010,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shelf_web_socket
|
||||
sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67
|
||||
sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
version: "3.0.0"
|
||||
skeletons:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -1040,18 +1032,18 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: slang
|
||||
sha256: "354283dfe5d6b5bb72d17a52c2acba0ad08c98f8de317a00aa2c801814093982"
|
||||
sha256: "6668a08355b370d5cb5446fc869c4492ed23c6433934fe88228876460fedac22"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.5.0"
|
||||
version: "4.7.2"
|
||||
slang_flutter:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: slang_flutter
|
||||
sha256: "6891526b13641dd2667ce60a9a65ef2c1611f838105396e5e8ad39edc4ecb191"
|
||||
sha256: fff13b6fc8b0378ee23856c4f9fd7f8e2777b430090681f4d19ab14c47de9bc6
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.5.0"
|
||||
version: "4.7.0"
|
||||
source_gen:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1088,34 +1080,34 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: sqflite
|
||||
sha256: "2d7299468485dca85efeeadf5d38986909c5eb0cd71fd3db2c2f000e6c9454bb"
|
||||
sha256: e2297b1da52f127bc7a3da11439985d9b536f75070f3325e62ada69a5c585d03
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.1"
|
||||
version: "2.4.2"
|
||||
sqflite_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: sqflite_android
|
||||
sha256: "78f489aab276260cdd26676d2169446c7ecd3484bbd5fead4ca14f3ed4dd9ee3"
|
||||
sha256: "2b3070c5fa881839f8b402ee4a39c1b4d561704d4ebbbcfb808a119bc2a1701b"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.0"
|
||||
version: "2.4.1"
|
||||
sqflite_common:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: sqflite_common
|
||||
sha256: "761b9740ecbd4d3e66b8916d784e581861fd3c3553eda85e167bc49fdb68f709"
|
||||
sha256: "84731e8bfd8303a3389903e01fb2141b6e59b5973cacbb0929021df08dddbe8b"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.5.4+6"
|
||||
version: "2.5.5"
|
||||
sqflite_darwin:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: sqflite_darwin
|
||||
sha256: "96a698e2bc82bd770a4d6aab00b42396a7c63d9e33513a56945cbccb594c2474"
|
||||
sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.4.1"
|
||||
version: "2.4.2"
|
||||
sqflite_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1225,10 +1217,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: timezone
|
||||
sha256: ffc9d5f4d1193534ef051f9254063fa53d588609418c84299956c3db9383587d
|
||||
sha256: dd14a3b83cfd7cb19e7888f1cbc20f258b8d71b54c06f79ac585f14093a287d1
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.10.0"
|
||||
version: "0.10.1"
|
||||
timing:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1265,18 +1257,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_android
|
||||
sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193"
|
||||
sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.3.14"
|
||||
version: "6.3.16"
|
||||
url_launcher_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_ios
|
||||
sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626"
|
||||
sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.3.2"
|
||||
version: "6.3.3"
|
||||
url_launcher_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1305,18 +1297,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_web
|
||||
sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
|
||||
sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.3"
|
||||
version: "2.4.1"
|
||||
url_launcher_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_windows
|
||||
sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4"
|
||||
sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.3"
|
||||
version: "3.1.4"
|
||||
uuid:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1337,26 +1329,26 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
|
||||
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "15.0.0"
|
||||
version: "14.3.1"
|
||||
wakelock_plus:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: wakelock_plus
|
||||
sha256: "36c88af0b930121941345306d259ec4cc4ecca3b151c02e3a9e71aede83c615e"
|
||||
sha256: a474e314c3e8fb5adef1f9ae2d247e57467ad557fa7483a2b895bc1b421c5678
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.10"
|
||||
version: "1.3.2"
|
||||
wakelock_plus_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: wakelock_plus_platform_interface
|
||||
sha256: "70e780bc99796e1db82fe764b1e7dcb89a86f1e5b3afb1db354de50f2e41eb7a"
|
||||
sha256: e10444072e50dbc4999d7316fd303f7ea53d31c824aa5eb05d7ccbdd98985207
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.2.2"
|
||||
version: "1.2.3"
|
||||
watcher:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1369,34 +1361,34 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web
|
||||
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
|
||||
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.1.0"
|
||||
version: "1.1.1"
|
||||
web_socket:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web_socket
|
||||
sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
|
||||
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.1.6"
|
||||
version: "1.0.1"
|
||||
web_socket_channel:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web_socket_channel
|
||||
sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
|
||||
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.0.1"
|
||||
version: "3.0.3"
|
||||
win32:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: win32
|
||||
sha256: b89e6e24d1454e149ab20fbb225af58660f0c0bf4475544650700d8e2da54aef
|
||||
sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.11.0"
|
||||
version: "5.13.0"
|
||||
win32_registry:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -1425,10 +1417,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: yaml
|
||||
sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
|
||||
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.1.2"
|
||||
version: "3.1.3"
|
||||
sdks:
|
||||
dart: ">=3.7.0 <4.0.0"
|
||||
flutter: ">=3.29.0"
|
||||
flutter: ">=3.29.3"
|
||||
|
10
pubspec.yaml
10
pubspec.yaml
@ -4,11 +4,11 @@ homepage: https://revanced.app
|
||||
|
||||
publish_to: 'none'
|
||||
|
||||
version: 1.24.0+101800055
|
||||
version: 1.25.0-dev.1+101800061
|
||||
|
||||
environment:
|
||||
sdk: '>=3.7.0'
|
||||
flutter: '>=3.29.0'
|
||||
flutter: '>=3.29.3 <=3.32.0' # Do NOT use 3.32.0, sees https://github.com/flutter/flutter/issues/169215
|
||||
|
||||
dependencies:
|
||||
animations: ^2.0.11
|
||||
@ -24,7 +24,7 @@ dependencies:
|
||||
dynamic_color: ^1.7.0
|
||||
dynamic_themes: ^1.1.0
|
||||
expandable: ^5.0.1
|
||||
file_picker: ^9.0.2
|
||||
file_picker: ^10.1.9
|
||||
flutter:
|
||||
sdk: flutter
|
||||
flutter_background: ^1.3.0+1
|
||||
@ -47,7 +47,7 @@ dependencies:
|
||||
ref: 4a6d5e0e22292c8eb160cfb9365b9ea29735fd43 # Branch: master
|
||||
package_info_plus: ^8.3.0
|
||||
path_provider: ^2.1.5
|
||||
permission_handler: ^11.4.0
|
||||
permission_handler: ^12.0.0
|
||||
root:
|
||||
git:
|
||||
url: https://github.com/validcube/root
|
||||
@ -78,7 +78,7 @@ dependencies:
|
||||
wakelock_plus: ^1.2.10
|
||||
|
||||
dev_dependencies:
|
||||
analyzer: ^6.3.0
|
||||
analyzer: ^6.3.0
|
||||
build_runner: ^2.4.15
|
||||
flutter_lints: ^5.0.0
|
||||
injectable_generator: ^2.6.1
|
||||
|
Reference in New Issue
Block a user