Compare commits

..

19 Commits

Author SHA1 Message Date
semantic-release-bot
8c8df698d4 chore(release): 1.23.0-dev.4 [skip ci]
# [1.23.0-dev.4](https://github.com/ReVanced/revanced-manager/compare/v1.23.0-dev.3...v1.23.0-dev.4) (2024-10-26)
2024-10-26 15:50:06 +00:00
oSumAtrIX
8d0d782ab5 build(Needs bump): Bump ReVanced Patcher (#2242)
Co-authored-by: aAbed <aabedhkhan@gmail.com>
2024-10-26 17:41:49 +02:00
semantic-release-bot
4db4789a06 chore(release): 1.23.0-dev.3 [skip ci]
# [1.23.0-dev.3](https://github.com/ReVanced/revanced-manager/compare/v1.23.0-dev.2...v1.23.0-dev.3) (2024-10-22)

### Bug Fixes

* Restore apk renaming during compile ([abdd9dc](abdd9dc430))
2024-10-22 16:16:20 +00:00
validcube
abdd9dc430 fix: Restore apk renaming during compile
Signed-off-by: validcube <pun.butrach@gmail.com>
2024-10-22 23:01:51 +07:00
semantic-release-bot
5193042e6b chore(release): 1.23.0-dev.2 [skip ci]
# [1.23.0-dev.2](https://github.com/ReVanced/revanced-manager/compare/v1.23.0-dev.1...v1.23.0-dev.2) (2024-10-21)

### Features

* Show changelogs from the latest to the last used patches version ([#2219](https://github.com/ReVanced/revanced-manager/issues/2219)) ([daba737](daba737ecb))
2024-10-21 10:27:00 +00:00
aAbed
daba737ecb feat: Show changelogs from the latest to the last used patches version (#2219) 2024-10-21 17:17:23 +07:00
ReVanced Bot
bd96701103 chore: Sync translations (#2233) 2024-10-21 17:16:15 +07:00
Pun Butrach
69c20b74cf chore: Restore format consistency 2024-10-21 04:27:53 +07:00
Pun Butrach
7297436ab4 ci: Update config 2024-10-21 03:18:21 +07:00
dependabot[bot]
a329626715 build(deps-dev): bump semantic-release from 23.1.1 to 24.1.3 (#2265)
Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-20 03:47:39 +07:00
Robert
50a20d0535 ci: Use semantic-release-pub for updating build number (#2263) 2024-10-19 05:34:26 +02:00
semantic-release-bot
c52edc99c0 chore(release): 1.23.0-dev.1 [skip ci]
# [1.23.0-dev.1](https://github.com/ReVanced/revanced-manager/compare/v1.22.1-dev.2...v1.23.0-dev.1) (2024-10-17)

### Bug Fixes

* Don't show toasts when export cancelled ([#2230](https://github.com/ReVanced/revanced-manager/issues/2230)) ([bd79496](bd79496433))
* missing parameter in translations ([1c6c5d5](1c6c5d53ae))

### Features

* Also show new patches in the removed patches dialog ([#2257](https://github.com/ReVanced/revanced-manager/issues/2257)) ([8872165](8872165a99))
2024-10-17 19:10:51 +00:00
aAbed
1c6c5d53ae fix: missing parameter in translations 2024-10-18 00:02:54 +05:45
aAbed
1b110e5bd5 fixup: string correction 2024-10-17 22:00:11 +05:45
aAbed
8872165a99 feat: Also show new patches in the removed patches dialog (#2257)
Co-authored-by: oSumAtrIX <johan.melkonyan1@web.de>
2024-10-17 17:48:19 +02:00
aAbed
bd79496433 fix: Don't show toasts when export cancelled (#2230) 2024-10-17 17:48:04 +02:00
oSumAtrIX
820cd720b5 chore: Modernize project setup
Update dependencies, move to Gradle KTs and overall improve build and project files.
2024-10-06 03:14:12 +02:00
ReVanced Bot
31ff1e0492 chore: Sync translations (#2200) 2024-10-01 00:02:20 +07:00
Pun Butrach
8b429f03c2 ci: Use the correct expression to grab translation files (#2232) 2024-09-30 23:59:43 +07:00
134 changed files with 1340 additions and 1138 deletions

View File

@@ -16,6 +16,8 @@ on:
jobs: jobs:
release: release:
name: Release name: Release
permissions:
contents: write
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout - name: Checkout
@@ -35,8 +37,7 @@ jobs:
- name: Set up Flutter - name: Set up Flutter
uses: subosito/flutter-action@v2 uses: subosito/flutter-action@v2
with: with:
channel: "stable" channel: stable
flutter-version: 3.24.x
- name: Install dependencies - name: Install dependencies
run: npm ci run: npm ci
@@ -50,13 +51,15 @@ jobs:
- name: Generate code files - name: Generate code files
run: dart run build_runner build --delete-conflicting-outputs run: dart run build_runner build --delete-conflicting-outputs
- name: Setup keystore
run: |
echo "${{ secrets.KEYSTORE }}" | base64 --decode > "keystore.jks"}
- name: Release - name: Release
env: env:
GITHUB_TOKEN: ${{ secrets.REPOSITORY_PUSH_ACCESS }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
signingKey: "keystore.jks" KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
keyStorePassword: ${{ secrets.SIGNING_KEYSTORE_PASSWORD }} KEYSTORE_ENTRY_ALIAS: ${{ secrets.KEYSTORE_ENTRY_ALIAS }}
keyAlias: ${{ secrets.SIGNING_KEY_ALIAS }} KEYSTORE_ENTRY_PASSWORD: ${{ secrets.KEYSTORE_ENTRY_PASSWORD }}
keyPassword: ${{ secrets.SIGNING_KEY_PASSWORD }}
run: | run: |
echo "${{ secrets.SIGNING_KEYSTORE }}" | base64 --decode > android/app/keystore.jks
npx semantic-release npx semantic-release

View File

@@ -68,6 +68,5 @@ jobs:
git config user.name revanced-bot git config user.name revanced-bot
git config user.email github@revanced.app git config user.email github@revanced.app
sudo chown -R $USER:$USER .git sudo chown -R $USER:$USER .git
git add assets/i18n/strings.*.json git commit -m "chore: Remove empty values from JSON" assets/i18n/strings_*.json
git commit -m "chore: Remove empty values from JSON" assets/i18n/strings.*.json
git push origin HEAD:feat/translations git push origin HEAD:feat/translations

88
.gitignore vendored
View File

@@ -1,41 +1,14 @@
# See https://www.dartlang.org/guides/libraries/private-files # Miscellaneous
*.class
# Files and directories created by pub *.log
.dart_tool/ *.pyc
.packages *.swp
build/ .DS_Store
# If you're building an application, you may want to check-in your pubspec.lock .atom/
# pubspec.lock .buildlog/
.history
# Directory created by dartdoc .svn/
# If you don't generate documentation locally you can remove this line. migrate_working_dir/
doc/api/
# dotenv environment variables file
.env*
# Avoid committing generated Javascript files:
*.dart.js
*.info.json # Produced by the --dump-info flag.
*.js # When generated by dart2js. Don't specify *.js if your
# project includes source files written in JavaScript.
*.js_
*.js.deps
*.js.map
.flutter-plugins
.flutter-plugins-dependencies
# Generated Builder file
**/*.g.dart
**/*.locator.dart
**/*.router.dart
flutter_*.png
#### Custom
local.properties
# IntelliJ related # IntelliJ related
*.iml *.iml
@@ -43,8 +16,39 @@ local.properties
*.iws *.iws
.idea/ .idea/
# Node Dependency directories # The .vscode folder contains launch configuration and tasks you configure in
node_modules/ # VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.pub-cache/
.pub/
/build/
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release
# Generated files
**/*.g.dart
**/*.locator.dart
**/*.router.dart
# Project specific
node_modules/
.vscode/
# FVM
.fvm

View File

@@ -1,11 +1,11 @@
# This file tracks properties of this Flutter project. # This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc. # Used by Flutter tool to assess capabilities and perform upgrades etc.
# #
# This file should be version controlled. # This file should be version controlled and should not be manually edited.
version: version:
revision: 85684f9300908116a78138ea4c6036c35c9a1236 revision: "2663184aa79047d0a33a14a3b607954f8fdd8730"
channel: stable channel: "stable"
project_type: app project_type: app
@@ -13,26 +13,11 @@ project_type: app
migration: migration:
platforms: platforms:
- platform: root - platform: root
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236 create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236 base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
- platform: android - platform: android
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236 create_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236 base_revision: 2663184aa79047d0a33a14a3b607954f8fdd8730
- platform: ios
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
- platform: linux
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
- platform: macos
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
- platform: web
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
- platform: windows
create_revision: 85684f9300908116a78138ea4c6036c35c9a1236
base_revision: 85684f9300908116a78138ea4c6036c35c9a1236
# User provided section # User provided section

View File

@@ -17,15 +17,10 @@
"@semantic-release/changelog", "@semantic-release/changelog",
"@semantic-release/release-notes-generator", "@semantic-release/release-notes-generator",
[ [
"@droidsolutions-oss/semantic-release-update-file", "semantic-release-pub",
{ {
"files": [ "publishPub": false,
{ "updateBuildNumber": true
"path": ["pubspec.yaml"],
"type": "flutter",
"branches": ["main", "dev"]
}
]
} }
], ],
[ [
@@ -48,7 +43,10 @@
"assets": [ "assets": [
{ {
"path": "build/app/outputs/apk/release/revanced-manager*.apk" "path": "build/app/outputs/apk/release/revanced-manager*.apk"
} },
],
"commits": [
"message": "chore: Release v${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
], ],
"successComment": false "successComment": false
} }

91
.vscode/tasks.json vendored
View File

@@ -1,91 +0,0 @@
{
"version": "2.0.0",
"tasks": [
{
"label": "Generate (Builder)",
"type": "shell",
"command": "flutter packages pub run build_runner build --delete-conflicting-outputs",
"problemMatcher": []
},
{
"label": "Build (Android)",
"type": "shell",
"command": "flutter build apk",
"problemMatcher": [],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "Install (Android)",
"type": "shell",
"command": "adb install build\\app\\outputs\\flutter-apk\\app-release.apk",
"problemMatcher": []
},
{
"label": "Clean (Flutter)",
"type": "shell",
"command": "flutter clean && flutter pub get",
"problemMatcher": []
},
{
"label": "Clean (Builder)",
"type": "shell",
"command": "flutter packages pub run build_runner clean",
"problemMatcher": []
},
{
"label": "Build all (Android)",
"dependsOrder": "sequence",
"dependsOn": [
"Generate (Builder)",
"Build (Android)"
],
"problemMatcher": []
},
{
"label": "Clean all",
"dependsOrder": "sequence",
"dependsOn": [
"Clean (Flutter)",
"Clean (Builder)"
],
"problemMatcher": []
},
{
"label": "Clean all & Build all (Android)",
"dependsOrder": "sequence",
"dependsOn": [
"Clean all",
"Build all (Android)"
],
"problemMatcher": []
},
{
"label": "Clean all & Install (Android)",
"dependsOrder": "sequence",
"dependsOn": [
"Clean all",
"Build all (Android)",
"Install (Android)",
],
"problemMatcher": []
},
{
"label": "Build & Install (Android)",
"dependsOrder": "sequence",
"dependsOn": [
"Build (Android)",
"Install (Android)"
],
"problemMatcher": []
},
{
"label": "Validate translations",
"type": "shell",
"command": "flutter pub run flutter_i18n diff en.json pt.json",
"problemMatcher": []
}
]
}

2
android/.gitignore vendored
View File

@@ -7,7 +7,7 @@ gradle-wrapper.jar
GeneratedPluginRegistrant.java GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore. # Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app # See https://flutter.dev/to/reference-keystore
key.properties key.properties
**/*.keystore **/*.keystore
**/*.jks **/*.jks

View File

@@ -1,3 +0,0 @@
source "https://rubygems.org"
gem "fastlane"

View File

@@ -1,114 +0,0 @@
plugins {
id "com.android.application"
id "kotlin-android"
id "dev.flutter.flutter-gradle-plugin"
}
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
if (flutterVersionCode == null) {
flutterVersionCode = '1'
}
def flutterVersionName = localProperties.getProperty('flutter.versionName')
if (flutterVersionName == null) {
flutterVersionName = '1.0'
}
android {
compileSdk 34
compileOptions {
coreLibraryDesugaringEnabled true
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = '17'
}
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
}
defaultConfig {
applicationId "app.revanced.manager.flutter"
minSdk 26
targetSdk 34
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
buildTypes {
configureEach {
shrinkResources = false
minifyEnabled = false
signingConfig signingConfigs.debug
ndk {
abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86_64'
}
}
release {
shrinkResources true
minifyEnabled true
if (System.getenv("signingKey") != null) {
signingConfigs {
create("release") {
storeFile = file(System.getenv("signingKey"))
storePassword = System.getenv("keyStorePassword")
keyAlias = System.getenv("keyAlias")
keyPassword = System.getenv("keyPassword")
}
}
signingConfig = signingConfigs.release
resValue "string", "app_name", "ReVanced Manager"
applicationVariants.all { variant ->
variant.outputs.all {
outputFileName = "revanced-manager-v${flutterVersionName}.apk"
}
}
} else {
signingConfig = signingConfigs.debug
resValue "string", "app_name", "ReVanced Manager (Debug)"
applicationIdSuffix ".debug"
}
}
debug {
resValue "string", "app_name", "ReVanced Manager (Debug)"
applicationIdSuffix ".debug"
}
profile {
resValue "string", "app_name", "ReVanced Manager (Profile)"
applicationIdSuffix ".profile"
}
}
packagingOptions {
jniLibs {
useLegacyPackaging true
excludes += ['/prebuilt/**']
}
resources {
excludes += ['/prebuilt/**']
}
}
namespace 'app.revanced.manager.flutter'
}
kotlin {
jvmToolchain(17)
}
flutter {
source '../..'
}
dependencies {
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") // https://pub.dev/packages/flutter_local_notifications#gradle-setup
implementation("app.revanced:revanced-patcher:19.3.1")
implementation("app.revanced:revanced-library:2.2.1")
}

View File

@@ -0,0 +1,92 @@
plugins {
id("com.android.application")
id("kotlin-android")
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
id("dev.flutter.flutter-gradle-plugin")
}
android {
namespace = "app.revanced.manager.flutter"
compileSdk = 34
ndkVersion = "27.0.12077973"
compileOptions {
isCoreLibraryDesugaringEnabled = true
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
}
defaultConfig {
applicationId = "app.revanced.manager.flutter"
minSdk = 26
targetSdk = 34
versionCode = flutter.versionCode
versionName = flutter.versionName
}
buildTypes {
configureEach {
isShrinkResources = false
isMinifyEnabled = false
signingConfig = signingConfigs["debug"]
ndk.abiFilters += setOf("armeabi-v7a", "arm64-v8a", "x86_64")
setProperty("archivesBaseName", "revanced-manager-v${flutter.versionName}")
}
release {
isShrinkResources = true
isMinifyEnabled = true
val keystoreFile = file("keystore.jks")
if (keystoreFile.exists()) {
signingConfig = signingConfigs.create("release") {
storeFile = keystoreFile
storePassword = System.getenv("KEYSTORE_PASSWORD")
keyAlias = System.getenv("KEYSTORE_ENTRY_ALIAS")
keyPassword = System.getenv("KEYSTORE_ENTRY_PASSWORD")
}
} else {
resValue("string", "app_name", "ReVanced Manager (Debug)")
applicationIdSuffix = ".debug"
signingConfig = signingConfigs["debug"]
}
resValue("string", "app_name", "ReVanced Manager")
}
debug {
resValue("string", "app_name", "ReVanced Manager (Debug)")
applicationIdSuffix = ".debug"
}
}
packaging {
jniLibs {
useLegacyPackaging = true
excludes.add("/prebuilt/**")
}
resources {
excludes.add("/prebuilt/**")
}
}
}
flutter {
source = "../.."
}
dependencies {
coreLibraryDesugaring(libs.desugar.jdk.libs) // https://pub.dev/packages/flutter_local_notifications#gradle-setup
implementation(libs.revanced.patcher)
implementation(libs.revanced.library)
}

View File

@@ -1,10 +1,3 @@
# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.kts.kts.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
-dontobfuscate -dontobfuscate
-keep class app.revanced.** { *; } -keep class app.revanced.** { *; }

View File

@@ -1,3 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
</manifest> </manifest>

View File

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

View File

@@ -1,3 +1,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
</manifest> </manifest>

View File

@@ -1,48 +0,0 @@
allprojects {
repositories {
google()
mavenCentral()
maven {
// A repository must be speficied for some reason. "registry" is a dummy.
url = uri("https://maven.pkg.github.com/revanced/registry")
credentials {
username = project.findProperty("gpr.user") as String ?: System.getenv("GITHUB_ACTOR")
password = project.findProperty("gpr.key") as String ?: System.getenv("GITHUB_TOKEN")
}
}
mavenLocal()
}
}
rootProject.buildDir = '../build'
// TODO: Bump SDK
// Reference: https://github.com/flutter/flutter/issues/153281#issuecomment-2292201697
subprojects {
afterEvaluate { project ->
if (project.extensions.findByName("android") != null) {
Integer pluginCompileSdk = project.android.compileSdk
if (pluginCompileSdk != null && pluginCompileSdk < 31) {
project.logger.error(
"Warning: Overriding compileSdk version in Flutter plugin: "
+ project.name
+ " from "
+ pluginCompileSdk
+ " to 31 (to work around https://issuetracker.google.com/issues/199180389)."
+ "\nIf there is not a new version of " + project.name + ", consider filing an issue against "
+ project.name
+ " to increase their compileSdk to the latest (otherwise try updating to the latest version)."
)
project.android {
compileSdk 31
}
}
}
}
project.buildDir = "${rootProject.buildDir}/${project.name}"
project.evaluationDependsOn(":app")
}
tasks.register("clean", Delete) {
delete rootProject.buildDir
}

31
android/build.gradle.kts Normal file
View File

@@ -0,0 +1,31 @@
import com.android.build.api.dsl.CommonExtension
allprojects {
repositories {
google()
mavenCentral()
maven {
name = "GitHubPackages"
url = uri("https://maven.pkg.github.com/revanced/registry")
credentials {
username = providers.gradleProperty("gpr.user").orNull ?: System.getenv("GITHUB_ACTOR")
password = providers.gradleProperty("gpr.key").orNull ?: System.getenv("GITHUB_TOKEN")
}
}
}
}
layout.buildDirectory = File("../build")
subprojects {
afterEvaluate {
extensions.findByName("android")?.let {
it as CommonExtension<*, *, *, *, *, *>
if (it.compileSdk != null && it.compileSdk!! < 31)
it.compileSdk = 34
}
}
layout.buildDirectory = rootProject.layout.buildDirectory.file(name).get().asFile
evaluationDependsOn(":app")
}

View File

@@ -1,8 +1,8 @@
org.gradle.jvmargs=-Xmx4096m -XX:+UseParallelGC org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true
org.gradle.parallel=true org.gradle.parallel=true
org.gradle.daemon=true org.gradle.daemon=true
org.gradle.caching=true org.gradle.caching=true
android.useAndroidX=true
android.defaults.buildfeatures.buildconfig=true android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=false android.nonTransitiveRClass=false
android.nonFinalResIds=false android.nonFinalResIds=false

View File

@@ -0,0 +1,9 @@
[versions]
revanced-patcher = "20.0.2"
revanced-library = "3.0.1"
desugar_jdk_libs = "2.1.2"
[libraries]
revanced-patcher = { module = "app.revanced:revanced-patcher", version.ref = "revanced-patcher" }
revanced-library = { module = "app.revanced:revanced-library", version.ref = "revanced-library" }
desugar_jdk_libs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "desugar_jdk_libs" }

View File

@@ -1,25 +0,0 @@
pluginManagement {
def flutterSdkPath = {
def properties = new Properties()
file("local.properties").withInputStream { properties.load(it) }
def flutterSdkPath = properties.getProperty("flutter.sdk")
assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
return flutterSdkPath
}
settings.ext.flutterSdkPath = flutterSdkPath()
includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
repositories {
google()
mavenCentral()
}
}
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.5.1" apply false
id "org.jetbrains.kotlin.android" version "2.0.0" apply false
}
include ":app"

View File

@@ -0,0 +1,24 @@
pluginManagement {
val properties = java.util.Properties().apply {
load(file("local.properties").inputStream())
}
val flutterSdkPath = properties.getProperty("flutter.sdk")
assert(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.5.0" apply false
id("org.jetbrains.kotlin.android") version "2.0.20" apply false
}
include(":app")

View File

@@ -55,7 +55,8 @@
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "Patch", "patchButton": "Patch",
"incompatibleArchWarningDialogText": "Patching on this architecture is not yet supported and might fail. Continue anyways?", "incompatibleArchWarningDialogText": "Patching on this architecture is not yet supported and might fail. Continue anyways?",
"removedPatchesWarningDialogText": "The following patches have been removed since the last time you used them.\n\n${patches}\n\nContinue anyways?", "removedPatchesWarningDialogText": "Removed patches since the last time you patched this app:\n\n${patches}\n\n${newPatches}Continue anyways?",
"addedPatchesDialogText": "Added patches since the last time you patched this app:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Some patch options have to be set." "requiredOptionDialogText": "Some patch options have to be set."
}, },
"appSelectorCard": { "appSelectorCard": {
@@ -157,20 +158,18 @@
"languageLabel": "Language", "languageLabel": "Language",
"languageUpdated": "Language updated", "languageUpdated": "Language updated",
"sourcesLabel": "Alternative sources", "sourcesLabel": "Alternative sources",
"sourcesLabelHint": "Configure the alternative sources for ReVanced Patches and ReVanced Integrations", "sourcesLabelHint": "Configure the alternative sources for ReVanced Patches",
"sourcesIntegrationsLabel": "Integrations source",
"useAlternativeSources": "Use alternative sources", "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", "sourcesResetDialogTitle": "Reset",
"sourcesResetDialogText": "Are you sure you want to reset your sources to their default values?", "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?", "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", "apiURLLabel": "API URL",
"apiURLHint": "Configure the API URL of ReVanced Manager", "apiURLHint": "Configure the API URL of ReVanced Manager",
"selectApiURL": "API URL", "selectApiURL": "API URL",
"orgPatchesLabel": "Patches organization", "orgPatchesLabel": "Patches organization",
"sourcesPatchesLabel": "Patches source", "sourcesPatchesLabel": "Patches source",
"orgIntegrationsLabel": "Integrations organization",
"contributorsLabel": "Contributors", "contributorsLabel": "Contributors",
"contributorsHint": "A list of contributors of ReVanced", "contributorsHint": "A list of contributors of ReVanced",
"logsLabel": "Share logs", "logsLabel": "Share logs",
@@ -290,4 +289,4 @@
"install_failed_version_downgrade_description": "The installation failed due to the patched app being a lower version than the installed app.\n\nUninstall the app and try again?", "install_failed_version_downgrade_description": "The installation failed due to the patched app being a lower version than the installed app.\n\nUninstall the app and try again?",
"status_unknown_description": "The installation failed due to an unknown reason. Please try again." "status_unknown_description": "The installation failed due to an unknown reason. Please try again."
} }
} }

0
assets/i18n/strings_af_ZA.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_am_ET.i18n.json Normal file → Executable file
View File

3
assets/i18n/strings_ar_SA.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "المُعَّدِّل", "widgetTitle": "المُعَّدِّل",
"patchButton": "تعديل", "patchButton": "تعديل",
"incompatibleArchWarningDialogText": "لم يتم دعم التعديلات الخاصة بهذه البنية حتى الآن وقد تفشل. هل تريد المتابعة على أي حال؟", "incompatibleArchWarningDialogText": "لم يتم دعم التعديلات الخاصة بهذه البنية حتى الآن وقد تفشل. هل تريد المتابعة على أي حال؟",
"removedPatchesWarningDialogText": "تم إزالة التعديلات التالية منذ آخر مرة استخدمتها فيها.\n\n${patches}\n\nتابع على أي حال؟", "removedPatchesWarningDialogText": "تمت إزالة التعديلات منذ آخر مرة قمت فيها بتعديل هذا التطبيق:\n\n${patches}\n\n${newPatches}هل تريد المتابعة على أي حال؟",
"addedPatchesDialogText": "تمت إضافة التعديلات منذ آخر مرة قمت فيها بتعديل هذا التطبيق:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "يجب ضبط بعض خيارات التعديل." "requiredOptionDialogText": "يجب ضبط بعض خيارات التعديل."
}, },
"appSelectorCard": { "appSelectorCard": {

0
assets/i18n/strings_as_IN.i18n.json Normal file → Executable file
View File

7
assets/i18n/strings_az_AZ.i18n.json Normal file → Executable file
View File

@@ -25,7 +25,7 @@
"updatesSubtitle": "Yeniləmələr", "updatesSubtitle": "Yeniləmələr",
"lastPatchedAppSubtitle": "Son yamaqlanmış tətbiq", "lastPatchedAppSubtitle": "Son yamaqlanmış tətbiq",
"patchedSubtitle": "Quraşdırılmış tətbiqlər", "patchedSubtitle": "Quraşdırılmış tətbiqlər",
"changeLaterSubtitle": "Bunu daha sonra tənzimləmələrdə dəyişə bilərsiniz.", "changeLaterSubtitle": "Bunu sonra tənzimləmələrdə dəyişə bilərsiniz.",
"noSavedAppFound": "Heç bir tətbiq tapılmadı", "noSavedAppFound": "Heç bir tətbiq tapılmadı",
"noInstallations": "Yamaqlanmış tətbiq quraşdırılmayıb", "noInstallations": "Yamaqlanmış tətbiq quraşdırılmayıb",
"installUpdate": "Yeniləməni quraşdırmağa davam edilsin?", "installUpdate": "Yeniləməni quraşdırmağa davam edilsin?",
@@ -55,7 +55,8 @@
"widgetTitle": "Yamaqlayıcı", "widgetTitle": "Yamaqlayıcı",
"patchButton": "Yamaqla", "patchButton": "Yamaqla",
"incompatibleArchWarningDialogText": "Bu quruluşda yamaqlama hələ dəstəklənmir və uğursuz ola bilər. Yenə də davam edilsin?", "incompatibleArchWarningDialogText": "Bu quruluşda yamaqlama hələ dəstəklənmir və uğursuz ola bilər. Yenə də davam edilsin?",
"removedPatchesWarningDialogText": "Aşağıdakı yamaqlar son istifadənizdən bəri silindi.\n\n${patches}\n\nYenə də davam edilsin?", "removedPatchesWarningDialogText": "Bu tətbiqi son yamaqladığınız müddətdən bəri silinmiş yamaqlar:\n\n${patches}\n\n${newPatches}Yenə də davam edilsin?",
"addedPatchesDialogText": "Bu tətbiqi son yamaqladığınız müddətdən bəri əlavə edilən yamaqlar:\n\n${addedPatches}",
"requiredOptionDialogText": "Bəzi yamaq seçimləri təyin edilməlidir." "requiredOptionDialogText": "Bəzi yamaq seçimləri təyin edilməlidir."
}, },
"appSelectorCard": { "appSelectorCard": {
@@ -285,7 +286,7 @@
"status_failure_invalid_description": "Yamaqlanmış tətbiq etibarsız olduğu üçün quraşdırma uğursuz oldu.\n\nTətbiqi silib yenidən sınayırsınız?", "status_failure_invalid_description": "Yamaqlanmış tətbiq etibarsız olduğu üçün quraşdırma uğursuz oldu.\n\nTətbiqi silib yenidən sınayırsınız?",
"status_failure_incompatible_description": "Tətbiq bu cihazla uyğun deyil.\n\nBu cihaz tərəfindən dəstəklənən APK istifadə et və təkrar cəhd et.", "status_failure_incompatible_description": "Tətbiq bu cihazla uyğun deyil.\n\nBu cihaz tərəfindən dəstəklənən APK istifadə et və təkrar cəhd et.",
"status_failure_conflict_description": "Quraşdırma, tətbiqin mövcud quraşdırmasına görə əngəlləndi.\n\nQuraşdırılmış tətbiqi silib yenidən sınayırsınız?", "status_failure_conflict_description": "Quraşdırma, tətbiqin mövcud quraşdırmasına görə əngəlləndi.\n\nQuraşdırılmış tətbiqi silib yenidən sınayırsınız?",
"status_failure_blocked_description": "Quraşdırma, ${packageName} tərəfindən əngəlləndi.\n\nTəhlükəsizlik seçimlərinizi tənzimləyib yenidən sınayın.", "status_failure_blocked_description": "${packageName} quraşdırmanı əngəllədi.\n\nTəhlükəsizlik seçimlərinizi tənzimləyib yenidən sınayın.",
"install_failed_verification_failure_description": "Təsdiqləmə probleminə görə quraşdırma uğursuz oldu.\n\nTəhlükəsizlik seçimlərinizi tənzimləyib təkrar sınayın.", "install_failed_verification_failure_description": "Təsdiqləmə probleminə görə quraşdırma uğursuz oldu.\n\nTəhlükəsizlik seçimlərinizi tənzimləyib təkrar sınayın.",
"install_failed_version_downgrade_description": "Yamaqlanmış tətbiq, quraşdırılmış tətbiqdən daha aşağı versiyaya sahib olduğu üçün quraşdırma uğursuz oldu.\n\nTətbiqi silib yenidən sınayırsınız?", "install_failed_version_downgrade_description": "Yamaqlanmış tətbiq, quraşdırılmış tətbiqdən daha aşağı versiyaya sahib olduğu üçün quraşdırma uğursuz oldu.\n\nTətbiqi silib yenidən sınayırsınız?",
"status_unknown_description": "Naməlum səbəbə görə quraşdırma uğursuz oldu. Lütfən yenidən sınayın." "status_unknown_description": "Naməlum səbəbə görə quraşdırma uğursuz oldu. Lütfən yenidən sınayın."

1
assets/i18n/strings_be_BY.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,6 @@
"widgetTitle": "Праграма выпраўлення", "widgetTitle": "Праграма выпраўлення",
"patchButton": "Выправіць", "patchButton": "Выправіць",
"incompatibleArchWarningDialogText": "Выпраўленні на гэтай архітэктуры пакуль не падтрымліваюцца і могуць не працаваць. Працягнуць?", "incompatibleArchWarningDialogText": "Выпраўленні на гэтай архітэктуры пакуль не падтрымліваюцца і могуць не працаваць. Працягнуць?",
"removedPatchesWarningDialogText": "Наступныя выпраўленні былі выдалены з моманту іх апошняга выкарыстання.\n\n${patches}\n\nУсё роўна працягнуць?",
"requiredOptionDialogText": "Неабходна задаць некаторыя параметры выпраўленняў." "requiredOptionDialogText": "Неабходна задаць некаторыя параметры выпраўленняў."
}, },
"appSelectorCard": { "appSelectorCard": {

3
assets/i18n/strings_bg_BG.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Модификатор", "widgetTitle": "Модификатор",
"patchButton": "Модифицирайте", "patchButton": "Модифицирайте",
"incompatibleArchWarningDialogText": "Процесът на модифициране в момента не се поддържа на устройства с тази архитектура и може да се провали. Ще продължите ли?", "incompatibleArchWarningDialogText": "Процесът на модифициране в момента не се поддържа на устройства с тази архитектура и може да се провали. Ще продължите ли?",
"removedPatchesWarningDialogText": "Следните модификации са били премахнати след като са били употребени за последно от вас.\n\n${patches}\n\nПродължете въпреки това?", "removedPatchesWarningDialogText": "Премахнати пачове след последната корекция на приложението:\n\n${patches}\n\n${newPatches}Да продължа ли все пак?",
"addedPatchesDialogText": "След последната промяна на това приложение бяха добавени следните модификации:\n\n${addedPatches}",
"requiredOptionDialogText": "Опциите на някои модификации трябва да бъдат зададени." "requiredOptionDialogText": "Опциите на някои модификации трябва да бъдат зададени."
}, },
"appSelectorCard": { "appSelectorCard": {

10
assets/i18n/strings_bn_BD.i18n.json Normal file → Executable file
View File

@@ -23,7 +23,10 @@
"refreshSuccess": "সফলভাবে রিফ্রেশ করা হয়েছে", "refreshSuccess": "সফলভাবে রিফ্রেশ করা হয়েছে",
"widgetTitle": "ড্যাশবোর্ড", "widgetTitle": "ড্যাশবোর্ড",
"updatesSubtitle": "আপডেটসমূহ", "updatesSubtitle": "আপডেটসমূহ",
"lastPatchedAppSubtitle": "সর্বশেষ প্যাচকৃত অ্যাপ",
"patchedSubtitle": "ইনস্টল করা অ্যাপ",
"changeLaterSubtitle": "পরবর্তীতে আপনি এটি সেটিং থেকে পরিবর্তন করতে পারবেন।", "changeLaterSubtitle": "পরবর্তীতে আপনি এটি সেটিং থেকে পরিবর্তন করতে পারবেন।",
"noSavedAppFound": "কোনো অ্যাপ পাওয়া যায় নি",
"noInstallations": "কোন প্যাচড অ্যাপ্লিকেশন ইনস্টল করা হয়নি", "noInstallations": "কোন প্যাচড অ্যাপ্লিকেশন ইনস্টল করা হয়নি",
"installUpdate": "আপডেট ইনস্টল করতে এগিয়ে যেতে চান?", "installUpdate": "আপডেট ইনস্টল করতে এগিয়ে যেতে চান?",
"updateSheetTitle": "ReVanced Manager আপডেট করুন", "updateSheetTitle": "ReVanced Manager আপডেট করুন",
@@ -51,7 +54,7 @@
"patcherView": { "patcherView": {
"widgetTitle": "প্যাচার", "widgetTitle": "প্যাচার",
"patchButton": "প্যাচ", "patchButton": "প্যাচ",
"removedPatchesWarningDialogText": "আপনি এর আগে যখন ব্যবহার করেছিলেন তারপর এই প্যাচগুলো অপসারণ করা হয়।\n\n${patches}\n\nযেকোন ভাবে এগিয়ে যেতে চান?", "incompatibleArchWarningDialogText": "এই আর্কিটেকচারে প্যাচিং এখনো সমর্থিত নয় এবং সফল নাও হতে পারে। যেকোন ভাবে এগিয়ে যেতে চান?",
"requiredOptionDialogText": "কিছু প্যাচ অপশন সেট করতে হবে।" "requiredOptionDialogText": "কিছু প্যাচ অপশন সেট করতে হবে।"
}, },
"appSelectorCard": { "appSelectorCard": {
@@ -100,11 +103,15 @@
}, },
"patchOptionsView": { "patchOptionsView": {
"customValue": "কাস্টম ভ্যালু", "customValue": "কাস্টম ভ্যালু",
"setToNull": "null সেট করুন",
"nullValue": "এই অপশন ভ্যালু বর্তমানে null",
"viewTitle": "প্যাচ অপশন", "viewTitle": "প্যাচ অপশন",
"saveOptions": "সংরক্ষণ করুন", "saveOptions": "সংরক্ষণ করুন",
"unselectPatch": "প্যাচ অনির্বাচন করুন",
"tooltip": "আরও ইনপুট অপশন", "tooltip": "আরও ইনপুট অপশন",
"selectFilePath": "ফাইলের স্থান নির্বাচন করুন", "selectFilePath": "ফাইলের স্থান নির্বাচন করুন",
"selectFolder": "ফোল্ডার নির্বাচন করুন", "selectFolder": "ফোল্ডার নির্বাচন করুন",
"requiredOption": "এই অপশনটি সেট করা আবশ্যক",
"unsupportedOption": "এই অপশনসটি অসমর্থিত", "unsupportedOption": "এই অপশনসটি অসমর্থিত",
"requiredOptionNull": "এই অপশনগুলো সেট করতে হবে:\n\n${options}" "requiredOptionNull": "এই অপশনগুলো সেট করতে হবে:\n\n${options}"
}, },
@@ -177,6 +184,7 @@
"showUpdateDialogHint": "যখন হালনাগাদ উপলব্ধ থাকবে তখন একটি ডায়ালগ দেখান", "showUpdateDialogHint": "যখন হালনাগাদ উপলব্ধ থাকবে তখন একটি ডায়ালগ দেখান",
"universalPatchesLabel": "বৈশ্বিক প্যাচসমূহ দেখান", "universalPatchesLabel": "বৈশ্বিক প্যাচসমূহ দেখান",
"universalPatchesHint": "সকল অ্যাপ এবং বৈশ্বিক প্যাচসমূহ দেখায় (অ্যাপ লিস্ট দেখানো একটু ধীর হতে পারে)", "universalPatchesHint": "সকল অ্যাপ এবং বৈশ্বিক প্যাচসমূহ দেখায় (অ্যাপ লিস্ট দেখানো একটু ধীর হতে পারে)",
"lastPatchedAppLabel": "প্যাচকৃত অ্যাপ সংরক্ষণ করুন",
"versionCompatibilityCheckLabel": "সংস্করণ সামঞ্জস্যতা পরীক্ষা করা", "versionCompatibilityCheckLabel": "সংস্করণ সামঞ্জস্যতা পরীক্ষা করা",
"versionCompatibilityCheckHint": "নির্বাচিত অ্যাপ সংস্করণের সাথে সামঞ্জস্যপূর্ণ নয় এমন প্যাচ নির্বাচন করা আটকায়", "versionCompatibilityCheckHint": "নির্বাচিত অ্যাপ সংস্করণের সাথে সামঞ্জস্যপূর্ণ নয় এমন প্যাচ নির্বাচন করা আটকায়",
"requireSuggestedAppVersionLabel": "প্রস্তাবিত অ্যাপ সংস্করণ প্রয়োজন", "requireSuggestedAppVersionLabel": "প্রস্তাবিত অ্যাপ সংস্করণ প্রয়োজন",

0
assets/i18n/strings_bs_BA.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_ca_ES.i18n.json Normal file → Executable file
View File

3
assets/i18n/strings_cs_CZ.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Záplatovač", "widgetTitle": "Záplatovač",
"patchButton": "Záplatovat", "patchButton": "Záplatovat",
"incompatibleArchWarningDialogText": "Úprava této architektury není zatím podporována a může selhat. Přesto pokračovat?", "incompatibleArchWarningDialogText": "Úprava této architektury není zatím podporována a může selhat. Přesto pokračovat?",
"removedPatchesWarningDialogText": "Následující záplaty byly odstraněny od doby, kdy jste je naposledy použili.\n\n${patches}\n\nPřesto pokračovat?", "removedPatchesWarningDialogText": "Odstranili jste záplaty od poslední úpravy této aplikace:\n\n${patches}\n\n${newPatches}Pokračovat?",
"addedPatchesDialogText": "Přidány záplaty od poslední úpravy této aplikace:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Je třeba nastavit některé možnosti záplat." "requiredOptionDialogText": "Je třeba nastavit některé možnosti záplat."
}, },
"appSelectorCard": { "appSelectorCard": {

3
assets/i18n/strings_da_DK.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "Patch", "patchButton": "Patch",
"incompatibleArchWarningDialogText": "Patching på denne arkitektur understøttes endnu ikke og kan mislykkes. Fortsæt alligevel?", "incompatibleArchWarningDialogText": "Patching på denne arkitektur understøttes endnu ikke og kan mislykkes. Fortsæt alligevel?",
"removedPatchesWarningDialogText": "Følgende patches er blevet fjernet siden sidste gang du brugte dem.\n\n${patches}\n\nFortsæt alligevel?", "removedPatchesWarningDialogText": "Fjernede rettelser siden sidste gang du lappede denne app:\n\n${patches}\n\n${newPatches}Fortsæt alligevel?",
"addedPatchesDialogText": "Tilføjet rettelser siden sidste gang du lappede denne app:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Nogle patch muligheder skal indstilles." "requiredOptionDialogText": "Nogle patch muligheder skal indstilles."
}, },
"appSelectorCard": { "appSelectorCard": {

3
assets/i18n/strings_de_DE.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "Patchen", "patchButton": "Patchen",
"incompatibleArchWarningDialogText": "Patches auf dieser Architektur werden noch nicht unterstützt und könnten fehlschlagen. Trotzdem fortfahren?", "incompatibleArchWarningDialogText": "Patches auf dieser Architektur werden noch nicht unterstützt und könnten fehlschlagen. Trotzdem fortfahren?",
"removedPatchesWarningDialogText": "Die folgenden Patches wurden seit der letzten Verwendung entfernt.\n\n${patches}\n\nTrotzdem fortfahren?", "removedPatchesWarningDialogText": "Patches seit dem letzten Mal, dass Sie diese App gepatcht haben, entfernt:\n\n${patches}\n\n${newPatches}Trotzdem fortfahren?",
"addedPatchesDialogText": "Patches seit dem letzten Mal, dass Sie diese App gepatcht haben:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Einige Patch-Optionen müssen gesetzt werden." "requiredOptionDialogText": "Einige Patch-Optionen müssen gesetzt werden."
}, },
"appSelectorCard": { "appSelectorCard": {

3
assets/i18n/strings_el_GR.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Τροποποιητής", "widgetTitle": "Τροποποιητής",
"patchButton": "Τροποποίηση", "patchButton": "Τροποποίηση",
"incompatibleArchWarningDialogText": "Η διαδικασία της τροποποίησης δεν υποστηρίζεται προς το παρόν σε συσκευές της συγκεκριμένης αρχιτεκτονικής και μπορεί να αποτύχει. Συνέχεια παρόλα αυτά;", "incompatibleArchWarningDialogText": "Η διαδικασία της τροποποίησης δεν υποστηρίζεται προς το παρόν σε συσκευές της συγκεκριμένης αρχιτεκτονικής και μπορεί να αποτύχει. Συνέχεια παρόλα αυτά;",
"removedPatchesWarningDialogText": "Οι παρακάτω τροποποιήσεις αφαιρέθηκαν από την τελευταία φορά που τις χρησιμοποιήσατε.\n\n${patches}\n\nΣυνέχεια παρόλα αυτά;", "removedPatchesWarningDialogText": "Από την τελευταία φορά που τροποποιήσατε αυτή την εφαρμογή, έχουν αφαιρεθεί οι εξής τροποποιήσεις:\n\n${patches}\n\n${newPatches}Συνέχεια παρ' όλα αυτά;",
"addedPatchesDialogText": "Από την τελευταία φορά που τροποποιήσατε αυτή την εφαρμογή, έχουν προστεθεί οι εξής τροποποιήσεις:\n\n${addedPatches}",
"requiredOptionDialogText": "Κάποιες επιλογές τροποποιήσεων πρέπει να οριστούν." "requiredOptionDialogText": "Κάποιες επιλογές τροποποιήσεων πρέπει να οριστούν."
}, },
"appSelectorCard": { "appSelectorCard": {

View File

@@ -52,7 +52,7 @@
"patcherView": { "patcherView": {
"widgetTitle": "Parcheador", "widgetTitle": "Parcheador",
"patchButton": "Parchear", "patchButton": "Parchear",
"removedPatchesWarningDialogText": "Los siguientes parches fueron eliminados desde la última vez que los usaste.\n\n${patches}\n\n¿Continuar de todas formas?", "removedPatchesWarningDialogText": "Los siguientes parches fueron eliminados desde la última vez que los usaste.\n\n${patches}\n\n${newPatches}¿Continuar de todas formas?",
"requiredOptionDialogText": "Algunas opciones de parche tienen que ser establecidas." "requiredOptionDialogText": "Algunas opciones de parche tienen que ser establecidas."
}, },
"appSelectorCard": { "appSelectorCard": {

3
assets/i18n/strings_es_ES.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Parcheador", "widgetTitle": "Parcheador",
"patchButton": "Parchear", "patchButton": "Parchear",
"incompatibleArchWarningDialogText": "El parche en esta arquitectura aún no está soportado y podría fallar. ¿Continuar de todos modos?", "incompatibleArchWarningDialogText": "El parche en esta arquitectura aún no está soportado y podría fallar. ¿Continuar de todos modos?",
"removedPatchesWarningDialogText": "Los siguientes parches han sido eliminados desde la última vez que los usaste.\n\n${patches}\n\n¿Continuar de todos modos?", "removedPatchesWarningDialogText": "Eliminados parches desde la última vez que parcheaste esta aplicación:\n\n${patches}\n\n${newPatches}¿Continuar de todos modos?",
"addedPatchesDialogText": "Añadidos parches desde la última vez que parcheaste esta aplicación:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Deben establecerse algunas opciones de parche." "requiredOptionDialogText": "Deben establecerse algunas opciones de parche."
}, },
"appSelectorCard": { "appSelectorCard": {

View File

@@ -52,7 +52,7 @@
"patcherView": { "patcherView": {
"widgetTitle": "Parcheador", "widgetTitle": "Parcheador",
"patchButton": "Parchear", "patchButton": "Parchear",
"removedPatchesWarningDialogText": "Los siguientes parches fueron removidos desde la última vez que los usaste.\n\n${patches}\n\n¿Quieres continuar de todas formas?", "removedPatchesWarningDialogText": "Los siguientes parches fueron removidos desde la última vez que los usaste.\n\n${patches}\n\n${newPatches}¿Quieres continuar de todas formas?",
"requiredOptionDialogText": "Algunas opciones de parche tienen que ser establecidas." "requiredOptionDialogText": "Algunas opciones de parche tienen que ser establecidas."
}, },
"appSelectorCard": { "appSelectorCard": {

1
assets/i18n/strings_et_EE.i18n.json Normal file → Executable file
View File

@@ -51,7 +51,6 @@
"patcherView": { "patcherView": {
"widgetTitle": "Parandaja", "widgetTitle": "Parandaja",
"patchButton": "Parandus", "patchButton": "Parandus",
"removedPatchesWarningDialogText": "Väljatoodud parandused on vahepeal eemaldatud.\n\n${patches}\n\nJätka ikkagi? ",
"requiredOptionDialogText": "Mõned paranduste sätted on vaja valida. " "requiredOptionDialogText": "Mõned paranduste sätted on vaja valida. "
}, },
"appSelectorCard": { "appSelectorCard": {

0
assets/i18n/strings_eu_ES.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_fa_IR.i18n.json Normal file → Executable file
View File

14
assets/i18n/strings_fi_FI.i18n.json Normal file → Executable file
View File

@@ -1,7 +1,7 @@
{ {
"okButton": "OK", "okButton": "OK",
"cancelButton": "Peruuta", "cancelButton": "Peruuta",
"dismissButton": "Sulje", "dismissButton": "Hylkää",
"quitButton": "Sulje", "quitButton": "Sulje",
"updateButton": "Päivitä", "updateButton": "Päivitä",
"suggested": "Ehdotettu: ${version}", "suggested": "Ehdotettu: ${version}",
@@ -55,7 +55,7 @@
"widgetTitle": "Paikkaaja", "widgetTitle": "Paikkaaja",
"patchButton": "Paikkaa", "patchButton": "Paikkaa",
"incompatibleArchWarningDialogText": "Paikkaamista ei vielä tueta tällä kokoonpanolla, ja se saattaa epäonnistua. Jatketaanko silti?", "incompatibleArchWarningDialogText": "Paikkaamista ei vielä tueta tällä kokoonpanolla, ja se saattaa epäonnistua. Jatketaanko silti?",
"removedPatchesWarningDialogText": "Seuraavat paikkaukset on poistettu edellisen käyttökerran jälkeen.\n\n${patches}\n\nJatketaanko silti?", "removedPatchesWarningDialogText": "Poistetut paikat viimeisen laastariesi jälkeen tämän sovelluksen:\n\n${patches}\n\n${newPatches}Jatka joka tapauksessa?",
"requiredOptionDialogText": "Joitakin paikkausasetuksia on määritettävä." "requiredOptionDialogText": "Joitakin paikkausasetuksia on määritettävä."
}, },
"appSelectorCard": { "appSelectorCard": {
@@ -82,7 +82,7 @@
"selectFromStorageButton": "Valitse tallennustilasta", "selectFromStorageButton": "Valitse tallennustilasta",
"errorMessage": "Valittua sovellusta ei voida käyttää", "errorMessage": "Valittua sovellusta ei voida käyttää",
"downloadToast": "Lataustoiminto ei ole vielä käytettävissä", "downloadToast": "Lataustoiminto ei ole vielä käytettävissä",
"requireSuggestedAppVersionDialogText": "Valitsemasi sovellusversio ei vastaa ehdotettua versiota ja tämä voi johtaa odottamattomia ongelmia. Käytä ehdotettua sovellusversiota.\n\nValittu versio: v${selected}\nEhdotettu versio: v${suggested}\n\nOhittaaksesi tämän, ota \"Vaadi ehdotettu sovellusversio\" -asetus käyttöön.", "requireSuggestedAppVersionDialogText": "Valitsemasi sovellusversio ei vastaa ehdotettua versiota ja tämä voi aiheuttaa odottamattomia ongelmia. Käytä ehdotettua sovellusversiota.\n\nValittu versio: v${selected}\nEhdotettu versio: v${suggested}\n\nOhittaaksesi tämän, ota \"Vaadi ehdotettu sovellusversio\" -asetus käyttöön.",
"featureNotAvailable": "Ominaisuutta ei ole toteutettu", "featureNotAvailable": "Ominaisuutta ei ole toteutettu",
"featureNotAvailableText": "Tämä sovellus on jaettu APK ja se voidaan paikata ja asentaa luotettavasti vain root-oikeuksilla liitettynä. Voit kuitenkin paikata ja asentaa täyden APK:n valitsemalla sen tallennustilasta." "featureNotAvailableText": "Tämä sovellus on jaettu APK ja se voidaan paikata ja asentaa luotettavasti vain root-oikeuksilla liitettynä. Voit kuitenkin paikata ja asentaa täyden APK:n valitsemalla sen tallennustilasta."
}, },
@@ -100,19 +100,19 @@
"loadPatchesSelection": "Lataa paikkausvalikoima", "loadPatchesSelection": "Lataa paikkausvalikoima",
"noSavedPatches": "Valitulle sovellukselle ei ole tallennettu paikkausvalikoimaa.\nTallenna nykyinen valikoima painamalla \"Valmis\".", "noSavedPatches": "Valitulle sovellukselle ei ole tallennettu paikkausvalikoimaa.\nTallenna nykyinen valikoima painamalla \"Valmis\".",
"noPatchesFound": "Valitulle sovellukselle ei löytynyt paikkauksia", "noPatchesFound": "Valitulle sovellukselle ei löytynyt paikkauksia",
"setRequiredOption": "Joillekin paikkauksille on määritettävä asetuksia:\n\n${patches}\n\nTee tarvittavat määritykset ennen kuin jatkat." "setRequiredOption": "Joillekin paikkauksille on määritettävä asetuksia:\n\n${patches}\n\nMääritä ne ennen kuin jatkat."
}, },
"patchOptionsView": { "patchOptionsView": {
"customValue": "Oma arvo", "customValue": "Oma arvo",
"setToNull": "Aseta nollaksi", "setToNull": "Aseta nollaksi",
"nullValue": "Tämän asetuksen arvo on tällä hetkellä nolla", "nullValue": "Tämän asetuksen arvo on tällä hetkellä tyhjä",
"viewTitle": "Paikkausasetukset", "viewTitle": "Paikkausasetukset",
"saveOptions": "Tallenna", "saveOptions": "Tallenna",
"unselectPatch": "Poista paikkauksen valinta", "unselectPatch": "Poista paikkauksen valinta",
"tooltip": "Enemmän syöttöasetuksia", "tooltip": "Enemmän syöttöasetuksia",
"selectFilePath": "Valitse tiedostosijainti", "selectFilePath": "Valitse tiedostosijainti",
"selectFolder": "Valitse kansio", "selectFolder": "Valitse kansio",
"requiredOption": "Tämän asetuksen asettaminen on pakollinen", "requiredOption": "Tämän valinnan asettaminen on pakollista",
"unsupportedOption": "Tätä asetusta ei tueta", "unsupportedOption": "Tätä asetusta ei tueta",
"requiredOptionNull": "Seuraavat asetukset on määritettävä:\n\n${options}" "requiredOptionNull": "Seuraavat asetukset on määritettävä:\n\n${options}"
}, },
@@ -198,7 +198,7 @@
"deleteTempDirLabel": "Poista väliaikaistiedostot", "deleteTempDirLabel": "Poista väliaikaistiedostot",
"deleteTempDirHint": "Poista käyttämättömät väliaikaistiedostot", "deleteTempDirHint": "Poista käyttämättömät väliaikaistiedostot",
"deletedTempDir": "Väliaikaistiedostot poistettiin", "deletedTempDir": "Väliaikaistiedostot poistettiin",
"exportPatchesLabel": "Vie paikkasvalikoima", "exportPatchesLabel": "Vie paikkausvalikoima",
"exportPatchesHint": "Vie paikkausvalikoima JSON-tiedostoon", "exportPatchesHint": "Vie paikkausvalikoima JSON-tiedostoon",
"exportedPatches": "Paikkausvalikoima vietiin", "exportedPatches": "Paikkausvalikoima vietiin",
"noExportFileFound": "Vietäviä paikkausvalikoimia ei ole", "noExportFileFound": "Vietäviä paikkausvalikoimia ei ole",

1
assets/i18n/strings_fil_PH.i18n.json Normal file → Executable file
View File

@@ -52,7 +52,6 @@
"patcherView": { "patcherView": {
"widgetTitle": "Tagapagtapal", "widgetTitle": "Tagapagtapal",
"patchButton": "Tapalan", "patchButton": "Tapalan",
"removedPatchesWarningDialogText": "Ang mga sumusunod na patches ay tinanggal mula noong huling beses mong gamitin ang mga ito.\n\n${patches}\n\nItuloy pa rin ba?",
"requiredOptionDialogText": "Kailangan mo i-set ang ilang mga opsyon para sa patch." "requiredOptionDialogText": "Kailangan mo i-set ang ilang mga opsyon para sa patch."
}, },
"appSelectorCard": { "appSelectorCard": {

3
assets/i18n/strings_fr_FR.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Patcheur", "widgetTitle": "Patcheur",
"patchButton": "Patcher", "patchButton": "Patcher",
"incompatibleArchWarningDialogText": "La correction sur cette architecture n'est pas encore prise en charge et pourrait échouer. Continuer quand même ?", "incompatibleArchWarningDialogText": "La correction sur cette architecture n'est pas encore prise en charge et pourrait échouer. Continuer quand même ?",
"removedPatchesWarningDialogText": "Les patchs suivants ont été supprimés depuis la dernière fois que vous les avez utilisés.\n\n${patches}\n\nContinuer quand même ?", "removedPatchesWarningDialogText": "Les patchs supprimés depuis la dernière fois que vous avez patché cette application :\n\n${patches}\n\n${newPatches}Continuer quand même ?",
"addedPatchesDialogText": "Ajout de correctifs depuis la dernière fois que vous avez patché cette application :\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Certaines options de patch doivent être définies." "requiredOptionDialogText": "Certaines options de patch doivent être définies."
}, },
"appSelectorCard": { "appSelectorCard": {

1
assets/i18n/strings_ga_IE.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,6 @@
"widgetTitle": "Paisteálaí", "widgetTitle": "Paisteálaí",
"patchButton": "Paiste", "patchButton": "Paiste",
"incompatibleArchWarningDialogText": "Níl paisteáil ar an ailtireacht seo tacaítear leis go fóill agus dfhéadfadh sé teip. Lean ar aghaidh fós?", "incompatibleArchWarningDialogText": "Níl paisteáil ar an ailtireacht seo tacaítear leis go fóill agus dfhéadfadh sé teip. Lean ar aghaidh fós?",
"removedPatchesWarningDialogText": "Baineadh na paistí seo a leanas ón uair dheireanach a d'úsáid tú iad.\n\n${patches}\n\nLean ar aghaidh fós?",
"requiredOptionDialogText": "Caithfear roinnt roghanna paiste a shocrú." "requiredOptionDialogText": "Caithfear roinnt roghanna paiste a shocrú."
}, },
"appSelectorCard": { "appSelectorCard": {

0
assets/i18n/strings_gl_ES.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_gu_IN.i18n.json Normal file → Executable file
View File

1
assets/i18n/strings_he_IL.i18n.json Normal file → Executable file
View File

@@ -51,7 +51,6 @@
"patcherView": { "patcherView": {
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "תיקון", "patchButton": "תיקון",
"removedPatchesWarningDialogText": "התיקונים הבאים הוסרו מאז הפעם האחרונה שהשתמשת בהם.\n${patches}\nלהמשיך בכל זאת?",
"requiredOptionDialogText": "כמה אפשרויות תיקון חייבות להיקבע." "requiredOptionDialogText": "כמה אפשרויות תיקון חייבות להיקבע."
}, },
"appSelectorCard": { "appSelectorCard": {

0
assets/i18n/strings_hi_IN.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_hr_HR.i18n.json Normal file → Executable file
View File

3
assets/i18n/strings_hu_HU.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Patchelő", "widgetTitle": "Patchelő",
"patchButton": "Patch", "patchButton": "Patch",
"incompatibleArchWarningDialogText": "Ezen az architektúrán a patchelés még nem támogatott, és sikertelen lehet. Mégis folytatod?", "incompatibleArchWarningDialogText": "Ezen az architektúrán a patchelés még nem támogatott, és sikertelen lehet. Mégis folytatod?",
"removedPatchesWarningDialogText": "A következő patcheket a legutóbbi használatuk óta eltávolították.\n\n${patches}\n\nMindenképpen folytatja?", "removedPatchesWarningDialogText": "Az alkalmazás legutóbbi javítása óta eltávolított javítások:\n\n${patches}\n\n${newPatches}Amúgy folytatja?",
"addedPatchesDialogText": "Javítások hozzáadva az alkalmazás legutóbbi javítása óta:\n\n${addedPatches}",
"requiredOptionDialogText": "Néhány patch lehetőséget be kell állítani." "requiredOptionDialogText": "Néhány patch lehetőséget be kell állítani."
}, },
"appSelectorCard": { "appSelectorCard": {

0
assets/i18n/strings_hy_AM.i18n.json Normal file → Executable file
View File

207
assets/i18n/strings_id_ID.i18n.json Normal file → Executable file
View File

@@ -23,19 +23,19 @@
"refreshSuccess": "Berhasil Memuat Ulang", "refreshSuccess": "Berhasil Memuat Ulang",
"widgetTitle": "Dasbor", "widgetTitle": "Dasbor",
"updatesSubtitle": "Pembaruan", "updatesSubtitle": "Pembaruan",
"lastPatchedAppSubtitle": "Patch terakhir app", "lastPatchedAppSubtitle": "Aplikasi terakhir yang ditambal",
"patchedSubtitle": "App terinstal", "patchedSubtitle": "Aplikasi terpasang",
"changeLaterSubtitle": "Anda dapat mengubahnya di pengaturan nanti.", "changeLaterSubtitle": "Anda dapat mengubahnya di pengaturan nanti.",
"noSavedAppFound": "App tidak ditemukan", "noSavedAppFound": "App tidak ditemukan",
"noInstallations": "Aplikasi tambalan tidak terpasang", "noInstallations": "Aplikasi tertambal tidak terpasang",
"installUpdate": "Lanjutkan untuk mengunduh pembaruan?", "installUpdate": "Lanjutkan untuk mengunduh pembaruan?",
"updateSheetTitle": "Perbarui Manajer ReVanced", "updateSheetTitle": "Perbarui ReVanced Manager",
"updateDialogTitle": "Pembaruan terkini telah tersedia", "updateDialogTitle": "Pembaruan baru telah tersedia",
"updatePatchesSheetTitle": "Perbarui Tambalan ReVanced", "updatePatchesSheetTitle": "Perbarui Tambalan ReVanced",
"updateChangelogTitle": "Catatan perubahan", "updateChangelogTitle": "Catatan perubahan",
"updateDialogText": "Pembaruan telah tersedia untuk ${file}.\n\nVersi yang diinstal saat ini adalah ${version}.", "updateDialogText": "Pembaruan telah tersedia untuk ${file}.\n\nVersi yang dipasang saat ini adalah ${version}.",
"downloadConsentDialogTitle": "Unduh file yang diperlukan?", "downloadConsentDialogTitle": "Unduh file yang diperlukan?",
"downloadConsentDialogText": "Manajer ReVanced perlu mengunduh file yang diperlukan agar berfungsi dengan baik.", "downloadConsentDialogText": "ReVanced Manager perlu mengunduh berkas yang diperlukan agar berfungsi dengan baik.",
"downloadConsentDialogText2": "Ini akan menghubungkan Anda ke ${url}.", "downloadConsentDialogText2": "Ini akan menghubungkan Anda ke ${url}.",
"downloadingMessage": "Mengunduh pembaruan...", "downloadingMessage": "Mengunduh pembaruan...",
"downloadedMessage": "Pembaruan telah diunduh", "downloadedMessage": "Pembaruan telah diunduh",
@@ -54,16 +54,17 @@
"patcherView": { "patcherView": {
"widgetTitle": "Penambal", "widgetTitle": "Penambal",
"patchButton": "Tambalan", "patchButton": "Tambalan",
"incompatibleArchWarningDialogText": "Patching pada arsitektur ini belum didukung dan mungkin gagal. Lanjutkan saja?", "incompatibleArchWarningDialogText": "Menambal pada arsitektur ini belum didukung dan kemungkinan gagal. Lanjutkan saja?",
"removedPatchesWarningDialogText": "Patch berikut telah dihapus sejak terakhir kali Anda menggunakannya.\n\n${patches}\n\nTetap lanjut?", "removedPatchesWarningDialogText": "Tambalan yang dihapus sejak terakhir kali Anda menambal aplikasi ini:\n\n${patches}\n\n${newPatches}Tetap lanjutkan?",
"requiredOptionDialogText": "Beberapa opsi patch harus diatur." "addedPatchesDialogText": "Tambalan yang ditambahkan sejak terakhir kali Anda menambal aplikasi ini:\n\n${addedPatches}",
"requiredOptionDialogText": "Beberapa pilihan tambalan harus diatur."
}, },
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "Pilih aplikasi", "widgetTitle": "Pilih aplikasi",
"widgetTitleSelected": "Aplikasi yang dipilih", "widgetTitleSelected": "Aplikasi yang dipilih",
"widgetSubtitle": "Tidak ada aplikasi yang dipilih", "widgetSubtitle": "Tidak ada aplikasi yang dipilih",
"noAppsLabel": "Aplikasi tidak ditemukan", "noAppsLabel": "Aplikasi tidak ditemukan",
"anyVersion": "Versi apa saja" "anyVersion": "Versi apapun"
}, },
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Pilih tambalan", "widgetTitle": "Pilih tambalan",
@@ -83,44 +84,44 @@
"errorMessage": "Tidak dapat menggunakan aplikasi yang dipilih", "errorMessage": "Tidak dapat menggunakan aplikasi yang dipilih",
"downloadToast": "Fungsi mengunduh belum tersedia", "downloadToast": "Fungsi mengunduh belum tersedia",
"requireSuggestedAppVersionDialogText": "Versi aplikasi yang Anda pilih tidak sesuai dengan versi yang disarankan yang dapat menyebabkan masalah yang tidak diharapkan. Silakan gunakan versi yang disarankan.\n\nVersi yang dipilih: ${selected}\nVersi yang disarankan: ${suggested}\n\nUntuk melanjutkan, nonaktifkan \"Memerlukan versi aplikasi yang disarankan\" di pengaturan.", "requireSuggestedAppVersionDialogText": "Versi aplikasi yang Anda pilih tidak sesuai dengan versi yang disarankan yang dapat menyebabkan masalah yang tidak diharapkan. Silakan gunakan versi yang disarankan.\n\nVersi yang dipilih: ${selected}\nVersi yang disarankan: ${suggested}\n\nUntuk melanjutkan, nonaktifkan \"Memerlukan versi aplikasi yang disarankan\" di pengaturan.",
"featureNotAvailable": "Fitur tidak diimplementasi", "featureNotAvailable": "Fitur belum diterapkan",
"featureNotAvailableText": "Aplikasi ini adalah APK terpisah yang hanya dapat ditambal dan dipasang melalui cara mount dengan izin root. Namun, APK lengkap dapat Anda tambal dan pasang dengan memilihnya dari penyimpanan." "featureNotAvailableText": "Aplikasi ini adalah APK terpisah yang hanya dapat ditambal dan dipasang melalui cara mount dengan izin root. Namun, Anda dapat menambal dan memasang APK lengkap dengan memilihnya dari penyimpanan."
}, },
"patchesSelectorView": { "patchesSelectorView": {
"viewTitle": "Pilih tambalan", "viewTitle": "Pilih tambalan",
"searchBarHint": "Cari tambalan", "searchBarHint": "Cari tambalan",
"universalPatches": "Patch universal", "universalPatches": "Tambalan universal",
"newPatches": "Patch baru", "newPatches": "Tambalan baru",
"patches": "Patch", "patches": "Tambalan",
"doneButton": "Selesai", "doneButton": "Selesai",
"defaultChip": "Bawaan", "defaultChip": "Bawaan",
"defaultTooltip": "Pilih semua tambalan bawaan", "defaultTooltip": "Pilih semua tambalan bawaan",
"noneChip": "Tidak ada", "noneChip": "Tidak ada",
"noneTooltip": "Batalkan semua tambalan", "noneTooltip": "Batalkan semua tambalan",
"loadPatchesSelection": "Muat patch terpilih", "loadPatchesSelection": "Muat tambalan terpilih",
"noSavedPatches": "Tidak ada pilihan tambalan yang disimpan untuk aplikasi yang dipilih.\nTekan Selesai untuk menyimpan pilihan saat ini.", "noSavedPatches": "Tidak ada pilihan tambalan yang disimpan untuk aplikasi yang dipilih.\nTekan Selesai untuk menyimpan pilihan saat ini.",
"noPatchesFound": "Tidak ada tambalan untuk aplikasi", "noPatchesFound": "Tidak ada tambalan untuk aplikasi terpilih",
"setRequiredOption": "Beberapa patch memerlukan opsi untuk diatur:\n\n${patches}\n\nAturlah sebelum melanjutkan." "setRequiredOption": "Beberapa tambalan memerlukan pilihan untuk diatur:\n\n${patches}\n\nAturlah sebelum melanjutkan."
}, },
"patchOptionsView": { "patchOptionsView": {
"customValue": "Nilai kustom", "customValue": "Nilai khusus",
"setToNull": "Setel ke null", "setToNull": "Setel ke null",
"nullValue": "Nilai opsi ini saat ini adalah null", "nullValue": "Nilai pilihan ini saat ini adalah null",
"viewTitle": "Opsi tambalan", "viewTitle": "Pilihan tambalan",
"saveOptions": "Simpan", "saveOptions": "Simpan",
"unselectPatch": "Batalkan pilihan patch", "unselectPatch": "Batalkan pilihan tambalan",
"tooltip": "Opsi masukan lainnya", "tooltip": "Pilihan masukan lainnya",
"selectFilePath": "Pilih lokasi berkas", "selectFilePath": "Pilih lokasi berkas",
"selectFolder": "Pilih folder", "selectFolder": "Pilih folder",
"requiredOption": "Pengaturan opsi ini diperlukan", "requiredOption": "Pengaturan pilihan ini diperlukan",
"unsupportedOption": "Pilihan ini tidak didukung", "unsupportedOption": "Pilihan ini tidak didukung",
"requiredOptionNull": "Pilihan ini harus terpilih:\n\n${options}" "requiredOptionNull": "Pilihan ini harus terpilih:\n\n${options}"
}, },
"patchItem": { "patchItem": {
"unsupportedDialogText": "Memilih tambalan ini akan menyebabkan galat tambal.\n\nVersi apli: ${packageVersion}\nVersi anjuran:\n${supportedVersions}", "unsupportedDialogText": "Memilih tambalan ini mungkin menyebabkan kegagalan tambal.\n\nVersi aplikasi: ${packageVersion}\nVersi yang didukung:\n${supportedVersions}",
"unsupportedPatchVersion": "Tambalan ini tidak mendukung versi aplikasi ini.", "unsupportedPatchVersion": "Tambalan ini tidak mendukung versi aplikasi ini.",
"unsupportedRequiredOption": "Patch ini berisi opsi wajib yang tidak didukung oleh aplikasi ini", "unsupportedRequiredOption": "Tambalan ini berisi pilihan wajib yang tidak didukung oleh aplikasi ini",
"patchesChangeWarningDialogText": "Direkomendasikan untuk menggunakan pilihan dan opsi tambalan default. Mengubahnya dapat mengakibatkan masalah yang tidak diharapkan.\n\nAnda harus mengaktifkan \"Izinkan perubahan pilihan tambalan\" dalam pengaturan sebelum mengubah pilihan tambalan.", "patchesChangeWarningDialogText": "Direkomendasikan untuk menggunakan pilihan dan opsi tambalan bawaan. Mengubahnya dapat mengakibatkan masalah yang tidak diharapkan.\n\nAnda harus mengaktifkan \"Izinkan perubahan pilihan tambalan\" dalam pengaturan sebelum mengubah pilihan tambalan.",
"patchesChangeWarningDialogButton": "Gunakan pemilihan bawaan" "patchesChangeWarningDialogButton": "Gunakan pemilihan bawaan"
}, },
"installerView": { "installerView": {
@@ -129,13 +130,13 @@
"installButton": "Pasang", "installButton": "Pasang",
"installRootType": "Mount", "installRootType": "Mount",
"installNonRootType": "Reguler", "installNonRootType": "Reguler",
"warning": "Nonaktifkan pembaruan pada aplikasi tertambal untuk menghindari isu.", "warning": "Nonaktifkan pembaruan pada aplikasi tertambal untuk menghindari masalah.",
"pressBackAgain": "Tekan tombol balik lagi untuk membatalkan", "pressBackAgain": "Tekan tombol kembali untuk membatalkan",
"openButton": "Buka", "openButton": "Buka",
"notificationTitle": "ReVanced Manager sedang menambal", "notificationTitle": "ReVanced Manager sedang menambal",
"notificationText": "Ketuk untuk kembali ke pemasang", "notificationText": "Ketuk untuk kembali ke pemasang",
"exportApkButtonTooltip": "Ekspor APK yang ditambal", "exportApkButtonTooltip": "Ekspor APK yang ditambal",
"exportLogButtonTooltip": "Log ekspor", "exportLogButtonTooltip": "Ekspor log",
"screenshotDetected": "Tangkapan layar telah terdeteksi. Jika Anda mencoba membagikan log, silakan bagikan salinan teks.\n\nMenyalin log ke papan klip?", "screenshotDetected": "Tangkapan layar telah terdeteksi. Jika Anda mencoba membagikan log, silakan bagikan salinan teks.\n\nMenyalin log ke papan klip?",
"copiedToClipboard": "Menyalin log ke papan klip", "copiedToClipboard": "Menyalin log ke papan klip",
"noExit": "Pemasangan masih berjalan, tidak bisa keluar..." "noExit": "Pemasangan masih berjalan, tidak bisa keluar..."
@@ -150,45 +151,45 @@
"dataSectionTitle": "Sumber data", "dataSectionTitle": "Sumber data",
"themeModeLabel": "Tema aplikasi", "themeModeLabel": "Tema aplikasi",
"systemThemeLabel": "Sistem", "systemThemeLabel": "Sistem",
"lightThemeLabel": "Cahaya", "lightThemeLabel": "Terang",
"darkThemeLabel": "Mode gelap", "darkThemeLabel": "Gelap",
"dynamicThemeLabel": "Material You", "dynamicThemeLabel": "Material You",
"dynamicThemeHint": "Nikmati pengalaman lebih dekat ke perangkat Anda", "dynamicThemeHint": "Nikmati pengalaman lebih dekat ke perangkat Anda",
"languageLabel": "Bahasa", "languageLabel": "Bahasa",
"languageUpdated": "Bahasa diperbaharui", "languageUpdated": "Bahasa diperbarui",
"sourcesLabel": "Sumber-sumber alternatif", "sourcesLabel": "Sumber alternatif",
"sourcesLabelHint": "Mengonfigurasi sumber alternatif untuk ReVanced Patches dan ReVanced Integrations", "sourcesLabelHint": "Atur sumber alternatif untuk ReVanced Patches dan ReVanced Integrations",
"sourcesIntegrationsLabel": "Sumber Integrasi", "sourcesIntegrationsLabel": "Sumber Integrasi",
"useAlternativeSources": "Gunakan sumber-sumber alternatif", "useAlternativeSources": "Gunakan sumber alternatif",
"useAlternativeSourcesHint": "Gunakan sumber alternatif untuk ReVanced Patches dan ReVanced Integrations alih-alih API", "useAlternativeSourcesHint": "Gunakan sumber alternatif untuk ReVanced Patches dan ReVanced Integrations daripada API",
"sourcesResetDialogTitle": "Atur ulang", "sourcesResetDialogTitle": "Atur ulang",
"sourcesResetDialogText": "Apakah Anda yakin ingin mengatur ulang sumber kustom ke bawaannya?", "sourcesResetDialogText": "Apakah Anda yakin ingin mengatur ulang sumber khusus ke sumber bawaan?",
"apiURLResetDialogText": "Apakah Anda yakin ingin mengatur ulang URL API ke 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 ReVanced Patches dan ReVanced Integrations dari sumber alternatif.\n\nIni akan menghubungkan Anda ke sumber alternatif.",
"apiURLLabel": "URL API", "apiURLLabel": "URL API",
"apiURLHint": "Konfigurasikan URL API dari ReVanced Manager", "apiURLHint": "Atur URL API dari ReVanced Manager",
"selectApiURL": "URL API", "selectApiURL": "URL API",
"orgPatchesLabel": "Perapihan tambalan", "orgPatchesLabel": "Organisasi tambalan",
"sourcesPatchesLabel": "Sumber tambalan", "sourcesPatchesLabel": "Sumber tambalan",
"orgIntegrationsLabel": "Organisasi Intergrasi", "orgIntegrationsLabel": "Organisasi Integrasi",
"contributorsLabel": "Kontributor", "contributorsLabel": "Kontributor",
"contributorsHint": "Daftar kontributor ReVanced", "contributorsHint": "Daftar kontributor ReVanced",
"logsLabel": "Bagikan log", "logsLabel": "Bagikan log",
"logsHint": "Bagikan log ReVanced Manager", "logsHint": "Bagikan log ReVanced Manager",
"enablePatchesSelectionLabel": "Izinkan mengubah pemilihan tambalan", "enablePatchesSelectionLabel": "Izinkan mengubah pemilihan tambalan",
"enablePatchesSelectionHint": "Jangan mencegah pemilihan atau pembatalan pemilihan tambalan", "enablePatchesSelectionHint": "Jangan mencegah pemilihan atau pembatalan pemilihan tambalan",
"enablePatchesSelectionWarningText": "Mengubah pilihan dari tambalan akan menyebabkan isu tak terduga.\n\nAktifkan saja?", "enablePatchesSelectionWarningText": "Mengubah pilihan dari tambalan akan menyebabkan masalah tak terduga.\n\nAktifkan saja?",
"disablePatchesSelectionWarningText": "Anda akan menonaktifkan pengubahan pilihan tambalan.\nPilihan tambalan default akan dikembalikan.\n\nMenonaktifkan?", "disablePatchesSelectionWarningText": "Anda akan menonaktifkan pengubahan pilihan tambalan.\nPilihan tambalan bawaan akan dikembalikan.\n\nTetap nonaktifkan?",
"autoUpdatePatchesLabel": "Otomatis perbarui tambalan", "autoUpdatePatchesLabel": "Otomatis perbarui tambalan",
"autoUpdatePatchesHint": "Otomatis perbarui tambalan ke versi terkini", "autoUpdatePatchesHint": "Otomatis perbarui tambalan ke versi terbaru",
"showUpdateDialogLabel": "Tampilkan dialog pembaruan", "showUpdateDialogLabel": "Tampilkan dialog pembaruan",
"showUpdateDialogHint": "Tampilkan dialog ketika pembaruan tersedia", "showUpdateDialogHint": "Tampilkan dialog ketika pembaruan tersedia",
"universalPatchesLabel": "Tampilkan tambalan universal", "universalPatchesLabel": "Tampilkan tambalan universal",
"universalPatchesHint": "Menampilkan semua aplikasi dan tambalan universal (dapat memperlambat daftar aplikasi)", "universalPatchesHint": "Tampilkan semua aplikasi dan tambalan universal (dapat memperlambat daftar aplikasi)",
"lastPatchedAppLabel": "Simpan patch aplikasi", "lastPatchedAppLabel": "Simpan aplikasi tertambal",
"lastPatchedAppHint": "Simpan patch terakhir untuk diinstal atau diekspor nanti", "lastPatchedAppHint": "Simpan tambalan terakhir untuk dipasang atau diekspor nanti",
"versionCompatibilityCheckLabel": "Periksa versi kompatibilitas", "versionCompatibilityCheckLabel": "Pemeriksaan kompatibilitas versi",
"versionCompatibilityCheckHint": "Cegah pemilihan tambalan yang tidak kompatibel dengan versi aplikasi yang dipilih", "versionCompatibilityCheckHint": "Cegah pemilihan tambalan yang tidak cocok dengan versi aplikasi yang dipilih",
"requireSuggestedAppVersionLabel": "Memerlukan versi aplikasi yang disarankan", "requireSuggestedAppVersionLabel": "Memerlukan versi aplikasi yang disarankan",
"requireSuggestedAppVersionHint": "Cegah memilih versi aplikasi yang tidak disarankan", "requireSuggestedAppVersionHint": "Cegah memilih versi aplikasi yang tidak disarankan",
"requireSuggestedAppVersionDialogText": "Memilih versi aplikasi yang tidak disarankan dapat menyebabkan masalah yang tidak terduga.\n\nApakah anda ingin melanjutkan?", "requireSuggestedAppVersionDialogText": "Memilih versi aplikasi yang tidak disarankan dapat menyebabkan masalah yang tidak terduga.\n\nApakah anda ingin melanjutkan?",
@@ -198,39 +199,39 @@
"deleteTempDirLabel": "Hapus berkas sementara", "deleteTempDirLabel": "Hapus berkas sementara",
"deleteTempDirHint": "Hapus berkas sementara yang tidak dipakai", "deleteTempDirHint": "Hapus berkas sementara yang tidak dipakai",
"deletedTempDir": "Berkas sementara dihapus", "deletedTempDir": "Berkas sementara dihapus",
"exportPatchesLabel": "Ekspor tambalan pilihan", "exportPatchesLabel": "Ekspor pilihan tambalan",
"exportPatchesHint": "Ekspor tambalan terpilih ke berkas JSON", "exportPatchesHint": "Ekspor pilihan tambalan ke berkas JSON",
"exportedPatches": "Tambalan pilihan diekspor", "exportedPatches": "Tambalan terpilih diekspor",
"noExportFileFound": "Belum pilih tambalan untuk diekspor", "noExportFileFound": "Belum pilih tambalan untuk diekspor",
"importPatchesLabel": "Impor modifikasi terpilih", "importPatchesLabel": "Impor tambalan pilihan",
"importPatchesHint": "Impor tembalan terpilih dari berkas JSON", "importPatchesHint": "Impor tembalan pilihan dari berkas JSON",
"importedPatches": "Tambalan pilihan diimpor", "importedPatches": "Tambalan pilihan diimpor",
"resetStoredPatchesLabel": "Setel ulang tambalan pilihan", "resetStoredPatchesLabel": "Atur ulang tambalan pilihan",
"resetStoredPatchesHint": "Mulai ulang tambalan pilihan yang disimpan", "resetStoredPatchesHint": "Atur ulang tambalan pilihan yang disimpan",
"resetStoredPatchesDialogTitle": "Mulai ulang tambalan pilihan?", "resetStoredPatchesDialogTitle": "Atur ulang tambalan pilihan?",
"resetStoredPatchesDialogText": "Tambalan pilihan bawaan akan dikembalikan.", "resetStoredPatchesDialogText": "Tambalan pilihan bawaan akan dikembalikan.",
"resetStoredPatches": "Tambalan pilihan telah diatur ulang", "resetStoredPatches": "Tambalan pilihan telah diatur ulang",
"resetStoredOptionsLabel": "Setel ulang opsi tambalan", "resetStoredOptionsLabel": "Atur ulang pilihan tambalan",
"resetStoredOptionsHint": "Setel ulang semua opsi tambalan", "resetStoredOptionsHint": "Atur ulang semua pilihan tambalan",
"resetStoredOptionsDialogTitle": "Setel ulang opsi tambalan?", "resetStoredOptionsDialogTitle": "Atur ulang pilihan tambalan?",
"resetStoredOptionsDialogText": "Menyetel ulang opsi tambalan akan menghapus semua opsi yang disimpan.", "resetStoredOptionsDialogText": "Menyetel ulang pilihan tambalan akan menghapus semua pilihan yang disimpan.",
"resetStoredOptions": "Opsi telah diatur ulang", "resetStoredOptions": "Pilihan telah diatur ulang",
"deleteLogsLabel": "Hapus riwayat", "deleteLogsLabel": "Hapus catatan",
"deleteLogsHint": "Hapus log ReVanced Manager terkumpul", "deleteLogsHint": "Hapus log ReVanced Manager yang dikumpulkan",
"deletedLogs": "Log dihapus", "deletedLogs": "Log dihapus",
"regenerateKeystoreLabel": "Menghasilkan penyimpanan kunci", "regenerateKeystoreLabel": "Buat ulang keystore",
"regenerateKeystoreHint": "Buat ulang penyimpanan kunci yang digunakan untuk menandatangani aplikasi", "regenerateKeystoreHint": "Buat ulang keystore yang digunakan untuk menandatangani aplikasi",
"regenerateKeystoreDialogTitle": "Membuat ulang kunci penyimpanan?", "regenerateKeystoreDialogTitle": "Buat ulang keystore?",
"regenerateKeystoreDialogText": "Aplikasi tambalan yang ditandatangani dengan kunci penyimpanan lama tidak dapat diperbarui lagi.", "regenerateKeystoreDialogText": "Aplikasi tambalan yang ditandatangani dengan keystore lama tidak dapat diperbarui lagi.",
"regeneratedKeystore": "Kunci penyimpanan dibuat ulang", "regeneratedKeystore": "Keystore dibuat ulang",
"exportKeystoreLabel": "Ekspor keystore", "exportKeystoreLabel": "Ekspor keystore",
"exportKeystoreHint": "Ekspor kunci penyimpanan yang digunakan untuk menandatangani aplikasi", "exportKeystoreHint": "Ekspor keystore yang digunakan untuk menandatangani aplikasi",
"exportedKeystore": "Keystore diekspor", "exportedKeystore": "Keystore diekspor",
"noKeystoreExportFileFound": "Tidak ada keystore untuk diekspor", "noKeystoreExportFileFound": "Tidak ada keystore untuk diekspor",
"importKeystoreLabel": "Impor keystore", "importKeystoreLabel": "Impor keystore",
"importKeystoreHint": "Impor kunci penyimpanan yang digunakan untuk menandatangani aplikasi", "importKeystoreHint": "Impor keystore yang digunakan untuk menandatangani aplikasi",
"importedKeystore": "Keystore diimpor", "importedKeystore": "Keystore diimpor",
"selectKeystorePassword": "Kata Sandi Keystore", "selectKeystorePassword": "Kata sandi keystore",
"selectKeystorePasswordHint": "Pilih kata sandi keystore yang digunakan untuk menandatangani aplikasi", "selectKeystorePasswordHint": "Pilih kata sandi keystore yang digunakan untuk menandatangani aplikasi",
"jsonSelectorErrorMessage": "Tidak bisa menggunakan berkas JSON tersebut", "jsonSelectorErrorMessage": "Tidak bisa menggunakan berkas JSON tersebut",
"keystoreSelectorErrorMessage": "Tidak bisa menggunakan berkas keystrore tersebut" "keystoreSelectorErrorMessage": "Tidak bisa menggunakan berkas keystrore tersebut"
@@ -240,26 +241,26 @@
"openButton": "Buka", "openButton": "Buka",
"installButton": "Pasang", "installButton": "Pasang",
"uninstallButton": "Copot", "uninstallButton": "Copot",
"unmountButton": "Lepas mount", "unmountButton": "Unmount",
"exportButton": "Ekspor", "exportButton": "Ekspor",
"deleteButton": "Hapus", "deleteButton": "Hapus",
"rootDialogTitle": "Kesalahan", "rootDialogTitle": "Kesalahan",
"lastPatchedAppDescription": "Ini adalah cadangan patch aplikasi terakhir.", "lastPatchedAppDescription": "Ini adalah cadangan dari aplikasi yang terakhir ditambal.",
"unmountDialogText": "Apakah yakin ingin melepas mount aplikasi ini?", "unmountDialogText": "Apakah Anda yakin ingin unmount aplikasi ini?",
"uninstallDialogText": "Apakah yakin ingin mencopot aplikasi ini?", "uninstallDialogText": "Apakah Anda yakin ingin mencopot aplikasi ini?",
"rootDialogText": "Aplikasi dipasang dengan izin superuser, tapi saat ini ReVanced Manager belum diizinkan.\nMohon berikan izin superuser dulu.", "rootDialogText": "Aplikasi dipasang dengan izin superuser, tapi saat ini ReVanced Manager tidak mempunyai izin.\nMohon berikan izin superuser terlebih dahulu.",
"removeAppDialogTitle": "Hapus Aplikasi?", "removeAppDialogTitle": "Hapus aplikasi?",
"removeAppDialogText": "Yakin akan menghapus data backup ini?", "removeAppDialogText": "Apakah Anda yakin ingin menghapus cadangan ini?",
"packageNameLabel": "Nama paket", "packageNameLabel": "Nama paket",
"installTypeLabel": "Tipe pemasangan", "installTypeLabel": "Jenis pemasangan",
"mountTypeLabel": "Mount", "mountTypeLabel": "Mount",
"regularTypeLabel": "Reguler", "regularTypeLabel": "Reguler",
"patchedDateLabel": "Kapan ditambal", "patchedDateLabel": "Tanggal ditambal",
"appliedPatchesLabel": "Tambalan terterap", "appliedPatchesLabel": "Tambalan yang diterapkan",
"sizeLabel": "Ukuran file", "sizeLabel": "Ukuran berkas",
"patchedDateHint": "${date} pukul ${time}", "patchedDateHint": "${date} pada pukul ${time}",
"appliedPatchesHint": "${quantity} tambalan terterap", "appliedPatchesHint": "${quantity} tambalan yang diterapkan",
"updateNotImplemented": "Fitur ini belum diimplementasi" "updateNotImplemented": "Fitur ini belum diterapkan"
}, },
"contributorsView": { "contributorsView": {
"widgetTitle": "Kontributor" "widgetTitle": "Kontributor"
@@ -270,24 +271,24 @@
"mount_missing_installation": "Pemasangan tidak ada", "mount_missing_installation": "Pemasangan tidak ada",
"status_failure_blocked": "Pemasangan diblokir", "status_failure_blocked": "Pemasangan diblokir",
"install_failed_verification_failure": "Verifikasi gagal", "install_failed_verification_failure": "Verifikasi gagal",
"status_failure_invalid": "Pemasangan tidak absah", "status_failure_invalid": "Pemasangan tidak sah",
"install_failed_version_downgrade": "Tak bisa turun versi", "install_failed_version_downgrade": "Tidak dapat menurunkan versi",
"status_failure_conflict": "Pemasangan cekcok", "status_failure_conflict": "Pemasangan berselisih",
"status_failure_storage": "Ruang pemasangan bermasalah", "status_failure_storage": "Ruang pemasangan bermasalah",
"status_failure_incompatible": "Pemasangan tidak kompatibel", "status_failure_incompatible": "Pemasangan tidak cocok",
"status_failure_timeout": "Pemasangan kelamaan", "status_failure_timeout": "Pemasangan kehabisan waktu",
"status_unknown": "Pemasangan gagal", "status_unknown": "Pemasangan gagal",
"mount_version_mismatch_description": "Penginstalan gagal karena aplikasi yang diinstal merupakan versi yang berbeda dari aplikasi yang ditambal.\n\nInstal versi aplikasi yang anda pasang dan coba lagi.", "mount_version_mismatch_description": "Pemasangan gagal dikarenakan aplikasi yang dipasang merupakan versi yang berbeda dari aplikasi yang ditambal.\n\nPasang versi aplikasi yang Anda pasang dan coba lagi.",
"mount_no_root_description": "Pemasangan ini gagal karena akses root belum dizinkan.\n\nIzinkan akses root ke ReVanced Manager dan coba lagi.", "mount_no_root_description": "Pemasangan gagal karena akses root belum dizinkan.\n\nIzinkan akses root ke ReVanced Manager dan coba lagi.",
"mount_missing_installation_description": "Penginstalan gagal karena aplikasi yang belum ditambal tidak diinstal pada perangkat ini untuk dipasang di atasnya.\n\nInstal aplikasi yang belum ditambal sebelum memasang dan coba lagi.", "mount_missing_installation_description": "Pemasangan gagal dikarenakan aplikasi yang belum ditambal tidak terpasang pada perangkat ini supaya dipasang di atasnya.\n\nPasang aplikasi yang belum ditambal sebelum memasang dan coba lagi.",
"status_failure_timeout_description": "Instalasi memakan waktu terlalu lama untuk diselesaikan.\n\nApakah anda ingin mencoba lagi?", "status_failure_timeout_description": "Pemasangan memakan waktu terlalu lama untuk diselesaikan.\n\nApakah Anda ingin mencoba lagi?",
"status_failure_storage_description": "Instalasi gagal karena penyimpanan tidak mencukupi.\n\nKosongkan sebagian ruang dan coba kembali.", "status_failure_storage_description": "Pemasangan gagal karena ruang penyimpanan tidak cukup.\n\nKosongkan sebagian ruang dan coba lagi.",
"status_failure_invalid_description": "Instalasi gagal karena aplikasi yang ditambal tidak valid.\n\nCopot pemasangan aplikasi dan coba lagi?", "status_failure_invalid_description": "Pemasangan gagal karena aplikasi yang ditambal tidak sah.\n\nCopot pemasangan aplikasi dan coba lagi?",
"status_failure_incompatible_description": "Aplikasi tidak kompatibel dengan perangkat ini.\n\nGunakan APK sesuai jenis perangkat dan coba lagi.", "status_failure_incompatible_description": "Aplikasi tidak cocok dengan perangkat ini.\n\nGunakan APK yang didukung perangkat ini dan coba lagi.",
"status_failure_conflict_description": "Penginstalan dicegah oleh aplikasi yang sudah ada.\n\nCopot pemasangan aplikasi yang terpasang dan coba kembali?", "status_failure_conflict_description": "Pemasangan dicegah oleh aplikasi yang sudah ada.\n\nCopot pemasangan aplikasi yang terpasang dan coba lagi?",
"status_failure_blocked_description": "Instalasi diblokir oleh ${packageName}.\n\nSesuaikan pengaturan keamanan anda dan coba kembali.", "status_failure_blocked_description": "Pemasangan diblokir oleh ${packageName}.\n\nSesuaikan pengaturan keamanan Anda dan coba lagi.",
"install_failed_verification_failure_description": "Instalasi gagal karena masalah verifikasi.\n\nSesuaikan pengaturan keamanan anda dan coba kembali.", "install_failed_verification_failure_description": "Instalasi gagal karena masalah verifikasi.\n\nSesuaikan pengaturan keamanan anda dan coba kembali.",
"install_failed_version_downgrade_description": "Instalasi gagal karena aplikasi tambalan memiliki versi yang lebih rendah daripada aplikasi yang sudah ada.\n\nCopot pemasangan aplikasi dan coba kembali?", "install_failed_version_downgrade_description": "Pemasangan gagal karena aplikasi tambalan memiliki versi yang lebih rendah daripada aplikasi yang sudah terpasang.\n\nCopot pemasangan aplikasi dan coba lagi?",
"status_unknown_description": "Instalasi gagal karena alasan yang tidak diketahui. Silakan coba kembali." "status_unknown_description": "Pemasangan gagal karena alasan yang tidak diketahui. Silakan coba lagi."
} }
} }

1
assets/i18n/strings_is_IS.i18n.json Normal file → Executable file
View File

@@ -51,7 +51,6 @@
"patcherView": { "patcherView": {
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "Bót", "patchButton": "Bót",
"removedPatchesWarningDialogText": "Eftirfarandi patches hafa verið fjarlægðir síðan þú notaðir þá síðast.\n\n${patches}\n\nHalda samt áfram?",
"requiredOptionDialogText": "Það þarf að stilla nokkra patch valkosti." "requiredOptionDialogText": "Það þarf að stilla nokkra patch valkosti."
}, },
"appSelectorCard": { "appSelectorCard": {

3
assets/i18n/strings_it_IT.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "Patch", "patchButton": "Patch",
"incompatibleArchWarningDialogText": "La patch su questa architettura non è ancora supportata e potrebbe fallire. Continuare comunque?", "incompatibleArchWarningDialogText": "La patch su questa architettura non è ancora supportata e potrebbe fallire. Continuare comunque?",
"removedPatchesWarningDialogText": "Le seguenti patch sono state rimosse dall'ultima volta che le hai usate.\n\n${patches}\n\nContinuare comunque?", "removedPatchesWarningDialogText": "Le patch rimosse dall'ultima volta che hai patchato questa app:\n\n${patches}\n\n${newPatches}Continuare comunque?",
"addedPatchesDialogText": "Aggiunte patch dall'ultima volta che hai patchato questa app:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Alcune opzioni di patch devono essere impostate." "requiredOptionDialogText": "Alcune opzioni di patch devono essere impostate."
}, },
"appSelectorCard": { "appSelectorCard": {

3
assets/i18n/strings_ja_JP.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "パッチャー", "widgetTitle": "パッチャー",
"patchButton": "パッチ", "patchButton": "パッチ",
"incompatibleArchWarningDialogText": "このアーキテクチャへのパッチ適用はまだサポートされておらず、失敗する可能性があります。とにかく続けますか?", "incompatibleArchWarningDialogText": "このアーキテクチャへのパッチ適用はまだサポートされておらず、失敗する可能性があります。とにかく続けますか?",
"removedPatchesWarningDialogText": "以下のパッチはもう使用できません。\n\n${patches}\n\n続行しますか?", "removedPatchesWarningDialogText": "最後にこのアプリにパッチを適用したときからパッチを削除しました:\n\n${patches}\n\n${newPatches}とにかく続けますか",
"addedPatchesDialogText": "前回このアプリにパッチを適用した時以降のパッチを追加しました:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "一部のパッチオプションを設定する必要があります。" "requiredOptionDialogText": "一部のパッチオプションを設定する必要があります。"
}, },
"appSelectorCard": { "appSelectorCard": {

0
assets/i18n/strings_ka_GE.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_kk_KZ.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_km_KH.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_kn_IN.i18n.json Normal file → Executable file
View File

5
assets/i18n/strings_ko_KR.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "패치하기", "patchButton": "패치하기",
"incompatibleArchWarningDialogText": "이 아키텍처에 대한 패치는 아직 지원되지 않으므로 실패할 수 있습니다. 그래도 계속하시겠습니까?", "incompatibleArchWarningDialogText": "이 아키텍처에 대한 패치는 아직 지원되지 않으므로 실패할 수 있습니다. 그래도 계속하시겠습니까?",
"removedPatchesWarningDialogText": "최근 적용된 패치들 중 다음 패치가 제거됩니다.\n\n${patches}\n\n그래도 계속하시겠습니까?", "removedPatchesWarningDialogText": "이 앱을 마지막으로 패치한 이후 제거된 패치입니다:\n\n${patches}\n\n${newPatches}그래도 계속하시겠습니까?",
"addedPatchesDialogText": "이 앱을 마지막으로 패치한 이후 추가된 패치입니다:\n\n${addedPatches}",
"requiredOptionDialogText": "일부 패치 옵션을 설정해야 합니다." "requiredOptionDialogText": "일부 패치 옵션을 설정해야 합니다."
}, },
"appSelectorCard": { "appSelectorCard": {
@@ -186,7 +187,7 @@
"universalPatchesLabel": "공용 패치 보기", "universalPatchesLabel": "공용 패치 보기",
"universalPatchesHint": "기기에 설치된 모든 앱과 공용 패치를 표시합니다 (앱 목록이 느려질 수 있음)", "universalPatchesHint": "기기에 설치된 모든 앱과 공용 패치를 표시합니다 (앱 목록이 느려질 수 있음)",
"lastPatchedAppLabel": "패치된 앱 저장", "lastPatchedAppLabel": "패치된 앱 저장",
"lastPatchedAppHint": "나중에 설치하거나 내보낼 마지막으로 패치된 앱을 저장 수 있습니다", "lastPatchedAppHint": "마지막으로 패치된 앱을 저장하여 나중에 설치하거나 내보낼 수 있습니다",
"versionCompatibilityCheckLabel": "버전 호환성 체크", "versionCompatibilityCheckLabel": "버전 호환성 체크",
"versionCompatibilityCheckHint": "선택한 앱 버전과 호환되지 않는 패치를 선택할 수 없습니다", "versionCompatibilityCheckHint": "선택한 앱 버전과 호환되지 않는 패치를 선택할 수 없습니다",
"requireSuggestedAppVersionLabel": "권장 앱 버전 요구", "requireSuggestedAppVersionLabel": "권장 앱 버전 요구",

0
assets/i18n/strings_ky_KG.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_lo_LA.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_lt_LT.i18n.json Normal file → Executable file
View File

3
assets/i18n/strings_lv_LV.i18n.json Normal file → Executable file
View File

@@ -49,8 +49,7 @@
}, },
"patcherView": { "patcherView": {
"widgetTitle": "Pačeris", "widgetTitle": "Pačeris",
"patchButton": "Pačot", "patchButton": "Pačot"
"removedPatchesWarningDialogText": "Kopš pēdējās lietošanas reizes ir noņemti šādi ielāpi.\n\n${patches}\n\nTurpināt jebkurā gadījumā?"
}, },
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "Izvēlaties lietotni", "widgetTitle": "Izvēlaties lietotni",

0
assets/i18n/strings_mk_MK.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_ml_IN.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_mn_MN.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_mr_IN.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_ms_MY.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_my_MM.i18n.json Normal file → Executable file
View File

2
assets/i18n/strings_nb_NO.i18n.json Normal file → Executable file
View File

@@ -55,6 +55,8 @@
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "Oppdatering", "patchButton": "Oppdatering",
"incompatibleArchWarningDialogText": "Patching på denne arkitekturen er ennå ikke støttet og kan mislykkes. Fortsette likevel?", "incompatibleArchWarningDialogText": "Patching på denne arkitekturen er ennå ikke støttet og kan mislykkes. Fortsette likevel?",
"removedPatchesWarningDialogText": "Fjernede oppdateringer siden forrige gang du sendte denne appen:\n\n${patches}\n\n${newPatches}Fortsette likevel?",
"addedPatchesDialogText": "La til korrigeringer siden forrige gang du patchet denne appen:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Noen oppdateringsalternativer må angis." "requiredOptionDialogText": "Noen oppdateringsalternativer må angis."
}, },
"appSelectorCard": { "appSelectorCard": {

0
assets/i18n/strings_ne_IN.i18n.json Normal file → Executable file
View File

3
assets/i18n/strings_nl_NL.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "Patch", "patchButton": "Patch",
"incompatibleArchWarningDialogText": "Patchen op deze architectuur wordt nog niet ondersteund en zal mogelijk mislukken. Toch doorgaan?", "incompatibleArchWarningDialogText": "Patchen op deze architectuur wordt nog niet ondersteund en zal mogelijk mislukken. Toch doorgaan?",
"removedPatchesWarningDialogText": "De volgende patches zijn verwijderd sinds de laatste keer dat je ze hebt gebruikt.\n\n${patches}\n\nToch doorgaan?", "removedPatchesWarningDialogText": "Patch patches verwijderd sinds de laatste keer dat u deze app heeft aangepast:\n\n${patches}\n\n${newPatches}toch doorgaan?",
"addedPatchesDialogText": "Patch toegevoegd sinds de laatste keer dat u deze app heeft gepatenteerd:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Er moeten enkele patch-opties worden ingesteld." "requiredOptionDialogText": "Er moeten enkele patch-opties worden ingesteld."
}, },
"appSelectorCard": { "appSelectorCard": {

0
assets/i18n/strings_or_IN.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_pa_IN.i18n.json Normal file → Executable file
View File

3
assets/i18n/strings_pl_PL.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Program łatający", "widgetTitle": "Program łatający",
"patchButton": "Popraw", "patchButton": "Popraw",
"incompatibleArchWarningDialogText": "Aktualizowanie na tej architekturze nie jest jeszcze obsługiwane i może się nie powieść. Czy chcesz kontynuować mimo to?", "incompatibleArchWarningDialogText": "Aktualizowanie na tej architekturze nie jest jeszcze obsługiwane i może się nie powieść. Czy chcesz kontynuować mimo to?",
"removedPatchesWarningDialogText": "Następujące łatki zostały usunięte od ostatniego użycia.\n\n${patches}\n\nKontynuować mimo to?", "removedPatchesWarningDialogText": "Usunięto plastry od ostatniego wprowadzenia aplikacji:\n\n${patches}\n\n${newPatches}Kontynuować?",
"addedPatchesDialogText": "Dodano plastry od ostatniej aktualizacji aplikacji:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Niektóre opcje muszą być ustawione." "requiredOptionDialogText": "Niektóre opcje muszą być ustawione."
}, },
"appSelectorCard": { "appSelectorCard": {

4
assets/i18n/strings_pt_BR.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,6 @@
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "Patch", "patchButton": "Patch",
"incompatibleArchWarningDialogText": "A aplicação de patches nesta arquitetura ainda não é suportada e pode falhar. Continuar mesmo assim?", "incompatibleArchWarningDialogText": "A aplicação de patches nesta arquitetura ainda não é suportada e pode falhar. Continuar mesmo assim?",
"removedPatchesWarningDialogText": "Os seguintes patches foram removidos desde a última vez que você os utilizou:\n\n${patches}\n\nContinuar mesmo assim?",
"requiredOptionDialogText": "Algumas opções de patch tiveram que ser definidas." "requiredOptionDialogText": "Algumas opções de patch tiveram que ser definidas."
}, },
"appSelectorCard": { "appSelectorCard": {
@@ -68,7 +67,7 @@
"patchSelectorCard": { "patchSelectorCard": {
"widgetTitle": "Selecionar patches", "widgetTitle": "Selecionar patches",
"widgetTitleSelected": "Patches selecionados", "widgetTitleSelected": "Patches selecionados",
"widgetSubtitle": "Selecione um aplicativo primeiro", "widgetSubtitle": "Selecione um app primeiro",
"widgetEmptySubtitle": "Nenhum patch selecionado" "widgetEmptySubtitle": "Nenhum patch selecionado"
}, },
"socialMediaCard": { "socialMediaCard": {
@@ -283,6 +282,7 @@
"status_failure_timeout_description": "A instalação levou muito tempo para terminar.\n\nGostaria de tentar novamente?", "status_failure_timeout_description": "A instalação levou muito tempo para terminar.\n\nGostaria de tentar novamente?",
"status_failure_storage_description": "A instalação falhou devido ao armazenamento insuficiente.\n\nLibere algum espaço e tente novamente.", "status_failure_storage_description": "A instalação falhou devido ao armazenamento insuficiente.\n\nLibere algum espaço e tente novamente.",
"status_failure_invalid_description": "A instalação falhou porque o app patcheado era inválido.\n\nDesinstalar o app e tentar de novo?", "status_failure_invalid_description": "A instalação falhou porque o app patcheado era inválido.\n\nDesinstalar o app e tentar de novo?",
"status_failure_incompatible_description": "O app é incompatível com este dispositivo.\n\nUse um APK que seja suportado por este dispositivo e tente de novo.",
"status_failure_conflict_description": "A instalação foi impedida por uma instalação existente do app.\n\nDesinstalar o app instalado e tentar de novo?", "status_failure_conflict_description": "A instalação foi impedida por uma instalação existente do app.\n\nDesinstalar o app instalado e tentar de novo?",
"status_failure_blocked_description": "A instalação foi bloqueada por ${packageName}.\n\nAjuste suas configurações de segurança e tente novamente.", "status_failure_blocked_description": "A instalação foi bloqueada por ${packageName}.\n\nAjuste suas configurações de segurança e tente novamente.",
"install_failed_verification_failure_description": "A instalação falhou devido a um problema de verificação. U\n\nAjuste suas configurações de segurança e tente novamente.", "install_failed_verification_failure_description": "A instalação falhou devido a um problema de verificação. U\n\nAjuste suas configurações de segurança e tente novamente.",

3
assets/i18n/strings_pt_PT.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Modificador", "widgetTitle": "Modificador",
"patchButton": "Modificar", "patchButton": "Modificar",
"incompatibleArchWarningDialogText": "Patrulhar nesta arquitetura ainda não é suportado e pode falhar. Continuar mesmo assim?", "incompatibleArchWarningDialogText": "Patrulhar nesta arquitetura ainda não é suportado e pode falhar. Continuar mesmo assim?",
"removedPatchesWarningDialogText": "As seguintes modificações foram removidas desde a última vez que as utilizaste.\n\n${patches}\n\nContinuar na mesma?", "removedPatchesWarningDialogText": "Removido correções desde a última vez que você corrigiu este aplicativo:\n\n${patches}\n\n${newPatches}Continuar mesmo assim?",
"addedPatchesDialogText": "Adicionado patches desde a última vez que você corrigiu este aplicativo:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Algumas opções das Modificações precisam ser definidas." "requiredOptionDialogText": "Algumas opções das Modificações precisam ser definidas."
}, },
"appSelectorCard": { "appSelectorCard": {

3
assets/i18n/strings_ro_RO.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "Patch", "patchButton": "Patch",
"incompatibleArchWarningDialogText": "Patcharea după această arhitectură nu este încă suportată și ar putea eșua. Continuați oricum?", "incompatibleArchWarningDialogText": "Patcharea după această arhitectură nu este încă suportată și ar putea eșua. Continuați oricum?",
"removedPatchesWarningDialogText": "Următoarele patch-uri au fost eliminate de la ultima dată când le-ați folosit.\n\n${patches}\n\nContinuați oricum?", "removedPatchesWarningDialogText": "Plasturii eliminați de la ultima dată când ați modificat această aplicație:\n\n${patches}\n\n${newPatches}Continuați oricum?",
"addedPatchesDialogText": "Plasturii adăugați de la ultima dată când ați modificat această aplicație:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Unele opțiuni pentru patch-uri trebuie setate." "requiredOptionDialogText": "Unele opțiuni pentru patch-uri trebuie setate."
}, },
"appSelectorCard": { "appSelectorCard": {

3
assets/i18n/strings_ru_RU.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Патчер", "widgetTitle": "Патчер",
"patchButton": "Пропатчить", "patchButton": "Пропатчить",
"incompatibleArchWarningDialogText": "Патчинг на этой архитектуре еще не поддерживается и может завершиться неудачей. Продолжить?", "incompatibleArchWarningDialogText": "Патчинг на этой архитектуре еще не поддерживается и может завершиться неудачей. Продолжить?",
"removedPatchesWarningDialogText": "Следующие патчи были удалены с момента их последнего использования.\n\n ${patches}\n\n Все равно продолжить?", "removedPatchesWarningDialogText": "Удаленные патчи с момента последнего патчинга приложения:\n\n${patches}\n\n${newPatches}Все равно продолжить?",
"addedPatchesDialogText": "Добавленные патчи с момента последнего патчинга приложения:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Некоторые параметры патчей должны быть обязательно установлены." "requiredOptionDialogText": "Некоторые параметры патчей должны быть обязательно установлены."
}, },
"appSelectorCard": { "appSelectorCard": {

0
assets/i18n/strings_si_LK.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_sk_SK.i18n.json Normal file → Executable file
View File

3
assets/i18n/strings_sl_SI.i18n.json Normal file → Executable file
View File

@@ -44,8 +44,7 @@
}, },
"patcherView": { "patcherView": {
"widgetTitle": "Popravljalnik", "widgetTitle": "Popravljalnik",
"patchButton": "Popravi", "patchButton": "Popravi"
"removedPatchesWarningDialogText": "Spodnji popravki so bili odstranjeni, odkar ste jih nazadnje uporabili.\n\n${patches}\n\nVseeno nadaljujem?"
}, },
"appSelectorCard": { "appSelectorCard": {
"widgetTitle": "Izberi aplikacijo", "widgetTitle": "Izberi aplikacijo",

0
assets/i18n/strings_sq_AL.i18n.json Normal file → Executable file
View File

3
assets/i18n/strings_sr_CS.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Pečer", "widgetTitle": "Pečer",
"patchButton": "Pečuj", "patchButton": "Pečuj",
"incompatibleArchWarningDialogText": "Pečovanje na ovoj arhitekturi još uvek nije podržano i možda neće uspeti. Ipak nastaviti?", "incompatibleArchWarningDialogText": "Pečovanje na ovoj arhitekturi još uvek nije podržano i možda neće uspeti. Ipak nastaviti?",
"removedPatchesWarningDialogText": "Sledeći pečevi su uklonjeni od poslednjeg puta kada ste ih koristili.\n\n${patches}\n\nIpak nastaviti?", "removedPatchesWarningDialogText": "Uklonjeni pečevi od poslednjeg puta kada ste pečovali ovu aplikaciju:\n\n${patches}\n\n${newPatches}Ipak nastaviti?",
"addedPatchesDialogText": "Dodati pečevi od poslednjeg puta kada ste pečovali ovu aplikaciju:\n\n${addedPatches}",
"requiredOptionDialogText": "Neke opcije moraju biti izabrane." "requiredOptionDialogText": "Neke opcije moraju biti izabrane."
}, },
"appSelectorCard": { "appSelectorCard": {

3
assets/i18n/strings_sr_SP.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Печер", "widgetTitle": "Печер",
"patchButton": "Печуј", "patchButton": "Печуј",
"incompatibleArchWarningDialogText": "Печовање на овој архитектури још увек није подржано и можда неће успети. Ипак наставити?", "incompatibleArchWarningDialogText": "Печовање на овој архитектури још увек није подржано и можда неће успети. Ипак наставити?",
"removedPatchesWarningDialogText": "Следећи печеви су уклоњени од последњег пута када сте их користили.\n\n${patches}\n\nИпак наставити?", "removedPatchesWarningDialogText": "Уклоњени печеви од последњег пута када сте печовали ову апликацију:\n\n${patches}\n\n${newPatches}Ипак наставити?",
"addedPatchesDialogText": "Додати печеви од последњег пута када сте печовали ову апликацију:\n\n${addedPatches}",
"requiredOptionDialogText": "Неке опције морају бити изабране." "requiredOptionDialogText": "Неке опције морају бити изабране."
}, },
"appSelectorCard": { "appSelectorCard": {

3
assets/i18n/strings_sv_SE.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Patcher", "widgetTitle": "Patcher",
"patchButton": "Patch", "patchButton": "Patch",
"incompatibleArchWarningDialogText": "Patchning av denna arkitektur stöds ännu inte och kan misslyckas. Fortsätt ändå?", "incompatibleArchWarningDialogText": "Patchning av denna arkitektur stöds ännu inte och kan misslyckas. Fortsätt ändå?",
"removedPatchesWarningDialogText": "Följande patchar har tagits bort sedan du senast använde dem.\n\n${patches}\n\nFortsätt ändå?", "removedPatchesWarningDialogText": "Tog bort patchar sedan du senast patchade denna app:\n\n${patches}\n\n${newPatches}Fortsätt ändå?",
"addedPatchesDialogText": "Lade till patchar sedan du senast patchade denna app:\n\n${addedPatches}\n\n",
"requiredOptionDialogText": "Vissa patchalternativ måste anges." "requiredOptionDialogText": "Vissa patchalternativ måste anges."
}, },
"appSelectorCard": { "appSelectorCard": {

0
assets/i18n/strings_sw_KE.i18n.json Normal file → Executable file
View File

1
assets/i18n/strings_ta_IN.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,6 @@
"widgetTitle": "இணைப்பான்", "widgetTitle": "இணைப்பான்",
"patchButton": "இணைப்பு", "patchButton": "இணைப்பு",
"incompatibleArchWarningDialogText": "இந்தக் கட்டமைப்பில் பிறழுதல் இன்னும் ஆதரிக்கப்படவில்லை மற்றும் தோல்வியடையக்கூடும். எப்படியும் தொடரவா?", "incompatibleArchWarningDialogText": "இந்தக் கட்டமைப்பில் பிறழுதல் இன்னும் ஆதரிக்கப்படவில்லை மற்றும் தோல்வியடையக்கூடும். எப்படியும் தொடரவா?",
"removedPatchesWarningDialogText": "நீங்கள் கடைசியாகப் பயன்படுத்தியதிலிருந்து பின்வரும் பிறழ்கள் அகற்றப்பட்டன\n\n${patches}\n\nஎப்படியும் தொடரவா?",
"requiredOptionDialogText": "சில பிறழ்களுக்கு விருப்பங்களை அமைக்க வேண்டும்." "requiredOptionDialogText": "சில பிறழ்களுக்கு விருப்பங்களை அமைக்க வேண்டும்."
}, },
"appSelectorCard": { "appSelectorCard": {

0
assets/i18n/strings_te_IN.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_th_TH.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_tl_PH.i18n.json Normal file → Executable file
View File

3
assets/i18n/strings_tr_TR.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,8 @@
"widgetTitle": "Yamalayıcı", "widgetTitle": "Yamalayıcı",
"patchButton": "Yamala", "patchButton": "Yamala",
"incompatibleArchWarningDialogText": "Bu mimari cihazlarda yamalama henüz desteklenmiyor ve başarısız olabilir. Yine de devam edilsin mi?", "incompatibleArchWarningDialogText": "Bu mimari cihazlarda yamalama henüz desteklenmiyor ve başarısız olabilir. Yine de devam edilsin mi?",
"removedPatchesWarningDialogText": "Aşağıdaki yamalar son kullanımınızdan sonra kaldırıldı.\n\n${patches}\n\nYine de devam edilsin mi?", "removedPatchesWarningDialogText": "Bu uygulamayı son yamaladığınızdan beri kaldırılan yamalar:\n\n${patches}\n\n${newPatches}Yine de devam edilsin mi?",
"addedPatchesDialogText": "Bu uygulamayı son yamaladığınızdan beri eklenen yamalar:\n\n${addedPatches}",
"requiredOptionDialogText": "Bazı yama seçeneklerinin ayarlanması gerekiyor." "requiredOptionDialogText": "Bazı yama seçeneklerinin ayarlanması gerekiyor."
}, },
"appSelectorCard": { "appSelectorCard": {

5
assets/i18n/strings_uk_UA.i18n.json Normal file → Executable file
View File

@@ -54,8 +54,9 @@
"patcherView": { "patcherView": {
"widgetTitle": "Патчер", "widgetTitle": "Патчер",
"patchButton": "Патчити", "patchButton": "Патчити",
"incompatibleArchWarningDialogText": "Патчінг на цій архітектурі ще не підтримується і може не спрацювати. Продовжити в будь-якому випадку?", "incompatibleArchWarningDialogText": "Патчінг на цій архітектурі ще не підтримується і може не спрацювати. Все одно продовжити?",
"removedPatchesWarningDialogText": "Наступні патчі було видалено з моменту останнього використання.\n\n${patches}\n\nВсе одно продовжити?", "removedPatchesWarningDialogText": "Видалені патчі з моменту останнього патчінгу цього застосунку:\n\n${patches}\n\n${newPatches}Все одно продовжити?",
"addedPatchesDialogText": "Додані патчі з моменту останнього патчінгу цього застосунку:\n\n${addedPatches}",
"requiredOptionDialogText": "Потрібно встановити деякі параметри патчу." "requiredOptionDialogText": "Потрібно встановити деякі параметри патчу."
}, },
"appSelectorCard": { "appSelectorCard": {

0
assets/i18n/strings_ur_IN.i18n.json Normal file → Executable file
View File

0
assets/i18n/strings_uz_UZ.i18n.json Normal file → Executable file
View File

2
assets/i18n/strings_vi_VN.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,6 @@
"widgetTitle": "Trình vá", "widgetTitle": "Trình vá",
"patchButton": "Vá", "patchButton": "Vá",
"incompatibleArchWarningDialogText": "Việc vá ứng dụng trên kiến trúc này hiện chưa được hỗ trợ và có thể thất bại. Bạn vẫn muốn tiếp tục?", "incompatibleArchWarningDialogText": "Việc vá ứng dụng trên kiến trúc này hiện chưa được hỗ trợ và có thể thất bại. Bạn vẫn muốn tiếp tục?",
"removedPatchesWarningDialogText": "Những bản vá sau đây đã bị loại bỏ từ lần cuối bạn dùng chúng.\n\n${patches}\n\nVẫn tiếp tục?",
"requiredOptionDialogText": "Một số tùy chọn bản vá cần được thiết đặt." "requiredOptionDialogText": "Một số tùy chọn bản vá cần được thiết đặt."
}, },
"appSelectorCard": { "appSelectorCard": {
@@ -283,6 +282,7 @@
"status_failure_timeout_description": "Việc cài đặt mất quá lâu để hoàn thành.\n\nBạn có muốn thử lại?", "status_failure_timeout_description": "Việc cài đặt mất quá lâu để hoàn thành.\n\nBạn có muốn thử lại?",
"status_failure_storage_description": "Việc cài đặt đã thất bại do không đủ bộ nhớ.\n\nGiải phóng một phần bộ nhớ và thử lại.", "status_failure_storage_description": "Việc cài đặt đã thất bại do không đủ bộ nhớ.\n\nGiải phóng một phần bộ nhớ và thử lại.",
"status_failure_invalid_description": "Việc cài đặt đã thất bại do ứng dụng đã vá không hợp lệ.\n\nGỡ cài đặt ứng dụng và thử lại?", "status_failure_invalid_description": "Việc cài đặt đã thất bại do ứng dụng đã vá không hợp lệ.\n\nGỡ cài đặt ứng dụng và thử lại?",
"status_failure_incompatible_description": "Ứng dụng không tương thích với thiết bị này.\n\nDùng một APK được hỗ trợ bởi thiết bị và thử lại.",
"status_failure_conflict_description": "Việc cài đặt đã bị ngăn chặn bởi bản cài đã có của ứng dụng.\n\nGỡ cài đặt ứng dụng đã cài và thử lại?", "status_failure_conflict_description": "Việc cài đặt đã bị ngăn chặn bởi bản cài đã có của ứng dụng.\n\nGỡ cài đặt ứng dụng đã cài và thử lại?",
"status_failure_blocked_description": "Việc cài đặt đã đã bị chặn bởi ${packageName}.\n\nĐiều chỉnh thiết lập bảo mật của bạn và thử lại.", "status_failure_blocked_description": "Việc cài đặt đã đã bị chặn bởi ${packageName}.\n\nĐiều chỉnh thiết lập bảo mật của bạn và thử lại.",
"install_failed_verification_failure_description": "Việc cài đặt đã thất bại do phát sinh xác minh.\n\nĐiều chỉnh thiết lập bảo mật của bạn và thử lại.", "install_failed_verification_failure_description": "Việc cài đặt đã thất bại do phát sinh xác minh.\n\nĐiều chỉnh thiết lập bảo mật của bạn và thử lại.",

1
assets/i18n/strings_zh_CN.i18n.json Normal file → Executable file
View File

@@ -55,7 +55,6 @@
"widgetTitle": "修补器", "widgetTitle": "修补器",
"patchButton": "修补", "patchButton": "修补",
"incompatibleArchWarningDialogText": "对此架构的修补尚不支持或可能失败。仍要继续吗?", "incompatibleArchWarningDialogText": "对此架构的修补尚不支持或可能失败。仍要继续吗?",
"removedPatchesWarningDialogText": "自您上次使用以下补丁以来,它们已被删除。\n\n${patches}\n\n还是继续吗",
"requiredOptionDialogText": "某些补丁选项必须设置。" "requiredOptionDialogText": "某些补丁选项必须设置。"
}, },
"appSelectorCard": { "appSelectorCard": {

0
assets/i18n/strings_zh_HK.i18n.json Normal file → Executable file
View File

Some files were not shown because too many files have changed in this diff Show More