Compare commits

..

8 Commits

Author SHA1 Message Date
91a7b46293 Add Gradle caching to release workflow 2025-04-10 23:35:30 +07:00
88ac8148d5 ci: Use EN_US spelling 2025-04-10 23:31:46 +07:00
571fa9a013 ci: Use default GitHub Token 2025-04-10 23:31:33 +07:00
34d8730afa Update release.yml 2025-04-09 11:57:43 +02:00
8c1fd50d08 Update build_pull_request.yml 2025-04-09 11:57:15 +02:00
d3fae4edc7 Update build_pull_request.yml 2025-04-09 11:56:32 +02:00
8940e0df86 Update release.yml 2025-04-09 11:43:59 +02:00
11eeefc012 ci: Modernize workflows 2025-04-09 11:41:05 +02:00
66 changed files with 1249 additions and 1425 deletions

View File

@ -39,14 +39,7 @@ 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: Get dependencies
run: flutter pub get

View File

@ -37,16 +37,13 @@ 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
uses: burrunan/gradle-cache-action@v1
- name: Install dependencies
run: npm i
run: npm ci
- name: Get dependencies
run: flutter pub get

View File

@ -15,22 +15,15 @@ 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
@ -41,14 +34,15 @@ 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.GITHUB_TOKEN }}
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }}
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
@ -75,8 +69,8 @@ jobs:
- name: Commit translations
run: |
git config --global user.name 'github-actions[bot]'
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
git config user.name revanced-bot
git config user.email github@revanced.app
sudo chown -R $USER:$USER .git
git commit -m "chore: Remove empty values from JSON" assets/i18n/*.i18n.json
git push origin HEAD:feat/translations

46
.gitignore vendored
View File

@ -1,14 +1,14 @@
# Miscellaneous
*.class
*.lock
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
# packages file containing multi-root paths
.packages.generated
.svn/
migrate_working_dir/
# IntelliJ related
*.iml
@ -16,43 +16,33 @@
*.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
**/generated_plugin_registrant.dart
.packages
.pub-preload-cache/
.pub-cache/
.pub/
build/
flutter_*.png
linked_*.ds
unlinked.ds
unlinked_spec.ds
/build/
# 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
# Symbolication related
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

View File

@ -15,7 +15,6 @@ analyzer:
- lib/app/app.router.dart
- lib/models/patch.g.dart
- lib/models/patched_application.g.dart
- lib/gen/
linter:
rules:

View File

@ -12,6 +12,3 @@
-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 { *; }

View File

@ -39,9 +39,6 @@
<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.

View File

@ -9,6 +9,7 @@ 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
@ -168,8 +169,7 @@ class MainActivity : FlutterActivity() {
putValue(option.default)
option.values?.let { values ->
put(
"values",
put("values",
JSONObject().apply {
values.forEach { (key, value) ->
putValue(value, key)
@ -257,19 +257,16 @@ class MainActivity : FlutterActivity() {
// Setup logger
Logger.getLogger("").apply {
handlers.forEach { handler ->
handler.close()
removeHandler(handler)
handlers.forEach {
it.close()
removeHandler(it)
}
object : java.util.logging.Handler() {
override fun publish(record: LogRecord) {
if (cancel) return
if (
record.loggerName?.startsWith("app.revanced") == true ||
// Logger in class brut.util.OS.
record.loggerName == ""
) updateProgress(-1.0, "", record.message)
if (record.loggerName?.startsWith("app.revanced") != true || cancel) return
updateProgress(-1.0, "", record.message)
}
override fun flush() = Unit

View File

@ -180,9 +180,6 @@
"disablePatchesSelectionWarningText": "أنت على وشك تعطيل تغيير تحديد التعديلات.\nستتم استعادة التحديد الافتراضي للتعديلات.\n\nهل تريد التعطيل على أي حال؟",
"autoUpdatePatchesLabel": "تحديث التعديلات تلقائيًا",
"autoUpdatePatchesHint": "تحديث التعديلات تلقائيًا إلى الإصدار الأحدث",
"usePrereleasesLabel": "استخدام الإصدارات الأولية",
"usePrereleasesHint": "استخدام إصدارات ما قبل الإصدار من ReVanced Manager و ReVanced Patches",
"usePrereleasesWarningText": "قد يتسبب استخدام الإصدارات الأولية في حدوث مشكلات غير متوقعة.\n\nهل تريد التمكين على أي حال؟",
"showUpdateDialogLabel": "عرض مربع حوار التحديث",
"showUpdateDialogHint": "عرض مربع حوار عندما يتوفر تحديث جديد",
"universalPatchesLabel": "عرض التعديلات العامة",

View File

@ -34,26 +34,16 @@
"updatePatchesSheetTitle": "ReVanced পেট্‌চবোৰ আপডে’ট কৰক",
"updateChangelogTitle": "সলনি-পঞ্জী",
"updateDialogText": "${file}-ৰ এটা নতুন আপডে’ট উপলব্ধ।\n\nবৰ্তমানে ইনষ্টল কৰা সংস্কৰণটো হৈছে ${version}।",
"downloadConsentDialogTitle": "প্ৰয়োজনীয় ফাইলবোৰ ডাউনল’ড কৰিবনে?",
"downloadConsentDialogText": "সঠিকভাৱে কাম কৰিবলৈ ReVanced Manager-এ প্ৰয়োজনীয় ফাইলবোৰ ডাউনল'ড কৰিব লাগিব।",
"downloadConsentDialogText2": "ই আপোনাক ${url}-ৰ সৈতে সংযুক্ত কৰিব।",
"downloadingMessage": "আপডে’ট ডাউনল’ড হৈ আছে...",
"downloadedMessage": "আপডে’ট ডাউনল’ড কৰা হ’ল",
"installingMessage": "আপডে’ট ইনষ্টল হৈ আছে...",
"errorDownloadMessage": "আপডে’ট ডাউনল’ড কৰিব পৰা নগ’ল"
},
"applicationItem": {
"infoButton": "তথ্য"
},
"latestCommitCard": {
"timeagoLabel": "${time} আগত"
},
"appSelectorCard": {
"widgetTitle": "এটা এপ বাছনি কৰক",
"widgetTitleSelected": "বাছনি কৰা এপ",
"widgetSubtitle": "কোনো এপ বাছনি কৰা নাই",
"noAppsLabel": "কোনো এপ্লিকেশ্যন পোৱা নগ’ল"
"downloadConsentDialogTitle": "প্ৰয়োজনীয় ফাইলবোৰ ডাউনল’ড কৰিবনে?"
},
"applicationItem": {},
"latestCommitCard": {},
"patcherView": {},
"appSelectorCard": {},
"patchSelectorCard": {},
"socialMediaCard": {},
"appSelectorView": {},
"patchesSelectorView": {},
"patchOptionsView": {
"saveOptions": "ছে’ভ কৰক",
"unselectPatch": "পেট্‌চ বাছনি-মুক্ত কৰক",
@ -61,6 +51,8 @@
"selectFilePath": "ফাইলৰ পথ বাছনি কৰক",
"selectFolder": "ফ’ল্ডাৰ বাছনি কৰক"
},
"patchItem": {},
"installerView": {},
"settingsView": {
"themeModeLabel": "এপৰ থীম",
"systemThemeLabel": "ছিষ্টেমৰ",
@ -68,28 +60,9 @@
"darkThemeLabel": "গাঢ়",
"dynamicThemeLabel": "মেটেৰিয়েল ইউ",
"languageLabel": "ভাষা",
"languageUpdated": "ভাষা আপডে’ট কৰা হ’ল",
"importKeystoreLabel": "কীষ্ট’ৰ ইম্প’ৰ্ট কৰক",
"importKeystoreHint": "এপবোৰত চহী কৰিবলৈ ব্যৱহাৰ কৰা কীষ্ট’ৰ এটা ইম্প’ৰ্ট কৰক",
"importedKeystore": "কীষ্ট’ৰ ইম্প’ৰ্ট কৰা হ’ল",
"selectKeystorePassword": "কীষ্ট’ৰৰ পাছৱৰ্ড",
"selectKeystorePasswordHint": "এপবোৰত চহী কৰিবলৈ ব্যৱহাৰ কৰা কীষ্ট’ৰৰ পাছৱৰ্ড বাছনি কৰক",
"jsonSelectorErrorMessage": "বাছনি কৰা JSON ফাইলটো ব্যৱহাৰ কৰিব পৰা নগ’ল",
"keystoreSelectorErrorMessage": "বাছনি কৰা কীষ্ট’ৰ ফাইলটো ব্যৱহাৰ কৰিব পৰা নগ’ল"
"languageUpdated": "ভাষা আপডে’ট কৰা হ’ল"
},
"appInfoView": {
"widgetTitle": "এপৰ তথ্য",
"openButton": "খোলক",
"installButton": "ইনষ্টল কৰক",
"uninstallButton": "আনইনষ্টল কৰক",
"unmountButton": "আনমাউণ্ট কৰক",
"exportButton": "এক্সপ’ৰ্ট কৰক",
"deleteButton": "মচক",
"rootDialogTitle": "ত্ৰুটি",
"lastPatchedAppDescription": "এইটো শেষবাৰৰ বাবে পেট্‌চ কৰা এপটোৰ বেকআপ।",
"unmountDialogText": "আপুনি এই এপটো আনমাউণ্ট কৰিব বিচৰাটো নিশ্চিতনে?",
"uninstallDialogText": "আপুনি এই এপটো আনইনষ্টল কৰিব বিচৰাটো নিশ্চিতনে?",
"rootDialogText": "এপটো ছুপাৰইউজাৰৰ অনুমতিৰে ইনষ্টল কৰা হৈছে, কিন্তু বৰ্তমান ReVanced Manager-ৰ কোনো অনুমতি নাই।\nঅনুগ্ৰহ কৰি প্ৰথমে ছুপাৰইউজাৰৰ অনুমতি দিয়ক।",
"removeAppDialogTitle": "এপ মচিবনে?",
"removeAppDialogText": "আপুনি এই বেকআপ মচি পেলাব বিচৰাটো নিশ্চিতনে?",
"packageNameLabel": "পেকেজৰ নাম",
@ -112,24 +85,14 @@
"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_version_downgrade_description": "পেট্‌চ কৰা এপটো ইনষ্টল কৰা এপতকৈ আগৰ সংস্কৰণ হোৱাৰ বাবে ইনষ্টলেশ্যন বিফল হ’ল।\n\nএপটো আনইনষ্টল কৰি আকৌ চেষ্টা কৰিবনে?",
"status_unknown_description": "অজ্ঞাত কাৰণত ইনষ্টলেশ্যন বিফল হ’ল। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক।"
"install_failed_verification_failure_description": "ভেৰিফিকেশ্যন-সম্বন্ধীয় সমস্যা এটাৰ কাৰণে ইনষ্টলেশ্যন বিফল হ’ল।\n\nআপোনাৰ সুৰক্ষা-সম্বন্ধীয় ছেটিংছ মিলাই লৈ পুনৰ চেষ্টা কৰক।"
}
}

View File

@ -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": "Təzə yeniləmə mövcuddur",
"updatePatchesSheetTitle": "ReVanced Patches-i Yenilə",
"updateDialogTitle": "Yeniləmə mövcuddur",
"updatePatchesSheetTitle": "ReVanced Yamaqlarını Yenilə",
"updateChangelogTitle": "Dəyişiklik jurnalı",
"updateDialogText": "${file} üçün təzə yenilənmə var.\n\nCari quraşdırılan versiya: ${version}.",
"updateDialogText": "${file} üçün yeni 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ənmə qurulmur",
"errorInstallMessage": "Yeniləmə quraşdırılmır",
"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çilən tətbiq üçün saxlanılan yamaq seçimi yoxdur.\nCari seçimi saxlamaq üçün \"Bitdi\"ə toxunun.",
"noSavedPatches": "Seçilmiş tətbiq üçün saxlanılmış yamaq 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 bas",
"pressBackAgain": "Ləğv etmək üçün təkrar geri düyməsinə bas",
"openButton": "Aç",
"notificationTitle": "ReVanced Manager yamaqlayır",
"notificationText": "Quraşdırıcıya dönmək üçün toxun",
"notificationText": "Quraşdırıcıya qayıtmaq üçün toxunun",
"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 tonu",
"themeModeLabel": "Tətbiq teması",
"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 seçmə mənbələr istifadə et",
"useAlternativeSourcesHint": "API əvəzinə ReVanced Patches üçün alternativ 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 Qurun",
"apiURLHint": "ReVanced Manager-in API URL-sini tənzimləyin",
"selectApiURL": "API URL",
"orgPatchesLabel": "Yamaq qurucu",
"sourcesPatchesLabel": "Yamaqların mənbəyi",
@ -180,11 +180,8 @@
"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": "Təzə yenilənmə mövcud olduqda dialoq pəncərəsi göstər",
"showUpdateDialogHint": "Yeni 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",

View File

@ -180,7 +180,6 @@
"disablePatchesSelectionWarningText": "আপনি নির্বাচিত প্যাচ পরিবর্তনকে নিষ্ক্রিয় করতে যাচ্ছেন।\nপূর্বনির্ধারিত নির্বাচিত প্যাচসমূহ ফিরিয়ে আনা হবে।\n\nযেকোন ভাবে নিষ্ক্রিয় করতে চান?",
"autoUpdatePatchesLabel": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে আপডেট করুন",
"autoUpdatePatchesHint": "প্যাচসমূহ স্বয়ংক্রিয়ভাবে সর্বশেষ সংস্করণে আপডেট হবে",
"usePrereleasesLabel": "প্রি-রিলিজ ব্যবহার করুন",
"showUpdateDialogLabel": "হালনাগাদ ডায়ালগ দেখান",
"showUpdateDialogHint": "যখন হালনাগাদ উপলব্ধ থাকবে তখন একটি ডায়ালগ দেখান",
"universalPatchesLabel": "বৈশ্বিক প্যাচসমূহ দেখান",

View File

@ -67,10 +67,10 @@
"anyVersion": "Jakákoli verze"
},
"patchSelectorCard": {
"widgetTitle": "Vybrat záplaty",
"widgetTitle": "Vybrat patche",
"widgetTitleSelected": "Vybrané patche",
"widgetSubtitle": "Nejprve vyberte aplikaci",
"widgetEmptySubtitle": "Nejsou vybrány žádné záplaty"
"widgetEmptySubtitle": "Nejsou vybrány žádné patche"
},
"socialMediaCard": {
"widgetTitle": "Sociální sítě",
@ -89,15 +89,15 @@
},
"patchesSelectorView": {
"viewTitle": "Vybrat patche",
"searchBarHint": "Vyhledat záplaty",
"searchBarHint": "Vyhledat patche",
"universalPatches": "Univerzální záplaty",
"newPatches": "Nové záplaty",
"patches": "Záplaty",
"doneButton": "Hotovo",
"defaultChip": "Výchozí",
"defaultTooltip": "Vybrat všechny výchozí záplaty",
"defaultTooltip": "Vybrat všechny výchozí patche",
"noneChip": "Žádné",
"noneTooltip": "Zrušit výběr všech záplat",
"noneTooltip": "Zrušit výběr všech patchů",
"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 záplat",
"sourcesPatchesLabel": "Zdroj patchů",
"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é záplaty",
"appliedPatchesLabel": "Použité patche",
"sizeLabel": "Velikost souboru",
"patchedDateHint": "${date} v ${time}",
"appliedPatchesHint": "${quantity} použité záplaty",
"appliedPatchesHint": "${quantity} použité patche",
"updateNotImplemented": "Tato funkce ještě není implementována"
},
"contributorsView": {

View File

@ -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ücke \"Zurück\" noch einmal, um die App zu verlassen",
"pressBackAgain": "Drücken Sie \"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 du versuchst, das Log zu teilen, teilst du stattdessen eine Textkopie.\n\nLog in die Zwischenablage kopieren?",
"screenshotDetected": "Es wurde ein Screenshot erkannt. Wenn Sie versuchen, das Log zu teilen, teilen Sie 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 dich mit der alternativen Quelle.",
"sourcesUpdateNote": "Hinweis: Dies wird automatisch ReVanced Patches von den alternativen Quellen herunterladen.\n\nDies verbindet Sie mit der alternativen Quelle.",
"apiURLLabel": "API-URL",
"apiURLHint": "Konfiguriere die API URL von ReVanced Manager",
"apiURLHint": "Konfigurieren 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": "Bist du sicher, dass du diese Sicherung löschen möchtest?",
"removeAppDialogText": "Sind Sie sicher, dass Sie diese Sicherung löschen möchten?",
"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": "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.",
"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.",
"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?",

View File

@ -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 κανονικά επιλέγοντάς το από τον χώρο αποθήκευσης."
"featureNotAvailableText": "Αυτή η εφαρμογή είναι εγκατεστημένη ως split APK οπότε για να μπορέσουμε να την τροποιήσουμε και να την εγκαταστήσουμε αξιόπιστα χρειαζόμαστε πρόσβαση root ώστε να την προσαρτήσουμε. Ωστόσο, μπορείτε να τροποποιήσετε και να εγκαταστήσετε ένα κανονικό αρχείο APK επιλέγοντάς το από το χώρο αποθήκευσης χωρίς να χρειάζεται πρόσβαση root."
},
"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,13 +176,10 @@
"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": "Εμφάνιση γενικευμένων τροποποιήσεων",
@ -191,9 +188,9 @@
"lastPatchedAppHint": "Αποθηκεύστε την τελευταία τροποποίηση για εγκατάσταση ή εξαγωγή αργότερα",
"versionCompatibilityCheckLabel": "Έλεγχος συμβατότητας έκδοσης",
"versionCompatibilityCheckHint": "Αποκλεισμός επιλογών τροποποιήσεων που δεν είναι συμβατές με την επιλεγμένη έκδοση εφαρμογής",
"requireSuggestedAppVersionLabel": "Να απαιτείται η προτεινόμενη έκδοση εφαρμογής",
"requireSuggestedAppVersionLabel": "Απαιτείται η προτεινόμενη έκδοση εφαρμογής",
"requireSuggestedAppVersionHint": "Αποκλεισμός επιλογής εκδόσεων εφαρμογών που δεν προτείνονται",
"requireSuggestedAppVersionDialogText": "Η επιλογή μιας εφαρμογής που δεν είναι η προτεινόμενη έκδοση μπορεί να επιφέρει μη αναμενόμενα προβλήματα.\n\nΘέλετε να προχωρήσετε ούτως ή άλλως;",
"requireSuggestedAppVersionDialogText": "Επιλέγοντας μια εφαρμογή που δεν έχει την προτεινόμενη έκδοση μπορεί να προκαλέσει μη αναμενόμενα προβλήματα.\n\nΘέλετε να προχωρήσετε ούτως ή άλλως;",
"aboutLabel": "Σχετικά με",
"snackbarMessage": "Αντιγράφηκε στο πρόχειρο",
"restartAppForChanges": "Επανεκκινήστε την εφαρμογή για να εφαρμόσετε αλλαγές",
@ -228,8 +225,8 @@
"deletedLogs": "Τα αρχεία καταγραφής έχουν διαγραφεί",
"regenerateKeystoreLabel": "Επανέκδοση keystore",
"regenerateKeystoreHint": "Επαναφορά του keystore που χρησιμοποιείται για την υπογραφή των εφαρμογών",
"regenerateKeystoreDialogTitle": "Επανέκδοση του keystore;",
"regenerateKeystoreDialogText": "Οι τροποποιημένες εφαρμογές που είχαν υπογραφεί με το παλιό keystore δε θα μπορούν πλέον να ενημερώνονται.",
"regenerateKeystoreDialogTitle": "Επαναφορά keystore;",
"regenerateKeystoreDialogText": "Τροποποιημένες εφαρμογές που είχαν υπογράφει με το παλιό keystore δε γίνεται να ενημερώνονται.",
"regeneratedKeystore": "Το keystore ανανεώθηκε",
"exportKeystoreLabel": "Εξαγωγή keystore",
"exportKeystoreHint": "Εξάγετε το κλειδί που χρησιμοποιείται για την υπογραφή των εφαρμογών",
@ -255,7 +252,7 @@
"lastPatchedAppDescription": "Αυτό είναι ένα αντίγραφο ασφαλείας της εφαρμογής που τροποποιήθηκε τελευταία.",
"unmountDialogText": "Είστε βέβαιοι ότι θέλετε να αποπροσαρτήσετε αυτήν την εφαρμογή;",
"uninstallDialogText": "Είστε βέβαιοι ότι θέλετε να απεγκαταστήσετε αυτή την εφαρμογή;",
"rootDialogText": "Η εφαρμογή εγκαταστάθηκε με πρόσβαση root, αλλά αυτή τη στιγμή το ReVanced Manager δεν έχει πρόσβαση root.\nΠαρακαλούμε παραχωρήστε πρόσβαση root.",
"rootDialogText": "Η εφαρμογή εγκαταστάθηκε με πρόσβαση root, αλλά αυτή τη στιγμή το ReVanced Manager δεν έχει πρόσβαση root.\nΠαρακαλώ παραχωρήστε πρόσβαση root.",
"removeAppDialogTitle": "Διαγραφή εφαρμογής;",
"removeAppDialogText": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτό το αντίγραφο ασφαλείας;",
"packageNameLabel": "Όνομα πακέτου",
@ -283,19 +280,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": "Η εγκατάσταση απέτυχε για άγνωστο λόγο. Παρακαλούμε δοκιμάστε ξανά."
"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Παρακαλώ δοκιμάστε ξανά."
}
}

View File

@ -180,9 +180,6 @@
"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",

View File

@ -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": "Parches añadidos desde la última vez que parcheaste esta aplicación:\n\n${addedPatches}\n\n",
"addedPatchesDialogText": "Añadidos parches desde la última vez que parcheaste esta aplicación:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Deben establecerse algunas opciones de parche."
},
"appSelectorCard": {
@ -180,8 +180,6 @@
"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",

View File

@ -29,7 +29,7 @@
"noSavedAppFound": "Rakendust ei leitud",
"noInstallations": "Parandatud rakendusi pole installitud",
"installUpdate": "Kas soovite uuenduse installida?",
"updateSheetTitle": "Värskenda ReVanced Manager",
"updateSheetTitle": "Uuenda ReVanced Managerit",
"updateDialogTitle": "Uus uuendus on saadaval",
"updatePatchesSheetTitle": "Uuenda ReVancedi parandusi",
"updateChangelogTitle": "Muudatuste log",
@ -180,7 +180,6 @@
"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",

View File

@ -55,7 +55,7 @@
"widgetTitle": "Paikkaaja",
"patchButton": "Paikkaa",
"incompatibleArchWarningDialogText": "Paikkaamista ei vielä tueta tällä kokoonpanolla, ja se saattaa epäonnistua. Jatketaanko silti?",
"removedPatchesWarningDialogText": "Paikkaukset, jotka on poistettu sen jälkeen, kun viimeksi paikkasit tämän sovelluksen:\n\n${patches}\n\n${newPatches}Jatketaanko silti?",
"removedPatchesWarningDialogText": "Poistetut paikat viimeisen laastariesi jälkeen tämän sovelluksen:\n\n${patches}\n\n${newPatches}Jatka joka tapauksessa?",
"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": "Virheenkorjaus",
"debugSectionTitle": "Vianselvitys",
"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ä ReVanced Patchesien vaihtoehtoiset lähteet",
"sourcesLabelHint": "Määritä käytöstä poistettujen paikkojen vaihtoehtoiset lähteet",
"useAlternativeSources": "Käytä vaihtoehtoisia lähteitä",
"useAlternativeSourcesHint": "Käytä vaihtoehtoisia ReVanced Patches -lähteitä API:n sijaan",
"useAlternativeSourcesHint": "Käytä vaihtoehtoisia lähteitä ReVanced Patches sijasta API",
"sourcesResetDialogTitle": "Palauta",
"sourcesResetDialogText": "Haluatko varmasti palauttaa oletuslähteet?",
"apiURLResetDialogText": "Haluatko varmasti palauttaa oletusarvoisen API:n URL-osoitteen?",
"sourcesUpdateNote": "Huomaa: Tämä lataa automaattisesti ReVanced Patchesin vaihtoehtoisista lähteistä.\n\nTämä yhdistää sinut vaihtoehtoiseen lähteeseen.",
"sourcesUpdateNote": "Huomautus: Tämä lataa automaattisesti ReVanced Patches 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,15 +180,12 @@
"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 viimeisin paikkaus myöhempää asennusta tai vientiä varten",
"lastPatchedAppHint": "Tallenna viimeinen laastari asentaaksesi tai vieäksesi myöhemmin",
"versionCompatibilityCheckLabel": "Version yhteensopivuustarkastus",
"versionCompatibilityCheckHint": "Estä valitsemasta valitun sovellusversion kanssa yhteensopimattomia paikkauksia",
"requireSuggestedAppVersionLabel": "Vaadi ehdotettu sovellusversio",

View File

@ -60,7 +60,7 @@
"requiredOptionDialogText": "Kailangan mo i-set ang ilang mga opsyon para sa patch."
},
"appSelectorCard": {
"widgetTitle": "Pumili ka ng apps",
"widgetTitle": "Pumili ka ng app",
"widgetTitleSelected": "Piniling app",
"widgetSubtitle": "Walang app na pinili",
"noAppsLabel": "Walang nakitang aplikasyon",
@ -180,7 +180,6 @@
"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",

View File

@ -4,7 +4,7 @@
"dismissButton": "Ignorer",
"quitButton": "Quitter",
"updateButton": "Mettre à jour",
"suggested": "Suggéré : ${version}",
"suggested": "Version suggérée : ${version}",
"yesButton": "Oui",
"noButton": "Non",
"warning": "Avertissement",
@ -12,8 +12,8 @@
"noShowAgain": "Ne plus afficher",
"add": "Ajouter",
"remove": "Retirer",
"showChangelogButton": "Voir l'historique",
"showUpdateButton": "Voir la mise à jour",
"showChangelogButton": "Journal des modifications",
"showUpdateButton": "Afficher les mises à 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 appli patchée",
"patchedSubtitle": "Applis installées",
"lastPatchedAppSubtitle": "Dernière application patchée",
"patchedSubtitle": "Applications installées",
"changeLaterSubtitle": "Vous pouvez changer cela dans les paramètres ultérieurement.",
"noSavedAppFound": "Aucune appli trouvée",
"noSavedAppFound": "Aucune application 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 requis ?",
"downloadConsentDialogText": "ReVanced Manager doit télécharger les fichiers nécessaires à son bon fonctionnement.",
"downloadConsentDialogText2": "Cette opération vous connectera à ${url}.",
"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}.",
"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": "Infos"
"infoButton": "Info"
},
"latestCommitCard": {
"loadingLabel": "Chargement...",
@ -54,9 +54,9 @@
"patcherView": {
"widgetTitle": "Patcheur",
"patchButton": "Patcher",
"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",
"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",
"requiredOptionDialogText": "Certaines options de patch doivent être définies."
},
"appSelectorCard": {
@ -77,18 +77,18 @@
"widgetSubtitle": "Nous sommes en ligne !"
},
"appSelectorView": {
"viewTitle": "Sélectionnez une appli",
"viewTitle": "Sélectionner une application",
"searchBarHint": "Rechercher une application",
"storageButton": "Stockage",
"selectFromStorageButton": "Sélectionner à partir du stockage",
"selectFromStorageButton": "Sélectionner depuis le 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é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.",
"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.",
"featureNotAvailable": "Fonctionnalité non implémentée",
"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."
"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."
},
"patchesSelectorView": {
"viewTitle": "Choix des patchs",
"viewTitle": "Sélectionner les patchs",
"searchBarHint": "Rechercher des patchs",
"universalPatches": "Patchs universels",
"newPatches": "Nouveaux patchs",
@ -98,104 +98,101 @@
"defaultTooltip": "Sélectionner tous les patchs par défaut",
"noneChip": "Aucun",
"noneTooltip": "Désélectionner tous les patchs",
"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.",
"loadPatchesSelection": "Charger les patchs sélections",
"noSavedPatches": "Aucune sélection de patchs enregistrée pour l'application sélectionnée.\nAppuyez sur Terminé pour sauvegarder la sélection actuelle.",
"noPatchesFound": "Aucun patch n'a été trouvé pour l'application sélectionnée",
"setRequiredOption": "Certains patchs ont des options qui doivent obligatoirement être définies :\n\n${patches}\n\nVeuillez les définir avant de continuer."
"setRequiredOption": "Certains correctifs nécessitent des options à définir :\n\n${patches}\n\nVeuillez les définir avant de continuer."
},
"patchOptionsView": {
"customValue": "Valeur personnalisée",
"setToNull": "Définir sur null",
"nullValue": "Cette option est actuellement définie sur null",
"setToNull": "Définir à NULL",
"nullValue": "Cette valeur d'option est actuellement nulle",
"viewTitle": "Options de patch",
"saveOptions": "Enregistrer",
"unselectPatch": "Désélectionner le patch",
"tooltip": "Plus d'options de saisie",
"selectFilePath": "Sélectionner un emplacement de fichier",
"selectFolder": "Sélectionner un dossier",
"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",
"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 engendrer des erreurs de patching.\n\nVersion de l'application : ${packageVersion}\nVersions prises en charge :\n${supportedVersions}",
"unsupportedDialogText": "Sélectionner ce patch peut entrainer des erreurs dans la modification.\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 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.",
"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.",
"patchesChangeWarningDialogButton": "Utiliser la sélection par défaut"
},
"installerView": {
"installType": "Sélectionnez un type d'installation",
"installType": "Choisissez le mode d'installation",
"installTypeDescription": "Sélectionner le mode d'installation avec lequel continuer.",
"installButton": "Installer",
"installRootType": "Montage",
"installRootType": "Monter",
"installNonRootType": "Standard",
"warning": "Désactivez les mises à jour automatiques pour l'application patchée afin d'éviter des problèmes inattendus.",
"pressBackAgain": "Appuyez à nouveau sur retour pour annuler",
"pressBackAgain": "Appuyez sur retour une nouvelle fois pour quitter",
"openButton": "Ouvrir",
"notificationTitle": "ReVanced Manager est en train de patcher",
"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 ?",
"notificationText": "Appuyer pour revenir à linstallateur",
"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 ?",
"copiedToClipboard": "Journal copié dans le presse-papiers",
"noExit": "L'installateur s'exécute encore, impossible de quitter..."
"noExit": "L'installateur est toujours en fonctionnement, impossible de quitter..."
},
"settingsView": {
"widgetTitle": "Paramètres",
"appearanceSectionTitle": "Apparence",
"teamSectionTitle": "Équipe",
"debugSectionTitle": "Débogage",
"advancedSectionTitle": "Avancés",
"exportSectionTitle": "Importer et exporter",
"advancedSectionTitle": "Avancé",
"exportSectionTitle": "Import et export",
"dataSectionTitle": "Sources de données",
"themeModeLabel": "Thème de l'appli",
"themeModeLabel": "Thème de l'application",
"systemThemeLabel": "Système",
"lightThemeLabel": "Clair",
"darkThemeLabel": "Sombre",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Profitez d'une expérience en harmonie avec votre appareil",
"dynamicThemeHint": "Profitez d'une expérience plus proche de votre appareil",
"languageLabel": "Langue",
"languageUpdated": "Langue mise à jour",
"sourcesLabel": "Sources alternatives",
"sourcesLabelHint": "Configurez les sources alternatives pour les patchs ReVanced",
"sourcesLabelHint": "Configurer les sources alternatives pour les correctifs ReVanced",
"useAlternativeSources": "Utiliser les sources alternatives",
"useAlternativeSourcesHint": "Utilisez des sources alternatives pour les patchs ReVanced plutôt que celles de l'API",
"useAlternativeSourcesHint": "Utiliser des sources alternatives pour les correctifs ReVanced au lieu 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 : Les patchs ReVanced seront téléchargés automatiquement à partir des sources alternatives.\n\nCela vous connectera à la source alternative.",
"sourcesUpdateNote": "Remarque : Cela téléchargera automatiquement les correctifs ReVanced à 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 patchs",
"orgPatchesLabel": "Organisation des correctifs",
"sourcesPatchesLabel": "Source des patchs",
"contributorsLabel": "Contributeurs",
"contributorsHint": "Liste des personnes qui contribuent à ReVanced",
"contributorsHint": "Liste des contributeurs de 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 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 ?",
"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",
"showUpdateDialogLabel": "Afficher la boîte de dialogue de mise à jour",
"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",
"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",
"versionCompatibilityCheckLabel": "Vérification de la compatibilité des versions",
"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 ?",
"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 ?",
"aboutLabel": "À propos",
"snackbarMessage": "Copié dans le presse-papiers",
"snackbarMessage": "Copié dans le presse-papier",
"restartAppForChanges": "Redémarrez l'application pour appliquer les changements",
"deleteTempDirLabel": "Supprimer les fichiers temporaires",
"deleteTempDirHint": "Supprimer les fichiers temporaires inutilisés",
@ -206,30 +203,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 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.",
"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.",
"resetStoredOptions": "Les options ont été réinitialisées",
"deleteLogsLabel": "Effacer les journaux",
"deleteLogsHint": "Supprimer les journaux collectés par ReVanced Manager",
"deleteLogsHint": "Supprimer les journaux collectés de ReVanced Manager",
"deletedLogs": "Journaux supprimés",
"regenerateKeystoreLabel": "Régénérer le magasin de clés",
"regenerateKeystoreHint": "Recréer le magasin de clés utilisé pour signer les applications",
"regenerateKeystoreHint": "Régénérer le magasin de clés utilisé pour signer l'application",
"regenerateKeystoreDialogTitle": "Régénérer le magasin de clés ?",
"regenerateKeystoreDialogText": "Les applications patchées qui ont été signées avec l'ancien stockage de clés ne pourront plus être mises à jour.",
"regenerateKeystoreDialogText": "Les applications corrigées signées avec lancien magasin 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",
@ -241,10 +238,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 stockage de clés sélectionné"
"keystoreSelectorErrorMessage": "Impossible d'utiliser le fichier de magasin de clés sélectionné"
},
"appInfoView": {
"widgetTitle": "Infos sur l'appli",
"widgetTitle": "Infos de l'application",
"openButton": "Ouvrir",
"installButton": "Installer",
"uninstallButton": "Désinstaller",
@ -252,22 +249,22 @@
"exportButton": "Exporter",
"deleteButton": "Supprimer",
"rootDialogTitle": "Erreur",
"lastPatchedAppDescription": "Il s'agit d'une sauvegarde de la dernière application qui a été patchée.",
"lastPatchedAppDescription": "Il s'agit d'une sauvegarde de la dernière application qui a été corrigé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 autorisations superutilisateur, mais ReVanced Manager n'a actuellement aucune autorisation.\nVeuillez commencer par accorder les autorisations superutilisateur.",
"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.",
"removeAppDialogTitle": "Supprimer l'application ?",
"removeAppDialogText": "Êtes-vous sûr de vouloir supprimer cette sauvegarde ?",
"packageNameLabel": "Nom du paquet",
"installTypeLabel": "Type d'installation",
"mountTypeLabel": "Montage",
"mountTypeLabel": "Monter",
"regularTypeLabel": "Standard",
"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"
"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"
},
"contributorsView": {
"widgetTitle": "Contributeurs"
@ -279,23 +276,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 d'installer une version antérieure",
"install_failed_version_downgrade": "Impossible de rétrograder",
"status_failure_conflict": "Conflit d'installation",
"status_failure_storage": "Problème de stockage",
"status_failure_storage": "Problème de stockage de l'installation",
"status_failure_incompatible": "Installation incompatible",
"status_failure_timeout": "Temps d'installation écoulé",
"status_failure_timeout": "Délai d'installation dépassé",
"status_unknown": "Échec de l'installation",
"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 ?",
"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 ?",
"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 patchée est invalide.\n\nDésinstaller l'application et réessayer ?",
"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_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 la version de l'application patchée est inférieure à celle de l'application installée.\n\nDésinstaller l'application et réessayer ?",
"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?",
"status_unknown_description": "L'installation a échoué pour une raison inconnue. Veuillez réessayer."
}
}

View File

@ -180,9 +180,6 @@
"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": "Dfhé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",

View File

@ -23,9 +23,7 @@
"refreshSuccess": "रीफ्रेश हो गया है",
"widgetTitle": "नियंत्रण-पट्ट",
"updatesSubtitle": "अपडेट",
"patchedSubtitle": "इंस्‍टॉल किए गए ऐप",
"changeLaterSubtitle": "आप बाद में सेटिंग में जाकर इसे बदल सकते हैं।",
"noSavedAppFound": "कोई ऐप्लिकेशन नहीं मिला\n\t",
"noInstallations": "कोई पैच किया गया एप्लिकेशन इंस्टॉल नहीं किया गया",
"installUpdate": "अपडेट इंस्टॉल करना जारी रखें?",
"updateSheetTitle": "ReVanced Manager अपडेट करें ",
@ -144,5 +142,6 @@
},
"contributorsView": {
"widgetTitle": "योगदान कर्ता"
}
},
"installErrorDialog": {}
}

View File

@ -73,6 +73,7 @@
"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}"
},
@ -130,5 +131,6 @@
},
"contributorsView": {
"widgetTitle": "Pridonositelji"
}
},
"installErrorDialog": {}
}

View File

@ -26,7 +26,7 @@
"lastPatchedAppSubtitle": "Aplikasi terakhir ditambal",
"patchedSubtitle": "Aplikasi terpasang",
"changeLaterSubtitle": "Anda dapat mengubahnya di pengaturan nanti.",
"noSavedAppFound": "Aplikasi tidak ditemukan",
"noSavedAppFound": "App tidak ditemukan",
"noInstallations": "Aplikasi tertambal tidak terpasang",
"installUpdate": "Lanjut mengunduh pembaruan?",
"updateSheetTitle": "Perbarui ReVanced Manager",
@ -180,7 +180,6 @@
"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",

View File

@ -100,6 +100,7 @@
"selectFilePath": "Veldu skráarslóð",
"selectFolder": "Veldu mappa"
},
"patchItem": {},
"installerView": {
"installButton": "Setja upp",
"installNonRootType": "Venjulegur",
@ -139,5 +140,6 @@
},
"contributorsView": {
"widgetTitle": "Framlagsaðilar"
}
},
"installErrorDialog": {}
}

View File

@ -5,7 +5,7 @@
"quitButton": "Esci",
"updateButton": "Aggiorna",
"suggested": "Consigliata: ${version}",
"yesButton": "Sì",
"yesButton": "Si",
"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": "Patch rimosse dall'ultima volta che hai patchato questa app:\n\n${patches}\n\n${newPatches}Continuare comunque?",
"removedPatchesWarningDialogText": "Le 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."
},

View File

@ -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}",
"incompatibleArchWarningDialogText": "このアーキテクチャへのパッチ適用はまだサポートされておらず、失敗する可能性があります。とにかく続けますか?",
"removedPatchesWarningDialogText": "前回このアプリにパッチを適用した時以降に削除されたパッチ:\n\n${patches}\n\n${newPatches}とにかく続けますか?",
"addedPatchesDialogText": "前回このアプリにパッチを適用した時以降に追加されたパッチ:\n\n${addedPatches}\n",
"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であり、パッチの適用とインストールにはルート権限でマウントする必要があります。ただし、ストレージから単一APKを選択することでパッチの適用とインストールが可能です。"
"featureNotAvailableText": "このアプリは分割APKであり、パッチの適用とインストールにはroot権限でマウントする必要があります。ただし、ストレージから単一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,48 +147,47 @@
"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": "APIURLをデフォルト値にリセットしてもよろしいですか",
"sourcesUpdateNote": "注: 自動的に代替ソースからReVanced Patchesをダウンロードします。\n\nこれにより、代替ソースに接続されます。",
"apiURLLabel": "APIURL",
"apiURLHint": "ReVanced ManagerのAPI URLを設定します",
"selectApiURL": "APIURL",
"apiURLResetDialogText": "APIURL をデフォルト値にリセットしてもよろしいですか?",
"sourcesUpdateNote": "注: ReVanced Patchesを代替ソースから自動的にダウンロードします。\n\nこれにより、代替ソースとの通信が発生します。",
"apiURLLabel": "APIURL",
"apiURLHint": "ReVanced ManagerのAPIURLを設定す",
"selectApiURL": "APIURL",
"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このまま続行しますか",
@ -196,24 +195,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": "パッチオプションをリセット",
@ -222,7 +221,7 @@
"resetStoredOptionsDialogText": "パッチオプションをリセットすると、保存されたすべてのオプションが削除されます。",
"resetStoredOptions": "オプションをリセットしました",
"deleteLogsLabel": "ログを削除",
"deleteLogsHint": "収集されたReVanced Managerのログを削除します",
"deleteLogsHint": "収集された ReVanced Manager のログを削除します",
"deletedLogs": "ログを削除しました",
"regenerateKeystoreLabel": "キーストアを再生成",
"regenerateKeystoreHint": "アプリの署名に使われるキーストアを再生成します",
@ -238,11 +237,11 @@
"importedKeystore": "キーストアをインポートしました",
"selectKeystorePassword": "キーストアのパスワード",
"selectKeystorePasswordHint": "アプリの署名に使用するキーストアのパスワードを入力してください",
"jsonSelectorErrorMessage": "選択したJSONファイルは使用できません",
"jsonSelectorErrorMessage": "選択したJSON ファイルは使用できません",
"keystoreSelectorErrorMessage": "選択したキーストアファイルは使用できません"
},
"appInfoView": {
"widgetTitle": "アプリ情報",
"widgetTitle": "アプリ情報",
"openButton": "開く",
"installButton": "インストール",
"uninstallButton": "アンインストール",
@ -251,11 +250,11 @@
"deleteButton": "削除",
"rootDialogTitle": "エラー",
"lastPatchedAppDescription": "これは最後にパッチを適用したアプリのバックアップです。",
"unmountDialogText": "このアプリをマウント解除してもよろしいですか?",
"uninstallDialogText": "このアプリをアンインストールしてもよろしいですか?",
"rootDialogText": "アプリはルート権限でインストールされましたが、現在ReVanced Managerにはその権限がありません。 ルート権限を付与してください。",
"unmountDialogText": "このアプリをアンマウントしてもよろしいですか?",
"uninstallDialogText": "本当にこのアプリをアンインストールしすか?",
"rootDialogText": "アプリはスーパーユーザー権限でインストールされましたが、現在 ReVanced Manager にはその権限がありません。 スーパーユーザー権限を付与してください。",
"removeAppDialogTitle": "アプリを削除しますか?",
"removeAppDialogText": "バックアップを削除してもよろしいですか?",
"removeAppDialogText": "このバックアップを削除してもよろしいですか?",
"packageNameLabel": "パッケージ名",
"installTypeLabel": "インストールの種類",
"mountTypeLabel": "マウント",
@ -264,7 +263,7 @@
"appliedPatchesLabel": "適用されたパッチ",
"sizeLabel": "ファイルのサイズ",
"patchedDateHint": "${date} ${time}",
"appliedPatchesHint": "${quantity}個の適用されたパッチ",
"appliedPatchesHint": "${quantity} 個の適用されたパッチ",
"updateNotImplemented": "この機能はまだ実装されていません"
},
"contributorsView": {
@ -272,7 +271,7 @@
},
"installErrorDialog": {
"mount_version_mismatch": "バージョンが一致しません",
"mount_no_root": "ルート権限が付与されていません",
"mount_no_root": "ルート権限がありません",
"mount_missing_installation": "インストールが見つかりませんでした",
"status_failure_blocked": "インストールはブロックされました",
"install_failed_verification_failure": "検証に失敗しました",
@ -284,16 +283,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": "不明な理由によりインストールに失敗しました。もう一度やり直してください。"
}
}

View File

@ -46,6 +46,8 @@
"appSelectorCard": {
"widgetTitle": "Қолданбаны таңдаңыз"
},
"patchSelectorCard": {},
"socialMediaCard": {},
"appSelectorView": {
"viewTitle": "Қолданбаны таңдаңыз"
},
@ -56,6 +58,7 @@
"patchOptionsView": {
"selectFolder": "Буманы таңдаңыз"
},
"patchItem": {},
"installerView": {
"installButton": "Орнату",
"installNonRootType": "Қалыпты"
@ -74,5 +77,6 @@
},
"contributorsView": {
"widgetTitle": "Үлес қосушылар"
}
},
"installErrorDialog": {}
}

View File

@ -29,11 +29,24 @@
"updateDialogTitle": "មានបច្ចុប្បន្នភាពថ្មិ",
"updateChangelogTitle": "កំណត់ហេតុផ្លាស់ប្ដូរ"
},
"applicationItem": {},
"latestCommitCard": {},
"patcherView": {
"widgetTitle": "ផាត់ឆើ"
},
"appSelectorCard": {},
"patchSelectorCard": {},
"socialMediaCard": {},
"appSelectorView": {},
"patchesSelectorView": {},
"patchOptionsView": {},
"patchItem": {},
"installerView": {},
"settingsView": {
"widgetTitle": "ការកំណត់",
"sourcesResetDialogTitle": "កំណត់ឡើងវិញ"
}
},
"appInfoView": {},
"contributorsView": {},
"installErrorDialog": {}
}

View File

@ -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 Patches 업데이트",
"updateDialogTitle": "새 업데이트가 있습니다",
"updatePatchesSheetTitle": "ReVanced 패치 업데이트",
"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}\n\n그래도 계속하시겠습니까?",
"removedPatchesWarningDialogText": "이 앱을 마지막으로 패치한 이후 제된 패치입니다:\n\n${patches}\n\n${newPatches}그래도 계속하시겠습니까?",
"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,15 +176,12 @@
"logsHint": "수집된 ReVanced Manager 로그를 공유합니다",
"enablePatchesSelectionLabel": "패치 선택 변경 허용",
"enablePatchesSelectionHint": "패치를 선택하거나 선택 해제할 수 있습니다",
"enablePatchesSelectionWarningText": "패치 선택을 변경하는 경우에는 예상되지 않은 문제점이 발생할 수 있습니다.\n\n그래도 활성화하시겠습니까?",
"disablePatchesSelectionWarningText": "패치 선택 변경을 비활성화하려 합니다.\n기본 패치 선택목록으로 복원될 것입니다.\n\n그래도 비활성화하시겠습니까?",
"enablePatchesSelectionWarningText": "패치 선택을 변경하는 경우에는 예상되지 않은 문제점이 발생할 수 있습니다\n\n그래도 활성화하시겠습니까?",
"disablePatchesSelectionWarningText": "패치 선택 변경을 비활성화하려 합니다\n기본 패치 선택목록으로 복원될 것입니다\n\n그래도 비활성화하시겠습니까?",
"autoUpdatePatchesLabel": "패치 자동 업데이트",
"autoUpdatePatchesHint": "ReVanced Patches를 최신 버전으로 자동 업데이트합니다",
"usePrereleasesLabel": "Pre-Releases 버전 사용",
"usePrereleasesHint": "ReVanced Manager 및 ReVanced Patches의 Pre-Releases 버전을 사용합니다",
"usePrereleasesWarningText": "Pre-Releases 버전을 사용하면 예상되지 않은 문제점이 발생할 수 있습니다.\n\n그래도 활성화하시겠습니까?",
"autoUpdatePatchesHint": "자동으로 패치를 최신 버전으로 업데이트합니다",
"showUpdateDialogLabel": "업데이트 팝업창 보기",
"showUpdateDialogHint": "새로운 업데이트가 있으면 팝업창을 표시합니다",
"showUpdateDialogHint": "새 업데이트가 있으면 팝업창을 표시합니다",
"universalPatchesLabel": "공용 패치 보기",
"universalPatchesHint": "기기에 설치된 모든 앱과 공용 패치를 표시합니다 (앱 목록이 느려질 수 있음)",
"lastPatchedAppLabel": "패치된 앱 저장",
@ -193,18 +190,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 파일로 내보냅니다",
@ -221,15 +218,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": "앱을 서명할 때 사용한 키스토어를 내보냅니다",
@ -247,17 +244,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": "마운트",
@ -285,17 +282,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": "알 수 없는 이유로 설치에 실패하였습니다. 다시 시도하세요"
}
}

View File

@ -180,7 +180,6 @@
"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",

View File

@ -1,41 +1,18 @@
{
"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...",
@ -77,6 +54,7 @@
"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}"
},
@ -126,5 +104,6 @@
},
"contributorsView": {
"widgetTitle": "Penyumbang"
}
},
"installErrorDialog": {}
}

View File

@ -3,5 +3,22 @@
"cancelButton": "ပယ်ဖျက်မည်",
"dismissButton": "မလုပ်တော့ပါ",
"quitButton": "ထွက်မည်",
"updateButton": "အပ်ပဒိတ်"
"updateButton": "အပ်ပဒိတ်",
"navigationView": {},
"homeView": {},
"applicationItem": {},
"latestCommitCard": {},
"patcherView": {},
"appSelectorCard": {},
"patchSelectorCard": {},
"socialMediaCard": {},
"appSelectorView": {},
"patchesSelectorView": {},
"patchOptionsView": {},
"patchItem": {},
"installerView": {},
"settingsView": {},
"appInfoView": {},
"contributorsView": {},
"installErrorDialog": {}
}

View File

@ -1,9 +1,9 @@
// ignore_for_file: avoid_print, prefer_foreach
// ignore_for_file: avoid_print
import 'dart:convert';
import 'dart:io';
dynamic removeBlankEntries(dynamic json) {
T? removeBlankEntries<T>(T? json) {
// This function is protected by BSD 3-Clause License
// Changes made to this section are allow removing of '' values from JSON
@ -37,47 +37,23 @@ dynamic removeBlankEntries(dynamic 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) {
for (int i = json.length - 1; i >= 0; i--) {
final processedElement = removeBlankEntries(json[i]);
if (processedElement == null) {
json.removeAt(i);
} else {
json[i] = processedElement;
}
}
json.removeWhere((e) => e == null);
json.forEach(removeBlankEntries);
// If the list is empty after removing nulls, return null to remove it.
return json.isEmpty ? null : json;
} else if (json is Map) {
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);
}
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;
}
if (json is String && json.isEmpty) {
return null;
}
return json;
}
@ -86,44 +62,33 @@ 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 {
final contents = await file.readAsString();
if (contents.trim().isEmpty) {
print('🗑️ File is empty, deleting: ${file.path}');
await file.delete();
continue;
}
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;
dynamic jsonInput;
try {
jsonInput = jsonDecode(contents);
} on FormatException catch (e, stackTrace) {
print('💥 Invalid JSON in file: ${file.path}: $e');
print(stackTrace);
continue;
}
if (processedJson is Map) {
isEmpty = processedJson.values.every((value) => value is Map && value.isEmpty);
}
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}');
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}');
}
}
} catch (e, stackTrace) {
} catch (e) {
print('💥 Task failed on: ${file.path}: $e');
print(stackTrace);
}
}
}
void main() async {
await processJsonFiles();
processJsonFiles();
}

View File

@ -21,6 +21,8 @@
"widgetTitle": "ରଫୁକାର",
"patchButton": "ରଫୁ"
},
"appSelectorCard": {},
"patchSelectorCard": {},
"socialMediaCard": {
"widgetSubtitle": "ଆମେ ଅନଲାଇନ୍ ଅଛୁ!"
},
@ -32,6 +34,9 @@
"defaultChip": "ଡିଫଲ୍ଟ",
"defaultTooltip": "ସମସ୍ତ ଡିଫଲ୍ଟ ରଫୁ ଚୟନ କର"
},
"patchOptionsView": {},
"patchItem": {},
"installerView": {},
"settingsView": {
"widgetTitle": "ସେଟିଂ",
"appearanceSectionTitle": "ରୂପ",
@ -52,5 +57,7 @@
"appInfoView": {
"widgetTitle": "ଆପ୍ ସୂଚନା",
"rootDialogTitle": "ତ୍ରୁଟି"
}
},
"contributorsView": {},
"installErrorDialog": {}
}

View File

@ -7,7 +7,7 @@
"suggested": "Sugerowana wersja: ${version}",
"yesButton": "Tak",
"noButton": "Nie",
"warning": "Uwaga",
"warning": "Ostrzeżenie",
"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 załatana aplikacja",
"lastPatchedAppSubtitle": "Ostatnio poprawiona 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 ReVanced Manager",
"updateSheetTitle": "Zaktualizuj Menedżera ReVanced",
"updateDialogTitle": "Dostępna jest nowa aktualizacja",
"updatePatchesSheetTitle": "Zaktualizuj łatki ReVanced",
"updateChangelogTitle": "Lista zmian",
@ -52,7 +52,7 @@
"timeagoLabel": "${time} temu"
},
"patcherView": {
"widgetTitle": "Łatanie",
"widgetTitle": "Łataj",
"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": "Wybierz z pamięci",
"storageButton": "Pamięć",
"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 łatki",
"viewTitle": "Opcje łatek",
"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ę wyglądem dopasowanym do twojego urządzenia",
"dynamicThemeHint": "Ciesz się wrażeniami bliższymi twojemu urządzeniu",
"languageLabel": "Język",
"languageUpdated": "Zmieniono język",
"languageUpdated": "Zaktualizowano język",
"sourcesLabel": "Alternatywne źródło",
"sourcesLabelHint": "Skonfiguruj alternatywne źródła dla łatek ReVanced",
"useAlternativeSources": "Używaj alternatywnych źródeł",

View File

@ -180,7 +180,6 @@
"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",

View File

@ -12,8 +12,8 @@
"noShowAgain": "Não mostrar isto novamente",
"add": "Adicionar",
"remove": "Remover",
"showChangelogButton": "Mostrar as alterações",
"showUpdateButton": "Mostrar a atualização",
"showChangelogButton": "Mostrar correções",
"showUpdateButton": "Mostrar 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 modificada",
"lastPatchedAppSubtitle": "Última aplicação corrigida",
"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 a instalação da atualização?",
"installUpdate": "Continuar para instalar a atualização?",
"updateSheetTitle": "Atualizar o ReVanced Manager",
"updateDialogTitle": "Nova atualização disponível",
"updatePatchesSheetTitle": "Atualizar as Modificações do ReVanced",
"updatePatchesSheetTitle": "Atualizar o ReVanced Manager",
"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 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."
"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."
},
"appSelectorCard": {
"widgetTitle": "Escolha uma aplicação",
"widgetTitleSelected": "Aplicação escolhida",
"widgetSubtitle": "Nenhuma aplicação escolhida",
"widgetTitle": "Selecionar uma aplicação",
"widgetTitleSelected": "Aplicação selecionada",
"widgetSubtitle": "Nenhuma aplicação selecionada",
"noAppsLabel": "Nenhuma aplicação encontrada",
"anyVersion": "Qualquer versão"
},
"patchSelectorCard": {
"widgetTitle": "Escolher modificações",
"widgetTitleSelected": "Modificações escolhidas",
"widgetTitle": "Selecionar modificações",
"widgetTitleSelected": "Modificações selecionadas",
"widgetSubtitle": "Selecionar primeiro uma aplicação",
"widgetEmptySubtitle": "Nenhuma modificação escolhida"
"widgetEmptySubtitle": "Nenhuma modificação selecionada"
},
"socialMediaCard": {
"widgetTitle": "Redes Sociais",
"widgetSubtitle": "Nós estamos online!"
},
"appSelectorView": {
"viewTitle": "Escolha uma aplicação",
"viewTitle": "Selecionar uma aplicação",
"searchBarHint": "Procurar aplicação",
"storageButton": "Armazenamento",
"selectFromStorageButton": "Escolher do armazenamento",
"selectFromStorageButton": "Selecionar 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 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.",
"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.",
"featureNotAvailable": "A funcionalidade não está implementada",
"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."
"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."
},
"patchesSelectorView": {
"viewTitle": "Escolher modificações",
"viewTitle": "Selecionar modificações",
"searchBarHint": "Procurar modificações",
"universalPatches": "Modificações universais",
"newPatches": "Novas modificações",
"patches": "Modificações",
"doneButton": "Concluído",
"defaultChip": "Padrão",
"defaultTooltip": "Escolher todas as modificações predefinidas",
"defaultChip": "Predefinição",
"defaultTooltip": "Selecionar todas as modificações padrão",
"noneChip": "Nenhum",
"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."
"noneTooltip": "Desselecionar todas as modificações",
"loadPatchesSelection": "Carregar a seleção de modificações",
"noSavedPatches": "Não 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."
},
"patchOptionsView": {
"customValue": "Valor personalizado",
"setToNull": "Definir como nulo",
"nullValue": "O valor desta opção é atualmente nulo",
"viewTitle": "Opções da Modificação",
"nullValue": "Atualmente, este valor de opção é nulo",
"viewTitle": "Opções de modificação",
"saveOptions": "Guardar",
"unselectPatch": "Remover modificação",
"unselectPatch": "Desmarque o patch",
"tooltip": "Mais opções de entrada",
"selectFilePath": "Escolha o diretório do ficheiro",
"selectFolder": "Escolha a pasta",
"selectFilePath": "Selecionar caminho do ficheiro",
"selectFolder": "Selecionar 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": "A escolha desta modificação pode 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.",
"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.",
"unsupportedRequiredOption": "Esta modificação contém uma opção obrigatória que não é suportada por esta aplicação",
"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"
"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"
},
"installerView": {
"installType": "Escolha o tipo da instalação",
"installType": "Seleciona o tipo de instalação",
"installTypeDescription": "Seleciona o tipo de instalação para continuar.",
"installButton": "Instalar",
"installRootType": "Montar",
"installNonRootType": "Normal",
"warning": "Desativa as atualizações automáticas da aplicação modificada para evitar problemas inesperados.",
"pressBackAgain": "Premir novamente para cancelar",
"warning": "Desative as atualizações automáticas do app patcheado para evitar problemas inesperados.",
"pressBackAgain": "Pressione voltar novamente para cancelar",
"openButton": "Abrir",
"notificationTitle": "O ReVanced Manager está a aplicar as modificações",
"notificationTitle": "O ReVanced Manager está a fazer as modificações",
"notificationText": "Toca para voltar ao instalador",
"exportApkButtonTooltip": "Exportar o APK modificado",
"exportApkButtonTooltip": "Exportar APK com o patch",
"exportLogButtonTooltip": "Exportar o registo",
"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?",
"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?",
"copiedToClipboard": "Registo copiado para a área de transferência",
"noExit": "O instalador ainda está a ser executado, não é possível sair..."
"noExit": "O instalador ainda está em execução, não é possível sair..."
},
"settingsView": {
"widgetTitle": "Definições",
@ -154,43 +154,43 @@
"lightThemeLabel": "Claro",
"darkThemeLabel": "Escuro",
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Desfrute duma experiência mais próxima do teu dispositivo",
"dynamicThemeHint": "Aproveite uma experiência mais próxima do tema do seu dispositivo",
"languageLabel": "Idioma",
"languageUpdated": "Idioma atualizado",
"sourcesLabel": "Fontes alternativas",
"sourcesLabelHint": "Configurar as fontes alternativas para as Modificações do ReVanced",
"sourcesLabelHint": "Configure as fontes alternativas para Correções ReVanced",
"useAlternativeSources": "Utilizar as fontes alternativas",
"useAlternativeSourcesHint": "Utilizar fontes alternativas para as Modificações do ReVanced em vez da API",
"useAlternativeSourcesHint": "Usar fontes alternativas para correções redistribuídas 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 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.",
"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.",
"apiURLLabel": "URL da API",
"apiURLHint": "Configurar a URL da API do ReVanced Manager",
"selectApiURL": "URL da API",
"orgPatchesLabel": "Organização das Modificações",
"orgPatchesLabel": "Organização de 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 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 pode 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?",
"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?",
"autoUpdatePatchesLabel": "Atualizar automaticamente as modificações",
"autoUpdatePatchesHint": "Atualizar automaticamente as modificações para a versão mais recente",
"showUpdateDialogLabel": "Mostrar a notificação da atualização",
"autoUpdatePatchesHint": "Atualizar automaticamente as Modificações para a versão mais recente",
"showUpdateDialogLabel": "Mostrar a notificação de 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": "Guardar a aplicação modificada",
"lastPatchedAppHint": "Guardar a última aplicação modificada 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": "Salvar aplicativo corrigido",
"lastPatchedAppHint": "Salve o último patch 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 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?",
"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?",
"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 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",
"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",
"deleteLogsLabel": "Limpar os registos",
"deleteLogsHint": "Eliminar os registos recolhidos pelo ReVanced Manager",
"deletedLogs": "Registos eliminados",
"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"
"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"
},
"appInfoView": {
"widgetTitle": "Informações da aplicação",
@ -249,21 +249,21 @@
"exportButton": "Exportar",
"deleteButton": "Apagar",
"rootDialogTitle": "Erro",
"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.",
"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.",
"removeAppDialogTitle": "Apagar a aplicação?",
"removeAppDialogText": "Tens a certeza de que queres apagar esta cópia de segurança?",
"removeAppDialogText": "Tem certeza que deseja apagar este backup?",
"packageNameLabel": "Nome do pacote",
"installTypeLabel": "Tipo de instalação",
"mountTypeLabel": "Montar",
"regularTypeLabel": "Normal",
"patchedDateLabel": "Data da Modificação",
"patchedDateLabel": "Data do patch",
"appliedPatchesLabel": "Modificações aplicadas",
"sizeLabel": "Tamanho do ficheiro",
"patchedDateHint": "${date} às ${time}",
"appliedPatchesHint": "${quantity} modificações aplicadas",
"appliedPatchesHint": "${quantity} modificação/ões aplicada/s",
"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": "Problemas de Armazenamento durante a instalação",
"status_failure_storage": "Problema de armazenamento de 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 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 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 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."
"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."
}
}

View File

@ -29,7 +29,7 @@
"noSavedAppFound": "Не найдено приложений",
"noInstallations": "Пропатченные приложения не установлены",
"installUpdate": "Продолжить установку обновления?",
"updateSheetTitle": "Обновить ReVanced Manager",
"updateSheetTitle": "Обновить Revanced Менеджер",
"updateDialogTitle": "Доступно обновление",
"updatePatchesSheetTitle": "Обновить патчи ReVanced",
"updateChangelogTitle": "Список изменений",
@ -180,9 +180,6 @@
"disablePatchesSelectionWarningText": "Вы собираетесь выключить измененную выборку патчей.\nБудет восстановлен стандартный выбор патчей.\n\nВсе равно выключить?",
"autoUpdatePatchesLabel": "Автообновление патчей",
"autoUpdatePatchesHint": "Автоматически обновлять патчи до последней версии",
"usePrereleasesLabel": "Использовать предварительные версии",
"usePrereleasesHint": "Использовать предварительные версии ReVanced Manager и ReVanced Patches",
"usePrereleasesWarningText": "Использование предварительных версий может привести к непредвиденным проблемам.\n\nВключить в любом случае?",
"showUpdateDialogLabel": "Показать диалог обновления",
"showUpdateDialogHint": "Показывать диалоговое окно, когда доступно новое обновление",
"universalPatchesLabel": "Показать универсальные патчи",

View File

@ -8,7 +8,7 @@
"yesButton": "Da",
"noButton": "Ne",
"warning": "Opozorilo",
"notice": "Obvestilo",
"notice": "Notice",
"noShowAgain": "Ne prikazuj več",
"add": "Dodaj",
"remove": "Odstrani",

View File

@ -60,7 +60,7 @@
"requiredOptionDialogText": "Disa opsione të përditësimit duhet të vendosen."
},
"appSelectorCard": {
"widgetTitle": "Pumili ka ng app",
"widgetTitle": "Zgjidhni një aplikacion",
"widgetTitleSelected": "Aplikacioni i zgjedhur",
"widgetSubtitle": "Nuk është zgjedhur asnjë aplikacion",
"noAppsLabel": "Nuk u gjeten aplikacione",

View File

@ -180,9 +180,6 @@
"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",

View File

@ -180,9 +180,6 @@
"disablePatchesSelectionWarningText": "Управо ћете да онемогућите промену избора печева.\nПодразумевани избор печева ће бити враћен.\n\nИпак онемогућити?",
"autoUpdatePatchesLabel": "Аутоматски ажурирај печеве",
"autoUpdatePatchesHint": "Инсталира најновију верзију печева аутоматски",
"usePrereleasesLabel": "Користи предиздања",
"usePrereleasesHint": "Коришћење верзија предиздања ReVanced Manager-а и ReVanced печева",
"usePrereleasesWarningText": "Коришћење верзија предиздања може изазвати неочекиване проблеме.\n\nИпак омогућити?",
"showUpdateDialogLabel": "Прикажи дијалог о ажурирању",
"showUpdateDialogHint": "Приказивање дијалога када је ново ажурирање доступно",
"universalPatchesLabel": "Прикажи универзалне печеве",

View File

@ -1,5 +1,21 @@
{
"navigationView": {},
"homeView": {},
"applicationItem": {},
"latestCommitCard": {},
"patcherView": {},
"appSelectorCard": {},
"patchSelectorCard": {
"widgetSubtitle": "Chagua programu kwanza"
}
},
"socialMediaCard": {},
"appSelectorView": {},
"patchesSelectorView": {},
"patchOptionsView": {},
"patchItem": {},
"installerView": {},
"settingsView": {},
"appInfoView": {},
"contributorsView": {},
"installErrorDialog": {}
}

View File

@ -29,7 +29,7 @@
"noSavedAppFound": "செயலிகள் எதுவும் கண்டறியப்படவில்லை",
"noInstallations": "பிறழப்பட்ட செயலிகள் எதுவும் நிறுவப்படவில்லை",
"installUpdate": "புதுப்பிப்பை நிறுவுவதைத் தொடரவா?",
"updateSheetTitle": "ReVanced Manager ஐப் புதுப்பிக்கவும்",
"updateSheetTitle": "ரிவன்ஸ்ட் மேனேஜரை புதுப்பிக்கவும்",
"updateDialogTitle": "புதிய பதிவு உள்ளது",
"updatePatchesSheetTitle": "ரிவன்ஸ்ட் பிறழ்களை புதுப்பிக்கவும்",
"updateChangelogTitle": "மாற்றங்களின் பதிவு",
@ -166,5 +166,6 @@
},
"contributorsView": {
"widgetTitle": "பங்களிப்பாளர்கள்"
}
},
"installErrorDialog": {}
}

View File

@ -71,6 +71,7 @@
"patchOptionsView": {
"saveOptions": "భద్రపరచు"
},
"patchItem": {},
"installerView": {
"installButton": "స్థాపించు",
"openButton": "తెరువు",

View File

@ -180,7 +180,6 @@
"disablePatchesSelectionWarningText": "คุณกำลังจะปิดใช้งานการเปลี่ยนการเลือกการแก้ไข\nการเลือกการแก้ไขเริ่มต้นจะถูกคืนค่า\n\nปิดใช้งานอยู่ดี?",
"autoUpdatePatchesLabel": "อัปเดตการแก้ไขโดยอัตโนมัติ",
"autoUpdatePatchesHint": "อัปเดตการแก้ไขเป็นเวอร์ชันล่าสุดโดยอัตโนมัติ",
"usePrereleasesLabel": "ใช้รุ่นก่อนเผยแพร่",
"showUpdateDialogLabel": "แสดงกล่องโต้ตอบการอัปเดต",
"showUpdateDialogHint": "แสดงกล่องโต้ตอบเมื่อมีการอัปเดตใหม่",
"universalPatchesLabel": "แสดงการแก้ไขแบบสากล",

View File

@ -77,7 +77,7 @@
"widgetSubtitle": "Sosyal medyadayız!"
},
"appSelectorView": {
"viewTitle": "Bir uygulama seçin",
"viewTitle": "Bir uygulama seç",
"searchBarHint": "Uygulama ara",
"storageButton": "Depolama",
"selectFromStorageButton": "Depolama alanından seçin",
@ -180,9 +180,6 @@
"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",

View File

@ -180,9 +180,6 @@
"disablePatchesSelectionWarningText": "Ви збираєтеся вимкнути зміну вибору патчів.\nБуде відновлено стандартний вибір патчів.\n\nВсе одно вимкнути?",
"autoUpdatePatchesLabel": "Автоматичне оновлення патчів",
"autoUpdatePatchesHint": "Автоматично оновлювати патчі до останньої версії",
"usePrereleasesLabel": "Використовувати передрелізи",
"usePrereleasesHint": "Використовувати передрелізні версії ReVanced Manager та ReVanced Patches",
"usePrereleasesWarningText": "Використання передрелізних версій може спричинити несподівані проблеми.\n\nВсе одно увімкнути?",
"showUpdateDialogLabel": "Показувати вікно оновлення",
"showUpdateDialogHint": "Показувати діалогове вікно, коли доступне нове оновлення",
"universalPatchesLabel": "Показувати універсальні патчі",

View File

@ -25,7 +25,7 @@
"changeLaterSubtitle": "Keyinroq sozlamalardan o'zgartirishingiz mumkin.",
"noInstallations": "Patchlangan dasturlar o'rnatilmagan",
"installUpdate": "Yangilanish o'rnatilishi davom ettirilsinmi?",
"updateSheetTitle": "ReVanced Manager yangilash",
"updateSheetTitle": "ReVanced Managerni yangilash",
"updateDialogTitle": "Yangilanish mavjud",
"updatePatchesSheetTitle": "ReVanched Patchlarni yangilash",
"updateChangelogTitle": "O'zgarishlar",
@ -56,10 +56,15 @@
"widgetTitleSelected": "Tanlangan patchlar",
"widgetSubtitle": "Ilovani birinchi tanlang"
},
"socialMediaCard": {},
"appSelectorView": {},
"patchesSelectorView": {
"viewTitle": "Patchlarni tanlang",
"patches": "Patches"
},
"patchOptionsView": {},
"patchItem": {},
"installerView": {},
"settingsView": {
"widgetTitle": "Sozlamalar",
"exportSectionTitle": "Import & eksport",
@ -72,7 +77,9 @@
"aboutLabel": "Haqida",
"snackbarMessage": "Vaqtinchalik xotiraga nusxalandi"
},
"appInfoView": {},
"contributorsView": {
"widgetTitle": "Yordamchilar"
}
},
"installErrorDialog": {}
}

View File

@ -1,7 +1,7 @@
{
"okButton": "Đồng ý",
"cancelButton": "Hủy",
"dismissButton": "Đóng",
"dismissButton": "Từ bỏ",
"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 nội dung này",
"noShowAgain": "Không hiển thị lại điều 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": "${file} đã có bản cập nhật mới.\n\nBạn đang dùng phiên bản ${version}.",
"updateDialogText": "Có một bản cập nhật cho ${file}.\n\nPhiên bản đã cài hin tại là ${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á 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?",
"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?",
"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 khớp vi 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.",
"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.",
"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 đặ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ữ."
"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ữ."
},
"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á 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.",
"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.",
"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": "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.",
"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.",
"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 để tiếp tục.",
"installTypeDescription": "Chọn kiểu cài đặt để thực hiện với nó.",
"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": "Đã 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",
"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",
"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": "Tối",
"darkThemeLabel": "Chế độ 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 cập nhập",
"languageUpdated": "Ngôn ngữ đã cập nhập",
"sourcesLabel": "Nguồn thay thế",
"sourcesLabelHint": "Cấu hình nguồn thay thế cho ReVanced Patches",
"sourcesLabelHint": "Cấu hình nguồn thay thế cho Bản vá ReVanced",
"useAlternativeSources": "Dùng nguồn thay thế",
"useAlternativeSourcesHint": "Dùng nguồn thay thế cho ReVanced Patches thay vì dùng API",
"useAlternativeSourcesHint": "Dùng nguồn thay thế cho Bản vá ReVanced thay cho API",
"sourcesResetDialogTitle": "Đặt lại",
"sourcesResetDialogText": "Bạn có chắc chắn muốn đặt lại nguồn của mình về giá trị mặc định không?",
"apiURLResetDialogText": "Bạn có chắc bạn muốn đặt lại API URL của bạn về giá trị mặc định của nó không?",
@ -175,13 +175,11 @@
"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 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?",
"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?",
"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",
@ -292,8 +290,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": "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.",
"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.",
"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."
}

View File

@ -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}\n\n",
"requiredOptionDialogText": "部分修補檔選項必須進行設定。"
"incompatibleArchWarningDialogText": "架構尚支援修補,可能會失敗。仍要繼續",
"removedPatchesWarningDialogText": "自您上次修補此應用程式以來移除的修補程式\n\n${patches}\n\n${newPatches}仍要繼續",
"addedPatchesDialogText": "自您上次修補此應用程式以來新增的修補程式\n\n${addedPatches}",
"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": "由於未知原因,導致無法安裝。請再試一次。"

View File

@ -1,3 +0,0 @@
description: This file stores settings for Dart & Flutter DevTools.
documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
extensions:

View File

@ -33,16 +33,13 @@ class GithubAPI {
});
}
Future<Map<String, dynamic>?> getLatestRelease(String repoName) async {
final String target =
_managerAPI.usePrereleases() ? '?per_page=1' : '/latest';
Future<Map<String, dynamic>?> getLatestRelease(
String repoName,
) async {
try {
final response = await _dioGetSynchronously(
'/repos/$repoName/releases$target',
'/repos/$repoName/releases/latest',
);
if (_managerAPI.usePrereleases()) {
return response.data.first;
}
return response.data;
} on Exception catch (e) {
if (kDebugMode) {
@ -53,19 +50,17 @@ 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) {
@ -75,7 +70,7 @@ class GithubAPI {
}
break;
}
if (!_managerAPI.usePrereleases() && release['prerelease']) {
if (release['prerelease']) {
continue;
}
buffer.writeln(release['body']);
@ -101,21 +96,25 @@ 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) {

View File

@ -36,6 +36,7 @@ class ManagerAPI {
Patch? selectedPatch;
BuildContext? ctx;
bool isRooted = false;
bool releaseBuild = false;
bool suggestedAppVersionSelected = true;
bool isDynamicThemeAvailable = false;
bool isScopedStorageAvailable = false;
@ -62,9 +63,11 @@ 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();
@ -165,18 +168,6 @@ 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;
}
@ -216,36 +207,32 @@ 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);
}
@ -259,9 +246,8 @@ 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;
@ -339,7 +325,7 @@ class ManagerAPI {
}
String getLocale() {
return _prefs.getString('locale') ?? Platform.localeName;
return _prefs.getString('locale') ?? 'en';
}
Future<void> setLocale(String value) async {
@ -354,7 +340,9 @@ class ManagerAPI {
}
Future<void> deleteKeystore() async {
final File keystore = File(keystoreFile);
final File keystore = File(
keystoreFile,
);
if (await keystore.exists()) {
await keystore.delete();
}
@ -376,13 +364,17 @@ 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() {
@ -390,7 +382,9 @@ 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));
}
@ -403,8 +397,10 @@ 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!;
@ -444,13 +440,14 @@ 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) {
@ -495,9 +492,8 @@ 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;
@ -506,16 +502,22 @@ 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) {
@ -529,9 +531,8 @@ 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';
}
@ -539,9 +540,8 @@ 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,8 +598,10 @@ 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(
@ -620,55 +622,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),
),
],
),
),
);
}
@ -676,21 +678,29 @@ 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 {
@ -716,7 +726,10 @@ 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) {
@ -772,9 +785,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);
}
@ -799,11 +812,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 {

View File

@ -14,7 +14,6 @@ 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();
@ -44,15 +43,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?prerelease=${_managerAPI.usePrereleases()}',
);
final response = await _dio.get('/$toolName');
return response.data;
} on Exception catch (e) {
if (kDebugMode) {
@ -63,9 +62,13 @@ 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'];
}
@ -78,9 +81,13 @@ 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);
@ -129,13 +136,16 @@ 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) {

View File

@ -82,13 +82,10 @@ 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);
}
@ -109,10 +106,8 @@ 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),
);
}
@ -123,8 +118,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);
}
@ -140,6 +135,9 @@ class HomeViewModel extends BaseViewModel {
}
Future<bool> hasManagerUpdates() async {
if (!_managerAPI.releaseBuild) {
return false;
}
latestManagerVersion =
await _managerAPI.getLatestManagerVersion() ?? _currentManagerVersion;
@ -153,12 +151,10 @@ 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) {
@ -191,128 +187,123 @@ 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],
),
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),
),
],
),
),
);
}
void showUpdateDialog(BuildContext context, bool isPatches) {
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,
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],
),
style: TextStyle(
fontSize: 16,
fontWeight: FontWeight.w500,
color: Theme.of(context).colorScheme.secondary,
color: Theme.of(context).colorScheme.error,
),
),
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),
),
],
),
],
);
},
),
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());
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
),
FilledButton(
onPressed: () async {
_managerAPI.setShowUpdateDialog(!noShow.value);
Navigator.pop(innerContext);
await showUpdateConfirmationDialog(context, isPatches);
},
child: Text(t.showUpdateButton),
),
],
),
);
}
@ -335,95 +326,94 @@ 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,
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,
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(
child: TextButton(
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(width: 8.0),
Align(
alignment: Alignment.centerRight,
child: FilledButton(
onPressed: () async {
await _patcherAPI.installApk(
context,
downloadedApk!.path,
);
},
child: Text(t.updateButton),
),
),
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) {
@ -478,11 +468,10 @@ 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,
),
);
}

View File

@ -125,7 +125,7 @@ class InstallerViewModel extends BaseViewModel {
});
await WakelockPlus.enable();
await handlePlatformChannelMethods();
await runPatcher();
await runPatcher(context);
}
Future<dynamic> handlePlatformChannelMethods() async {
@ -164,16 +164,6 @@ 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;
@ -197,7 +187,7 @@ class InstallerViewModel extends BaseViewModel {
notifyListeners();
}
Future<void> runPatcher() async {
Future<void> runPatcher(BuildContext context) async {
try {
await _patcherAPI.runPatcher(
_app.packageName,
@ -205,6 +195,16 @@ 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(
-1.0,
.85,
'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(
-1.0,
.85,
'Installation canceled',
'Installation canceled',
);
@ -542,7 +542,7 @@ class InstallerViewModel extends BaseViewModel {
installResult(context, installAsRoot);
} else {
update(
-1.0,
.85,
'Installation failed',
'Installation failed',
);

View File

@ -40,10 +40,6 @@ class SettingsViewModel extends BaseViewModel {
notifyListeners();
}
bool usePrereleases() {
return _managerAPI.usePrereleases();
}
bool showUpdateDialog() {
return _managerAPI.showUpdateDialog();
}
@ -68,45 +64,6 @@ 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,
@ -114,65 +71,63 @@ 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,
),
),
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),
),
],
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),
),
],
),
);
} 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,
),
),
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),
),
],
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),
),
],
),
);
}
}
@ -218,32 +173,31 @@ 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,
),
),
actions: [
TextButton(
onPressed: () {
_managerAPI.enableRequireSuggestedAppVersionStatus(false);
Navigator.of(context).pop();
},
child: Text(t.yesButton),
),
FilledButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Text(t.noButton),
),
],
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),
),
],
),
);
} else {
_managerAPI.enableRequireSuggestedAppVersionStatus(true);
@ -295,7 +249,9 @@ 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);
@ -342,7 +298,9 @@ 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);
@ -435,9 +393,8 @@ 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)]);

View File

@ -5,7 +5,6 @@ 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});
@ -16,7 +15,6 @@ class SDataSection extends StatelessWidget {
title: t.settingsView.dataSectionTitle,
children: const <Widget>[
SManageApiUrlUI(),
SUsePrereleases(),
SUseAlternativeSources(),
],
);

View File

@ -1,32 +0,0 @@
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(() {});
},
);
}
}

View File

@ -1,4 +1,3 @@
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';
@ -18,12 +17,12 @@ bool isPatchSupported(Patch patch) {
bool hasUnsupportedRequiredOption(List<Option> options, Patch patch) {
final List<String> requiredOptionsType = [];
final List<String> supportedOptionsType = [
'kotlin.String',
'kotlin.Int',
'kotlin.Boolean',
'kotlin.StringArray',
'kotlin.IntArray',
'kotlin.LongArray',
'String',
'Boolean',
'Int',
'StringArray',
'IntArray',
'LongArray',
];
for (final Option option in options) {
if (option.required &&
@ -39,9 +38,6 @@ 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;
}
}

View File

@ -34,10 +34,10 @@ packages:
dependency: transitive
description:
name: args
sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
url: "https://pub.dev"
source: hosted
version: "2.7.0"
version: "2.6.0"
async:
dependency: transitive
description:
@ -74,10 +74,10 @@ packages:
dependency: transitive
description:
name: build_daemon
sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
sha256: "294a2edaf4814a378725bfe6358210196f5ea37af89ecd81bfa32960113d4948"
url: "https://pub.dev"
source: hosted
version: "4.0.4"
version: "4.0.3"
build_resolvers:
dependency: transitive
description:
@ -114,10 +114,10 @@ packages:
dependency: transitive
description:
name: built_value
sha256: "082001b5c3dc495d4a42f1d5789990505df20d8547d42507c29050af6933ee27"
sha256: "28a712df2576b63c6c005c465989a348604960c0958d28be5303ba9baa841ac2"
url: "https://pub.dev"
source: hosted
version: "8.10.1"
version: "8.9.3"
characters:
dependency: transitive
description:
@ -162,10 +162,10 @@ packages:
dependency: "direct main"
description:
name: connectivity_plus
sha256: "051849e2bd7c7b3bc5844ea0d096609ddc3a859890ec3a9ac4a65a2620cc1f99"
sha256: "04bf81bb0b77de31557b58d052b24b3eee33f09a6e7a8c68a3e247c7df19ec27"
url: "https://pub.dev"
source: hosted
version: "6.1.4"
version: "6.1.3"
connectivity_plus_platform_interface:
dependency: transitive
description:
@ -210,18 +210,18 @@ packages:
dependency: transitive
description:
name: dart_style
sha256: "7306ab8a2359a48d22310ad823521d723acfed60ee1f7e37388e8986853b6820"
sha256: "7856d364b589d1f08986e140938578ed36ed948581fbc3bc9aef1805039ac5ab"
url: "https://pub.dev"
source: hosted
version: "2.3.8"
version: "2.3.7"
dbus:
dependency: transitive
description:
name: dbus
sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c"
sha256: "365c771ac3b0e58845f39ec6deebc76e3276aa9922b0cc60840712094d9047ac"
url: "https://pub.dev"
source: hosted
version: "0.7.11"
version: "0.7.10"
device_apps:
dependency: "direct main"
description:
@ -235,10 +235,10 @@ packages:
dependency: "direct main"
description:
name: device_info_plus
sha256: "0c6396126421b590089447154c5f98a5de423b70cfb15b1578fd018843ee6f53"
sha256: "306b78788d1bb569edb7c55d622953c2414ca12445b41c9117963e03afc5c513"
url: "https://pub.dev"
source: hosted
version: "11.4.0"
version: "11.3.3"
device_info_plus_platform_interface:
dependency: transitive
description:
@ -251,10 +251,10 @@ packages:
dependency: "direct main"
description:
name: dio
sha256: "253a18bbd4851fecba42f7343a1df3a9a4c1d31a2c1b37e221086b4fa8c8dbc9"
sha256: "5598aa796bbf4699afd5c67c0f5f6e2ed542afc956884b9cd58c306966efc260"
url: "https://pub.dev"
source: hosted
version: "5.8.0+1"
version: "5.7.0"
dio_cache_interceptor:
dependency: "direct main"
description:
@ -267,10 +267,10 @@ packages:
dependency: transitive
description:
name: dio_web_adapter
sha256: "7586e476d70caecaf1686d21eee7247ea43ef5c345eab9e0cc3583ff13378d78"
sha256: "33259a9276d6cea88774a0000cfae0d861003497755969c92faa223108620dc8"
url: "https://pub.dev"
source: hosted
version: "2.1.1"
version: "2.0.0"
dynamic_color:
dependency: "direct main"
description:
@ -299,10 +299,10 @@ packages:
dependency: transitive
description:
name: fake_async
sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44"
url: "https://pub.dev"
source: hosted
version: "1.3.2"
version: "1.3.3"
ffi:
dependency: transitive
description:
@ -323,10 +323,10 @@ packages:
dependency: "direct main"
description:
name: file_picker
sha256: "77f8e81d22d2a07d0dee2c62e1dda71dc1da73bf43bb2d45af09727406167964"
sha256: "7423298f08f6fc8cce05792bae329f9a93653fc9c08712831b1a55540127995d"
url: "https://pub.dev"
source: hosted
version: "10.1.9"
version: "9.0.2"
fixnum:
dependency: transitive
description:
@ -405,18 +405,18 @@ packages:
dependency: "direct main"
description:
name: flutter_markdown
sha256: "08fb8315236099ff8e90cb87bb2b935e0a724a3af1623000a9cec930468e0f27"
sha256: e7bbc718adc9476aa14cfddc1ef048d2e21e4e8f18311aaac723266db9f9e7b5
url: "https://pub.dev"
source: hosted
version: "0.7.7+1"
version: "0.7.6+2"
flutter_plugin_android_lifecycle:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: f948e346c12f8d5480d2825e03de228d0eb8c3a737e4cdaa122267b89c022b5e
sha256: "615a505aef59b151b46bbeef55b36ce2b6ed299d160c51d84281946f0aa0ce0e"
url: "https://pub.dev"
source: hosted
version: "2.0.28"
version: "2.0.24"
flutter_test:
dependency: transitive
description: flutter
@ -463,10 +463,10 @@ packages:
dependency: transitive
description:
name: get
sha256: c79eeb4339f1f3deffd9ec912f8a923834bec55f7b49c9e882b8fef2c139d425
sha256: e4e7335ede17452b391ed3b2ede016545706c01a02292a6c97619705e7d2a85e
url: "https://pub.dev"
source: hosted
version: "4.7.2"
version: "4.6.6"
get_it:
dependency: transitive
description:
@ -479,10 +479,10 @@ packages:
dependency: transitive
description:
name: glob
sha256: c3f1ee72c96f8f78935e18aa8cecced9ab132419e8625dc187e1c2408efc20de
sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
version: "2.1.2"
google_fonts:
dependency: "direct main"
description:
@ -503,10 +503,10 @@ packages:
dependency: transitive
description:
name: http
sha256: "2c11f3f94c687ee9bad77c171151672986360b2b001d109814ee7140b2cf261b"
sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010
url: "https://pub.dev"
source: hosted
version: "1.4.0"
version: "1.2.2"
http_multi_server:
dependency: transitive
description:
@ -519,10 +519,10 @@ packages:
dependency: transitive
description:
name: http_parser
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
sha256: "76d306a1c3afb33fe82e2bbacad62a61f409b5634c915fceb0d799de1a913360"
url: "https://pub.dev"
source: hosted
version: "4.1.2"
version: "4.1.1"
injectable:
dependency: "direct main"
description:
@ -543,10 +543,10 @@ packages:
dependency: "direct main"
description:
name: intl
sha256: d6f56758b7d3014a48af9701c085700aac781a92a87a62b1333b46d8879661cf
sha256: "3df61194eb431efc39c4ceba583b95633a403f46c9fd341e550ce0bfa50e9aa5"
url: "https://pub.dev"
source: hosted
version: "0.19.0"
version: "0.20.2"
io:
dependency: transitive
description:
@ -559,10 +559,18 @@ packages:
dependency: transitive
description:
name: js
sha256: "53385261521cc4a0c4658fd0ad07a7d14591cf8fc33abbceae306ddb974888dc"
sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf
url: "https://pub.dev"
source: hosted
version: "0.7.2"
version: "0.7.1"
json2yaml:
dependency: transitive
description:
name: json2yaml
sha256: da94630fbc56079426fdd167ae58373286f603371075b69bf46d848d63ba3e51
url: "https://pub.dev"
source: hosted
version: "3.0.1"
json_annotation:
dependency: "direct main"
description:
@ -591,10 +599,10 @@ packages:
dependency: transitive
description:
name: leak_tracker
sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0"
url: "https://pub.dev"
source: hosted
version: "10.0.8"
version: "10.0.9"
leak_tracker_flutter_testing:
dependency: transitive
description:
@ -615,10 +623,10 @@ packages:
dependency: transitive
description:
name: lints
sha256: c35bb79562d980e9a453fc715854e1ed39e24e7d0297a880ef54e17f9874a9d7
sha256: "4a16b3f03741e1252fda5de3ce712666d010ba2122f8e912c94f9f7b90e1a4c3"
url: "https://pub.dev"
source: hosted
version: "5.1.1"
version: "5.1.0"
logcat:
dependency: "direct main"
description:
@ -656,10 +664,10 @@ packages:
dependency: transitive
description:
name: markdown
sha256: "935e23e1ff3bc02d390bad4d4be001208ee92cc217cb5b5a6c19bc14aaa318c1"
sha256: ef2a1298144e3f985cc736b22e0ccdaf188b5b3970648f2d9dc13efd1d9df051
url: "https://pub.dev"
source: hosted
version: "7.3.0"
version: "7.2.2"
matcher:
dependency: transitive
description:
@ -712,10 +720,10 @@ packages:
dependency: transitive
description:
name: package_config
sha256: f096c55ebb7deb7e384101542bfba8c52696c1b56fca2eb62827989ef2353bbc
sha256: "92d4488434b520a62570293fbd33bb556c7d49230791c1b4bbd973baf6d2dc67"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
version: "2.1.1"
package_info_plus:
dependency: "direct main"
description:
@ -752,10 +760,10 @@ packages:
dependency: transitive
description:
name: path_provider_android
sha256: d0d310befe2c8ab9e7f393288ccbb11b60c019c6b5afc21973eeee4dda2b35e9
sha256: "4adf4fd5423ec60a29506c76581bc05854c55e3a0b72d35bb28d661c9686edf2"
url: "https://pub.dev"
source: hosted
version: "2.2.17"
version: "2.2.15"
path_provider_foundation:
dependency: transitive
description:
@ -792,26 +800,26 @@ packages:
dependency: "direct main"
description:
name: permission_handler
sha256: "2d070d8684b68efb580a5997eb62f675e8a885ef0be6e754fb9ef489c177470f"
sha256: "59adad729136f01ea9e35a48f5d1395e25cba6cea552249ddbe9cf950f5d7849"
url: "https://pub.dev"
source: hosted
version: "12.0.0+1"
version: "11.4.0"
permission_handler_android:
dependency: transitive
description:
name: permission_handler_android
sha256: "1e3bc410ca1bf84662104b100eb126e066cb55791b7451307f9708d4007350e6"
sha256: d3971dcdd76182a0c198c096b5db2f0884b0d4196723d21a866fc4cdea057ebc
url: "https://pub.dev"
source: hosted
version: "13.0.1"
version: "12.1.0"
permission_handler_apple:
dependency: transitive
description:
name: permission_handler_apple
sha256: f000131e755c54cf4d84a5d8bd6e4149e262cc31c5a8b1d698de1ac85fa41023
sha256: f84a188e79a35c687c132a0a0556c254747a08561e99ab933f12f6ca71ef3c98
url: "https://pub.dev"
source: hosted
version: "9.4.7"
version: "9.4.6"
permission_handler_html:
dependency: transitive
description:
@ -840,10 +848,10 @@ packages:
dependency: transitive
description:
name: petitparser
sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646"
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
url: "https://pub.dev"
source: hosted
version: "6.1.0"
version: "6.0.2"
platform:
dependency: transitive
description:
@ -872,26 +880,26 @@ packages:
dependency: transitive
description:
name: provider
sha256: "4abbd070a04e9ddc287673bf5a030c7ca8b685ff70218720abab8b092f53dd84"
sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
url: "https://pub.dev"
source: hosted
version: "6.1.5"
version: "6.1.2"
pub_semver:
dependency: transitive
description:
name: pub_semver
sha256: "5bfcf68ca79ef689f8990d1160781b4bad40a3bd5e5218ad4076ddb7f4081585"
sha256: "7b3cfbf654f3edd0c6298ecd5be782ce997ddf0e00531b9464b55245185bbbbd"
url: "https://pub.dev"
source: hosted
version: "2.2.0"
version: "2.1.5"
pubspec_parse:
dependency: transitive
description:
name: pubspec_parse
sha256: "0560ba233314abbed0a48a2956f7f022cce7c3e1e73df540277da7544cad4082"
sha256: c799b721d79eb6ee6fa56f00c04b472dcd44a30d258fac2174a6ec57302678f8
url: "https://pub.dev"
source: hosted
version: "1.5.0"
version: "1.3.0"
recase:
dependency: transitive
description:
@ -946,18 +954,18 @@ packages:
dependency: "direct main"
description:
name: shared_preferences
sha256: "6e8bf70b7fef813df4e9a36f658ac46d107db4b4cfe1048b477d4e453a8159f5"
sha256: "846849e3e9b68f3ef4b60c60cf4b3e02e9321bc7f4d8c4692cf87ffa82fc8a3a"
url: "https://pub.dev"
source: hosted
version: "2.5.3"
version: "2.5.2"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
sha256: "20cbd561f743a342c76c151d6ddb93a9ce6005751e7aa458baad3858bfbfb6ac"
sha256: "02a7d8a9ef346c9af715811b01fbd8e27845ad2c41148eefd31321471b41863d"
url: "https://pub.dev"
source: hosted
version: "2.4.10"
version: "2.4.0"
shared_preferences_foundation:
dependency: transitive
description:
@ -986,10 +994,10 @@ packages:
dependency: transitive
description:
name: shared_preferences_web
sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e
url: "https://pub.dev"
source: hosted
version: "2.4.3"
version: "2.4.2"
shared_preferences_windows:
dependency: transitive
description:
@ -1010,10 +1018,10 @@ packages:
dependency: transitive
description:
name: shelf_web_socket
sha256: "3632775c8e90d6c9712f883e633716432a27758216dfb61bd86a8321c0580925"
sha256: cc36c297b52866d203dbf9332263c94becc2fe0ceaa9681d07b6ef9807023b67
url: "https://pub.dev"
source: hosted
version: "3.0.0"
version: "2.0.1"
skeletons:
dependency: "direct main"
description:
@ -1032,18 +1040,18 @@ packages:
dependency: "direct main"
description:
name: slang
sha256: "6668a08355b370d5cb5446fc869c4492ed23c6433934fe88228876460fedac22"
sha256: "354283dfe5d6b5bb72d17a52c2acba0ad08c98f8de317a00aa2c801814093982"
url: "https://pub.dev"
source: hosted
version: "4.7.2"
version: "4.5.0"
slang_flutter:
dependency: "direct main"
description:
name: slang_flutter
sha256: fff13b6fc8b0378ee23856c4f9fd7f8e2777b430090681f4d19ab14c47de9bc6
sha256: "6891526b13641dd2667ce60a9a65ef2c1611f838105396e5e8ad39edc4ecb191"
url: "https://pub.dev"
source: hosted
version: "4.7.0"
version: "4.5.0"
source_gen:
dependency: transitive
description:
@ -1080,34 +1088,34 @@ packages:
dependency: transitive
description:
name: sqflite
sha256: e2297b1da52f127bc7a3da11439985d9b536f75070f3325e62ada69a5c585d03
sha256: "2d7299468485dca85efeeadf5d38986909c5eb0cd71fd3db2c2f000e6c9454bb"
url: "https://pub.dev"
source: hosted
version: "2.4.2"
version: "2.4.1"
sqflite_android:
dependency: transitive
description:
name: sqflite_android
sha256: "2b3070c5fa881839f8b402ee4a39c1b4d561704d4ebbbcfb808a119bc2a1701b"
sha256: "78f489aab276260cdd26676d2169446c7ecd3484bbd5fead4ca14f3ed4dd9ee3"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
version: "2.4.0"
sqflite_common:
dependency: transitive
description:
name: sqflite_common
sha256: "84731e8bfd8303a3389903e01fb2141b6e59b5973cacbb0929021df08dddbe8b"
sha256: "761b9740ecbd4d3e66b8916d784e581861fd3c3553eda85e167bc49fdb68f709"
url: "https://pub.dev"
source: hosted
version: "2.5.5"
version: "2.5.4+6"
sqflite_darwin:
dependency: transitive
description:
name: sqflite_darwin
sha256: "279832e5cde3fe99e8571879498c9211f3ca6391b0d818df4e17d9fff5c6ccb3"
sha256: "96a698e2bc82bd770a4d6aab00b42396a7c63d9e33513a56945cbccb594c2474"
url: "https://pub.dev"
source: hosted
version: "2.4.2"
version: "2.4.1"
sqflite_platform_interface:
dependency: transitive
description:
@ -1217,10 +1225,10 @@ packages:
dependency: "direct main"
description:
name: timezone
sha256: dd14a3b83cfd7cb19e7888f1cbc20f258b8d71b54c06f79ac585f14093a287d1
sha256: ffc9d5f4d1193534ef051f9254063fa53d588609418c84299956c3db9383587d
url: "https://pub.dev"
source: hosted
version: "0.10.1"
version: "0.10.0"
timing:
dependency: transitive
description:
@ -1257,18 +1265,18 @@ packages:
dependency: transitive
description:
name: url_launcher_android
sha256: "8582d7f6fe14d2652b4c45c9b6c14c0b678c2af2d083a11b604caeba51930d79"
sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193"
url: "https://pub.dev"
source: hosted
version: "6.3.16"
version: "6.3.14"
url_launcher_ios:
dependency: transitive
description:
name: url_launcher_ios
sha256: "7f2022359d4c099eea7df3fdf739f7d3d3b9faf3166fb1dd390775176e0b76cb"
sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626"
url: "https://pub.dev"
source: hosted
version: "6.3.3"
version: "6.3.2"
url_launcher_linux:
dependency: transitive
description:
@ -1297,18 +1305,18 @@ packages:
dependency: transitive
description:
name: url_launcher_web
sha256: "4bd2b7b4dc4d4d0b94e5babfffbca8eac1a126c7f3d6ecbc1a11013faa3abba2"
sha256: "772638d3b34c779ede05ba3d38af34657a05ac55b06279ea6edd409e323dca8e"
url: "https://pub.dev"
source: hosted
version: "2.4.1"
version: "2.3.3"
url_launcher_windows:
dependency: transitive
description:
name: url_launcher_windows
sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
sha256: "44cf3aabcedde30f2dba119a9dea3b0f2672fbe6fa96e85536251d678216b3c4"
url: "https://pub.dev"
source: hosted
version: "3.1.4"
version: "3.1.3"
uuid:
dependency: transitive
description:
@ -1329,26 +1337,26 @@ packages:
dependency: transitive
description:
name: vm_service
sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02
url: "https://pub.dev"
source: hosted
version: "14.3.1"
version: "15.0.0"
wakelock_plus:
dependency: "direct main"
description:
name: wakelock_plus
sha256: a474e314c3e8fb5adef1f9ae2d247e57467ad557fa7483a2b895bc1b421c5678
sha256: "36c88af0b930121941345306d259ec4cc4ecca3b151c02e3a9e71aede83c615e"
url: "https://pub.dev"
source: hosted
version: "1.3.2"
version: "1.2.10"
wakelock_plus_platform_interface:
dependency: transitive
description:
name: wakelock_plus_platform_interface
sha256: e10444072e50dbc4999d7316fd303f7ea53d31c824aa5eb05d7ccbdd98985207
sha256: "70e780bc99796e1db82fe764b1e7dcb89a86f1e5b3afb1db354de50f2e41eb7a"
url: "https://pub.dev"
source: hosted
version: "1.2.3"
version: "1.2.2"
watcher:
dependency: transitive
description:
@ -1361,34 +1369,34 @@ packages:
dependency: transitive
description:
name: web
sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a"
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
url: "https://pub.dev"
source: hosted
version: "1.1.1"
version: "1.1.0"
web_socket:
dependency: transitive
description:
name: web_socket
sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c"
sha256: "3c12d96c0c9a4eec095246debcea7b86c0324f22df69893d538fcc6f1b8cce83"
url: "https://pub.dev"
source: hosted
version: "1.0.1"
version: "0.1.6"
web_socket_channel:
dependency: transitive
description:
name: web_socket_channel
sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8
sha256: "9f187088ed104edd8662ca07af4b124465893caf063ba29758f97af57e61da8f"
url: "https://pub.dev"
source: hosted
version: "3.0.3"
version: "3.0.1"
win32:
dependency: transitive
description:
name: win32
sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba"
sha256: b89e6e24d1454e149ab20fbb225af58660f0c0bf4475544650700d8e2da54aef
url: "https://pub.dev"
source: hosted
version: "5.13.0"
version: "5.11.0"
win32_registry:
dependency: transitive
description:
@ -1417,10 +1425,10 @@ packages:
dependency: transitive
description:
name: yaml
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5"
url: "https://pub.dev"
source: hosted
version: "3.1.3"
version: "3.1.2"
sdks:
dart: ">=3.7.0 <4.0.0"
flutter: ">=3.29.3"
flutter: ">=3.29.0"

View File

@ -4,11 +4,11 @@ homepage: https://revanced.app
publish_to: 'none'
version: 1.25.0-dev.1+101800061
version: 1.24.1-dev.1+101800056
environment:
sdk: '>=3.7.0'
flutter: '>=3.29.3 <=3.32.0' # Do NOT use 3.32.0, sees https://github.com/flutter/flutter/issues/169215
flutter: '>=3.29.0'
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: ^10.1.9
file_picker: ^9.0.2
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: ^12.0.0
permission_handler: ^11.4.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