Merge branch 'main' into ci/github-attest-slsa-l2

This commit is contained in:
Pun Butrach 2024-11-13 22:55:21 +07:00 committed by GitHub
commit d9f0da461d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
82 changed files with 608 additions and 575 deletions

View File

@ -55,7 +55,7 @@ jobs:
- name: Setup keystore
run: |
echo "${{ secrets.KEYSTORE }}" | base64 --decode > "keystore.jks"
echo "${{ secrets.KEYSTORE }}" | base64 --decode > "android/app/keystore.jks"
- name: Release
env:

View File

@ -7,7 +7,7 @@ plugins {
android {
namespace = "app.revanced.manager.flutter"
compileSdk = 34
compileSdk = 35
ndkVersion = "27.0.12077973"
compileOptions {
@ -24,9 +24,19 @@ android {
defaultConfig {
applicationId = "app.revanced.manager.flutter"
minSdk = 26
targetSdk = 34
targetSdk = 35
versionCode = flutter.versionCode
versionName = flutter.versionName
resValue("string", "app_name", "ReVanced Manager")
}
applicationVariants.all {
outputs.all {
this as com.android.build.gradle.internal.api.ApkVariantOutputImpl
outputFileName = "revanced-manager-$versionName.apk"
}
}
buildTypes {
@ -37,7 +47,6 @@ android {
signingConfig = signingConfigs["debug"]
ndk.abiFilters += setOf("armeabi-v7a", "arm64-v8a", "x86_64")
setProperty("archivesBaseName", "revanced-manager-v${flutter.versionName}")
}
release {
@ -52,19 +61,21 @@ android {
keyAlias = System.getenv("KEYSTORE_ENTRY_ALIAS")
keyPassword = System.getenv("KEYSTORE_ENTRY_PASSWORD")
}
resValue("string", "app_name", "ReVanced Manager")
} else {
resValue("string", "app_name", "ReVanced Manager (Debug)")
applicationIdSuffix = ".debug"
signingConfig = signingConfigs["debug"]
}
resValue("string", "app_name", "ReVanced Manager")
resValue("string", "app_name", "ReVanced Manager (Debug signed)")
}
}
debug {
resValue("string", "app_name", "ReVanced Manager (Debug)")
applicationIdSuffix = ".debug"
resValue("string", "app_name", "ReVanced Manager (Debug)")
}
}
@ -80,6 +91,7 @@ android {
}
}
flutter {
source = "../.."
}

View File

@ -3,7 +3,6 @@ package app.revanced.manager.flutter
import android.app.Activity
import android.content.Context
import android.content.Intent
import android.content.pm.PackageInfo
import android.content.pm.PackageManager
import android.os.Bundle
import android.util.Base64
@ -17,9 +16,8 @@ import java.security.MessageDigest
class ExportSettingsActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val callingPackageName = getCallingPackage()!!
if (getFingerprint(callingPackageName) == getFingerprint(getPackageName())) {
if (getFingerprint(callingPackage!!) == getFingerprint(packageName)) {
// Create JSON Object
val json = JSONObject()
@ -64,7 +62,7 @@ class ExportSettingsActivity : Activity() {
fun getFingerprint(packageName: String): String {
// Get the signature of the app that matches the package name
val packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
val signature = packageInfo.signatures[0]
val signature = packageInfo.signatures!![0]
// Get the raw certificate data
val rawCert = signature.toByteArray()

View File

@ -9,14 +9,15 @@ 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
import app.revanced.patcher.PatchBundleLoader
import app.revanced.patcher.PatchSet
import app.revanced.patcher.Patcher
import app.revanced.patcher.PatcherConfig
import app.revanced.patcher.patch.Patch
import app.revanced.patcher.patch.PatchResult
import app.revanced.patcher.patch.loadPatchesFromDex
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
@ -37,7 +38,7 @@ class MainActivity : FlutterActivity() {
private var cancel: Boolean = false
private var stopResult: MethodChannel.Result? = null
private lateinit var patches: PatchSet
private lateinit var patches: Set<Patch<*>>
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
@ -70,7 +71,6 @@ class MainActivity : FlutterActivity() {
"runPatcher" -> {
val inFilePath = call.argument<String>("inFilePath")
val outFilePath = call.argument<String>("outFilePath")
val integrationsPath = call.argument<String>("integrationsPath")
val selectedPatches = call.argument<List<String>>("selectedPatches")
val options = call.argument<Map<String, Map<String, Any>>>("options")
val tmpDirPath = call.argument<String>("tmpDirPath")
@ -80,7 +80,6 @@ class MainActivity : FlutterActivity() {
if (
inFilePath != null &&
outFilePath != null &&
integrationsPath != null &&
selectedPatches != null &&
options != null &&
tmpDirPath != null &&
@ -92,14 +91,17 @@ class MainActivity : FlutterActivity() {
result,
inFilePath,
outFilePath,
integrationsPath,
selectedPatches,
options,
tmpDirPath,
keyStoreFilePath,
keystorePassword
)
} else result.notImplemented()
} else result.error(
"INVALID_ARGUMENTS",
"Invalid arguments",
"One or more arguments are missing"
)
}
"stopPatcher" -> {
@ -113,14 +115,16 @@ class MainActivity : FlutterActivity() {
try {
val patchBundleFile = File(patchBundleFilePath)
patchBundleFile.setWritable(false)
patches = PatchBundleLoader.Dex(
patchBundleFile,
patches = loadPatchesFromDex(
setOf(patchBundleFile),
optimizedDexDirectory = codeCacheDir
)
} catch (ex: Exception) {
return@setMethodCallHandler result.notImplemented()
} catch (err: Error) {
return@setMethodCallHandler result.notImplemented()
} catch (t: Throwable) {
return@setMethodCallHandler result.error(
"PATCH_BUNDLE_ERROR",
"Failed to load patch bundle",
t.stackTraceToString()
)
}
JSONArray().apply {
@ -130,13 +134,13 @@ class MainActivity : FlutterActivity() {
put("description", it.description)
put("excluded", !it.use)
put("compatiblePackages", JSONArray().apply {
it.compatiblePackages?.forEach { compatiblePackage ->
it.compatiblePackages?.forEach { (name, versions) ->
val compatiblePackageJson = JSONObject().apply {
put("name", compatiblePackage.name)
put("name", name)
put(
"versions",
JSONArray().apply {
compatiblePackage.versions?.forEach { version ->
versions?.forEach { version ->
put(version)
}
})
@ -172,7 +176,7 @@ class MainActivity : FlutterActivity() {
}
})
} ?: put("values", null)
put("valueType", option.valueType)
put("type", option.type)
}.let(::put)
}
})
@ -211,7 +215,6 @@ class MainActivity : FlutterActivity() {
result: MethodChannel.Result,
inFilePath: String,
outFilePath: String,
integrationsPath: String,
selectedPatches: List<String>,
options: Map<String, Map<String, Any>>,
tmpDirPath: String,
@ -223,7 +226,6 @@ class MainActivity : FlutterActivity() {
inFile.setWritable(true)
inFile.setReadable(true)
val outFile = File(outFilePath)
val integrations = File(integrationsPath)
val keyStoreFile = File(keyStoreFilePath)
val tmpDir = File(tmpDirPath)
@ -281,7 +283,6 @@ class MainActivity : FlutterActivity() {
tmpDir,
Aapt.binary(applicationContext).absolutePath,
tmpDir.path,
true // TODO: Add option to disable this
)
)
@ -289,8 +290,8 @@ class MainActivity : FlutterActivity() {
updateProgress(0.02, "Loading patches...", "Loading patches")
val patches = patches.filter { patch ->
val isCompatible = patch.compatiblePackages?.any {
it.name == patcher.context.packageMetadata.packageName
val isCompatible = patch.compatiblePackages?.any { (name, _) ->
name == patcher.context.packageMetadata.packageName
} ?: false
val compatibleOrUniversal =
@ -307,10 +308,7 @@ class MainActivity : FlutterActivity() {
updateProgress(0.05, "Executing...", "")
val patcherResult = patcher.use {
patcher.apply {
acceptIntegrations(setOf(integrations))
acceptPatches(patches)
}
it += patches
runBlocking {
// Update the progress bar every time a patch is executed from 0.15 to 0.7
@ -318,7 +316,7 @@ class MainActivity : FlutterActivity() {
val progressStep = 0.55 / totalPatchesCount
var progress = 0.05
patcher.apply(false).collect(FlowCollector { patchResult: PatchResult ->
patcher().collect(FlowCollector { patchResult: PatchResult ->
if (cancel(patcher::close)) return@FlowCollector
val msg = patchResult.exception?.let {
@ -346,10 +344,11 @@ class MainActivity : FlutterActivity() {
if (cancel(patcher::close)) return@Thread
ApkUtils.sign(
ApkUtils.signApk(
inFile,
outFile,
ApkUtils.SigningOptions(
"ReVanced",
ApkUtils.KeyStoreDetails(
keyStoreFile,
keystorePassword,
"alias",

View File

@ -1,4 +1,5 @@
import com.android.build.api.dsl.CommonExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
allprojects {
repositories {
@ -17,11 +18,20 @@ allprojects {
layout.buildDirectory = File("../build")
project(":screenshot_callback") {
tasks.withType<KotlinCompile>().configureEach {
kotlinOptions {
jvmTarget = "17"
}
}
}
subprojects {
afterEvaluate {
extensions.findByName("android")?.let {
it as CommonExtension<*, *, *, *, *, *>
it.compileSdk = 34
if (it.compileSdk != null && it.compileSdk!! < 31)
it.compileSdk = 34
}
}

View File

@ -3,6 +3,5 @@ android.useAndroidX=true
org.gradle.parallel=true
org.gradle.daemon=true
org.gradle.caching=true
android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=false
android.nonFinalResIds=false

View File

@ -1,7 +1,7 @@
[versions]
revanced-patcher = "19.3.1" # TODO: Update to non-dev
revanced-library = "2.2.1"
desugar_jdk_libs = "2.1.2"
revanced-patcher = "21.0.0"
revanced-library = "3.0.2"
desugar_jdk_libs = "2.1.3"
[libraries]
revanced-patcher = { module = "app.revanced:revanced-patcher", version.ref = "revanced-patcher" }

View File

@ -17,7 +17,7 @@ pluginManagement {
plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.7.0" apply false
id("com.android.application") version "8.7.2" apply false
id("org.jetbrains.kotlin.android") version "2.0.20" apply false
}

View File

@ -158,20 +158,18 @@
"languageLabel": "Language",
"languageUpdated": "Language updated",
"sourcesLabel": "Alternative sources",
"sourcesLabelHint": "Configure the alternative sources for ReVanced Patches and ReVanced Integrations",
"sourcesIntegrationsLabel": "Integrations source",
"sourcesLabelHint": "Configure the alternative sources for ReVanced Patches",
"useAlternativeSources": "Use alternative sources",
"useAlternativeSourcesHint": "Use alternative sources for ReVanced Patches and ReVanced Integrations instead of the API",
"useAlternativeSourcesHint": "Use alternative sources for ReVanced Patches instead of the API",
"sourcesResetDialogTitle": "Reset",
"sourcesResetDialogText": "Are you sure you want to reset your sources to their default values?",
"apiURLResetDialogText": "Are you sure you want to reset your API URL to its default value?",
"sourcesUpdateNote": "Note: This will automatically download ReVanced Patches and ReVanced Integrations from the alternative sources.\n\nThis will connect you to the alternative source.",
"sourcesUpdateNote": "Note: This will automatically download ReVanced Patches from the alternative sources.\n\nThis will connect you to the alternative source.",
"apiURLLabel": "API URL",
"apiURLHint": "Configure the API URL of ReVanced Manager",
"selectApiURL": "API URL",
"orgPatchesLabel": "Patches organization",
"sourcesPatchesLabel": "Patches source",
"orgIntegrationsLabel": "Integrations organization",
"contributorsLabel": "Contributors",
"contributorsHint": "A list of contributors of ReVanced",
"logsLabel": "Share logs",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Delete temporary files",
"deleteTempDirHint": "Delete unused temporary files",
"deletedTempDir": "Temporary files deleted",
"exportSettingsLabel": "Export settings",
"exportSettingsHint": "Export settings to a JSON file",
"exportedSettings": "Settings exported",
"importSettingsLabel": "Import settings",
"importSettingsHint": "Import settings from a JSON file",
"importedSettings": "Settings imported",
"exportPatchesLabel": "Export patch selection",
"exportPatchesHint": "Export patch selection to a JSON file",
"exportedPatches": "Patch selection exported",

View File

@ -158,20 +158,18 @@
"languageLabel": "اللغة",
"languageUpdated": "تم تحديث اللغة",
"sourcesLabel": "مصادر بديلة",
"sourcesLabelHint": "قم بتكوين المصادر البديلة لتعديلات ReVanced وتكاملات ReVanced",
"sourcesIntegrationsLabel": "مصدر الـدمج",
"sourcesLabelHint": "تكوين المصادر البديلة لتعديلات ReVanced",
"useAlternativeSources": "استخدام مصادر بديلة",
"useAlternativeSourcesHint": "استخدم مصادر بديلة لتعديلات ReVanced وعمليات التكامل ReVanced بدلاً من API",
"useAlternativeSourcesHint": "استخدام مصادر بديلة لتعديلات ReVanced بدلاً من واجهة برمجة التطبيقات",
"sourcesResetDialogTitle": "إعادة التعيين",
"sourcesResetDialogText": "هل أنت متأكد من أنك تريد إعادة تعيين المصادر الخاصة بك إلى قيمها الافتراضية؟",
"apiURLResetDialogText": "هل أنت متأكد من أنك تريد إعادة تعيين رابط API الخاص بك إلى قيمته الافتراضية؟",
"sourcesUpdateNote": "ملاحظة: سيؤدي هذا إلى تنزيل تعديلات ReVanced وتكاملات ReVanced تلقائيًا من المصادر البديلة.\n\nسيؤدي هذا إلى توصيلك بالمصدر البديل.",
"sourcesUpdateNote": "ملاحظة: سيؤدي هذا إلى تنزيل تعديلات ReVanced تلقائيًا من المصادر البديلة.\n\nسيؤدي هذا إلى توصيلك بالمصدر البديل.",
"apiURLLabel": "رابط API",
"apiURLHint": "تكوين عنوان URL لواجهة برمجة التطبيقات الخاصة بـ ReVanced Manager",
"selectApiURL": "رابط API",
"orgPatchesLabel": "تنظيم التعديلات",
"sourcesPatchesLabel": "مصدر التعديلات",
"orgIntegrationsLabel": "تنظيم الدمج",
"contributorsLabel": "المساهمون",
"contributorsHint": "قائمة المساهمين في ReVanced",
"logsLabel": "مشاركة السجلات",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "حذف الملفات المؤقتة",
"deleteTempDirHint": "حذف الملفات المؤقتة غير المستخدمة",
"deletedTempDir": "تم حذف الملفات المؤقتة",
"exportSettingsLabel": "تصدير الإعدادات",
"exportSettingsHint": "تصدير الإعدادات إلى ملف JSON",
"exportedSettings": "تم تصدير الإعدادات",
"importSettingsLabel": "استيراد الإعدادات",
"importSettingsHint": "استيراد الإعدادات من ملف JSON",
"importedSettings": "تم استيراد الإعدادات",
"exportPatchesLabel": "تصدير التعديل المحدد",
"exportPatchesHint": "تصدير التعديل المحدد إلى مِلَفّ JSON",
"exportedPatches": "تم تصدير التعديل المحدد",

View File

@ -158,20 +158,18 @@
"languageLabel": "Dil",
"languageUpdated": "Dil yeniləndi",
"sourcesLabel": "Seçmə mənbələr",
"sourcesLabelHint": "ReVanced Yamaqları və ReVanced İnteqrasiyaları üçün seçmə mənbələri konfiqurasiya edin",
"sourcesIntegrationsLabel": "İnteqrasiya mənbəyi",
"sourcesLabelHint": "ReVanced Patches üçün alternativ mənbələri konfiqurasiya et",
"useAlternativeSources": "Seçmə mənbələri istifadə et",
"useAlternativeSourcesHint": "ReVanced Yamaqları və ReVanced İnteqrasiyaları üçün API əvəzinə seçmə mənbələri 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ı və ReVanced İnteqrasiyalarını seçmə mənbələrdən avtomatik olaraq yükləyəcək.\n\nBu, sizi seçmə mənbəyə yönləndirəcək.",
"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": "\"ReVacned Manager\"in API URL-sini konfiqurasiya et",
"selectApiURL": "API URL",
"orgPatchesLabel": "Yamaq qurumu",
"sourcesPatchesLabel": "Yamaqların mənbəyi",
"orgIntegrationsLabel": "İnteqrasiya qurumu",
"contributorsLabel": "Töhfə verənlər",
"contributorsHint": "ReVanced-ə töhfə verənlərin siyahısı",
"logsLabel": "Jurnalları paylaş",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Müvəqqəti faylları sil",
"deleteTempDirHint": "İstifadəsiz, müvəqqəti faylları sil",
"deletedTempDir": "Müvəqqəti fayllar silindi",
"exportSettingsLabel": "Tənzimləmələri köçür",
"exportSettingsHint": "Tənzimləmələri JSON faylına köçür",
"exportedSettings": "Tənzimləmələr ixrac edildi",
"importSettingsLabel": "Tənzimləmələri idxal et",
"importSettingsHint": "Tənzimləmələri JSON faylından idxal et",
"importedSettings": "Tənzimləmələr idxal edildi",
"exportPatchesLabel": "Yamaq seçimini ixrac et",
"exportPatchesHint": "Yamaq seçimini JSON faylına köçür",
"exportedPatches": "Yamaq seçimi ixrac edildi",

View File

@ -156,20 +156,15 @@
"languageLabel": "Мова",
"languageUpdated": "Мова абноўлена",
"sourcesLabel": "Альтэрнатыўныя крыніцы",
"sourcesLabelHint": "Сканфігурыраваць альтэрнатыўныя крыніцы для ReVanced Patches і ReVanced Integrations",
"sourcesIntegrationsLabel": "Крыніца інтэграцый",
"useAlternativeSources": "Выкарыстоўваць альтэрнатыўныя крыніцы",
"useAlternativeSourcesHint": "Выкарыстоўваць альтэрнатыўныя крыніцы для ReVanced Patches і ReVanced Integrations замест API",
"sourcesResetDialogTitle": "Скінуць",
"sourcesResetDialogText": "Вы сапраўды хочаце скінуць свае крыніцы да іх прадвызначаных значэнняў?",
"apiURLResetDialogText": "Вы сапраўды хочаце скінуць свае API URL да іх прадвызначаных значэнняў?",
"sourcesUpdateNote": "Нататка: Гэта аўтаматычна спампуе ReVanced Patches і ReVanced Integrations з альтэрнатыўных крыніц.\n\nГэта падключыць вас да альтэрнатыўнай крыніцы.",
"apiURLLabel": "API URL",
"apiURLHint": "Сканфігурыруйце URL API для ReVanced Manager",
"selectApiURL": "URL-адрас API",
"orgPatchesLabel": "Арганізацыя выпраўленняў",
"sourcesPatchesLabel": "Крыніца выпраўленняў",
"orgIntegrationsLabel": "Арганізацыя інтэграцый",
"contributorsLabel": "Удзельнікі",
"contributorsHint": "Спіс усіх удзельнікаў праекта ReVanced",
"logsLabel": "Абагуліць журнал",

View File

@ -158,20 +158,18 @@
"languageLabel": "Език",
"languageUpdated": "Езикът е обновен",
"sourcesLabel": "Алтернативни източници",
"sourcesLabelHint": "Конфигурирайте алтернативните източници за ReVanced Patches и ReVanced Integrations",
"sourcesIntegrationsLabel": "Източник на интеграциите",
"sourcesLabelHint": "Конфигурирайте алтернативните източници за ReVanced Patches",
"useAlternativeSources": "Използвайте алтернативни източници",
"useAlternativeSourcesHint": "Използвайте алтернативни източници за ReVanced Patches и ReVanced Integrations вместо тези от ППИ-я (API)",
"useAlternativeSourcesHint": "Използвайте алтернативни източници за ReVanced Patches вместо API",
"sourcesResetDialogTitle": "Нулиране",
"sourcesResetDialogText": "Искате ли да възстановите източниците до стойностите им по подразбиране?",
"apiURLResetDialogText": "Сигурни ли сте, че искате да възстановите адреса на ППИ (API) до стойността му по подразбиране?",
"sourcesUpdateNote": "Забележка: Това автоматично ще изтегли ReVanced Patches и ReVanced Integrations от алтернативните източници.\n\nТова ще ви свърже с алтернативния източник.",
"sourcesUpdateNote": "Забележка: Това автоматично ще изтегли ReVanced Patches от алтернативните източници.\n\nТова ще ви свърже с алтернативния източник.",
"apiURLLabel": "API линк",
"apiURLHint": "Конфигуриране на URL адреса на ППИ (API) на ReVanced Manager",
"selectApiURL": "API линк",
"orgPatchesLabel": "Организация на модификациите",
"sourcesPatchesLabel": "Източник на модификациите",
"orgIntegrationsLabel": "Организация на интеграциите",
"contributorsLabel": "Хора, които допринесоха",
"contributorsHint": "Списък с хората, допринесли за ReVanced",
"logsLabel": "Сподели дневника",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Изтриване на временни файлове",
"deleteTempDirHint": "Изтриване на неизползвани временни файлове",
"deletedTempDir": "Временните файлове са изтрити",
"exportSettingsLabel": "Експорт на настройките",
"exportSettingsHint": "Експорт на настройки в JSON файл",
"exportedSettings": "Настройките са съхранени",
"importSettingsLabel": "Внасяне на настройки",
"importSettingsHint": "Внасяне на настройки в JSON файл",
"importedSettings": "Настройките са импортирани",
"exportPatchesLabel": "Експортиране на избраните актуализации",
"exportPatchesHint": "Експортиране на избраните модификации в JSON файл",
"exportedPatches": "Избраните модификации са експортирани",

View File

@ -156,20 +156,15 @@
"languageLabel": "ভাষা",
"languageUpdated": "ভাষা হালনাগাদ করা হয়েছে",
"sourcesLabel": "বিকল্প উৎস",
"sourcesLabelHint": "ReVanced প্যাচ ও ReVanced ইন্ট্রিগ্রেশনের জন্য বিকল্প উৎস কনফিগার করুন",
"sourcesIntegrationsLabel": "ইন্ট্রিগেশনের উৎস",
"useAlternativeSources": "বিকল্প উৎস ব্যবহার করুন",
"useAlternativeSourcesHint": "ReVanced প্যাচ ও ReVanced ইন্ট্রিগ্রেশনের জন্য API এর পরিবর্তে বিকল্প উৎস ব্যবহার করুন",
"sourcesResetDialogTitle": "পুনরায় সেট করুন",
"sourcesResetDialogText": "আপনি কি নিশ্চিতভাবে আপনার উৎসগুলোকে পূর্বনির্ধারিত উৎসে ফিরিয়ে নিতে চান?",
"apiURLResetDialogText": "আপনি কি নিশ্চিতভাবে আপনার API URL কে তার মূল ভ্যালুতে পুনরায় সেট করতে চান?",
"sourcesUpdateNote": "বি:দ্র: এটি স্বয়ংক্রিয়ভাবে বিকল্প উৎস থেকে ReVanced প্যাচ ও ReVanced ইন্ট্রিগ্রেশন ডাউনলোড করবে।\n\nএটি আপনাকে বিকল্প উৎসের সাথে সংযুক্ত করবে।",
"apiURLLabel": "API URL",
"apiURLHint": "ReVanced Manager এর API URL কনফিগার করুন",
"selectApiURL": "API URL",
"orgPatchesLabel": "প্যাচ এর উদ্ভাবক",
"sourcesPatchesLabel": "প্যাচ এর উৎস",
"orgIntegrationsLabel": "ইন্ট্রিগেশনের উদ্ভাবক",
"contributorsLabel": "অবদানকারীগণ",
"contributorsHint": "ReVanced-এ অবদানকারীদের তালিকা",
"logsLabel": "লগ শেয়ার করুন",

View File

@ -78,13 +78,11 @@
"exportSectionTitle": "Importar i exportar",
"dynamicThemeHint": "Gaudeixi d'una experiència més acord al seu dispositiu",
"languageLabel": "Llengua",
"sourcesIntegrationsLabel": "Font de les integracions",
"sourcesResetDialogTitle": "Restablir",
"apiURLLabel": "Direcció URL de la API",
"selectApiURL": "URL de l'API",
"orgPatchesLabel": "Organització dels pedaços",
"sourcesPatchesLabel": "Font dels pedaços",
"orgIntegrationsLabel": "Organització de les integracions",
"contributorsLabel": "Col·laboradors",
"contributorsHint": "Una llista de col·laboradors de ReVanced",
"aboutLabel": "Quant a",

View File

@ -158,20 +158,18 @@
"languageLabel": "Jazyk",
"languageUpdated": "Jazyk aktualizován",
"sourcesLabel": "Alternativní zdroje",
"sourcesLabelHint": "Konfigurace alternativních zdrojů pro vylepšené úpravy a zdokonalené integrace",
"sourcesIntegrationsLabel": "Zdroj integrace",
"sourcesLabelHint": "Konfigurace alternativních zdrojů pro vylepšené úpravy",
"useAlternativeSources": "Použít alternativní zdroje",
"useAlternativeSourcesHint": "Použít alternativní zdroje pro vylepšené úpravy a vylepšené integrace namísto API",
"useAlternativeSourcesHint": "Použít alternativní zdroje pro vylepšené úpravy namísto API",
"sourcesResetDialogTitle": "Obnovit",
"sourcesResetDialogText": "Jste si jisti, že chcete obnovit zdroje na jejich výchozí hodnoty?",
"apiURLResetDialogText": "Jste si jisti, že chcete resetovat URL API na výchozí hodnotu?",
"sourcesUpdateNote": "Poznámka: Toto automaticky stáhne reVanced Patches and ReVanced Integrations z alternativních zdrojů.\n\nToto vás připojí k alternativnímu zdroji.",
"sourcesUpdateNote": "Poznámka: Toto automaticky stáhne reVanced Patches z alternativních zdrojů.\n\nToto vás připojí k alternativnímu zdroji.",
"apiURLLabel": "API URL",
"apiURLHint": "Konfigurace URL API ReVanced Manager",
"selectApiURL": "API URL",
"orgPatchesLabel": "Organizace patchů",
"sourcesPatchesLabel": "Zdroj patchů",
"orgIntegrationsLabel": "Autor integrace",
"contributorsLabel": "Přispěvatelé",
"contributorsHint": "Seznam přispěvatelů ReVanced",
"logsLabel": "Sdílet záznamy",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Odstranit dočasné soubory",
"deleteTempDirHint": "Odstranit nepoužívané dočasné soubory",
"deletedTempDir": "Dočasné soubory byly smazány",
"exportSettingsLabel": "Exportovat nastavení",
"exportSettingsHint": "Exportovat nastavení do souboru JSON",
"exportedSettings": "Nastavení exportováno",
"importSettingsLabel": "Importovat nastavení",
"importSettingsHint": "Importovat nastavení ze souboru JSON",
"importedSettings": "Nastavení importováno",
"exportPatchesLabel": "Exportovat záplatu",
"exportPatchesHint": "Exportovat výběr patch do souboru JSON",
"exportedPatches": "Výběr patch exportován",

View File

@ -158,20 +158,18 @@
"languageLabel": "Sprog",
"languageUpdated": "Sprog opdateret",
"sourcesLabel": "Alternative kilder",
"sourcesLabelHint": "Konfigurer de alternative kilder til ReVanced Patches og ReVanced Integrations",
"sourcesIntegrationsLabel": "Kilde til Integrationer",
"sourcesLabelHint": "Indstil alternative kilder for ReVanced Patches",
"useAlternativeSources": "Brug alternative kilder",
"useAlternativeSourcesHint": "Brug alternative kilder til ReVanced Patches og ReVanced Integrations i stedet for API'en",
"useAlternativeSourcesHint": "Brug alternative kilder til ReVanced Patches i stedet for API",
"sourcesResetDialogTitle": "Nulstil",
"sourcesResetDialogText": "Er du sikker på, at du vil nulstille dine kilder til deres standardværdier?",
"apiURLResetDialogText": "Er du sikker på, at du vil nulstille API URL til dens standardværdi?",
"sourcesUpdateNote": "Bemærk: Dette vil automatisk downloade ReVanced Patches og ReVanced Integrations fra de alternative kilder.\n\nDette vil forbinde dig til den alternative kilde.",
"sourcesUpdateNote": "Bemærk: Dette vil automatisk hente ReVanced Patches fra de alternative kilder.\n\nDette vil forbinde dig til den alternative kilde.",
"apiURLLabel": "API URL",
"apiURLHint": "Konfigurer API-URL'en til ReVanced Manager",
"selectApiURL": "API URL",
"orgPatchesLabel": "Organisation for Patches",
"sourcesPatchesLabel": "Kilde til Patches",
"orgIntegrationsLabel": "Organisation for Integrationer",
"contributorsLabel": "Medvirkende",
"contributorsHint": "En liste over medvirkende til ReVanced",
"logsLabel": "Del logs",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Slet midlertidige filer",
"deleteTempDirHint": "Slet ubrugte midlertidige filer",
"deletedTempDir": "Midlertidige filer slettet",
"exportSettingsLabel": "Eksporter indstillinger",
"exportSettingsHint": "Eksporter indstillinger til en JSON-fil",
"exportedSettings": "Indstillinger eksporteret",
"importSettingsLabel": "Importer indstillinger",
"importSettingsHint": "Importer indstillinger fra en JSON-fil",
"importedSettings": "Indstillinger importeret",
"exportPatchesLabel": "Eksportér patch valg",
"exportPatchesHint": "Eksportér patch valg til en JSON- fil",
"exportedPatches": "Patch valg eksporteret",

View File

@ -158,20 +158,18 @@
"languageLabel": "Sprache",
"languageUpdated": "Sprache aktualisiert",
"sourcesLabel": "Alternative Quellen",
"sourcesLabelHint": "Konfiguriere die alternativen Quellen für ReVanced Patches und ReVanced Integrations",
"sourcesIntegrationsLabel": "Quelle für Integrationen",
"sourcesLabelHint": "Konfigurieren Sie die alternativen Quellen für überarbeitete Patches",
"useAlternativeSources": "Benutze alternative Quellen",
"useAlternativeSourcesHint": "Verwenden alternative Quellen für ReVanced Patches und ReVanced Integrationen anstelle der API",
"useAlternativeSourcesHint": "Verwende alternative Quellen für überarbeitete Patches anstelle der API",
"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: Dadurch werden ReVanced Patches und ReVanced Integrationen automatisch von der alternativen Quelle heruntergeladen.\n\nDies wird dich mit der alternativen Quelle verbinden.",
"sourcesUpdateNote": "Hinweis: Dies wird automatisch ReVanced Patches von den alternativen Quellen herunterladen.\n\nDies verbindet Sie mit der alternativen Quelle.",
"apiURLLabel": "API-URL",
"apiURLHint": "Konfigurieren die API URL von ReVanced Manager",
"selectApiURL": "API-URL",
"orgPatchesLabel": "Patches Organisation",
"sourcesPatchesLabel": "Patches Quelle",
"orgIntegrationsLabel": "Integrationen Organisation",
"contributorsLabel": "Mitwirkende",
"contributorsHint": "Eine Liste der Mitwirkenden von ReVanced",
"logsLabel": "Logs teilen",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Lösche temporäre Dateien",
"deleteTempDirHint": "Unbenutzte temporäre Dateien löschen",
"deletedTempDir": "Temporäre Dateien wurden gelöscht",
"exportSettingsLabel": "Export-Einstellungen",
"exportSettingsHint": "Einstellungen in eine JSON-Datei exportieren",
"exportedSettings": "Einstellungen exportiert",
"importSettingsLabel": "Import-Einstellungen",
"importSettingsHint": "Einstellungen aus einer JSON-Datei importieren",
"importedSettings": "Einstellungen importiert",
"exportPatchesLabel": "Patchauswahl exportieren",
"exportPatchesHint": "Patch-Auswahl in eine JSON-Datei exportieren",
"exportedPatches": "Patch-Auswahl exportiert",

View File

@ -158,20 +158,18 @@
"languageLabel": "Γλώσσα",
"languageUpdated": "Η γλώσσα ενημερώθηκε",
"sourcesLabel": "Εναλλακτικές πηγές",
"sourcesLabelHint": "Ρυθμίστε τις εναλλακτικές πηγές για τις τροποποιήσεις ReVanced και τις ενσωματώσεις ReVanced",
"sourcesIntegrationsLabel": "Πηγή ενσωματώσεων",
"sourcesLabelHint": "Ρυθμίστε τις εναλλακτικές πηγές για τις τροποποιήσεις ReVanced",
"useAlternativeSources": "Χρήση εναλλακτικών πηγών",
"useAlternativeSourcesHint": "Χρήση εναλλακτικών πηγών για τις τροποποιήσεις και τις ενσωματώσεις ReVanced αντί του API",
"useAlternativeSourcesHint": "Χρήση εναλλακτικών πηγών για τις τροποποιήσεις ReVanced αντί του API",
"sourcesResetDialogTitle": "Επαναφορά",
"sourcesResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε τις πηγές σας στις προεπιλεγμένες τιμές τους;",
"apiURLResetDialogText": "Είστε βέβαιοι ότι θέλετε να επαναφέρετε την API URL σας στην προεπιλεγμένη τιμή της;",
"sourcesUpdateNote": "Σημείωση: Θα γίνεται αυτόματη λήψη των τροποποιήσεων και των ενσωματώσεων ReVanced από τις εναλλακτικές πηγές.\n\nΟπότε θα συνδέεστε με τις εναλλακτικές πηγές.",
"sourcesUpdateNote": "Σημείωση: Θα γίνεται αυτόματη λήψη των τροποποιήσεων ReVanced από τις εναλλακτικές πηγές.\n\nΟπότε θα συνδέεστε με τις εναλλακτικές πηγές.",
"apiURLLabel": "API URL",
"apiURLHint": "Ρύθμιση διεύθυνσης URL του API του ReVanced Manager",
"selectApiURL": "API URL",
"orgPatchesLabel": "Οργάνωση τροποποιήσεων",
"sourcesPatchesLabel": "Πηγή τροποποιήσεων",
"orgIntegrationsLabel": "Οργάνωση ενσωματώσεων",
"contributorsLabel": "Συνεισφέροντες",
"contributorsHint": "Λίστα με όσους έχουν συμβάλει στο ReVanced",
"logsLabel": "Κοινοποίηση αρχείων καταγραφής",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Διαγραφή προσωρινών αρχείων",
"deleteTempDirHint": "Διαγραφή των αχρησιμοποίητων προσωρινών αρχείων",
"deletedTempDir": "Τα προσωρινά αρχεία διαγράφηκαν",
"exportSettingsLabel": "Εξαγωγή ρυθμίσεων",
"exportSettingsHint": "Εξαγωγή ρυθμίσεων σε αρχείο JSON",
"exportedSettings": "Οι ρυθμίσεις εξήχθησαν",
"importSettingsLabel": "Εισαγωγή ρυθμίσεων",
"importSettingsHint": "Εισαγωγή ρυθμίσεων από ένα αρχείο JSON",
"importedSettings": "Οι ρυθμίσεις εισήχθησαν",
"exportPatchesLabel": "Εξαγωγή των επιλεγμένων τροποποιήσεων",
"exportPatchesHint": "Εξαγωγή των επιλεγμένων τροποποιήσεων σε ένα αρχείο JSON",
"exportedPatches": "Η εξαγωγή των επιλεγμένων τροποποιήσεων ολοκληρώθηκε",

View File

@ -155,7 +155,6 @@
"languageUpdated": "Idioma actualizado",
"sourcesLabel": "Fuentes alternativas",
"sourcesLabelHint": "Configurá las fuentes alternativas para ReVanced Patches y ReVanced Integrations",
"sourcesIntegrationsLabel": "Fuente de las integraciones",
"useAlternativeSources": "Usar fuentes alternativas",
"useAlternativeSourcesHint": "Usá fuentes alternativas para ReVanced Patches y ReVanced Integrations en lugar de la API",
"sourcesResetDialogTitle": "Resetear",
@ -167,7 +166,6 @@
"selectApiURL": "URL de la API",
"orgPatchesLabel": "Organización de los parches",
"sourcesPatchesLabel": "Fuente de los parches",
"orgIntegrationsLabel": "Organización de las integraciones",
"contributorsLabel": "Contribuidores",
"contributorsHint": "Una lista de los contribuidores de ReVanced",
"logsLabel": "Compartir registros",

View File

@ -158,20 +158,18 @@
"languageLabel": "Idioma",
"languageUpdated": "Idioma actualizado",
"sourcesLabel": "Fuentes alternativas",
"sourcesLabelHint": "Configurar las fuentes alternativas para Parches de ReVanced e Integraciones ReVanced",
"sourcesIntegrationsLabel": "Fuente de las integraciones",
"sourcesLabelHint": "Configurar las fuentes alternativas para los parches reVanced",
"useAlternativeSources": "Usar fuentes alternativas",
"useAlternativeSourcesHint": "Usar fuentes alternativas para Parches de ReVanced e Integraciones ReVanced en lugar de la API",
"useAlternativeSourcesHint": "Usar fuentes alternativas para Parches ReVanced en lugar de la API",
"sourcesResetDialogTitle": "Restablecer",
"sourcesResetDialogText": "¿Estás seguro de que quieres restablecer tus fuentes a sus valores predeterminados?",
"apiURLResetDialogText": "¿Estás seguro de que quieres restablecer la URL de tu API a su valor predeterminado?",
"sourcesUpdateNote": "Nota: Esto automáticamente descargará Parches ReVanced e Integraciones ReVanced desde las fuentes alternativas.\n\nEsto lo conectará a la fuente alternativa.",
"sourcesUpdateNote": "Nota: Esto descargará automáticamente los Parches ReVanced desde las fuentes alternativas.\n\nEsto te conectará a la fuente alternativa.",
"apiURLLabel": "URL de la API",
"apiURLHint": "Configurar la URL de API del ReVanced Manager",
"selectApiURL": "URL de la API",
"orgPatchesLabel": "Organización de los parches",
"sourcesPatchesLabel": "Fuente de los parches",
"orgIntegrationsLabel": "Organización de integraciones",
"contributorsLabel": "Contribuidores",
"contributorsHint": "Una lista de contribuidores de ReVanced",
"logsLabel": "Compartir registros",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Borrar archivos temporales",
"deleteTempDirHint": "Eliminar archivos temporales no utilizados",
"deletedTempDir": "Archivos temporales eliminados",
"exportSettingsLabel": "Exportar ajustes",
"exportSettingsHint": "Exportar ajustes a un archivo JSON",
"exportedSettings": "Ajustes exportados",
"importSettingsLabel": "Importar ajustes",
"importSettingsHint": "Importar ajustes desde un archivo JSON",
"importedSettings": "Ajustes importados",
"exportPatchesLabel": "Exportar la selección de parches",
"exportPatchesHint": "Exportar la selección de parches a un archivo JSON",
"exportedPatches": "Selección de parches exportada",

View File

@ -155,7 +155,6 @@
"languageUpdated": "Idioma actualizado",
"sourcesLabel": "Fuentes alternativas",
"sourcesLabelHint": "Configura las fuentes alternativas para ReVanced Patches y ReVanced Integrations",
"sourcesIntegrationsLabel": "Fuente de integraciones",
"useAlternativeSources": "Usar fuentes alternativas",
"useAlternativeSourcesHint": "Usa fuentes alternativas para ReVanced Patches y ReVanced Integrations en lugar de la API",
"sourcesResetDialogTitle": "Reiniciar",
@ -167,7 +166,6 @@
"selectApiURL": "URL de la API",
"orgPatchesLabel": "Organización de parches",
"sourcesPatchesLabel": "Fuente de los parches",
"orgIntegrationsLabel": "Organización de integraciones",
"contributorsLabel": "Contribuidores",
"contributorsHint": "Lista de contribuidores de ReVanced",
"logsLabel": "Compartir registros",

View File

@ -113,13 +113,11 @@
"exportSectionTitle": "Import & eksport",
"dynamicThemeHint": "Nautige kogemust oma seadmele lähemal",
"languageLabel": "Keel",
"sourcesIntegrationsLabel": "Integratsioonide allikas",
"sourcesResetDialogTitle": "Lähtesta",
"apiURLLabel": "API URL",
"selectApiURL": "API URL",
"orgPatchesLabel": "Plaastrite organisatsioon",
"sourcesPatchesLabel": "Plaastrite allikas",
"orgIntegrationsLabel": "Integratsiooni organisatsioon",
"contributorsLabel": "Panustajad",
"contributorsHint": "Revancedi kaasautorite nimekiri",
"aboutLabel": "Teave",

View File

@ -98,13 +98,11 @@
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "یک تجربه نزدیکتر به دستگاهتان را داشته باشید",
"languageLabel": "زبان",
"sourcesIntegrationsLabel": "منبع یکپارچه سازی",
"sourcesResetDialogTitle": "تنظیم مجدد",
"apiURLLabel": "آدرس API",
"selectApiURL": "آدرس API",
"orgPatchesLabel": "سازمان پچ‌ها(وصله ها)",
"sourcesPatchesLabel": "منبع پچ ها",
"orgIntegrationsLabel": "سازمان یکپارچه سازی",
"contributorsLabel": "مشارکت کنندگان",
"contributorsHint": "لیست مشارکت‌کنندگان ریونسد",
"aboutLabel": "درباره ما",

View File

@ -157,20 +157,18 @@
"languageLabel": "Kieli",
"languageUpdated": "Kieli on vaihdettu",
"sourcesLabel": "Vaihtoehtoiset lähteet",
"sourcesLabelHint": "Määritä käytöstä poistettujen kohteiden ja käytöstä poistettujen integraatioiden vaihtoehtoiset lähteet",
"sourcesIntegrationsLabel": "Integraatioiden lähde",
"sourcesLabelHint": "Määritä käytöstä poistettujen paikkojen vaihtoehtoiset lähteet",
"useAlternativeSources": "Käytä vaihtoehtoisia lähteitä",
"useAlternativeSourcesHint": "Käytä vaihtoehtoisia lähteitä ReVanced Patches ja ReVanced Integrations sijasta API",
"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": "Huomautus: Tämä lataa automaattisesti ReVanced Patches ja ReVanced Integrations vaihtoehtoisista lähteistä.\n\nTämä yhdistää sinut vaihtoehtoiseen lähdekoodiin.",
"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",
"orgPatchesLabel": "Paikkauksien organisaatio",
"sourcesPatchesLabel": "Paikkauksien lähde",
"orgIntegrationsLabel": "Integraatioiden organisaatio",
"contributorsLabel": "Osallistujat",
"contributorsHint": "Listaus ReVancedin kehitykseen osallistuneista",
"logsLabel": "Jaa lokit",
@ -198,6 +196,12 @@
"deleteTempDirLabel": "Poista väliaikaistiedostot",
"deleteTempDirHint": "Poista käyttämättömät väliaikaistiedostot",
"deletedTempDir": "Väliaikaistiedostot poistettiin",
"exportSettingsLabel": "Vie asetukset",
"exportSettingsHint": "Vie asetukset JSON tiedostoon",
"exportedSettings": "Asetukset viety",
"importSettingsLabel": "Tuo asetukset",
"importSettingsHint": "Tuo asetukset JSON tiedostosta",
"importedSettings": "Asetukset tuotu",
"exportPatchesLabel": "Vie paikkausvalikoima",
"exportPatchesHint": "Vie paikkausvalikoima JSON-tiedostoon",
"exportedPatches": "Paikkausvalikoima vietiin",

View File

@ -147,16 +147,12 @@
"languageLabel": "Wika",
"languageUpdated": "Wika na-update na",
"sourcesLabel": "Iba pang mga sources ",
"sourcesLabelHint": "I-set up ang mga alternatibong sources para sa mga ReVanced Patches at ReVanced Integrations",
"sourcesIntegrationsLabel": "Pinanggalingan ng mga integrasyon",
"useAlternativeSources": "Gumamit ng alternatibong mga sources ",
"useAlternativeSourcesHint": "Gamitin ang mga alternatibong sources para sa mga ReVanced Patches at ReVanced Integrations sa halip ng API",
"sourcesResetDialogTitle": "I-reset",
"apiURLLabel": "URL ng API",
"selectApiURL": "URL ng API",
"orgPatchesLabel": "Pagsasaayos ng mga pantapal",
"sourcesPatchesLabel": "Pinanggalingan ng mga pantapal",
"orgIntegrationsLabel": "Pagsasaayos ng mga integrasyon",
"contributorsLabel": "Mga nag-ambag",
"contributorsHint": "Listahan ng mga tumulong sa ReVanced",
"aboutLabel": "Tungkol",

View File

@ -158,20 +158,18 @@
"languageLabel": "Langue",
"languageUpdated": "Langue mise à jour",
"sourcesLabel": "Sources alternatives",
"sourcesLabelHint": "Configure les sources alternatives pour les correctifs et les intégrations ReVanced",
"sourcesIntegrationsLabel": "Source des intégrations",
"sourcesLabelHint": "Configurer les sources alternatives pour les correctifs ReVanced",
"useAlternativeSources": "Utiliser les sources alternatives",
"useAlternativeSourcesHint": "Utilise les sources alternatives pour les correctifs et les intégrations ReVanced à la place 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": "Note : Cela téléchargera automatiquement les correctifs et les intégrations ReVanced depuis les 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 correctifs",
"sourcesPatchesLabel": "Source des patchs",
"orgIntegrationsLabel": "Organisation des intégrations",
"contributorsLabel": "Contributeurs",
"contributorsHint": "Liste des contributeurs de ReVanced",
"logsLabel": "Partager les journaux",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Supprimer les fichiers temporaires",
"deleteTempDirHint": "Supprimer les fichiers temporaires inutilisés",
"deletedTempDir": "Fichiers temporaires supprimés",
"exportSettingsLabel": "Exporter les paramètres",
"exportSettingsHint": "Exporter les paramètres vers un fichier JSON",
"exportedSettings": "Paramètres exportés",
"importSettingsLabel": "Importer les paramètres",
"importSettingsHint": "Importer les paramètres depuis un fichier JSON",
"importedSettings": "Paramètres importés",
"exportPatchesLabel": "Exporter la sélection de correctifs",
"exportPatchesHint": "Exporter la sélection de correctifs vers un fichier JSON",
"exportedPatches": "Sélection de correctifs exportée",

View File

@ -55,6 +55,8 @@
"widgetTitle": "Paisteálaí",
"patchButton": "Paiste",
"incompatibleArchWarningDialogText": "Níl paisteáil ar an ailtireacht seo tacaítear leis go fóill agus dfhéadfadh sé teip. Lean ar aghaidh fós?",
"removedPatchesWarningDialogText": "Paistí bainte ón uair dheireanach a ndearna tú paistí ar an aip seo:\n\n${patches}\n\n${newPatches}An bhfuil fonn ort leanúint ar aghaidh mar sin féin?",
"addedPatchesDialogText": "Cuireadh paistí leis ón uair dheireanach a ndearna tú paistí ar an aip seo:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Caithfear roinnt roghanna paiste a shocrú."
},
"appSelectorCard": {
@ -156,20 +158,18 @@
"languageLabel": "Teanga",
"languageUpdated": "Teanga nuashonraithe",
"sourcesLabel": "Foinsí malartacha",
"sourcesLabelHint": "Cumraigh na foinsí malartacha le haghaidh Paistí ReVanced agus Comhtháthaithe ReVanced",
"sourcesIntegrationsLabel": "Foinse comhtháthaithe",
"sourcesLabelHint": "Cumraigh na foinsí malartacha le haghaidh Paistí ReVanced",
"useAlternativeSources": "Úsáid foinsí malartacha",
"useAlternativeSourcesHint": "Úsáid foinsí malartacha le haghaidh Paistí ReVanced agus Comhtháthaithe ReVanced in ionad an API",
"useAlternativeSourcesHint": "Úsáid foinsí eile le haghaidh ReVanced Patches in ionad an API",
"sourcesResetDialogTitle": "Athshocraigh",
"sourcesResetDialogText": "An bhfuil tú cinnte gur mhaith leat do fhoinsí a athshocrú go dtí a luachanna réamhshocraithe?",
"apiURLResetDialogText": "An bhfuil tú cinnte gur mhaith leat do URL API a athshocrú go dtí a luach réamhshocraithe?",
"sourcesUpdateNote": "Nóta: Íoslódálfaidh sé seo Paistí ReVanced agus Comhtháthú ReVanced go huathoibríoch ó na foinsí malartacha.\n\nCeanglóidh sé seo tú leis an bhfoinse mhalartach.",
"sourcesUpdateNote": "Nóta: Íoslódálfaidh sé seo Paistí ReVanced go huathoibríoch ó na foinsí eile.\n\nNascfaidh sé seo tú leis an bhfoinse eile.",
"apiURLLabel": "UIRL API",
"apiURLHint": "Cumraigh URL API de Bhainisteoir ReVanced",
"selectApiURL": "UIRL API",
"orgPatchesLabel": "Eagraíocht paistí",
"sourcesPatchesLabel": "Foinse paistí",
"orgIntegrationsLabel": "Eagraíocht comhtháthaithe",
"contributorsLabel": "Rannpháirtithe",
"contributorsHint": "Liosta de rannpháirtithe ReVanced",
"logsLabel": "Comhroinn logaí",
@ -197,6 +197,12 @@
"deleteTempDirLabel": "Scrios comhaid shealadacha",
"deleteTempDirHint": "Scrios comhaid shealadacha gan úsáid",
"deletedTempDir": "Scriosta comhaid shealadacha",
"exportSettingsLabel": "Socruithe easpórtála",
"exportSettingsHint": "Easpórtáil socruithe go comhad JSON",
"exportedSettings": "Socruithe easpórtáilte",
"importSettingsLabel": "Socruithe a allmhairiú",
"importSettingsHint": "Iompórtáil socruithe ó chomhad JSON",
"importedSettings": "Socruithe allmhairithe",
"exportPatchesLabel": "Rogha paiste easpórtála",
"exportPatchesHint": "Roghnú paiste a easpórtáil chuig comhad JSON",
"exportedPatches": "Easpórtáil an roghnú paistí",

View File

@ -23,7 +23,10 @@
"refreshSuccess": "רוענן בהצלחה",
"widgetTitle": "לוח בקרה",
"updatesSubtitle": "עדכונים",
"lastPatchedAppSubtitle": "תיקון אפליקציה אחרון",
"patchedSubtitle": "אפליקציות מותקנות",
"changeLaterSubtitle": "ניתן לשנות זאת בהגדרות מאוחר יותר.",
"noSavedAppFound": "לא נמצאו אפליקציות",
"noInstallations": "אין אפליקציות מתוקנת מותקנות",
"installUpdate": "המשך להתקין את העדכון?",
"updateSheetTitle": "עדכן את ReVanced Manager",
@ -51,6 +54,7 @@
"patcherView": {
"widgetTitle": "Patcher",
"patchButton": "תיקון",
"incompatibleArchWarningDialogText": "תיקון בארכיטקטורה זו לא נתמך עדיין ועלול להיכשל. להמשיך בכל זאת?",
"requiredOptionDialogText": "כמה אפשרויות תיקון חייבות להיקבע."
},
"appSelectorCard": {
@ -101,6 +105,7 @@
"setToNull": "השמה לnull",
"viewTitle": "אפשרויות תיקון",
"saveOptions": "שמור",
"unselectPatch": "בטל את בחירת התיקון",
"tooltip": "אפשרויות קלט נוספות",
"selectFilePath": "בחר נתיב קובץ",
"selectFolder": "בחר תיקייה",
@ -146,21 +151,22 @@
"dynamicThemeHint": "תהנה/י מחוויה קרובה יותר למכשיר שלך",
"languageLabel": "שפה",
"languageUpdated": "עדכוני שפה",
"sourcesIntegrationsLabel": "מקור אינטגרציות",
"sourcesResetDialogTitle": "איפוס",
"sourcesResetDialogText": "האם אתה בטוח שברצונך לאפס את המקורות לערכי ברירת המחדל שלהם?",
"apiURLResetDialogText": "האם אתה בטוח שברצונך לאפס את כתובת הAPI לערך ברירת המחדל?",
"apiURLLabel": "כתובת API",
"apiURLHint": "הגדר את כתובת ה-API של ReVanced Manager",
"selectApiURL": "כתובת API",
"orgPatchesLabel": "ארגון תיקונים",
"sourcesPatchesLabel": "מקור התיקונים",
"orgIntegrationsLabel": "ארגון אינטגרציות",
"contributorsLabel": "תורמים",
"contributorsHint": "רשימת התורמים לReVanced",
"logsLabel": "שתף לוג",
"logsHint": "שתף ReVanced Manager לוג",
"disablePatchesSelectionWarningText": "אתה עומד לכבות את שינוי בחירת התיקונים.\nהבחירה ברירת המחדל של התיקונים תשוחזר.\n\nלכבות בכל מקרה?",
"autoUpdatePatchesLabel": "עדכון תיקונים באופן אוטומטי",
"autoUpdatePatchesHint": "עדכן אוטומטית את התיקונים לגרסה העדכנית ביותר",
"showUpdateDialogLabel": "הצג תיבת עדכון",
"universalPatchesLabel": "הצג תיקונים אוניברסליים",
"universalPatchesHint": "הצג את כל האפליקציות והתיקונים האוניברסליים (עשוי להאט את רשימת האפליקציות)",
"versionCompatibilityCheckLabel": "בדיקת תאימות לגרסה",
@ -243,6 +249,7 @@
"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שנה את הגדרות האבטחה שלך ונסה שוב.",

View File

@ -103,13 +103,11 @@
"dynamicThemeLabel": "मेटीरियल यू",
"dynamicThemeHint": "अपने डिवाइस के करीब एक अनुभव का आनंद लें",
"languageLabel": "भाषा",
"sourcesIntegrationsLabel": "एकीकरण स्रोत",
"sourcesResetDialogTitle": "रीसेट करें",
"apiURLLabel": "API URL",
"selectApiURL": "API URL",
"orgPatchesLabel": "पैच संगठन",
"sourcesPatchesLabel": "पैच स्रोत",
"orgIntegrationsLabel": "एकीकरण संगठन",
"contributorsLabel": "योगदान कर्ता",
"contributorsHint": "ReVanced के योगदानकर्ताओ की सूची",
"aboutLabel": "विवरण",

View File

@ -93,13 +93,11 @@
"darkThemeLabel": "Tamni način",
"dynamicThemeHint": "Uživajte u iskustvu prilagođenom vašem uređaju",
"languageLabel": "Jezik",
"sourcesIntegrationsLabel": "Izvori ugradnje",
"sourcesResetDialogTitle": "Ponovno postavljanje",
"apiURLLabel": "API URL",
"selectApiURL": "API URL",
"orgPatchesLabel": "Autori zakrpa",
"sourcesPatchesLabel": "Izvor zakrpa",
"orgIntegrationsLabel": "Organizacije za ugradnju",
"contributorsLabel": "Pridonositelji",
"contributorsHint": "Popis suradnika ReVanceda",
"aboutLabel": "O aplikaciji",

View File

@ -158,20 +158,18 @@
"languageLabel": "Nyelv",
"languageUpdated": "Nyelv frissítve",
"sourcesLabel": "Alternatív források",
"sourcesLabelHint": "Állítsa be a ReVanced Patchek és ReVanced Integrációk alternatív forrásait",
"sourcesIntegrationsLabel": "Integrációk - forrás",
"sourcesLabelHint": "Egyéni lejátszási sebesség hozzáadása vagy módosítása",
"useAlternativeSources": "Alternatív források használata",
"useAlternativeSourcesHint": "Használjon alternatív forrásokat a ReVanced Patchekhez és a ReVanced Integrációhoz az API helyett",
"useAlternativeSourcesHint": "Használjon alternatív forrásokat a ReVanced Patch-ekhez az API helyett",
"sourcesResetDialogTitle": "Visszaállítás",
"sourcesResetDialogText": "Biztosan vissza szeretné állítani a forrásokat az alapértelmezett értékekre?",
"apiURLResetDialogText": "Biztosan vissza szeretné állítani az API URL-jét az alapértelmezett értékre?",
"sourcesUpdateNote": "Megjegyzés: Ez automatikusan letölti a ReVanced Patcheket és a ReVanced Integrációkat az alternatív forrásokból.\n\nEzzel csatlakozik az alternatív forráshoz.",
"sourcesUpdateNote": "Megjegyzés: Ez automatikusan letölti a ReVanced Patch-eket az alternatív forrásokból.\n\nEzzel csatlakozik az alternatív forráshoz.",
"apiURLLabel": "API URL",
"apiURLHint": "Konfigurálja a ReVanced Manager API URL-jét",
"selectApiURL": "API link",
"orgPatchesLabel": "Patchek - szervezet",
"sourcesPatchesLabel": "Patchek - forrás",
"orgIntegrationsLabel": "Integrációk - szervezet",
"contributorsLabel": "Közreműködők",
"contributorsHint": "A ReVanced közreműködőinek listája",
"logsLabel": "Naplók megosztása",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Ideiglenes fájlok törlése",
"deleteTempDirHint": "Nem használt ideiglenes fájlok törlése",
"deletedTempDir": "Ideiglenes fájlok törölve",
"exportSettingsLabel": "Beállítások exportálása",
"exportSettingsHint": "A beállítások exportálása JSON-fájlba",
"exportedSettings": "Beállítások exportálva",
"importSettingsLabel": "Beállítások importálása",
"importSettingsHint": "Beállítások importálása JSON-fájlból",
"importedSettings": "Beállítások importálva",
"exportPatchesLabel": "Kijelölt patchek exportálása",
"exportPatchesHint": "Exportálja a kijelölt patcheket egy JSON-fájlba",
"exportedPatches": "Kijelölt patchek exportálva",

View File

@ -158,20 +158,18 @@
"languageLabel": "Bahasa",
"languageUpdated": "Bahasa diperbarui",
"sourcesLabel": "Sumber alternatif",
"sourcesLabelHint": "Atur sumber alternatif untuk ReVanced Patches dan ReVanced Integrations",
"sourcesIntegrationsLabel": "Sumber Integrasi",
"sourcesLabelHint": "Konfigurasikan sumber alternatif untuk Patch ReVanced",
"useAlternativeSources": "Gunakan sumber alternatif",
"useAlternativeSourcesHint": "Gunakan sumber alternatif untuk ReVanced Patches dan ReVanced Integrations daripada API",
"useAlternativeSourcesHint": "Gunakan sumber alternatif untuk Patch ReVanced, bukan API",
"sourcesResetDialogTitle": "Atur ulang",
"sourcesResetDialogText": "Apakah Anda yakin ingin mengatur ulang sumber khusus ke sumber bawaan?",
"apiURLResetDialogText": "Apakah Anda yakin ingin mengatur ulang URL API ke bawaan?",
"sourcesUpdateNote": "Catatan: Ini akan secara otomatis mengunduh ReVanced Patches dan ReVanced Integrations dari sumber alternatif.\n\nIni akan menghubungkan Anda ke sumber alternatif.",
"sourcesUpdateNote": "Catatan: Ini akan secara otomatis mengunduh Patch ReVanced dari sumber alternatif.\n\nIni akan menghubungkan Anda ke sumber alternatif.",
"apiURLLabel": "URL API",
"apiURLHint": "Atur URL API dari ReVanced Manager",
"selectApiURL": "URL API",
"orgPatchesLabel": "Organisasi tambalan",
"sourcesPatchesLabel": "Sumber tambalan",
"orgIntegrationsLabel": "Organisasi Integrasi",
"contributorsLabel": "Kontributor",
"contributorsHint": "Daftar kontributor ReVanced",
"logsLabel": "Bagikan log",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Hapus berkas sementara",
"deleteTempDirHint": "Hapus berkas sementara yang tidak dipakai",
"deletedTempDir": "Berkas sementara dihapus",
"exportSettingsLabel": "Ekspor pengaturan",
"exportSettingsHint": "Ekspor pengaturan ke berkas JSON",
"exportedSettings": "Pengaturan berhasil diekspor",
"importSettingsLabel": "Impor pengaturan",
"importSettingsHint": "Impor pengaturan dari berkas JSON",
"importedSettings": "Pengaturan berhasil diimpor",
"exportPatchesLabel": "Ekspor pilihan tambalan",
"exportPatchesHint": "Ekspor pilihan tambalan ke berkas JSON",
"exportedPatches": "Tambalan terpilih diekspor",

View File

@ -158,20 +158,18 @@
"languageLabel": "Lingua",
"languageUpdated": "Lingua aggiornata",
"sourcesLabel": "Sorgenti alternative",
"sourcesLabelHint": "Configura fonti alternative per ReVanced Patches e ReVanced Integrations",
"sourcesIntegrationsLabel": "Sorgente Integrazioni",
"sourcesLabelHint": "Configurare le fonti alternative per le patch avanzate",
"useAlternativeSources": "Usa sorgenti alternative",
"useAlternativeSourcesHint": "Usa sorgenti alternative per ReVanced Patches e ReVanced Integrations invece delle API",
"useAlternativeSourcesHint": "Usa fonti alternative per le patch avanzate invece che per le API",
"sourcesResetDialogTitle": "Reimposta",
"sourcesResetDialogText": "Sei sicuro di voler reimpostare le sorgenti ai valori predefiniti?",
"apiURLResetDialogText": "Sicuro di voler ripristinare l'URL API al valore predefinito?",
"sourcesUpdateNote": "Nota: Questo scaricherà automaticamente ReVanced Patches e ReVanced Integrations dalle sorgenti alternative.\n\nQuesto ti collegherà alla sorgente alternativa.",
"sourcesUpdateNote": "Nota: Questo scaricherà automaticamente le patch avanzate dalle fonti alternative.\n\nQuesto ti collegherà alla sorgente alternativa.",
"apiURLLabel": "URL API",
"apiURLHint": "Configura l'URL API di ReVanced Manager",
"selectApiURL": "URL API",
"orgPatchesLabel": "Organizzazione Patch",
"sourcesPatchesLabel": "Sorgente Patch",
"orgIntegrationsLabel": "Organizzazione Integrazioni",
"contributorsLabel": "Contributori",
"contributorsHint": "Lista dei contributori di ReVanced",
"logsLabel": "Condividi i log",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Elimina file temporanei",
"deleteTempDirHint": "Elimina i file temporanei non utilizzati",
"deletedTempDir": "File temporanei eliminati",
"exportSettingsLabel": "Esporta impostazioni",
"exportSettingsHint": "Esporta le impostazioni in un file JSON",
"exportedSettings": "Impostazioni esportate",
"importSettingsLabel": "Importa impostazioni",
"importSettingsHint": "Importa le impostazioni da un file JSON",
"importedSettings": "Impostazioni importate",
"exportPatchesLabel": "Esporta selezione patch",
"exportPatchesHint": "Esporta selezione patch in un file JSON",
"exportedPatches": "Selezione patch esportata",

View File

@ -158,20 +158,18 @@
"languageLabel": "言語",
"languageUpdated": "言語が更新されました",
"sourcesLabel": "代替ソース",
"sourcesLabelHint": "ReVanded PatchesとReVanced Integrationsの代替ソースを設定",
"sourcesIntegrationsLabel": "Integrations のソース",
"sourcesLabelHint": "ReVanded Patches の代替ソースを構成する",
"useAlternativeSources": "他のソースを使用",
"useAlternativeSourcesHint": "APIの代わりにReVanced PatchesとReVanced Integrationsの他のソースを使用する",
"useAlternativeSourcesHint": "APIの代わりにReVended Patchesの代替ソースを使用する",
"sourcesResetDialogTitle": "リセット",
"sourcesResetDialogText": "ソースをデフォルト値にリセットしてもよろしいですか?",
"apiURLResetDialogText": "API の URL をデフォルト値にリセットしてもよろしいですか?",
"sourcesUpdateNote": "注: ReVanced PatchesとReVanced Integrationsを代替ソースから自動的にダウンロードします。\n\nこれにより、代替ソースとの通信が発生します。",
"sourcesUpdateNote": "注:ReVincedパッチは自動的に別のソースからダウンロードされます。\n\nこれにより、別のソースに接続されます。",
"apiURLLabel": "API の URL",
"apiURLHint": "ReVanced ManagerのAPIのURLを設定する",
"selectApiURL": "API の URL",
"orgPatchesLabel": "Patches の組織",
"sourcesPatchesLabel": "Patches のソース",
"orgIntegrationsLabel": "Integrations の組織",
"contributorsLabel": "貢献者",
"contributorsHint": "ReVancedの貢献者一覧",
"logsLabel": "ログを共有",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "一時ファイルを削除",
"deleteTempDirHint": "未使用の一時ファイルを削除",
"deletedTempDir": "一時ファイルを削除しました",
"exportSettingsLabel": "設定をエクスポート",
"exportSettingsHint": "設定を JSON ファイルにエクスポート",
"exportedSettings": "設定をエクスポートしました",
"importSettingsLabel": "設定をインポート",
"importSettingsHint": "JSONファイルから設定をインポート",
"importedSettings": "設定がインポートされました",
"exportPatchesLabel": "パッチ選択をエクスポート",
"exportPatchesHint": "パッチ選択を JSON ファイルにエクスポートします",
"exportedPatches": "パッチ選択をエクスポートしました",

View File

@ -85,7 +85,7 @@
"downloadToast": "다운로드 기능은 아직 사용할 수 없습니다",
"requireSuggestedAppVersionDialogText": "선택한 앱 버전이 권장 앱 버전과 일치하지 않아서 예상되지 않은 문제점이 발생할 수 있습니다. 권장 앱 버전을 사용하세요.\n\n선택한 앱 버전: ${selected}\n권장 앱 버전: ${suggested}\n\n계속하려면 설정에서 '권장 앱 버전 요구'를 비활성화하세요.",
"featureNotAvailable": "기능이 구현되지 않았습니다",
"featureNotAvailableText": "이 앱은 분할 APK이며 Root 권한으로 마운트해야만 안정적으로 패치 및 설치할 수 있습니다. 그러나 저장소에서 완전한 APK를 선택하여 패치 및 설치할 수 있습니다."
"featureNotAvailableText": "이 기기에서 추출할 수 있는 앱이 분할된 APK 파일이므로 Root 권한으로 마운트해야만 안정적으로 패치 및 설치할 수 있습니다. 그러나 Non-Root 사용자는 기기 저장소에서 '외부에서 다운로드한 완전한 APK 파일'을 선택하여 패치 및 설치할 수 있습니다."
},
"patchesSelectorView": {
"viewTitle": "패치 선택하기",
@ -158,20 +158,18 @@
"languageLabel": "앱 언어",
"languageUpdated": "앱 언어를 변경하였습니다",
"sourcesLabel": "대체 소스",
"sourcesLabelHint": "ReVanced Patches 및 ReVanced Integrations의 대체 소스를 설정할 수 있습니다",
"sourcesIntegrationsLabel": "Integrations 소스",
"sourcesLabelHint": "ReVanced Patches의 대체 소스를 설정할 수 있습니다",
"useAlternativeSources": "대체 소스 사용",
"useAlternativeSourcesHint": "공식 소스가 아닌 ReVanced Patches 및 ReVanced Integrations의 대체 소스를 사용합니다",
"useAlternativeSourcesHint": "API를 대신하여 ReVanced Patches의 대체 소스를 사용합니다",
"sourcesResetDialogTitle": "초기화",
"sourcesResetDialogText": "정말 사용자 정의 소스를 기본값으로 초기화하시겠습니까?",
"apiURLResetDialogText": "정말 API URL을 기본값으로 초기화하시겠습니까?",
"sourcesUpdateNote": "알림: 변경하면 대체 소스에서 ReVanced Patches 및 ReVanced Integrations이 자동으로 다운로드됩니다. \n\n그 이후에는 대체 소스로 연결됩니다.",
"sourcesUpdateNote": "알림: 변경하면 대체 소스에서 ReVanced Patches가 자동으로 다운로드됩니다.\n\n그 이후에는 대체 소스로 연결됩니다.",
"apiURLLabel": "API URL",
"apiURLHint": "ReVanced Manager의 API URL를 설정할 수 있습니다.",
"selectApiURL": "API URL",
"orgPatchesLabel": "Patches 구성",
"sourcesPatchesLabel": "Patches 소스",
"orgIntegrationsLabel": "Integrations 구성",
"contributorsLabel": "도움을 주신 분들",
"contributorsHint": "ReVanced 개발에 도움을 주신 분들",
"logsLabel": "로그 공유하기",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "임시 파일 제거",
"deleteTempDirHint": "사용하지 않는 임시 파일을 제거합니다",
"deletedTempDir": "임시 파일을 제거하였습니다",
"exportSettingsLabel": "설정 내보내기",
"exportSettingsHint": "설정을 JSON 파일로 내보낼 수 있습니다",
"exportedSettings": "설정을 내보냈습니다",
"importSettingsLabel": "설정 가져오기",
"importSettingsHint": "설정을 JSON 파일에서 가져올 수 있습니다",
"importedSettings": "설정을 가져왔습니다",
"exportPatchesLabel": "패치 선택목록 내보내기",
"exportPatchesHint": "패치 선택목록을 JSON 파일로 내보냅니다",
"exportedPatches": "패치 선택목록을 내보냈습니다",

View File

@ -132,7 +132,6 @@
"dynamicThemeHint": "Mėgaukis patirtimi artimiau tavo įrenginiui",
"languageLabel": "Kalba",
"languageUpdated": "Kalba atnaujinta",
"sourcesIntegrationsLabel": "Integracijų šaltinis",
"sourcesResetDialogTitle": "Nustatyti iš naujo",
"sourcesResetDialogText": "Ar tikrai norite iš naujo nustatyti savo šaltinius į numatytąsias vertes?",
"apiURLResetDialogText": "Ar tikrai norite iš naujo nustatyti savo API URL adresą į numatytąją vertę?",
@ -140,7 +139,6 @@
"selectApiURL": "API URL",
"orgPatchesLabel": "Modifikacijų organizacija",
"sourcesPatchesLabel": "Modifikacijų šaltinis",
"orgIntegrationsLabel": "Integracijų organizacija",
"contributorsLabel": "Prisidėjusieji žmonės",
"contributorsHint": "Žmonės prisidėję prie ReVanced",
"logsLabel": "Dalytis įrašais",

View File

@ -114,13 +114,11 @@
"dynamicThemeLabel": "Materiāls izskats",
"dynamicThemeHint": "Izbaudi pieredzi personalizētu tavai ierīcei",
"languageLabel": "Valoda",
"sourcesIntegrationsLabel": "Integrācijas avots",
"sourcesResetDialogTitle": "Atiestatīt",
"apiURLLabel": "API Saite",
"selectApiURL": "API Saite",
"orgPatchesLabel": "Paču autori",
"sourcesPatchesLabel": "Paču avots",
"orgIntegrationsLabel": "Integrāciju autori",
"contributorsLabel": "Autori",
"contributorsHint": "ReVanced ieguldītāji",
"aboutLabel": "Par",

View File

@ -73,11 +73,9 @@
"exportSectionTitle": "Import & Eksport",
"dynamicThemeHint": "Nikmati tema yang lebih serasi dengan anda",
"languageLabel": "Bahasa",
"sourcesIntegrationsLabel": "Sumber Integrasi",
"sourcesResetDialogTitle": "Set semula",
"orgPatchesLabel": "Pengarang Modifikasi",
"sourcesPatchesLabel": "Sumber Modifikasi",
"orgIntegrationsLabel": "Pengarang Integrasi",
"contributorsLabel": "Penyumbang",
"contributorsHint": "Senarai penyokong ReVanced",
"aboutLabel": "Tentang",

View File

@ -158,20 +158,18 @@
"languageLabel": "Språk",
"languageUpdated": "Språk oppdatert",
"sourcesLabel": "Alternative kilder",
"sourcesLabelHint": "Konfigurer alternative kilder for ReVanced Patches og ReVanced Integrations",
"sourcesIntegrationsLabel": "Integrasjoner kilde",
"sourcesLabelHint": "Konfigurer alternative kilder for ReVanced Patches",
"useAlternativeSources": "Bruk alternative kilder",
"useAlternativeSourcesHint": "Bruk alternative kilder for ReVanced Patches and ReVanced Integrations i stedet for API",
"useAlternativeSourcesHint": "Bruk alternative kilder for ReVanced Patches i stedet for API",
"sourcesResetDialogTitle": "Reset",
"sourcesResetDialogText": "Er du sikker på at du vil tilbakestille kildene til standardverdiene?",
"apiURLResetDialogText": "Er du sikker på at du vil nullstille API URL til standardverdien?",
"sourcesUpdateNote": "Merk: Dette vil automatisk laste ned ReVanced Patches og ReVanced Integrations fra de alternative kildene.\n\nDette vil koble deg til den alternative kilden.",
"sourcesUpdateNote": "Merk: Dette vil automatisk laste ned ReVanced Patches fra de alternative kildene.\n\nDette vil koble deg til den alternative kilden.",
"apiURLLabel": "API URL",
"apiURLHint": "Konfigurere API URL til ReVanced Manager",
"selectApiURL": "API URL",
"orgPatchesLabel": "Fikser organisasjon",
"sourcesPatchesLabel": "Patches source",
"orgIntegrationsLabel": "Integrasjonsorganisasjon",
"contributorsLabel": "Bidragsytere",
"contributorsHint": "En liste over bidragsytere av ReVanced",
"logsLabel": "Del logger",
@ -198,6 +196,12 @@
"deleteTempDirLabel": "Slett midlertidige filer",
"deleteTempDirHint": "Slett ubrukte midlertidige filer",
"deletedTempDir": "Midlertidige filer slettet",
"exportSettingsLabel": "Eksporter innstillingene",
"exportSettingsHint": "Eksporter innstillingene til en JSON-fil",
"exportedSettings": "Innstillinger eksportert",
"importSettingsLabel": "Importer innstillinger",
"importSettingsHint": "Importer innstillinger fra en JSON-fil",
"importedSettings": "Innstillinger importert",
"exportPatchesLabel": "Eksport patch valg",
"exportPatchesHint": "Eksporter patch valg til en JSON-fil",
"exportedPatches": "Patch utvalg eksportert",

View File

@ -158,20 +158,18 @@
"languageLabel": "Taal",
"languageUpdated": "Taal bijgewerkt",
"sourcesLabel": "Alternatieve bronnen",
"sourcesLabelHint": "Configureer de alternatieve bronnen voor ReVanced Patches en ReVanced Integrations",
"sourcesIntegrationsLabel": "Integratiebronnen",
"sourcesLabelHint": "De alternatieve bronnen voor verbeterde patches configureren",
"useAlternativeSources": "Gebruik alternatieve bronnen",
"useAlternativeSourcesHint": "Gebruik alternatieve bronnen voor ReVanced Patches en ReVanced Integrations in plaats van de API",
"useAlternativeSourcesHint": "Gebruik alternatieve bronnen voor ReVanced Patches in plaats van de API",
"sourcesResetDialogTitle": "Herstellen naar standaard",
"sourcesResetDialogText": "Weet u zeker dat u uw bronnen op hun standaardwaarden wilt herstellen?",
"apiURLResetDialogText": "Weet u zeker dat u uw API-URL wilt resetten naar de standaardwaarde?",
"sourcesUpdateNote": "Opmerking: Dit zal automatisch ReVanced Patches en Revanced Integrations uit de alternatieve bronnen downloaden.\n\nDit zal je verbinden met de alternatieve bron.",
"sourcesUpdateNote": "Opmerking: Dit zal automatisch ReVanceerde Patches uit de alternatieve bronnen downloaden.\n\nDit verbindt je met de alternatieve bron.",
"apiURLLabel": "API URL",
"apiURLHint": "Configureer de API URL van ReVanced Manager",
"selectApiURL": "API URL",
"orgPatchesLabel": "Beheer van patches",
"sourcesPatchesLabel": "Bronnen voor patches",
"orgIntegrationsLabel": "Integraties organisatie",
"contributorsLabel": "Bijdragers",
"contributorsHint": "Een lijst met bijdragers van ReVanced",
"logsLabel": "Deel logs",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Tijdelijke bestanden verwijderen",
"deleteTempDirHint": "Ongebruikte tijdelijke bestanden verwijderen",
"deletedTempDir": "Tijdelijke bestanden verwijderd",
"exportSettingsLabel": "Exporteer instellingen",
"exportSettingsHint": "Instellingen exporteren naar een JSON-bestand",
"exportedSettings": "Instellingen geëxporteerd",
"importSettingsLabel": "Instellingen importeren",
"importSettingsHint": "Instellingen importeren uit een JSON-bestand",
"importedSettings": "Instellingen geïmporteerd",
"exportPatchesLabel": "Exporteer patch selectie",
"exportPatchesHint": "Exporteer patch selectie naar een JSON bestand",
"exportedPatches": "Patch selectie geëxporteerd",

View File

@ -58,11 +58,9 @@
"darkThemeLabel": "Mørk modus",
"dynamicThemeHint": "Nyt en erfaring nærmere din enhet",
"languageLabel": "Språk",
"sourcesIntegrationsLabel": "Integrasjoner kilde",
"sourcesResetDialogTitle": "Tilbakestill",
"orgPatchesLabel": "Patches organisasjon",
"sourcesPatchesLabel": "Patches kilde",
"orgIntegrationsLabel": "Integrasjonsorganisasjon",
"contributorsLabel": "Medvirkende",
"contributorsHint": "En liste med bidragsytere til ReVanced"
}

View File

@ -158,20 +158,18 @@
"languageLabel": "Język",
"languageUpdated": "Zaktualizowano język",
"sourcesLabel": "Alternatywne źródło",
"sourcesLabelHint": "Skonfiguruj alternatywne źródła dla Łatek ReVanced i Integracji ReVanced",
"sourcesIntegrationsLabel": "Źródło integracji",
"sourcesLabelHint": "Skonfiguruj alternatywne źródła dla ulepszonych patchów",
"useAlternativeSources": "Używaj alternatywnych źródeł",
"useAlternativeSourcesHint": "Używaj alternatywnych źródeł dla Łatek ReVanced i Integracji ReVanced zamiast API",
"useAlternativeSourcesHint": "Użyj alternatywnych źródeł dla ulepszonych patchów zamiast API",
"sourcesResetDialogTitle": "Zresetuj",
"sourcesResetDialogText": "Czy na pewno chcesz przywrócić źródła niestandardowe do ich wartości domyślnych?",
"apiURLResetDialogText": "Czy jesteś pewien, że chcesz przywrócić wszystkie adresy API do domyślnych wartości?",
"sourcesUpdateNote": "Uwaga: To automatycznie pobierze Łatki ReVanced i Integracje ReVanced z alternatywnych źródeł.\n\nTo połączy cię z alternatywnym źródłem.",
"sourcesUpdateNote": "Uwaga: Spowoduje to automatyczne pobranie ulepszonych Patchów z alternatywnych źródeł.\n\nTo połączy Cię z alternatywnym źródłem.",
"apiURLLabel": "Adres API",
"apiURLHint": "Skonfiguruj adres API Menedżera ReVanced",
"selectApiURL": "Adres API",
"orgPatchesLabel": "Organizacja łatek",
"sourcesPatchesLabel": "Źródło łatek",
"orgIntegrationsLabel": "Organizacja integracji",
"contributorsLabel": "Współtwórcy",
"contributorsHint": "Lista współtwórców ReVanced",
"logsLabel": "Udostępnij logi",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Usuń pliki tymczasowe",
"deleteTempDirHint": "Usuń nieużywane pliki tymczasowe",
"deletedTempDir": "Pliki tymczasowe zostały usunięte",
"exportSettingsLabel": "Eksportuj ustawienia",
"exportSettingsHint": "Eksportuj ustawienia do pliku JSON",
"exportedSettings": "Ustawienia wyeksportowane",
"importSettingsLabel": "Importuj ustawienia",
"importSettingsHint": "Importuj ustawienia z pliku JSON",
"importedSettings": "Ustawienia zaimportowane",
"exportPatchesLabel": "Eksportuj wybór łatek",
"exportPatchesHint": "Eksportuj wybór łatek do pliku JSON",
"exportedPatches": "Wyeksportowano wybór łatek",

View File

@ -156,20 +156,15 @@
"languageLabel": "Idioma",
"languageUpdated": "Idioma atualizado",
"sourcesLabel": "Fontes alternativas",
"sourcesLabelHint": "Configure as fontes alternativas para Patches ReVanced e Integrações ReVanced",
"sourcesIntegrationsLabel": "Fonte das integrações",
"useAlternativeSources": "Usar fontes alternativas",
"useAlternativeSourcesHint": "Use fontes alternativas para Patches ReVanced e Integrações ReVanced em vez da API",
"sourcesResetDialogTitle": "Redefinir",
"sourcesResetDialogText": "Você tem certeza que quer redefinir as fontes para o padrão?",
"apiURLResetDialogText": "Tem certeza de que quer redefinir o URL da API para o padrão?",
"sourcesUpdateNote": "Nota: Isso irá baixar automaticamente os Patches ReVanced e as Integrações ReVanced de fontes alternativas.\n\nIsso irá conectá-lo à fonte alternativa.",
"apiURLLabel": "URL da API",
"apiURLHint": "Configure o URL da API do ReVanced Manager",
"selectApiURL": "URL da API",
"orgPatchesLabel": "Organização dos patches",
"sourcesPatchesLabel": "Fonte dos patches",
"orgIntegrationsLabel": "Organização das integrações",
"contributorsLabel": "Contribuidores",
"contributorsHint": "Uma lista de contribuidores do ReVanced",
"logsLabel": "Compartilhar logs",

View File

@ -158,20 +158,17 @@
"languageLabel": "Idioma",
"languageUpdated": "Idioma atualizado",
"sourcesLabel": "Fontes alternativas",
"sourcesLabelHint": "Configurar as fontes alternativas para as Modificações ReVanced e Integrações ReVanced",
"sourcesIntegrationsLabel": "Fonte das Integrações",
"sourcesLabelHint": "Configure as fontes alternativas para Correções ReVanced",
"useAlternativeSources": "Usar fontes alternativas",
"useAlternativeSourcesHint": "Usar fontes alternativas para as Modificações ReVanced e as Integrações 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 URL da API para o seu valor predefinido?",
"sourcesUpdateNote": "Nota: Esta ação descarrega automaticamente as Modificações do ReVanced e as Integrações do ReVanced das fontes alternativas.\n\nIsto irá conectar-te com a fonte alternativa.",
"apiURLLabel": "URL da API",
"apiURLHint": "Configurar a URL da API do Gestor ReVanced",
"selectApiURL": "URL da API",
"orgPatchesLabel": "Organização de Modificações",
"sourcesPatchesLabel": "Fonte das Modificações",
"orgIntegrationsLabel": "Organização de Integrações",
"contributorsLabel": "Contribuidores",
"contributorsHint": "Uma lista de contribuidores do ReVanced",
"logsLabel": "Partilhar registos",
@ -199,6 +196,12 @@
"deleteTempDirLabel": "Apagar arquivos temporários",
"deleteTempDirHint": "Apagar arquivos temporários não utilizados",
"deletedTempDir": "Arquivos temporários apagados",
"exportSettingsLabel": "Exportar configurações",
"exportSettingsHint": "Exportar configurações para um arquivo JSON",
"exportedSettings": "Configurações exportadas",
"importSettingsLabel": "Importar configurações",
"importSettingsHint": "Importar configurações de um arquivo JSON",
"importedSettings": "Configurações importadas",
"exportPatchesLabel": "Exportar a seleção de Modificações",
"exportPatchesHint": "Exportar a seleção de Modificações para um ficheiro JSON",
"exportedPatches": "Seleção de Modificações exportada",

View File

@ -158,20 +158,18 @@
"languageLabel": "Limbă",
"languageUpdated": "Limbă actualizată",
"sourcesLabel": "Surse alternative",
"sourcesLabelHint": "Configurați sursele alternative pentru patch-urile ReVanced și Integrările ReVanced",
"sourcesIntegrationsLabel": "Sursă integrări",
"sourcesLabelHint": "Configurați sursele alternative pentru patch-urile revanced",
"useAlternativeSources": "Folosiți surse alternative",
"useAlternativeSourcesHint": "Utilizați surse alternative pentru patch-urile revanced și Integrările ReVanced în loc de API",
"useAlternativeSourcesHint": "Folosiți surse alternative pentru paturile revanced în loc de API",
"sourcesResetDialogTitle": "Resetează",
"sourcesResetDialogText": "Sunteți sigur că doriți să resetați sursele la valorile lor implicite?",
"apiURLResetDialogText": "Sunteţi sigur că doriţi să resetaţi URL-ul API la valoarea sa implicită?",
"sourcesUpdateNote": "Notă: Acest lucru va descărca automat patch-urile ReVanced și Integrările ReVanced din sursele alternative.\n\nAceasta vă va conecta la sursa alternativă.",
"sourcesUpdateNote": "Notă: Aceasta va descărca automat plasturii ReVanced din sursele alternative.\n\nAceasta vă va conecta la sursa alternativă.",
"apiURLLabel": "API URL",
"apiURLHint": "Configurați URL-ul API al Managerului ReVanced",
"selectApiURL": "API URL",
"orgPatchesLabel": "Organizarea patch-urilor",
"sourcesPatchesLabel": "Sursă patch-uri",
"orgIntegrationsLabel": "Organizare integrări",
"contributorsLabel": "Contribuitori",
"contributorsHint": "O listă cu contribuitorii ReVanced",
"logsLabel": "Partajare jurnale",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Ștergeți fișierele temporare",
"deleteTempDirHint": "Șterge fișierele temporare neutilizate",
"deletedTempDir": "Fișierele temporare au fost șterse",
"exportSettingsLabel": "Exportă setările",
"exportSettingsHint": "Exportă setările într-un fișier JSON",
"exportedSettings": "Setări exportate",
"importSettingsLabel": "Importă setări",
"importSettingsHint": "Importă setările dintr-un fișier JSON",
"importedSettings": "Setări importate",
"exportPatchesLabel": "Exportați selecția patch-urilor",
"exportPatchesHint": "Exportați selecția patch-urilor într-un fișier JSON",
"exportedPatches": "Selecția patch-urilor a fost exportată",

View File

@ -158,20 +158,18 @@
"languageLabel": "Язык",
"languageUpdated": "Язык обновлен",
"sourcesLabel": "Альтернативные источники",
"sourcesLabelHint": "Настроить альтернативные источники для патчей и интеграций ReVanced",
"sourcesIntegrationsLabel": "Репозиторий интеграций",
"sourcesLabelHint": "Настроить альтернативные источники для ReVanced Patches",
"useAlternativeSources": "Использовать альтернативные источники",
"useAlternativeSourcesHint": "Использовать альтернативные источники для патчей и интеграций ReVanced вместо API",
"useAlternativeSourcesHint": "Использовать альтернативные источники для ReVanced Patches вместо API",
"sourcesResetDialogTitle": "Сброс",
"sourcesResetDialogText": "Вы уверены, что хотите сбросить ваши источники до значений по умолчанию?",
"apiURLResetDialogText": "Вы уверены, что хотите сбросить API-ссылку до значения по умолчанию?",
"sourcesUpdateNote": "Примечание: при этом будут автоматически загружены патчи и интеграции ReVanced из альтернативных источников.\n\nЭто соединит вас с альтернативным источником.",
"sourcesUpdateNote": "Примечание: Это автоматически загрузит ReVanced Patches из альтернативных источников.\n\nЭто соединит вас с альтернативным источником.",
"apiURLLabel": "API-ссылка",
"apiURLHint": "Настройте URL-адрес API ReVanced Менеджера",
"selectApiURL": "API-ссылка",
"orgPatchesLabel": "Организация патчей",
"sourcesPatchesLabel": "Репозиторий патчей",
"orgIntegrationsLabel": "Организация интеграций",
"contributorsLabel": "Соучастники проекта",
"contributorsHint": "Список соучастников ReVanced",
"logsLabel": "Поделиться логами",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Удалить временные файлы",
"deleteTempDirHint": "Удалить неиспользуемые временные файлы",
"deletedTempDir": "Временные файлы удалены",
"exportSettingsLabel": "Настройки экспорта",
"exportSettingsHint": "Экспорт настроек в JSON файл",
"exportedSettings": "Настройки экспортированы",
"importSettingsLabel": "Импорт настроек",
"importSettingsHint": "Импорт настроек из файла JSON",
"importedSettings": "Настройки импортированы",
"exportPatchesLabel": "Экспорт выборки патчей",
"exportPatchesHint": "Экспортировать выборку патчей в JSON файл",
"exportedPatches": "Выборка патчей экспортирована",

View File

@ -111,13 +111,11 @@
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Užite si tému bližíe prispôsobenú vášmu zariadeniu",
"languageLabel": "Jazyk",
"sourcesIntegrationsLabel": "Zdroj integrácie",
"sourcesResetDialogTitle": "Resetovať",
"apiURLLabel": "URL API",
"selectApiURL": "URL API",
"orgPatchesLabel": "Autor záplaty",
"sourcesPatchesLabel": "Zdroj záplaty",
"orgIntegrationsLabel": "Autor integrácie",
"contributorsLabel": "Prispievatelia",
"contributorsHint": "Zoznam prispievateľov projektu ReVanced",
"disablePatchesSelectionWarningText": "Chystáte sa zakázať zmenu výberu záplat. \nPredvolený výber záplat bude obnovený.\n\nZakázať aj napriek tomu?",

View File

@ -119,20 +119,15 @@
"languageLabel": "Jezik",
"languageUpdated": "Jezik je posodobljen",
"sourcesLabel": "Alternativni viri",
"sourcesLabelHint": "Nastavite alternativne vire za ReVanced Patches in ReVanced Integrations",
"sourcesIntegrationsLabel": "Vir integracij",
"useAlternativeSources": "Uporabi alternativne vire",
"useAlternativeSourcesHint": "Namesto API-ja uporabi alternativne vire za ReVanced Patches in ReVanced Integrations",
"sourcesResetDialogTitle": "Ponastavi",
"sourcesResetDialogText": "Ali ste prepričani, da želite ponastaviti svoje vire na privzete vrednosti?",
"apiURLResetDialogText": "Ali ste prepričani, da želite ponastaviti svojo povezavo do API-ja na privzeto vrednost?",
"sourcesUpdateNote": "Pozor: ReVanced Patches in ReVanced Integrations se bosta privzeto prenesla iz alternativnih virov.\n\nTa nastavitev bo vzpostavila povezavo na alternativni vir.",
"apiURLLabel": "URL API-ja",
"apiURLHint": "Nastavi naslov URL za API ReVanced Managerja",
"selectApiURL": "URL API-ja",
"orgPatchesLabel": "Organizacija popravkov",
"sourcesPatchesLabel": "Vir popravkov",
"orgIntegrationsLabel": "Organizacija integracij",
"contributorsLabel": "Sodelujoči",
"contributorsHint": "Seznam sodelujočih pri projektu ReVanced",
"logsLabel": "Deli dnevniške podatke",

View File

@ -76,11 +76,9 @@
"dynamicThemeLabel": "Materiali Ti",
"dynamicThemeHint": "Shijo një përvojë më të afërt me pajisjen tënde",
"languageLabel": "Gjuha",
"sourcesIntegrationsLabel": "Burimi i integrimeve",
"sourcesResetDialogTitle": "Rivendos",
"orgPatchesLabel": "Organizimi i modifikimeve",
"sourcesPatchesLabel": "Burimi i modifikuesëve",
"orgIntegrationsLabel": "Organizimi i integrimeve",
"contributorsLabel": "Kontribuesit",
"contributorsHint": "Lista e kontribuesve të ReVanced",
"aboutLabel": "Rreth nesh",

View File

@ -158,20 +158,18 @@
"languageLabel": "Jezik",
"languageUpdated": "Jezik je promenjen",
"sourcesLabel": "Alternativni izvori",
"sourcesLabelHint": "Podesite alternativne izvore za ReVanced pečeve i integracije",
"sourcesIntegrationsLabel": "Izvor integracija",
"sourcesLabelHint": "Podesite alternativne izvore za ReVanced pečeve",
"useAlternativeSources": "Koristi alternativne izvore",
"useAlternativeSourcesHint": "Koristite alternativne izvore za ReVanced pečeve i integracije umesto API-ja",
"useAlternativeSourcesHint": "Koristite alternativne izvore za ReVanced pečeve umesto API-ja",
"sourcesResetDialogTitle": "Resetovanje",
"sourcesResetDialogText": "Želite li zaista da vratite izvore na podrazumevane vrednosti?",
"apiURLResetDialogText": "Želite li zaista da vratite URL API-ja na podrazumevanu vrednost?",
"sourcesUpdateNote": "Napomena: Ovo će automatski preuzeti ReVanced pečeve i integracije iz alternativnih izvora.\n\nBićete povezani sa alternativnim izvorom.",
"sourcesUpdateNote": "Napomena: Ovo će automatski preuzeti ReVanced pečeve iz alternativnih izvora.\n\nBićete povezani sa alternativnim izvorom.",
"apiURLLabel": "URL API-ja",
"apiURLHint": "Podesite URL API-ja za ReVanced Manager",
"selectApiURL": "URL API-ja",
"orgPatchesLabel": "Organizacija za pečeve",
"sourcesPatchesLabel": "Izvor pečeva",
"orgIntegrationsLabel": "Organizacija za integracije",
"contributorsLabel": "Saradnici",
"contributorsHint": "Lista saradnika na ReVancedu",
"logsLabel": "Deli evidencije",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Izbriši privremene fajlove",
"deleteTempDirHint": "Izbrišite nekorišćene privremene fajlove",
"deletedTempDir": "Privremeni fajlovi su izbrisani",
"exportSettingsLabel": "Izvezi podešavanja",
"exportSettingsHint": "Izvezite podešavanja u JSON fajl",
"exportedSettings": "Podešavanja su izvezena",
"importSettingsLabel": "Uvezi podešavanja",
"importSettingsHint": "Uvezite podešavanja iz JSON fajla",
"importedSettings": "Podešavanja su uvezena",
"exportPatchesLabel": "Izvezi izbor pečeva",
"exportPatchesHint": "Izvezite izbor pečeva u JSON fajl",
"exportedPatches": "Izbor pečeva je izvezen",

View File

@ -158,20 +158,18 @@
"languageLabel": "Језик",
"languageUpdated": "Језик је промењен",
"sourcesLabel": "Алтернативни извори",
"sourcesLabelHint": "Подесите алтернативне изворе за ReVanced печеве и интеграције",
"sourcesIntegrationsLabel": "Извор интеграција",
"sourcesLabelHint": "Подесите алтернативне изворе за ReVanced печеве",
"useAlternativeSources": "Користи алтернативне изворе",
"useAlternativeSourcesHint": "Користите алтернативне изворе за ReVanced печеве и интеграције уместо API-ја",
"useAlternativeSourcesHint": "Користите алтернативне изворе за ReVanced печеве уместо API-ја",
"sourcesResetDialogTitle": "Ресетовање",
"sourcesResetDialogText": "Желите ли заиста да вратите изворе на подразумеване вредности?",
"apiURLResetDialogText": "Желите ли заиста да вратите URL API-ја на подразумевану вредност?",
"sourcesUpdateNote": "Напомена: Ово ће аутоматски преузети ReVanced печеве и интеграције из алтернативних извора.\n\nБићете повезани са алтернативним извором.",
"sourcesUpdateNote": "Напомена: Ово ће аутоматски преузети ReVanced печеве из алтернативних извора.\n\nБићете повезани са алтернативним извором.",
"apiURLLabel": "URL API-ја",
"apiURLHint": "Подесите URL API-ја за ReVanced Manager",
"selectApiURL": "URL API-ја",
"orgPatchesLabel": "Организација за печеве",
"sourcesPatchesLabel": "Извор печева",
"orgIntegrationsLabel": "Организација за интеграције",
"contributorsLabel": "Сарадници",
"contributorsHint": "Листа сарадника на ReVanced-у",
"logsLabel": "Дели евиденције",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Избриши привремене фајлове",
"deleteTempDirHint": "Избришите некоришћене привремене фајлове",
"deletedTempDir": "Привремени фајлови су избрисани",
"exportSettingsLabel": "Извези подешавања",
"exportSettingsHint": "Извезите подешавања у JSON фајл",
"exportedSettings": "Подешавања су извезена",
"importSettingsLabel": "Увези подешавања",
"importSettingsHint": "Увезите подешавања из JSON фајла",
"importedSettings": "Подешавања су увезена",
"exportPatchesLabel": "Извези избор печева",
"exportPatchesHint": "Извезите избор печева у JSON фајл",
"exportedPatches": "Избор печева је извезен",

View File

@ -158,20 +158,18 @@
"languageLabel": "Språk",
"languageUpdated": "Språket uppdaterat",
"sourcesLabel": "Alternativa källor",
"sourcesLabelHint": "Konfigurera alternativa källor för ReVanced patches och ReVanced integrations",
"sourcesIntegrationsLabel": "Källa för integrationer",
"sourcesLabelHint": "Konfigurera alternativa källor för ReVanced Patches",
"useAlternativeSources": "Använd alternativa källor",
"useAlternativeSourcesHint": "Använd alternativa källor för ReVanced patches och ReVanced integrationer i stället för API",
"useAlternativeSourcesHint": "Använd alternativa källor för ReVanced Patches istället för API",
"sourcesResetDialogTitle": "Återställ",
"sourcesResetDialogText": "Är du säker på att du vill återställa dina källorna till deras standardvärden?",
"apiURLResetDialogText": "Är du säker att du vill återställa API-webbadressen till standardvärdet?",
"sourcesUpdateNote": "Obs: Detta kommer automatiskt att ladda ner ReVanced patches och ReVanced integrationer från alternativa källor.\n\nDetta kommer att ansluta dig till den alternativa källan.",
"sourcesUpdateNote": "Obs: Detta kommer automatiskt att ladda ner ReVanced Patches från de alternativa källorna.\n\nDetta kommer att ansluta dig till den alternativa källan.",
"apiURLLabel": "API-webbadress",
"apiURLHint": "Konfigurera API-webbadressen för ReVanced-hanterare",
"selectApiURL": "API-webbadress",
"orgPatchesLabel": "Organisation för patchar",
"sourcesPatchesLabel": "Källa för patchar",
"orgIntegrationsLabel": "Organisation för integrationer",
"contributorsLabel": "Medverkande",
"contributorsHint": "En lista över medverkare för ReVanced",
"logsLabel": "Dela loggar",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Ta bort temporära filer",
"deleteTempDirHint": "Ta bort oanvända temporära filer",
"deletedTempDir": "Temporära filer borttagna",
"exportSettingsLabel": "Exportera inställningar",
"exportSettingsHint": "Exportera inställningar till en JSON-fil",
"exportedSettings": "Inställningar exporterade",
"importSettingsLabel": "Importera inställningar",
"importSettingsHint": "Importera inställningar från en JSON-fil",
"importedSettings": "Inställningar importerade",
"exportPatchesLabel": "Exportera valda patchar",
"exportPatchesHint": "Exportera valda patchar till en JSON-fil",
"exportedPatches": "Valda patchar exporterade",

View File

@ -135,11 +135,9 @@
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "உங்கள் கருவிக்கு நெருக்கமான அனுபவத்தை அனுபவிக்கவும்",
"languageLabel": "மொழி",
"sourcesIntegrationsLabel": "ஒருங்கிணைப்புகளின் மூலம்",
"sourcesResetDialogTitle": "மறுஅமை",
"orgPatchesLabel": "இணைப்புகளின் அமைப்பு",
"sourcesPatchesLabel": "இணைப்புகளின் மூலம்",
"orgIntegrationsLabel": "ஒருங்கிணைப்புகளின் அமைப்பு",
"contributorsLabel": "பங்களிப்பாளர்கள்",
"contributorsHint": "ReVancedற்குப் பங்களித்தோர் பட்டியல்",
"aboutLabel": "இதைப் பற்றி",

View File

@ -4,7 +4,7 @@
"dismissButton": "ปิด",
"quitButton": "ออก",
"updateButton": "อัปเดต",
"suggested": "แนะนำ ${version}",
"suggested": "แนะนำ: ${version}",
"yesButton": "ใช่",
"noButton": "ไม่",
"warning": "คำเตือน",
@ -103,13 +103,11 @@
"dynamicThemeHint": "เพลิดเพลินกับประสบการณ์ที่ใกล้ชิดกับอุปกรณ์ของคุณมากขึ้น",
"languageLabel": "ภาษา",
"languageUpdated": "อัพเดตภาษาแล้ว",
"sourcesIntegrationsLabel": "ที่มาของส่วนเสริม",
"sourcesResetDialogTitle": "รีเซ็ต",
"apiURLLabel": "ลิงค์ของ API",
"selectApiURL": "ลิงค์ของ API",
"orgPatchesLabel": "ผู้ดูแลการดัดแปลง",
"sourcesPatchesLabel": "ที่มาของการดัดแปลง",
"orgIntegrationsLabel": "ผู้ดูแลส่วนเสริม",
"contributorsLabel": "ผู้ช่วยเหลือโปรเจกต์",
"contributorsHint": "รายชื่อผู้ที่ช่วยเหลือกับโปรเจ็กต์ ReVanced",
"aboutLabel": "เกี่ยวกับ",
@ -119,6 +117,8 @@
"deleteTempDirHint": "ลบไฟล์ชั่วคราวที่ไม่ได้ใช้งาน",
"deletedTempDir": "ลบไฟล์ชั่วคราวแล้ว",
"deletedLogs": "ลบบันทึกแล้ว",
"regenerateKeystoreLabel": "สร้าง Keystore ใหม่",
"regenerateKeystoreDialogTitle": "สร้าง Keystore ใหม่",
"exportKeystoreLabel": "ส่งออก keystore",
"exportedKeystore": "ส่งออก keystore แล้ว",
"noKeystoreExportFileFound": "ไม่มี keystore ให้ส่งออก",
@ -132,6 +132,8 @@
"openButton": "เปิด",
"installButton": "ติดตั้ง",
"uninstallButton": "ถอนการติดตั้ง",
"exportButton": "ส่งออก",
"deleteButton": "ลบ",
"rootDialogTitle": "ข้อผิดพลาด",
"rootDialogText": "แอปได้รับการติดตั้งด้วยสิทธิ์ผู้ใช้ขั้นสูงแต่ ReVanced Manager ปัจจุบันยังไม่ได้รับสิทธิ์\nโปรดอนุญาตสิทธิ์ผู้ใช้ขั้นสูงก่อน",
"packageNameLabel": "ชื่อแพ็กเกจ",

View File

@ -158,20 +158,18 @@
"languageLabel": "Dil",
"languageUpdated": "Dil güncellendi",
"sourcesLabel": "Alternatif kaynaklar",
"sourcesLabelHint": "ReVanced Patches ve ReVanced Integrations için alternatif kaynakları ayarlayın",
"sourcesIntegrationsLabel": "Integrations source",
"sourcesLabelHint": "ReVanced Yamaları için alternatif kaynakları yapılandırın",
"useAlternativeSources": "Alternatif kaynakları kullan",
"useAlternativeSourcesHint": "ReVanced Patches ve ReVanced Integrations için API yerine alternatif kaynakları kullanın",
"useAlternativeSourcesHint": "ReVanced Yamaları için API yerine alternatif kaynakları kullanın",
"sourcesResetDialogTitle": "Sıfırla",
"sourcesResetDialogText": "Kaynaklarınızı varsayılan değerlerine sıfırlamak istediğinizden emin misiniz?",
"apiURLResetDialogText": "API URL'nizi varsayılan değerine sıfırlamak istediğinizden emin misiniz?",
"sourcesUpdateNote": "Not: Bu, ReVanced Patches'ı ve ReVanced Integrations'ı otomatik olarak alternatif kaynaklardan indirecektir.\n\nBu sizi alternatif kaynağa bağlayacaktır.",
"sourcesUpdateNote": "Not: Bu, ReVanced Yamalarını otomatik olarak alternatif kaynaklardan indirecektir.\n\nBu sizi alternatif kaynağa bağlayacaktır.",
"apiURLLabel": "API URL'si",
"apiURLHint": "ReVanced Manager'in API URL'sini ayarlayın",
"selectApiURL": "API URL'si",
"orgPatchesLabel": "Patches organization",
"sourcesPatchesLabel": "Patches source",
"orgIntegrationsLabel": "Integrations organization",
"contributorsLabel": "Katkıda bulunanlar",
"contributorsHint": "ReVanced'a katkıda bulunanların listesi",
"logsLabel": "Logları paylaş",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Geçici dosyaları sil",
"deleteTempDirHint": "Kullanılmayan geçici dosyaları silin",
"deletedTempDir": "Geçici dosyalar silindi",
"exportSettingsLabel": "Ayarları dışa aktar",
"exportSettingsHint": "Ayarları JSON dosyasına aktar",
"exportedSettings": "Ayarlar dışa aktarıldı",
"importSettingsLabel": "Ayarları içe aktar",
"importSettingsHint": "Ayarları JSON dosyasından içe aktar",
"importedSettings": "Ayarlar içe aktarıldı",
"exportPatchesLabel": "Yama seçimini dışa aktar",
"exportPatchesHint": "Yama seçimini bir JSON dosyasına kaydedin",
"exportedPatches": "Yama seçimi dışa aktarıldı",

View File

@ -158,20 +158,18 @@
"languageLabel": "Мова",
"languageUpdated": "Мову застосунку оновлено",
"sourcesLabel": "Альтернативні джерела",
"sourcesLabelHint": "Налаштувати альтернативні джерела для ReVanced Patches та ReVanced Integrations",
"sourcesIntegrationsLabel": "Integrations source",
"sourcesLabelHint": "Налаштувати альтернативні джерела для ReVanced Patches",
"useAlternativeSources": "Використовувати альтернативні джерела",
"useAlternativeSourcesHint": "Використовувати альтернативні джерела для ReVanced Patches та ReVanced Integrations замість API",
"useAlternativeSourcesHint": "Використовувати альтернативні джерела для ReVanced Patches замість API",
"sourcesResetDialogTitle": "Скинути",
"sourcesResetDialogText": "Ви дійсно бажаєте відновити стандартні значення джерел?",
"apiURLResetDialogText": "Ви дійсно бажаєте відновити API URL до стандартного значення?",
"sourcesUpdateNote": "Примітка. Це автоматично завантажить ReVanced Patches і ReVanced Integrations з альтернативних джерел.\n\nЦе під'єднає Вас до альтернативного джерела.",
"sourcesUpdateNote": "Примітка: Це автоматично завантажить ReVanced Patches з альтернативних джерел.\n\nЦе під'єднає Вас до альтернативного джерела.",
"apiURLLabel": "URL-адреса API",
"apiURLHint": "Налаштувати API URL для ReVanced Manager",
"selectApiURL": "URL-адреса API",
"orgPatchesLabel": "Patches organization",
"sourcesPatchesLabel": "Patches source",
"orgIntegrationsLabel": "Integrations organization",
"contributorsLabel": "Розробники",
"contributorsHint": "Список розробників ReVanced",
"logsLabel": "Поділитися журналами",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "Видалити тимчасові файли",
"deleteTempDirHint": "Видалити невикористані тимчасові файли",
"deletedTempDir": "Тимчасові файли видалено",
"exportSettingsLabel": "Експортувати налаштування",
"exportSettingsHint": "Експортувати налаштування у файл JSON",
"exportedSettings": "Налаштування експортовано",
"importSettingsLabel": "Імпортувати налаштування",
"importSettingsHint": "Імпортувати налаштування з файлу JSON",
"importedSettings": "Налаштування імпортовано",
"exportPatchesLabel": "Експортувати вибір патчів",
"exportPatchesHint": "Експортувати вибір патчів у файл JSON",
"exportedPatches": "Вибір патчів експортовано",

View File

@ -68,12 +68,10 @@
"settingsView": {
"widgetTitle": "Sozlamalar",
"exportSectionTitle": "Import & eksport",
"sourcesIntegrationsLabel": "Integratsiyani manbai",
"sourcesResetDialogTitle": "Oddiy holga qaytarish",
"apiURLLabel": "API URL",
"selectApiURL": "API URL",
"sourcesPatchesLabel": "Patchlarni manbai",
"orgIntegrationsLabel": "Integratsiyani tashkiloti",
"contributorsLabel": "Yordamchilar",
"contributorsHint": "ReVanced yordamchilani royxati",
"aboutLabel": "Haqida",

View File

@ -156,20 +156,15 @@
"languageLabel": "Ngôn ngữ",
"languageUpdated": "Ngôn ngữ đã cập nhập",
"sourcesLabel": "Nguồn thay thế",
"sourcesLabelHint": "Cấu hình nguồn thay thế cho Bản vá ReVanced và Tích hợp ReVanced",
"sourcesIntegrationsLabel": "Nguồn tích hợp",
"useAlternativeSources": "Dùng nguồn thay thế",
"useAlternativeSourcesHint": "Dùng nguồn thay thế cho Bản vá ReVanced và Tích hợp ReVanced thay cho API",
"sourcesResetDialogTitle": "Đặt lại",
"sourcesResetDialogText": "Bạn có chắc chắn muốn đặt lại nguồn của mình về giá trị mặc định không?",
"apiURLResetDialogText": "Bạn có chắc bạn muốn đặt lại API URL của bạn về giá trị mặc định của nó không?",
"sourcesUpdateNote": "Lưu ý: Việc này sẽ tự động tải Bản vá ReVanced và Tích hợp ReVanced từ nguồn thay thế.",
"apiURLLabel": "Địa chỉ URL của API",
"apiURLHint": "Cấu hình địa chỉ URL API của ReVanced Manager",
"selectApiURL": "Địa chỉ URL của API",
"orgPatchesLabel": "Tác giả bản vá",
"sourcesPatchesLabel": "Nguồn bản vá",
"orgIntegrationsLabel": "Tác giá bản tích hợp",
"contributorsLabel": "Những người đóng góp",
"contributorsHint": "Danh sách những người đóng góp cho ReVanced",
"logsLabel": "Chia sẻ nhật ký",

View File

@ -156,20 +156,18 @@
"languageLabel": "语言",
"languageUpdated": "语言已更新",
"sourcesLabel": "其他来源",
"sourcesLabelHint": "配置 ReVanced 补丁和 ReVanced 集成的替代源",
"sourcesIntegrationsLabel": "集成源",
"sourcesLabelHint": "配置替代补丁来源",
"useAlternativeSources": "使用其他来源",
"useAlternativeSourcesHint": "使用 ReVanced 补丁和 ReVanced 集成的替代来源而不是 API",
"useAlternativeSourcesHint": "使用 ReVic Patches 替代API 的其他来源",
"sourcesResetDialogTitle": "重置",
"sourcesResetDialogText": "您确定要将源重置为默认值吗?",
"apiURLResetDialogText": "您确定要重置你的 API URL 为默认值吗?",
"sourcesUpdateNote": "注意:这将自动从其他来源下载 ReVanced 补丁和 ReVanced 集成。\n\n这将连接到替代源。",
"sourcesUpdateNote": "注意:这将自动从备选来源下载ReVanced 补丁。\n\n这将连接到您的备用源。",
"apiURLLabel": "API 地址",
"apiURLHint": "配置 ReVanced Manager 的 API URL",
"selectApiURL": "API 地址",
"orgPatchesLabel": "补丁组织",
"sourcesPatchesLabel": "补丁来源",
"orgIntegrationsLabel": "集成组织",
"contributorsLabel": "贡献者",
"contributorsHint": "ReVanced 贡献者列表",
"logsLabel": "分享日志",
@ -197,6 +195,12 @@
"deleteTempDirLabel": "删除临时文件",
"deleteTempDirHint": "删除未使用的临时文件",
"deletedTempDir": "已删除临时文件",
"exportSettingsLabel": "导出设置",
"exportSettingsHint": "导出设置到 JSON 文件",
"exportedSettings": "设置已导出",
"importSettingsLabel": "导入设置",
"importSettingsHint": "从 JSON 文件导入设置",
"importedSettings": "已导入设置",
"exportPatchesLabel": "导出选择的补丁",
"exportPatchesHint": "将选择的补丁导出到 JSON 文件",
"exportedPatches": "导出选择的修补程序",

View File

@ -90,7 +90,6 @@
"noSavedPatches": "冇保存咗嘅補丁選擇俾呢個應用。\n撳\"完成\"嚟保存當前嘅選擇。",
"noPatchesFound": "冇補丁俾呢個揀咗嘅應用。"
},
"patchOptionsView": {},
"patchItem": {
"unsupportedDialogText": "揀咗哩種修改可能會導致修改錯誤\n\nApp 版本: ${packageVersion}\n現時支援嘅版本: \n${supportedVersions}"
},
@ -111,7 +110,6 @@
"dynamicThemeLabel": "Material You",
"dynamicThemeHint": "享受一個更貼近你裝置嘅體驗",
"languageLabel": "語言",
"sourcesIntegrationsLabel": "項目整合來源",
"sourcesResetDialogTitle": "重設",
"sourcesResetDialogText": "真喺要重新設定你嘅來源返去預設值?",
"apiURLResetDialogText": "真喺要重新設定 API URL 返去預設值?",
@ -119,7 +117,6 @@
"selectApiURL": "API 网址",
"orgPatchesLabel": "修補檔組織",
"sourcesPatchesLabel": "修補檔來源",
"orgIntegrationsLabel": "項目整合組織",
"contributorsLabel": "貢獻者",
"contributorsHint": "ReVanced 貢獻者列表",
"logsLabel": "分享記錄檔",
@ -155,6 +152,5 @@
},
"contributorsView": {
"widgetTitle": "貢獻者"
},
"installErrorDialog": {}
}
}

View File

@ -36,7 +36,7 @@
"updateDialogText": "${file} 有新的更新可用。\n\n目前安裝的版本是 ${version}。",
"downloadConsentDialogTitle": "需要下載必要檔案嗎?",
"downloadConsentDialogText": "ReVanced Manager 需要下載必要檔案才能正常執行。",
"downloadConsentDialogText2": "這項操作將連結至 ${url}。",
"downloadConsentDialogText2": "這將帶您前往至 ${url}。",
"downloadingMessage": "正在下載更新...",
"downloadedMessage": "已下載更新",
"installingMessage": "正在安裝更新...",
@ -53,7 +53,7 @@
},
"patcherView": {
"widgetTitle": "修補工具",
"patchButton": "補",
"patchButton": "",
"incompatibleArchWarningDialogText": "此架構尚未支援修補,可能會失敗。仍要繼續嗎?",
"removedPatchesWarningDialogText": "自您上次修補此應用程式以來移除的修補程式:\n\n${patches}\n\n${newPatches}仍要繼續嗎?",
"addedPatchesDialogText": "自您上次修補此應用程式以來新增的修補程式:\n\n${addedPatches}",
@ -158,20 +158,18 @@
"languageLabel": "語言",
"languageUpdated": "已更新語言",
"sourcesLabel": "替代來源",
"sourcesLabelHint": "設定 ReVanced 修補和 ReVanced 整合的備用來源",
"sourcesIntegrationsLabel": "整合來源",
"sourcesLabelHint": "為 ReVanced 修補檔設定備用來源",
"useAlternativeSources": "使用替代來源",
"useAlternativeSourcesHint": "改用 ReVanced 修補檔和 ReVanced 整合的替代來源,而不是 API",
"useAlternativeSourcesHint": "使用 ReVanced 修補檔備用來源以取代 API",
"sourcesResetDialogTitle": "重設",
"sourcesResetDialogText": "確定要將來源重設為預設值嗎?",
"apiURLResetDialogText": "確定要還原 API URL 至預設值嗎?",
"sourcesUpdateNote": "注意:這項操作操作將自動從備用來源下載 ReVanced 修補檔和 ReVanced 整合。\n\n這項操作將連結至備用來源。",
"sourcesUpdateNote": "注意: 本操作將自動從備用來源下載 ReVanced 修補檔。\n\n本操作將連線至備用來源。",
"apiURLLabel": "API URL",
"apiURLHint": "設定 ReVanced Manager 的 API URL",
"selectApiURL": "API URL",
"orgPatchesLabel": "修補檔組織",
"sourcesPatchesLabel": "修補檔來源",
"orgIntegrationsLabel": "整合組織",
"contributorsLabel": "貢獻者",
"contributorsHint": "ReVanced 貢獻者清單",
"logsLabel": "分享記錄檔",
@ -199,6 +197,12 @@
"deleteTempDirLabel": "刪除暫存檔案",
"deleteTempDirHint": "刪除未使用的暫存檔案",
"deletedTempDir": "已刪除暫存檔案",
"exportSettingsLabel": "匯出設定",
"exportSettingsHint": "匯出設定至 JSON 檔",
"exportedSettings": "已匯出設定",
"importSettingsLabel": "匯入設定",
"importSettingsHint": "從 JSON 檔匯入設定",
"importedSettings": "已匯入設定",
"exportPatchesLabel": "匯出修補選取",
"exportPatchesHint": "匯出修補選取到 JSON 檔案",
"exportedPatches": "已匯出修補選取",

View File

@ -50,6 +50,7 @@ Learn how to configure ReVanced Manager.
- 🔑 Keystore used to sign patched apps
- 📄 Remembered selection of patches for each app
- ⚙️ Remembered patch options
- 🛠️ Remembered settings
> Note
> These can be used to backup and restore or reset settings to default in case of issues.

View File

@ -62,11 +62,12 @@ class Option {
required this.value,
required this.values,
required this.required,
required this.valueType,
required this.type,
});
factory Option.fromJson(Map<String, dynamic> json) {
_migrateV17ToV19(json);
_migrateV19ToV20(json);
return _$OptionFromJson(json);
}
@ -83,13 +84,25 @@ class Option {
}
}
static void _migrateV19ToV20(Map<String, dynamic> json) {
if (json['valueType'] != null) {
final String type = json['valueType'];
json['type'] = type.endsWith('Array')
? 'kotlin.collections.List<kotlin.${type.replaceAll('Array', '')}>'
: 'kotlin.$type';
json['valueType'] = null;
}
}
final String key;
final String title;
final String description;
final dynamic value;
final Map<String, dynamic>? values;
final bool required;
final String valueType;
final String type;
Map toJson() => _$OptionToJson(this);
}

View File

@ -111,11 +111,7 @@ class GithubAPI {
);
if (asset != null) {
final String downloadUrl = asset['browser_download_url'];
if (extension == '.apk') {
_managerAPI.setIntegrationsDownloadURL(downloadUrl);
} else {
_managerAPI.setPatchesDownloadURL(downloadUrl);
}
_managerAPI.setPatchesDownloadURL(downloadUrl);
return await _downloadManager.getSingleFile(
downloadUrl,
);

View File

@ -30,6 +30,7 @@ class ManagerAPI {
final String patcherRepo = 'revanced-patcher';
final String cliRepo = 'revanced-cli';
late SharedPreferences _prefs;
Map<String, List>? contributors;
List<Patch> patches = [];
List<Option> options = [];
Patch? selectedPatch;
@ -44,15 +45,13 @@ class ManagerAPI {
String keystoreFile =
'/sdcard/Android/data/app.revanced.manager.flutter/files/revanced-manager.keystore';
String defaultKeystorePassword = 's3cur3p@ssw0rd';
String defaultApiUrl = 'https://api.revanced.app/';
String defaultApiUrl = 'https://api.revanced.app/v4';
String defaultRepoUrl = 'https://api.github.com';
String defaultPatcherRepo = 'revanced/revanced-patcher';
String defaultPatchesRepo = 'revanced/revanced-patches';
String defaultIntegrationsRepo = 'revanced/revanced-integrations';
String defaultCliRepo = 'revanced/revanced-cli';
String defaultManagerRepo = 'revanced/revanced-manager';
String? patchesVersion = '';
String? integrationsVersion = '';
Future<void> initialize() async {
_prefs = await SharedPreferences.getInstance();
@ -68,14 +67,24 @@ class ManagerAPI {
releaseBuild = !(await getCurrentManagerVersion()).contains('-dev');
}
// Migrate to new API URL if not done yet as the old one is sunset.
final bool hasMigratedToNewApi =
_prefs.getBool('migratedToNewApiUrl') ?? false;
if (!hasMigratedToNewApi) {
final String apiUrl = getApiUrl().toLowerCase();
if (apiUrl.contains('releases.revanced.app')) {
await setApiUrl(''); // Reset to default.
_prefs.setBool('migratedToNewApiUrl', true);
final hasMigratedToNewMigrationSystem = _prefs.getBool('migratedToNewApiPrefSystem') ?? false;
if (!hasMigratedToNewMigrationSystem) {
final apiUrl = getApiUrl().toLowerCase();
final isReleases = apiUrl.contains('releases.revanced.app');
final isDomain = apiUrl.endsWith('api.revanced.app');
final isV2 = apiUrl.contains('api.revanced.app/v2');
final isV3 = apiUrl.contains('api.revanced.app/v3');
if (isReleases || isDomain || isV2 || isV3) {
await resetApiUrl();
// At this point, the preference is removed.
// Now, no more migration is needed because:
// If the user touches the API URL,
// it will be remembered forever as intended.
// On the other hand, if the user resets it or sets it to the default,
// the URL will be updated whenever the app is updated.
_prefs.setBool('migratedToNewApiPrefSystem', true);
}
}
@ -83,10 +92,8 @@ class ManagerAPI {
_prefs.getBool('migratedToAlternativeSource') ?? false;
if (!hasMigratedToAlternativeSource) {
final String patchesRepo = getPatchesRepo();
final String integrationsRepo = getIntegrationsRepo();
final bool usingAlternativeSources =
patchesRepo.toLowerCase() != defaultPatchesRepo ||
integrationsRepo.toLowerCase() != defaultIntegrationsRepo;
patchesRepo.toLowerCase() != defaultPatchesRepo;
_prefs.setBool('useAlternativeSources', usingAlternativeSources);
_prefs.setBool('migratedToAlternativeSource', true);
}
@ -101,12 +108,25 @@ class ManagerAPI {
return _prefs.getString('apiUrl') ?? defaultApiUrl;
}
Future<void> setApiUrl(String url) async {
if (url.isEmpty || url == ' ') {
url = defaultApiUrl;
}
Future<void> resetApiUrl() async {
await _prefs.remove('apiUrl');
await _revancedAPI.clearAllCache();
_toast.showBottom(t.settingsView.restartAppForChanges);
}
Future<void> setApiUrl(String url) async {
url = url.toLowerCase();
if (url == defaultApiUrl) {
return;
}
if (!url.startsWith('http')) {
url = 'https://$url';
}
await _prefs.setString('apiUrl', url);
await _revancedAPI.clearAllCache();
_toast.showBottom(t.settingsView.restartAppForChanges);
}
@ -200,14 +220,6 @@ class ManagerAPI {
await _prefs.setStringList('savedPatches-$packageName', patchesJson);
}
String getIntegrationsDownloadURL() {
return _prefs.getString('integrationsDownloadURL') ?? '';
}
Future<void> setIntegrationsDownloadURL(String value) async {
await _prefs.setString('integrationsDownloadURL', value);
}
List<Patch> getUsedPatches(String packageName) {
final List<String> patchesJson =
_prefs.getStringList('usedPatches-$packageName') ?? [];
@ -256,17 +268,6 @@ class ManagerAPI {
_prefs.remove('patchOption-$packageName-$patchName-$key');
}
String getIntegrationsRepo() {
return _prefs.getString('integrationsRepo') ?? defaultIntegrationsRepo;
}
Future<void> setIntegrationsRepo(String value) async {
if (value.isEmpty || value.startsWith('/') || value.endsWith('/')) {
value = defaultIntegrationsRepo;
}
await _prefs.setString('integrationsRepo', value);
}
bool getUseDynamicTheme() {
return _prefs.getBool('useDynamicTheme') ?? false;
}
@ -427,7 +428,7 @@ class ManagerAPI {
}
Future<Map<String, List<dynamic>>> getContributors() async {
return await _revancedAPI.getContributors();
return contributors ??= await _revancedAPI.getContributors();
}
Future<List<Patch>> getPatches() async {
@ -459,33 +460,16 @@ class ManagerAPI {
}
Future<File?> downloadPatches() async {
if (!isUsingAlternativeSources()) {
return await _revancedAPI.getLatestReleaseFile('patches');
}
try {
final String repoName = getPatchesRepo();
final String currentVersion = await getCurrentPatchesVersion();
final String url = getPatchesDownloadURL();
return await _githubAPI.getReleaseFile(
'.jar',
repoName,
currentVersion,
url,
);
} on Exception catch (e) {
if (kDebugMode) {
print(e);
}
return null;
}
}
Future<File?> downloadIntegrations() async {
try {
final String repoName = !isUsingAlternativeSources()
? defaultIntegrationsRepo
: getIntegrationsRepo();
final String currentVersion = await getCurrentIntegrationsVersion();
final String url = getIntegrationsDownloadURL();
return await _githubAPI.getReleaseFile(
'.apk',
'.rvp',
repoName,
currentVersion,
url,
@ -499,18 +483,12 @@ class ManagerAPI {
}
Future<File?> downloadManager() async {
return await _revancedAPI.getLatestReleaseFile(
'.apk',
defaultManagerRepo,
);
return await _revancedAPI.getLatestReleaseFile('manager');
}
Future<String?> getLatestPatchesReleaseTime() async {
if (!isUsingAlternativeSources()) {
return await _revancedAPI.getLatestReleaseTime(
'.json',
defaultPatchesRepo,
);
return await _revancedAPI.getLatestReleaseTime('patches');
} else {
final release = await _githubAPI.getLatestRelease(getPatchesRepo());
if (release != null) {
@ -525,39 +503,20 @@ class ManagerAPI {
Future<String?> getLatestManagerReleaseTime() async {
return await _revancedAPI.getLatestReleaseTime(
'.apk',
defaultManagerRepo,
'manager',
);
}
Future<String?> getLatestManagerVersion() async {
return await _revancedAPI.getLatestReleaseVersion(
'.apk',
defaultManagerRepo,
'manager',
);
}
Future<String?> getLatestIntegrationsVersion() async {
if (!isUsingAlternativeSources()) {
return await _revancedAPI.getLatestReleaseVersion(
'.apk',
defaultIntegrationsRepo,
);
} else {
final release = await _githubAPI.getLatestRelease(getIntegrationsRepo());
if (release != null) {
return release['tag_name'];
} else {
return null;
}
}
}
Future<String?> getLatestPatchesVersion() async {
if (!isUsingAlternativeSources()) {
return await _revancedAPI.getLatestReleaseVersion(
'.json',
defaultPatchesRepo,
'patches',
);
} else {
final release = await _githubAPI.getLatestRelease(getPatchesRepo());
@ -620,25 +579,6 @@ class ManagerAPI {
await downloadPatches();
}
Future<String> getCurrentIntegrationsVersion() async {
integrationsVersion = _prefs.getString('integrationsVersion') ?? '0.0.0';
if (integrationsVersion == '0.0.0' || isPatchesAutoUpdate()) {
final String newIntegrationsVersion =
await getLatestIntegrationsVersion() ?? '0.0.0';
if (integrationsVersion != newIntegrationsVersion &&
newIntegrationsVersion != '0.0.0') {
await setCurrentIntegrationsVersion(newIntegrationsVersion);
}
}
return integrationsVersion!;
}
Future<void> setCurrentIntegrationsVersion(String version) async {
await _prefs.setString('integrationsVersion', version);
await setIntegrationsDownloadURL('');
await downloadIntegrations();
}
Future<List<PatchedApplication>> getAppsToRemove(
List<PatchedApplication> patchedApps,
) async {
@ -841,6 +781,36 @@ class ManagerAPI {
return jsonDecode(string);
}
String exportSettings() {
final Map<String, dynamic> settings = _prefs
.getKeys()
.fold<Map<String, dynamic>>({}, (Map<String, dynamic> map, String key) {
map[key] = _prefs.get(key);
return map;
});
return jsonEncode(settings);
}
Future<void> importSettings(String settings) async {
final Map<String, dynamic> settingsMap = jsonDecode(settings);
settingsMap.forEach((key, value) {
if (value is bool) {
_prefs.setBool(key, value);
} else if (value is int) {
_prefs.setInt(key, value);
} else if (value is double) {
_prefs.setDouble(key, value);
} else if (value is String) {
_prefs.setString(key, value);
} else if (value is List<dynamic>) {
_prefs.setStringList(
key,
value.map((a) => json.encode(a.toJson())).toList(),
);
}
});
}
void resetAllOptions() {
_prefs.getKeys().where((key) => key.startsWith('patchOption-')).forEach(
(key) {

View File

@ -18,8 +18,7 @@ import 'package:share_plus/share_plus.dart';
@lazySingleton
class PatcherAPI {
static const patcherChannel =
MethodChannel('app.revanced.manager.flutter/patcher');
static const patcherChannel = MethodChannel('app.revanced.manager.flutter/patcher');
final ManagerAPI _managerAPI = locator<ManagerAPI>();
final RootAPI _rootAPI = RootAPI();
late Directory _dataDir;
@ -27,13 +26,12 @@ class PatcherAPI {
late File _keyStoreFile;
List<Patch> _patches = [];
List<Patch> _universalPatches = [];
List<String> _compatiblePackages = [];
Set<String> _compatiblePackages = {};
Map filteredPatches = <String, List<Patch>>{};
File? outFile;
Future<void> initialize() async {
await loadPatches();
await _managerAPI.downloadIntegrations();
final Directory appCache = await getApplicationSupportDirectory();
_dataDir = await getExternalStorageDirectory() ?? appCache;
_tmpDir = Directory('${appCache.path}/patcher');
@ -47,8 +45,8 @@ class PatcherAPI {
}
}
List<String> getCompatiblePackages() {
final List<String> compatiblePackages = [];
Set<String> getCompatiblePackages() {
final Set<String> compatiblePackages = {};
for (final Patch patch in _patches) {
for (final Package package in patch.compatiblePackages) {
if (!compatiblePackages.contains(package.name)) {
@ -67,16 +65,16 @@ class PatcherAPI {
try {
if (_patches.isEmpty) {
_patches = await _managerAPI.getPatches();
_universalPatches = getUniversalPatches();
_compatiblePackages = getCompatiblePackages();
}
} on Exception catch (e) {
if (kDebugMode) {
print(e);
}
_patches = List.empty();
}
_compatiblePackages = getCompatiblePackages();
_universalPatches = getUniversalPatches();
}
Future<List<ApplicationWithIcon>> getFilteredInstalledApps(
@ -85,6 +83,7 @@ class PatcherAPI {
final List<ApplicationWithIcon> filteredApps = [];
final bool allAppsIncluded =
_universalPatches.isNotEmpty && showUniversalPatches;
if (allAppsIncluded) {
final appList = await DeviceApps.getInstalledApplications(
includeAppIcons: true,
@ -95,6 +94,7 @@ class PatcherAPI {
filteredApps.add(app as ApplicationWithIcon);
}
}
for (final packageName in _compatiblePackages) {
try {
if (!filteredApps.any((app) => app.packageName == packageName)) {
@ -153,7 +153,6 @@ class PatcherAPI {
List<Patch> selectedPatches,
bool isFromStorage,
) async {
final File? integrationsFile = await _managerAPI.downloadIntegrations();
final Map<String, Map<String, dynamic>> options = {};
for (final patch in selectedPatches) {
if (patch.options.isNotEmpty) {
@ -169,44 +168,41 @@ class PatcherAPI {
}
}
if (integrationsFile != null) {
_dataDir.createSync();
_tmpDir.createSync();
final Directory workDir = await _tmpDir.createTemp('tmp-');
_dataDir.createSync();
_tmpDir.createSync();
final Directory workDir = await _tmpDir.createTemp('tmp-');
final File inApkFile = File('${workDir.path}/in.apk');
await File(apkFilePath).copy(inApkFile.path);
final File inApkFile = File('${workDir.path}/in.apk');
await File(apkFilePath).copy(inApkFile.path);
if (isFromStorage) {
// The selected apk was copied to cacheDir by the file picker, so it's not needed anymore.
// rename() can't be used here, as Android system also counts the size of files moved out from cacheDir
// as part of the app's cache size.
File(apkFilePath).delete();
}
if (isFromStorage) {
// The selected apk was copied to cacheDir by the file picker, so it's not needed anymore.
// rename() can't be used here, as Android system also counts the size of files moved out from cacheDir
// as part of the app's cache size.
File(apkFilePath).delete();
}
outFile = File('${workDir.path}/out.apk');
outFile = File('${workDir.path}/out.apk');
final Directory tmpDir =
Directory('${workDir.path}/revanced-temporary-files');
final Directory tmpDir =
Directory('${workDir.path}/revanced-temporary-files');
try {
await patcherChannel.invokeMethod(
'runPatcher',
{
'inFilePath': inApkFile.path,
'outFilePath': outFile!.path,
'integrationsPath': integrationsFile.path,
'selectedPatches': selectedPatches.map((p) => p.name).toList(),
'options': options,
'tmpDirPath': tmpDir.path,
'keyStoreFilePath': _keyStoreFile.path,
'keystorePassword': _managerAPI.getKeystorePassword(),
},
);
} on Exception catch (e) {
if (kDebugMode) {
print(e);
}
try {
await patcherChannel.invokeMethod(
'runPatcher',
{
'inFilePath': inApkFile.path,
'outFilePath': outFile!.path,
'selectedPatches': selectedPatches.map((p) => p.name).toList(),
'options': options,
'tmpDirPath': tmpDir.path,
'keyStoreFilePath': _keyStoreFile.path,
'keystorePassword': _managerAPI.getKeystorePassword(),
},
);
} on Exception catch (e) {
if (kDebugMode) {
print(e);
}
}
}

View File

@ -1,7 +1,5 @@
import 'dart:async';
import 'dart:io';
import 'package:collection/collection.dart';
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
@ -31,7 +29,7 @@ class RevancedAPI {
final Map<String, List<dynamic>> contributors = {};
try {
final response = await _dio.get('/contributors');
final List<dynamic> repositories = response.data['repositories'];
final List<dynamic> repositories = response.data;
for (final Map<String, dynamic> repo in repositories) {
final String name = repo['name'];
contributors[name] = repo['contributors'];
@ -46,21 +44,15 @@ class RevancedAPI {
}
Future<Map<String, dynamic>?> _getLatestRelease(
String extension,
String repoName,
String toolName,
) {
if (!locator<ManagerAPI>().getDownloadConsent()) {
return Future(() => null);
}
return getToolsLock.synchronized(() async {
try {
final response = await _dio.get('/tools');
final List<dynamic> tools = response.data['tools'];
return tools.firstWhereOrNull(
(t) =>
(t['repository'] as String) == repoName &&
(t['name'] as String).endsWith(extension),
);
final response = await _dio.get('/$toolName');
return response.data;
} on Exception catch (e) {
if (kDebugMode) {
print(e);
@ -71,13 +63,11 @@ class RevancedAPI {
}
Future<String?> getLatestReleaseVersion(
String extension,
String repoName,
String toolName,
) async {
try {
final Map<String, dynamic>? release = await _getLatestRelease(
extension,
repoName,
toolName,
);
if (release != null) {
return release['version'];
@ -92,16 +82,14 @@ class RevancedAPI {
}
Future<File?> getLatestReleaseFile(
String extension,
String repoName,
String toolName,
) async {
try {
final Map<String, dynamic>? release = await _getLatestRelease(
extension,
repoName,
toolName,
);
if (release != null) {
final String url = release['browser_download_url'];
final String url = release['download_url'];
return await _downloadManager.getSingleFile(url);
}
} on Exception catch (e) {
@ -129,13 +117,10 @@ class RevancedAPI {
}
Future<File?> downloadManager() async {
final Map<String, dynamic>? release = await _getLatestRelease(
'.apk',
'revanced/revanced-manager',
);
final Map<String, dynamic>? release = await _getLatestRelease('manager');
File? outputFile;
await for (final result in _downloadManager.getFileStream(
release!['browser_download_url'] as String,
release!['download_url'] as String,
)) {
if (result is DownloadProgress) {
final totalSize = result.totalSize ?? 10000000;
@ -152,17 +137,15 @@ class RevancedAPI {
}
Future<String?> getLatestReleaseTime(
String extension,
String repoName,
String toolName,
) async {
try {
final Map<String, dynamic>? release = await _getLatestRelease(
extension,
repoName,
toolName,
);
if (release != null) {
final DateTime timestamp =
DateTime.parse(release['timestamp'] as String);
DateTime.parse(release['created_at'] as String);
return format(timestamp, locale: 'en_short');
}
} on Exception catch (e) {

View File

@ -30,30 +30,13 @@ class ContributorsView extends StatelessWidget {
sliver: SliverList(
delegate: SliverChildListDelegate.fixed(
<Widget>[
ContributorsCard(
title: 'ReVanced Patcher',
contributors: model.patcherContributors,
),
const SizedBox(height: 20),
ContributorsCard(
title: 'ReVanced Patches',
contributors: model.patchesContributors,
),
const SizedBox(height: 20),
ContributorsCard(
title: 'ReVanced Integrations',
contributors: model.integrationsContributors,
),
const SizedBox(height: 20),
ContributorsCard(
title: 'ReVanced CLI',
contributors: model.cliContributors,
),
const SizedBox(height: 20),
ContributorsCard(
title: 'ReVanced Manager',
contributors: model.managerContributors,
),
for (final String tool in model.contributors.keys) ...[
ContributorsCard(
title: tool,
contributors: model.contributors[tool]!,
),
const SizedBox(height: 20),
],
SizedBox(height: MediaQuery.viewPaddingOf(context).bottom),
],
),

View File

@ -4,21 +4,10 @@ import 'package:stacked/stacked.dart';
class ContributorsViewModel extends BaseViewModel {
final ManagerAPI _managerAPI = locator<ManagerAPI>();
List<dynamic> patcherContributors = [];
List<dynamic> patchesContributors = [];
List<dynamic> integrationsContributors = [];
List<dynamic> cliContributors = [];
List<dynamic> managerContributors = [];
Map<String, List<dynamic>> contributors = {};
Future<void> getContributors() async {
final Map<String, List<dynamic>> contributors =
await _managerAPI.getContributors();
patcherContributors = contributors[_managerAPI.defaultPatcherRepo] ?? [];
patchesContributors = contributors[_managerAPI.defaultPatchesRepo] ?? [];
integrationsContributors =
contributors[_managerAPI.defaultIntegrationsRepo] ?? [];
cliContributors = contributors[_managerAPI.defaultCliRepo] ?? [];
managerContributors = contributors[_managerAPI.defaultManagerRepo] ?? [];
contributors = await _managerAPI.getContributors();
notifyListeners();
}
}

View File

@ -311,11 +311,8 @@ class HomeViewModel extends BaseViewModel {
_toast.showBottom(t.homeView.downloadingMessage);
final String patchesVersion =
await _managerAPI.getLatestPatchesVersion() ?? '0.0.0';
final String integrationsVersion =
await _managerAPI.getLatestIntegrationsVersion() ?? '0.0.0';
if (patchesVersion != '0.0.0' && integrationsVersion != '0.0.0') {
if (patchesVersion != '0.0.0') {
await _managerAPI.setCurrentPatchesVersion(patchesVersion);
await _managerAPI.setCurrentIntegrationsVersion(integrationsVersion);
_toast.showBottom(t.homeView.downloadedMessage);
forceRefresh(context);
} else {

View File

@ -330,7 +330,6 @@ class InstallerViewModel extends BaseViewModel {
'Version compatibility check: ${_managerAPI.isVersionCompatibilityCheckEnabled()}',
'Show universal patches: ${_managerAPI.areUniversalPatchesEnabled()}',
'Patches source: ${_managerAPI.getPatchesRepo()}',
'Integration source: ${_managerAPI.getIntegrationsRepo()}', //
'\n- Logs',
logsTrimmed.join('\n'),

View File

@ -44,20 +44,20 @@ class PatchOptionsView extends StatelessWidget {
child: Column(
children: [
for (final Option option in model.modifiedOptions)
if (option.valueType == 'String' ||
option.valueType == 'Int')
if (option.type == 'kotlin.String' ||
option.type == 'kotlin.Int')
IntAndStringPatchOption(
patchOption: option,
model: model,
)
else if (option.valueType == 'Boolean')
else if (option.type == 'kotlin.Boolean')
BooleanPatchOption(
patchOption: option,
model: model,
)
else if (option.valueType == 'StringArray' ||
option.valueType == 'IntArray' ||
option.valueType == 'LongArray')
else if (option.type == 'kotlin.collections.List<kotlin.String>' ||
option.type == 'kotlin.collections.List<kotlin.Int>' ||
option.type == 'kotlin.collections.List<kotlin.Long>')
IntStringLongListPatchOption(
patchOption: option,
model: model,

View File

@ -74,7 +74,7 @@ class PatchOptionsViewModel extends BaseViewModel {
title: option.title,
description: option.description,
values: option.values,
valueType: option.valueType,
type: option.type,
value: value,
required: option.required,
key: option.key,
@ -90,7 +90,7 @@ class PatchOptionsViewModel extends BaseViewModel {
title: option.title,
description: option.description,
values: option.values,
valueType: option.valueType,
type: option.type,
value: option.value is List ? option.value.toList() : option.value,
required: option.required,
key: option.key,

View File

@ -13,8 +13,9 @@ class SManageApiUrl extends BaseViewModel {
final TextEditingController _apiUrlController = TextEditingController();
Future<void> showApiUrlDialog(BuildContext context) async {
final String apiUrl = _managerAPI.getApiUrl();
_apiUrlController.text = apiUrl.replaceAll('https://', '');
final apiUrl = _managerAPI.getApiUrl();
_apiUrlController.text = apiUrl;
return showDialog(
context: context,
builder: (context) => AlertDialog(
@ -60,11 +61,7 @@ class SManageApiUrl extends BaseViewModel {
),
FilledButton(
onPressed: () {
String apiUrl = _apiUrlController.text;
if (!apiUrl.startsWith('https')) {
apiUrl = 'https://$apiUrl';
}
_managerAPI.setApiUrl(apiUrl);
_managerAPI.setApiUrl(_apiUrlController.text);
Navigator.of(context).pop();
},
child: Text(t.okButton),
@ -87,7 +84,7 @@ class SManageApiUrl extends BaseViewModel {
),
FilledButton(
onPressed: () {
_managerAPI.setApiUrl('');
_managerAPI.resetApiUrl();
Navigator.of(context)
..pop()
..pop();

View File

@ -14,16 +14,11 @@ class SManageSources extends BaseViewModel {
final TextEditingController _orgPatSourceController = TextEditingController();
final TextEditingController _patSourceController = TextEditingController();
final TextEditingController _orgIntSourceController = TextEditingController();
final TextEditingController _intSourceController = TextEditingController();
Future<void> showSourcesDialog(BuildContext context) async {
final String patchesRepo = _managerAPI.getPatchesRepo();
final String integrationsRepo = _managerAPI.getIntegrationsRepo();
_orgPatSourceController.text = patchesRepo.split('/')[0];
_patSourceController.text = patchesRepo.split('/')[1];
_orgIntSourceController.text = integrationsRepo.split('/')[0];
_intSourceController.text = integrationsRepo.split('/')[1];
return showDialog(
context: context,
builder: (context) => AlertDialog(
@ -72,38 +67,6 @@ class SManageSources extends BaseViewModel {
hintText: patchesRepo.split('/')[1],
),
),
const SizedBox(height: 8),
// Integrations owner's name
TextField(
controller: _orgIntSourceController,
autocorrect: false,
onChanged: (value) => notifyListeners(),
decoration: InputDecoration(
icon: Icon(
Icons.merge_outlined,
color: Theme.of(context).colorScheme.onSurfaceVariant,
),
border: const OutlineInputBorder(),
labelText: t.settingsView.orgIntegrationsLabel,
hintText: integrationsRepo.split('/')[0],
),
),
const SizedBox(height: 8),
// Integrations repository's name
TextField(
controller: _intSourceController,
autocorrect: false,
onChanged: (value) => notifyListeners(),
decoration: InputDecoration(
icon: const Icon(
Icons.merge_outlined,
color: Colors.transparent,
),
border: const OutlineInputBorder(),
labelText: t.settingsView.sourcesIntegrationsLabel,
hintText: integrationsRepo.split('/')[1],
),
),
const SizedBox(height: 20),
Text(t.settingsView.sourcesUpdateNote),
],
@ -113,8 +76,6 @@ class SManageSources extends BaseViewModel {
onPressed: () {
_orgPatSourceController.clear();
_patSourceController.clear();
_orgIntSourceController.clear();
_intSourceController.clear();
Navigator.of(context).pop();
},
child: Text(t.cancelButton),
@ -124,11 +85,7 @@ class SManageSources extends BaseViewModel {
_managerAPI.setPatchesRepo(
'${_orgPatSourceController.text.trim()}/${_patSourceController.text.trim()}',
);
_managerAPI.setIntegrationsRepo(
'${_orgIntSourceController.text.trim()}/${_intSourceController.text.trim()}',
);
_managerAPI.setCurrentPatchesVersion('0.0.0');
_managerAPI.setCurrentIntegrationsVersion('0.0.0');
_managerAPI.setLastUsedPatchesVersion();
_toast.showBottom(t.settingsView.restartAppForChanges);
Navigator.of(context).pop();
@ -154,9 +111,7 @@ class SManageSources extends BaseViewModel {
FilledButton(
onPressed: () {
_managerAPI.setPatchesRepo('');
_managerAPI.setIntegrationsRepo('');
_managerAPI.setCurrentPatchesVersion('0.0.0');
_managerAPI.setCurrentIntegrationsVersion('0.0.0');
_toast.showBottom(t.settingsView.restartAppForChanges);
Navigator.of(context)
..pop()

View File

@ -56,7 +56,6 @@ class SettingsViewModel extends BaseViewModel {
void useAlternativeSources(bool value) {
_managerAPI.useAlternativeSources(value);
_managerAPI.setCurrentPatchesVersion('0.0.0');
_managerAPI.setCurrentIntegrationsVersion('0.0.0');
_managerAPI.setLastUsedPatchesVersion();
notifyListeners();
}
@ -223,6 +222,53 @@ class SettingsViewModel extends BaseViewModel {
notifyListeners();
}
Future<void> exportSettings() async {
try {
final String settings = _managerAPI.exportSettings();
final Directory tempDir = await getTemporaryDirectory();
final String filePath = '${tempDir.path}/manager_settings.json';
final File file = File(filePath);
await file.writeAsString(settings);
final String? result = await FlutterFileDialog.saveFile(
params: SaveFileDialogParams(
sourceFilePath: file.path,
fileName: 'manager_settings.json',
mimeTypesFilter: ['application/json'],
),
);
if (result != null) {
_toast.showBottom(t.settingsView.exportedSettings);
}
} on Exception catch (e) {
if (kDebugMode) {
print(e);
}
}
}
Future<void> importSettings() async {
try {
final String? result = await FlutterFileDialog.pickFile(
params: const OpenFileDialogParams(
fileExtensionsFilter: ['json'],
),
);
if (result != null) {
final File inFile = File(result);
final String settings = inFile.readAsStringSync();
inFile.delete();
_managerAPI.importSettings(settings);
_toast.showBottom(t.settingsView.importedSettings);
_toast.showBottom(t.settingsView.restartAppForChanges);
}
} on Exception catch (e) {
if (kDebugMode) {
print(e);
}
_toast.showBottom(t.settingsView.jsonSelectorErrorMessage);
}
}
Future<void> exportPatches() async {
try {
final File outFile = File(_managerAPI.storedPatchesFile);

View File

@ -49,7 +49,7 @@ class _ContributorsCardState extends State<ContributorsCard> {
child: GestureDetector(
onTap: () => launchUrl(
Uri.parse(
widget.contributors[index]['html_url'],
widget.contributors[index]['url'],
),
mode: LaunchMode.externalApplication,
),

View File

@ -138,7 +138,7 @@ class IntStringLongListPatchOption extends StatelessWidget {
Widget build(BuildContext context) {
final List<dynamic> values = List.from(patchOption.value ?? []);
final ValueNotifier patchOptionValue = ValueNotifier(values);
final String type = patchOption.valueType;
final String type = patchOption.type;
String getKey(dynamic value) {
if (value != null && patchOption.values != null) {
@ -408,12 +408,12 @@ class _TextFieldForPatchOptionState extends State<TextFieldForPatchOption> {
@override
Widget build(BuildContext context) {
final bool isStringOption = widget.patchOption.valueType.contains('String');
final bool isArrayOption = widget.patchOption.valueType.contains('Array');
final bool isStringOption = widget.patchOption.type.contains('String');
final bool isListOption = widget.patchOption.type.contains('List');
selectedKey = selectedKey == '' ? selectedKey : widget.selectedKey;
final bool isValueArray = widget.value?.startsWith('[') ?? false;
final bool shouldResetValue =
!isStringOption && isArrayOption && selectedKey == '' && isValueArray;
!isStringOption && isListOption && selectedKey == '' && isValueArray;
controller.text = shouldResetValue ? '' : widget.value ?? '';
defaultValue ??= controller.text;
return Column(
@ -479,7 +479,7 @@ class _TextFieldForPatchOptionState extends State<TextFieldForPatchOption> {
} else {
controller.text = widget.patchOption.values![value].toString();
widget.onChanged(
isArrayOption
isListOption
? widget.patchOption.values![value]
: controller.text,
);
@ -492,9 +492,9 @@ class _TextFieldForPatchOptionState extends State<TextFieldForPatchOption> {
if (selectedKey == '')
TextFormField(
inputFormatters: [
if (widget.patchOption.valueType.contains('Int'))
if (widget.patchOption.type.contains('Int'))
FilteringTextInputFormatter.allow(RegExp(r'[0-9]')),
if (widget.patchOption.valueType.contains('Long'))
if (widget.patchOption.type.contains('Long'))
FilteringTextInputFormatter.allow(RegExp(r'^[0-9]*\.?[0-9]*')),
],
controller: controller,
@ -505,7 +505,7 @@ class _TextFieldForPatchOptionState extends State<TextFieldForPatchOption> {
tooltip: t.patchOptionsView.tooltip,
itemBuilder: (BuildContext context) {
return [
if (isArrayOption)
if (isListOption)
PopupMenuItem(
value: 'remove',
child: Text(t.remove),

View File

@ -14,6 +14,30 @@ class SExportSection extends StatelessWidget {
return SettingsSection(
title: t.settingsView.exportSectionTitle,
children: <Widget>[
ListTile(
contentPadding: const EdgeInsets.symmetric(horizontal: 20.0),
title: Text(
t.settingsView.exportSettingsLabel,
style: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.w500,
),
),
subtitle: Text(t.settingsView.exportSettingsHint),
onTap: () => _settingsViewModel.exportSettings(),
),
ListTile(
contentPadding: const EdgeInsets.symmetric(horizontal: 20.0),
title: Text(
t.settingsView.importSettingsLabel,
style: const TextStyle(
fontSize: 20,
fontWeight: FontWeight.w500,
),
),
subtitle: Text(t.settingsView.importSettingsHint),
onTap: () => _settingsViewModel.importSettings(),
),
ListTile(
contentPadding: const EdgeInsets.symmetric(horizontal: 20.0),
title: Text(
@ -114,7 +138,6 @@ class SExportSection extends StatelessWidget {
subtitle: Text(t.settingsView.regenerateKeystoreHint),
onTap: () => _showDeleteKeystoreDialog(context),
),
// SManageKeystorePasswordUI(),
],
);
}

View File

@ -33,7 +33,7 @@ bool hasUnsupportedRequiredOption(List<Option> options, Patch patch) {
option.key,
) ==
null) {
requiredOptionsType.add(option.valueType);
requiredOptionsType.add(option.type);
}
}
for (final String optionType in requiredOptionsType) {

View File

@ -4,7 +4,7 @@ homepage: https://revanced.app
publish_to: 'none'
version: 1.23.0-dev.3+101800043
version: 1.23.2+101800050
environment:
sdk: ^3.5.3