mirror of
https://github.com/revanced/revanced-manager.git
synced 2025-05-02 14:54:25 +02:00
Merge branch 'main' into ci/github-attest-slsa-l2
This commit is contained in:
commit
d9f0da461d
2
.github/workflows/release.yml
vendored
2
.github/workflows/release.yml
vendored
@ -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:
|
||||
|
@ -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 = "../.."
|
||||
}
|
||||
|
@ -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()
|
||||
|
@ -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",
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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" }
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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",
|
||||
|
@ -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": "تم تصدير التعديل المحدد",
|
||||
|
@ -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",
|
||||
|
@ -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": "Абагуліць журнал",
|
||||
|
@ -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": "Избраните модификации са експортирани",
|
||||
|
@ -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": "লগ শেয়ার করুন",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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": "Η εξαγωγή των επιλεγμένων τροποποιήσεων ολοκληρώθηκε",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -98,13 +98,11 @@
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "یک تجربه نزدیکتر به دستگاهتان را داشته باشید",
|
||||
"languageLabel": "زبان",
|
||||
"sourcesIntegrationsLabel": "منبع یکپارچه سازی",
|
||||
"sourcesResetDialogTitle": "تنظیم مجدد",
|
||||
"apiURLLabel": "آدرس API",
|
||||
"selectApiURL": "آدرس API",
|
||||
"orgPatchesLabel": "سازمان پچها(وصله ها)",
|
||||
"sourcesPatchesLabel": "منبع پچ ها",
|
||||
"orgIntegrationsLabel": "سازمان یکپارچه سازی",
|
||||
"contributorsLabel": "مشارکت کنندگان",
|
||||
"contributorsHint": "لیست مشارکتکنندگان ریونسد",
|
||||
"aboutLabel": "درباره ما",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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 d’fhé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í",
|
||||
|
@ -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שנה את הגדרות האבטחה שלך ונסה שוב.",
|
||||
|
@ -103,13 +103,11 @@
|
||||
"dynamicThemeLabel": "मेटीरियल यू",
|
||||
"dynamicThemeHint": "अपने डिवाइस के करीब एक अनुभव का आनंद लें",
|
||||
"languageLabel": "भाषा",
|
||||
"sourcesIntegrationsLabel": "एकीकरण स्रोत",
|
||||
"sourcesResetDialogTitle": "रीसेट करें",
|
||||
"apiURLLabel": "API URL",
|
||||
"selectApiURL": "API URL",
|
||||
"orgPatchesLabel": "पैच संगठन",
|
||||
"sourcesPatchesLabel": "पैच स्रोत",
|
||||
"orgIntegrationsLabel": "एकीकरण संगठन",
|
||||
"contributorsLabel": "योगदान कर्ता",
|
||||
"contributorsHint": "ReVanced के योगदानकर्ताओ की सूची",
|
||||
"aboutLabel": "विवरण",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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": "パッチ選択をエクスポートしました",
|
||||
|
@ -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": "패치 선택목록을 내보냈습니다",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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"
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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ă",
|
||||
|
@ -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": "Выборка патчей экспортирована",
|
||||
|
@ -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?",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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",
|
||||
|
@ -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": "Избор печева је извезен",
|
||||
|
@ -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",
|
||||
|
@ -135,11 +135,9 @@
|
||||
"dynamicThemeLabel": "Material You",
|
||||
"dynamicThemeHint": "உங்கள் கருவிக்கு நெருக்கமான அனுபவத்தை அனுபவிக்கவும்",
|
||||
"languageLabel": "மொழி",
|
||||
"sourcesIntegrationsLabel": "ஒருங்கிணைப்புகளின் மூலம்",
|
||||
"sourcesResetDialogTitle": "மறுஅமை",
|
||||
"orgPatchesLabel": "இணைப்புகளின் அமைப்பு",
|
||||
"sourcesPatchesLabel": "இணைப்புகளின் மூலம்",
|
||||
"orgIntegrationsLabel": "ஒருங்கிணைப்புகளின் அமைப்பு",
|
||||
"contributorsLabel": "பங்களிப்பாளர்கள்",
|
||||
"contributorsHint": "ReVancedற்குப் பங்களித்தோர் பட்டியல்",
|
||||
"aboutLabel": "இதைப் பற்றி",
|
||||
|
@ -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": "ชื่อแพ็กเกจ",
|
||||
|
@ -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ı",
|
||||
|
@ -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": "Вибір патчів експортовано",
|
||||
|
@ -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",
|
||||
|
@ -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ý",
|
||||
|
@ -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": "导出选择的修补程序",
|
||||
|
@ -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": {}
|
||||
}
|
||||
}
|
@ -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": "已匯出修補選取",
|
||||
|
@ -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.
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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,
|
||||
);
|
||||
|
@ -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) {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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),
|
||||
],
|
||||
),
|
||||
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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'),
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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();
|
||||
|
@ -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()
|
||||
|
@ -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);
|
||||
|
@ -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,
|
||||
),
|
||||
|
@ -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),
|
||||
|
@ -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(),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user