mirror of
https://github.com/ReVanced/revanced-patches.git
synced 2026-01-13 14:33:13 +00:00
Compare commits
11 Commits
v5.24.0-de
...
v5.25.0-de
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f686935c3 | ||
|
|
798596fd83 | ||
|
|
38b37f182a | ||
|
|
52b9dc5c9f | ||
|
|
dea7108c45 | ||
|
|
24b4579cb9 | ||
|
|
0b52f3d192 | ||
|
|
18c374a81e | ||
|
|
092303e431 | ||
|
|
6bf5bf9d45 | ||
|
|
b2b09a2025 |
43
CHANGELOG.md
43
CHANGELOG.md
@@ -1,3 +1,46 @@
|
||||
# [5.25.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.25.0-dev.1...v5.25.0-dev.2) (2025-05-22)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Disable Pairip license check:** Change patch to default off ([74b6a94](https://github.com/ReVanced/revanced-patches/commit/74b6a94577ac3f73b04bd0cce98fb7011a6607fd))
|
||||
|
||||
# [5.25.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.24.0...v5.25.0-dev.1) (2025-05-22)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Add `Disable pairip license check` patch ([#4927](https://github.com/ReVanced/revanced-patches/issues/4927)) ([42d2c27](https://github.com/ReVanced/revanced-patches/commit/42d2c277982ef63e6ad42d85e46f13c3ab50243c))
|
||||
* **Messenger:** Add `Remove Meta AI` patch ([#4945](https://github.com/ReVanced/revanced-patches/issues/4945)) ([012dff7](https://github.com/ReVanced/revanced-patches/commit/012dff7b6511b9e519ccac96f6713cf1a1b327b4))
|
||||
|
||||
# [5.24.0](https://github.com/ReVanced/revanced-patches/compare/v5.23.0...v5.24.0) (2025-05-19)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **Spotify - Fix third party launchers widgets:** Add missing compatibility annotation ([0493f80](https://github.com/ReVanced/revanced-patches/commit/0493f8035b26b90c5f8e42be2e2a5ce73d8685a5))
|
||||
* **YouTube - Hide layout components:** Fix `Hide video recommendation labels` ([#4956](https://github.com/ReVanced/revanced-patches/issues/4956)) ([ae05ac3](https://github.com/ReVanced/revanced-patches/commit/ae05ac38151ebd3197953af97ca0dd847a04cc2d))
|
||||
* **YouTube - Settings:** Correctly show summary text if search box is closed before searching ([d0ae835](https://github.com/ReVanced/revanced-patches/commit/d0ae835d3381fc659c9bb4a2d130d4db8a1499cf))
|
||||
* **YouTube - SponsorBlock:** Fix segment category summary not showing category description ([06934a6](https://github.com/ReVanced/revanced-patches/commit/06934a60d91b40a5cdf7f4cd92deae4a136c149b))
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* **GmsCore support:** Open vendor specific DontKillMyApp if available ([#4952](https://github.com/ReVanced/revanced-patches/issues/4952)) ([b89927a](https://github.com/ReVanced/revanced-patches/commit/b89927a10e3b909a3c37fbb75c16a7abbce44560))
|
||||
* **NU.nl:** Support version `11.3.0` ([#4925](https://github.com/ReVanced/revanced-patches/issues/4925)) ([bedde60](https://github.com/ReVanced/revanced-patches/commit/bedde60fc1a52b0fd491174b3b5b887435eb621a))
|
||||
* **Spotify:** Add `Fix third party launchers widgets` patch ([#4893](https://github.com/ReVanced/revanced-patches/issues/4893)) ([23bfdc9](https://github.com/ReVanced/revanced-patches/commit/23bfdc98fbbcc8ecf0ffbf8704f58dd2272e4af2))
|
||||
* **YouTube - Hide description components:** Add `Hide Ask` ([#4972](https://github.com/ReVanced/revanced-patches/issues/4972)) ([ebc94a5](https://github.com/ReVanced/revanced-patches/commit/ebc94a5da6214b67399c9c01515689bd4b20547c))
|
||||
* **YouTube - Hide layout components:** Add `Hide ticket shelf` ([#4969](https://github.com/ReVanced/revanced-patches/issues/4969)) ([6436af7](https://github.com/ReVanced/revanced-patches/commit/6436af7e77c77d2034dfceba8bc51132ad7632be))
|
||||
* **YouTube - Hide player components:** Hide related video overlay in fullscreen ([#4938](https://github.com/ReVanced/revanced-patches/issues/4938)) ([ac9be97](https://github.com/ReVanced/revanced-patches/commit/ac9be9760c9965e54df196b227a310d64ead4bf5))
|
||||
* **YouTube - Settings:** Add ability to search in settings ([#4881](https://github.com/ReVanced/revanced-patches/issues/4881)) ([aca8b20](https://github.com/ReVanced/revanced-patches/commit/aca8b207c15f254bcc9ad94bc7dfb895f21d4058))
|
||||
|
||||
# [5.24.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.24.0-dev.8...v5.24.0-dev.9) (2025-05-18)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **YouTube - SponsorBlock:** Fix segment category summary not showing category description ([06934a6](https://github.com/ReVanced/revanced-patches/commit/06934a60d91b40a5cdf7f4cd92deae4a136c149b))
|
||||
|
||||
# [5.24.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.24.0-dev.7...v5.24.0-dev.8) (2025-05-17)
|
||||
|
||||
|
||||
|
||||
3
extensions/messenger/build.gradle.kts
Normal file
3
extensions/messenger/build.gradle.kts
Normal file
@@ -0,0 +1,3 @@
|
||||
dependencies {
|
||||
compileOnly(project(":extensions:shared:library"))
|
||||
}
|
||||
1
extensions/messenger/src/main/AndroidManifest.xml
Normal file
1
extensions/messenger/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1 @@
|
||||
<manifest/>
|
||||
@@ -0,0 +1,15 @@
|
||||
package app.revanced.extension.messenger.metaai;
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
public class RemoveMetaAIPatch {
|
||||
public static boolean overrideConfigBool(long id, boolean value) {
|
||||
// It seems like all configs starting with 363219 are related to Meta AI.
|
||||
// A list of specific ones that need disabling would probably be better,
|
||||
// but these config numbers seem to change slightly with each update.
|
||||
// These first 6 digits don't though.
|
||||
if (Long.toString(id).startsWith("363219"))
|
||||
return false;
|
||||
|
||||
return value;
|
||||
}
|
||||
}
|
||||
@@ -53,7 +53,7 @@ public class SegmentCategoryListPreference extends ListPreference {
|
||||
setEntryValues(isHighlightCategory
|
||||
? CategoryBehaviour.getBehaviorKeyValuesWithoutSkipOnce()
|
||||
: CategoryBehaviour.getBehaviorKeyValues());
|
||||
setSummary(category.description.toString());
|
||||
super.setSummary(category.description.toString());
|
||||
|
||||
updateUI();
|
||||
}
|
||||
@@ -268,4 +268,13 @@ public class SegmentCategoryListPreference extends ListPreference {
|
||||
private void updateOpacityText() {
|
||||
opacityEditText.setText(String.format(Locale.US, "%.2f", categoryOpacity));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setSummary(CharSequence summary) {
|
||||
// Ignore calls to set the summary.
|
||||
// Summary is always the description of the category.
|
||||
//
|
||||
// This is required otherwise the ReVanced preference fragment
|
||||
// sets all ListPreference summaries to show the current selection.
|
||||
}
|
||||
}
|
||||
@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
|
||||
org.gradle.parallel = true
|
||||
android.useAndroidX = true
|
||||
kotlin.code.style = official
|
||||
version = 5.24.0-dev.8
|
||||
version = 5.25.0-dev.2
|
||||
|
||||
@@ -284,6 +284,14 @@ public final class app/revanced/patches/messenger/inputfield/DisableTypingIndica
|
||||
public static final fun getDisableTypingIndicatorPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/messenger/metaai/RemoveMetaAIPatchKt {
|
||||
public static final fun getRemoveMetaAIPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/messenger/misc/extension/ExtensionPatchKt {
|
||||
public static final fun getSharedExtensionPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/messenger/navbar/RemoveMetaAITabPatchKt {
|
||||
public static final fun getRemoveMetaAITabPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
@@ -652,6 +660,10 @@ public final class app/revanced/patches/shared/misc/mapping/ResourceMappingPatch
|
||||
public static final fun getResourceMappings ()Ljava/util/List;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/shared/misc/pairip/license/DisableLicenseCheckPatchKt {
|
||||
public static final fun getDisableLicenseCheckPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
|
||||
}
|
||||
|
||||
public final class app/revanced/patches/shared/misc/settings/SettingsPatchKt {
|
||||
public static final fun settingsPatch (Ljava/util/List;Ljava/util/Set;)Lapp/revanced/patcher/patch/ResourcePatch;
|
||||
public static final fun settingsPatch (Lkotlin/Pair;Ljava/util/Set;)Lapp/revanced/patcher/patch/ResourcePatch;
|
||||
@@ -1615,8 +1627,24 @@ public final class app/revanced/util/BytecodeUtilsKt {
|
||||
public static final fun indexOfFirstResourceIdOrThrow (Lcom/android/tools/smali/dexlib2/iface/Method;Ljava/lang/String;)I
|
||||
public static final fun injectHideViewCall (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;IILjava/lang/String;Ljava/lang/String;)V
|
||||
public static final fun literal (Lapp/revanced/patcher/FingerprintBuilder;Lkotlin/jvm/functions/Function0;)V
|
||||
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;B)V
|
||||
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;C)V
|
||||
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;D)V
|
||||
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;F)V
|
||||
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;I)V
|
||||
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;J)V
|
||||
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;S)V
|
||||
public static final fun returnEarly (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Z)V
|
||||
public static synthetic fun returnEarly$default (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ZILjava/lang/Object;)V
|
||||
public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;B)V
|
||||
public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;C)V
|
||||
public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;D)V
|
||||
public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;F)V
|
||||
public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;I)V
|
||||
public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;J)V
|
||||
public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;S)V
|
||||
public static final fun returnLate (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;Z)V
|
||||
public static synthetic fun returnLate$default (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;ZILjava/lang/Object;)V
|
||||
public static final fun transformMethods (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableClass;Lkotlin/jvm/functions/Function1;)V
|
||||
public static final fun traverseClassHierarchy (Lapp/revanced/patcher/patch/BytecodePatchContext;Lapp/revanced/patcher/util/proxy/mutableTypes/MutableClass;Lkotlin/jvm/functions/Function1;)V
|
||||
}
|
||||
|
||||
@@ -17,7 +17,8 @@ val removeShareTargetsPatch = resourcePatch(
|
||||
try {
|
||||
document("res/xml/shortcuts.xml")
|
||||
} catch (_: FileNotFoundException) {
|
||||
return@execute Logger.getLogger(this::class.java.name).warning("The app has no shortcuts")
|
||||
return@execute Logger.getLogger(this::class.java.name).warning(
|
||||
"The app has no shortcuts. No changes applied.")
|
||||
}.use { document ->
|
||||
val rootNode = document.getNode("shortcuts") as? Element ?: return@use
|
||||
|
||||
|
||||
@@ -1,14 +1,17 @@
|
||||
package app.revanced.patches.angulus.ads
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.shared.misc.pairip.license.disableLicenseCheckPatch
|
||||
import app.revanced.util.returnEarly
|
||||
|
||||
@Suppress("unused")
|
||||
val angulusPatch = bytecodePatch(name = "Hide ads") {
|
||||
compatibleWith("com.drinkplusplus.angulus")
|
||||
|
||||
dependsOn(disableLicenseCheckPatch)
|
||||
|
||||
execute {
|
||||
// Always return 0 as the daily measurement count.
|
||||
getDailyMeasurementCountFingerprint.method.returnEarly()
|
||||
getDailyMeasurementCountFingerprint.method.returnEarly(0)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package app.revanced.patches.messenger.metaai
|
||||
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val getMobileConfigBoolFingerprint = fingerprint {
|
||||
parameters("J")
|
||||
returns("Z")
|
||||
opcodes(Opcode.RETURN)
|
||||
custom { method, classDef ->
|
||||
method.implementation ?: return@custom false // unsure if this is necessary
|
||||
classDef.interfaces.contains("Lcom/facebook/mobileconfig/factory/MobileConfigUnsafeContext;")
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
package app.revanced.patches.messenger.metaai
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patches.messenger.misc.extension.sharedExtensionPatch
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
|
||||
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/messenger/metaai/RemoveMetaAIPatch;"
|
||||
|
||||
@Suppress("unused")
|
||||
val removeMetaAIPatch = bytecodePatch(
|
||||
name = "Remove Meta AI",
|
||||
description = "Removes UI elements related to Meta AI."
|
||||
) {
|
||||
compatibleWith("com.facebook.orca")
|
||||
|
||||
dependsOn(sharedExtensionPatch)
|
||||
|
||||
execute {
|
||||
getMobileConfigBoolFingerprint.method.apply {
|
||||
val returnIndex = getMobileConfigBoolFingerprint.patternMatch!!.startIndex
|
||||
val returnRegister = getInstruction<OneRegisterInstruction>(returnIndex).registerA
|
||||
|
||||
addInstructions(
|
||||
returnIndex,
|
||||
"""
|
||||
invoke-static { p1, p2, v$returnRegister }, $EXTENSION_CLASS_DESCRIPTOR->overrideConfigBool(JZ)Z
|
||||
move-result v$returnRegister
|
||||
"""
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
package app.revanced.patches.messenger.misc.extension
|
||||
|
||||
import app.revanced.patches.shared.misc.extension.sharedExtensionPatch
|
||||
|
||||
val sharedExtensionPatch = sharedExtensionPatch("messenger", mainActivityOnCreateHook)
|
||||
@@ -0,0 +1,7 @@
|
||||
package app.revanced.patches.messenger.misc.extension
|
||||
|
||||
import app.revanced.patches.shared.misc.extension.extensionHook
|
||||
|
||||
internal val mainActivityOnCreateHook = extensionHook {
|
||||
strings("MainActivity_onCreate_begin")
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package app.revanced.patches.messenger.navbar
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
import com.android.tools.smali.dexlib2.Opcode
|
||||
|
||||
internal val createTabConfigurationFingerprint = fingerprint {
|
||||
strings("MessengerTabConfigurationCreator.createTabConfiguration")
|
||||
opcodes(
|
||||
Opcode.INVOKE_DIRECT,
|
||||
Opcode.MOVE_RESULT,
|
||||
Opcode.IF_EQZ,
|
||||
Opcode.INVOKE_DIRECT,
|
||||
Opcode.MOVE_RESULT,
|
||||
Opcode.IF_EQZ,
|
||||
)
|
||||
}
|
||||
@@ -1,25 +1,12 @@
|
||||
package app.revanced.patches.messenger.navbar
|
||||
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
|
||||
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
|
||||
import app.revanced.patches.messenger.metaai.removeMetaAIPatch
|
||||
|
||||
@Deprecated("Superseded by removeMetaAIPatch", ReplaceWith("removeMetaAIPatch"))
|
||||
@Suppress("unused")
|
||||
val removeMetaAITabPatch = bytecodePatch(
|
||||
name = "Remove Meta AI tab",
|
||||
description = "Removes the 'Meta AI' tab from the navbar.",
|
||||
) {
|
||||
compatibleWith("com.facebook.orca")
|
||||
|
||||
execute {
|
||||
createTabConfigurationFingerprint.let {
|
||||
val moveResultIndex = it.patternMatch!!.startIndex + 1
|
||||
val enabledRegister = it.method.getInstruction<OneRegisterInstruction>(moveResultIndex).registerA
|
||||
it.method.replaceInstruction(
|
||||
moveResultIndex,
|
||||
"const/4 v$enabledRegister, 0x0"
|
||||
)
|
||||
}
|
||||
}
|
||||
dependsOn(removeMetaAIPatch)
|
||||
}
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
package app.revanced.patches.shared.misc.pairip.license
|
||||
|
||||
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
|
||||
import app.revanced.patcher.patch.bytecodePatch
|
||||
import app.revanced.util.returnEarly
|
||||
import java.util.logging.Logger
|
||||
|
||||
@Suppress("unused")
|
||||
val disableLicenseCheckPatch = bytecodePatch(
|
||||
name = "Disable Pairip license check",
|
||||
description = "Disable Play Integrity Protect (Pairip) client-side license check.",
|
||||
use = false
|
||||
) {
|
||||
|
||||
execute {
|
||||
if (processLicenseResponseFingerprint.methodOrNull == null || validateLicenseResponseFingerprint.methodOrNull == null) {
|
||||
return@execute Logger.getLogger(this::class.java.name)
|
||||
.warning("Could not find Pairip licensing check. No changes applied.")
|
||||
}
|
||||
|
||||
// Set first parameter (responseCode) to 0 (success status).
|
||||
processLicenseResponseFingerprint.method.addInstruction(0, "const/4 p1, 0x0")
|
||||
|
||||
// Short-circuit the license response validation.
|
||||
validateLicenseResponseFingerprint.method.returnEarly()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package app.revanced.patches.shared.misc.pairip.license
|
||||
|
||||
import app.revanced.patcher.fingerprint
|
||||
|
||||
internal val processLicenseResponseFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
classDef.type == "Lcom/pairip/licensecheck/LicenseClient;" &&
|
||||
method.name == "processResponse"
|
||||
}
|
||||
}
|
||||
|
||||
internal val validateLicenseResponseFingerprint = fingerprint {
|
||||
custom { method, classDef ->
|
||||
classDef.type == "Lcom/pairip/licensecheck/ResponseValidator;" &&
|
||||
method.name == "validateResponse"
|
||||
}
|
||||
}
|
||||
@@ -133,6 +133,7 @@ internal val Instruction.registersUsed: List<Int>
|
||||
else -> listOf(registerC, registerD, registerE, registerF, registerG)
|
||||
}
|
||||
}
|
||||
|
||||
is ThreeRegisterInstruction -> listOf(registerA, registerB, registerC)
|
||||
is TwoRegisterInstruction -> listOf(registerA, registerB)
|
||||
is OneRegisterInstruction -> listOf(registerA)
|
||||
@@ -170,7 +171,7 @@ internal val Instruction.isReturnInstruction: Boolean
|
||||
/**
|
||||
* Adds public [AccessFlags] and removes private and protected flags (if present).
|
||||
*/
|
||||
internal fun Int.toPublicAccessFlags() : Int {
|
||||
internal fun Int.toPublicAccessFlags(): Int {
|
||||
return this.or(AccessFlags.PUBLIC.value)
|
||||
.and(AccessFlags.PROTECTED.value.inv())
|
||||
.and(AccessFlags.PRIVATE.value.inv())
|
||||
@@ -489,9 +490,10 @@ fun Method.indexOfFirstInstruction(targetOpcode: Opcode): Int = indexOfFirstInst
|
||||
* @return The index of the first opcode specified, or -1 if not found.
|
||||
* @see indexOfFirstInstructionOrThrow
|
||||
*/
|
||||
fun Method.indexOfFirstInstruction(startIndex: Int = 0, targetOpcode: Opcode): Int = indexOfFirstInstruction(startIndex) {
|
||||
opcode == targetOpcode
|
||||
}
|
||||
fun Method.indexOfFirstInstruction(startIndex: Int = 0, targetOpcode: Opcode): Int =
|
||||
indexOfFirstInstruction(startIndex) {
|
||||
opcode == targetOpcode
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the index of the first [Instruction] that matches the predicate, starting from [startIndex].
|
||||
@@ -526,9 +528,10 @@ fun Method.indexOfFirstInstructionOrThrow(targetOpcode: Opcode): Int = indexOfFi
|
||||
* @throws PatchException
|
||||
* @see indexOfFirstInstruction
|
||||
*/
|
||||
fun Method.indexOfFirstInstructionOrThrow(startIndex: Int = 0, targetOpcode: Opcode): Int = indexOfFirstInstructionOrThrow(startIndex) {
|
||||
opcode == targetOpcode
|
||||
}
|
||||
fun Method.indexOfFirstInstructionOrThrow(startIndex: Int = 0, targetOpcode: Opcode): Int =
|
||||
indexOfFirstInstructionOrThrow(startIndex) {
|
||||
opcode == targetOpcode
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the index of the first [Instruction] that matches the predicate, starting from [startIndex].
|
||||
@@ -554,9 +557,10 @@ fun Method.indexOfFirstInstructionOrThrow(startIndex: Int = 0, filter: Instructi
|
||||
* @return -1 if the instruction is not found.
|
||||
* @see indexOfFirstInstructionReversedOrThrow
|
||||
*/
|
||||
fun Method.indexOfFirstInstructionReversed(startIndex: Int? = null, targetOpcode: Opcode): Int = indexOfFirstInstructionReversed(startIndex) {
|
||||
opcode == targetOpcode
|
||||
}
|
||||
fun Method.indexOfFirstInstructionReversed(startIndex: Int? = null, targetOpcode: Opcode): Int =
|
||||
indexOfFirstInstructionReversed(startIndex) {
|
||||
opcode == targetOpcode
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the index of matching instruction,
|
||||
@@ -593,9 +597,10 @@ fun Method.indexOfFirstInstructionReversed(targetOpcode: Opcode): Int = indexOfF
|
||||
* @return The index of the instruction.
|
||||
* @see indexOfFirstInstructionReversed
|
||||
*/
|
||||
fun Method.indexOfFirstInstructionReversedOrThrow(startIndex: Int? = null, targetOpcode: Opcode): Int = indexOfFirstInstructionReversedOrThrow(startIndex) {
|
||||
opcode == targetOpcode
|
||||
}
|
||||
fun Method.indexOfFirstInstructionReversedOrThrow(startIndex: Int? = null, targetOpcode: Opcode): Int =
|
||||
indexOfFirstInstructionReversedOrThrow(startIndex) {
|
||||
opcode == targetOpcode
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the index of matching instruction,
|
||||
@@ -652,7 +657,8 @@ fun Method.findInstructionIndicesReversedOrThrow(filter: Instruction.() -> Boole
|
||||
* _Returns an empty list if no indices are found_
|
||||
* @see findInstructionIndicesReversedOrThrow
|
||||
*/
|
||||
fun Method.findInstructionIndicesReversed(opcode: Opcode): List<Int> = findInstructionIndicesReversed { this.opcode == opcode }
|
||||
fun Method.findInstructionIndicesReversed(opcode: Opcode): List<Int> =
|
||||
findInstructionIndicesReversed { this.opcode == opcode }
|
||||
|
||||
/**
|
||||
* @return An immutable list of indices of the opcode in reverse order.
|
||||
@@ -726,43 +732,222 @@ fun BytecodePatchContext.forEachLiteralValueInstruction(
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the first instruction of a method with a constant return value.
|
||||
* None of the method code will ever execute.
|
||||
*/
|
||||
fun MutableMethod.returnEarly(overrideValue: Boolean = false) = overrideReturnValue(overrideValue, false)
|
||||
private const val RETURN_TYPE_MISMATCH = "Mismatch between override type and Method return type"
|
||||
|
||||
/**
|
||||
* Overrides all return statements with a constant value.
|
||||
* Overrides the first instruction of a method with a constant `Boolean` return value.
|
||||
* None of the method code will ever execute.
|
||||
*
|
||||
* For methods that return an object or any array type, calling this method with `false`
|
||||
* will force the method to return a `null` value.
|
||||
*/
|
||||
fun MutableMethod.returnEarly(value: Boolean = false) {
|
||||
val returnType = returnType.first()
|
||||
check(returnType == 'Z' || (!value && (returnType in setOf('V', 'L', '[')))) { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.toHexString(), false)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the first instruction of a method with a constant `Byte` return value.
|
||||
* None of the method code will ever execute.
|
||||
*/
|
||||
fun MutableMethod.returnEarly(value: Byte) {
|
||||
check(returnType.first() == 'B') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.toString(), false)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the first instruction of a method with a constant `Short` return value.
|
||||
* None of the method code will ever execute.
|
||||
*/
|
||||
fun MutableMethod.returnEarly(value: Short) {
|
||||
check(returnType.first() == 'S') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.toString(), false)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the first instruction of a method with a constant `Char` return value.
|
||||
* None of the method code will ever execute.
|
||||
*/
|
||||
fun MutableMethod.returnEarly(value: Char) {
|
||||
check(returnType.first() == 'C') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.code.toString(), false)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the first instruction of a method with a constant `Int` return value.
|
||||
* None of the method code will ever execute.
|
||||
*/
|
||||
fun MutableMethod.returnEarly(value: Int) {
|
||||
check(returnType.first() == 'I') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.toString(), false)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the first instruction of a method with a constant `Long` return value.
|
||||
* None of the method code will ever execute.
|
||||
*/
|
||||
fun MutableMethod.returnEarly(value: Long) {
|
||||
check(returnType.first() == 'J') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.toString(), false)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the first instruction of a method with a constant `Float` return value.
|
||||
* None of the method code will ever execute.
|
||||
*/
|
||||
fun MutableMethod.returnEarly(value: Float) {
|
||||
check(returnType.first() == 'F') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.toString(), false)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides the first instruction of a method with a constant `Double` return value.
|
||||
* None of the method code will ever execute.
|
||||
*/
|
||||
fun MutableMethod.returnEarly(value: Double) {
|
||||
check(returnType.first() == 'J') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.toString(), false)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides all return statements with a constant `Boolean` value.
|
||||
* All method code is executed the same as unpatched.
|
||||
*
|
||||
* For methods that return an object or any array type, calling this method with `false`
|
||||
* will force the method to return a `null` value.
|
||||
*
|
||||
* @see returnEarly
|
||||
*/
|
||||
fun MutableMethod.returnLate(value: Boolean) {
|
||||
val returnType = returnType.first()
|
||||
if (returnType == 'V') {
|
||||
error("Cannot return late for Method of void type")
|
||||
}
|
||||
check(returnType == 'Z' || (!value && returnType in setOf('L', '['))) { RETURN_TYPE_MISMATCH }
|
||||
|
||||
overrideReturnValue(value.toHexString(), true)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides all return statements with a constant `Byte` value.
|
||||
* All method code is executed the same as unpatched.
|
||||
*
|
||||
* @see returnEarly
|
||||
*/
|
||||
internal fun MutableMethod.returnLate(overrideValue: Boolean = false) = overrideReturnValue(overrideValue, true)
|
||||
fun MutableMethod.returnLate(value: Byte) {
|
||||
check(returnType.first() == 'B') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.toString(), true)
|
||||
}
|
||||
|
||||
private fun MutableMethod.overrideReturnValue(bool: Boolean, returnLate: Boolean) {
|
||||
val const = if (bool) "0x1" else "0x0"
|
||||
/**
|
||||
* Overrides all return statements with a constant `Short` value.
|
||||
* All method code is executed the same as unpatched.
|
||||
*
|
||||
* @see returnEarly
|
||||
*/
|
||||
fun MutableMethod.returnLate(value: Short) {
|
||||
check(returnType.first() == 'S') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.toString(), true)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides all return statements with a constant `Char` value.
|
||||
* All method code is executed the same as unpatched.
|
||||
*
|
||||
* @see returnEarly
|
||||
*/
|
||||
fun MutableMethod.returnLate(value: Char) {
|
||||
check(returnType.first() == 'C') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.code.toString(), true)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides all return statements with a constant `Int` value.
|
||||
* All method code is executed the same as unpatched.
|
||||
*
|
||||
* @see returnEarly
|
||||
*/
|
||||
fun MutableMethod.returnLate(value: Int) {
|
||||
check(returnType.first() == 'I') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.toString(), true)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides all return statements with a constant `Long` value.
|
||||
* All method code is executed the same as unpatched.
|
||||
*
|
||||
* @see returnEarly
|
||||
*/
|
||||
fun MutableMethod.returnLate(value: Long) {
|
||||
check(returnType.first() == 'J') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.toString(), true)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides all return statements with a constant `Float` value.
|
||||
* All method code is executed the same as unpatched.
|
||||
*
|
||||
* @see returnEarly
|
||||
*/
|
||||
fun MutableMethod.returnLate(value: Float) {
|
||||
check(returnType.first() == 'F') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.toString(), true)
|
||||
}
|
||||
|
||||
/**
|
||||
* Overrides all return statements with a constant `Double` value.
|
||||
* All method code is executed the same as unpatched.
|
||||
*
|
||||
* @see returnEarly
|
||||
*/
|
||||
fun MutableMethod.returnLate(value: Double) {
|
||||
check(returnType.first() == 'D') { RETURN_TYPE_MISMATCH }
|
||||
overrideReturnValue(value.toString(), true)
|
||||
}
|
||||
|
||||
private fun MutableMethod.overrideReturnValue(value: String, returnLate: Boolean) {
|
||||
val instructions = when (returnType.first()) {
|
||||
'L' -> {
|
||||
// If return type is an object, always return null.
|
||||
'L', '[' -> {
|
||||
"""
|
||||
const/4 v0, $const
|
||||
const/4 v0, 0x0
|
||||
return-object v0
|
||||
"""
|
||||
}
|
||||
|
||||
'V' -> {
|
||||
if (returnLate) throw IllegalArgumentException("Cannot return late for method of void type")
|
||||
"return-void"
|
||||
}
|
||||
|
||||
'I', 'Z' -> {
|
||||
'B', 'Z' -> {
|
||||
"""
|
||||
const/4 v0, $const
|
||||
const/4 v0, $value
|
||||
return v0
|
||||
"""
|
||||
}
|
||||
|
||||
'S', 'C' -> {
|
||||
"""
|
||||
const/16 v0, $value
|
||||
return v0
|
||||
"""
|
||||
}
|
||||
|
||||
'I', 'F' -> {
|
||||
"""
|
||||
const v0, $value
|
||||
return v0
|
||||
"""
|
||||
}
|
||||
|
||||
'J', 'D' -> {
|
||||
"""
|
||||
const-wide v0, $value
|
||||
return-wide v0
|
||||
"""
|
||||
}
|
||||
|
||||
else -> throw Exception("Return type is not supported: $this")
|
||||
}
|
||||
|
||||
|
||||
@@ -6,3 +6,5 @@ internal object Utils {
|
||||
.joinToString("\n") { it.trimIndent() } // Remove the leading whitespace from each line.
|
||||
.trimIndent() // Remove the leading newline.
|
||||
}
|
||||
|
||||
internal fun Boolean.toHexString(): String = if (this) "0x1" else "0x0"
|
||||
@@ -42,7 +42,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_settings_import_reset">إعادة تعيين إعدادات ReVanced إلى الوضع الافتراضي</string>
|
||||
<string name="revanced_settings_import_success">تم استيراد %d إعدادات</string>
|
||||
<string name="revanced_settings_import_failure_parse">فشل الاستيراد: %s</string>
|
||||
<string name="revanced_settings_search_hint">إعدادات البحث</string>
|
||||
<string name="revanced_settings_search_hint">بحث الإعدادات</string>
|
||||
<string name="revanced_settings_search_no_results_title">لم يتم العثور على نتائج لـ \".%s\"</string>
|
||||
<string name="revanced_settings_search_no_results_summary">جرّب كلمة مفتاحية أخرى</string>
|
||||
<string name="revanced_settings_search_remove_message">إزالة من سجل البحث؟</string>
|
||||
@@ -97,9 +97,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_restore_old_settings_menus_title">استعادة قوائم الإعدادات القديمة</string>
|
||||
<string name="revanced_restore_old_settings_menus_summary_on">يتم عرض قوائم الإعدادات القديمة</string>
|
||||
<string name="revanced_restore_old_settings_menus_summary_off">لا يتم عرض قوائم الإعدادات القديمة</string>
|
||||
<string name="revanced_settings_search_history_title">إظهار سجل البحث في الإعدادات</string>
|
||||
<string name="revanced_settings_search_history_summary_on">سجل البحث في الإعدادات معروض</string>
|
||||
<string name="revanced_settings_search_history_summary_off">لم يتم عرض سجل البحث في الإعدادات</string>
|
||||
<string name="revanced_settings_search_history_title">عرض سجل بحث الإعدادات</string>
|
||||
<string name="revanced_settings_search_history_summary_on">يتم عرض سجل البحث في الإعدادات</string>
|
||||
<string name="revanced_settings_search_history_summary_off">لا يتم عرض سجل البحث في الإعدادات</string>
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">تعطيل تشغيل فيديوهات Shorts في الخلفية</string>
|
||||
|
||||
@@ -42,7 +42,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_settings_import_reset">ReVanced tənzimləmələr standarta təyin edildi</string>
|
||||
<string name="revanced_settings_import_success">%d tənzimləmə idxal edildi</string>
|
||||
<string name="revanced_settings_import_failure_parse">Uğursuz idxal prosesi: %s</string>
|
||||
<string name="revanced_settings_search_hint">Axtarış tənzimləmələri</string>
|
||||
<string name="revanced_settings_search_hint">Tənzimləmələri axtar</string>
|
||||
<string name="revanced_settings_search_no_results_title">‘%s’ üçün nəticə tapılmadı</string>
|
||||
<string name="revanced_settings_search_no_results_summary">Başqa açar sözü yoxla</string>
|
||||
<string name="revanced_settings_search_remove_message">Axtarış tarixçəsindən silinsin?</string>
|
||||
|
||||
@@ -42,21 +42,48 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_settings_import_reset">بازگرداندن تنظیمات ReVanced به پیشفرض</string>
|
||||
<string name="revanced_settings_import_success">%d تنظیمات وارد شدند</string>
|
||||
<string name="revanced_settings_import_failure_parse">واردکردن انجام نشد: %s</string>
|
||||
<string name="revanced_settings_search_hint">تنظیمات جستجو</string>
|
||||
<string name="revanced_settings_search_no_results_title">نتایجی برای %s یافت نشد</string>
|
||||
<string name="revanced_settings_search_no_results_summary">کلیدواژه دیگری را امتحان کنید</string>
|
||||
<string name="revanced_settings_search_remove_message">حذف از تاریخچه جستجو؟</string>
|
||||
<string name="revanced_show_menu_icons_title">نمایش آیکون تنظیمات ReVanced</string>
|
||||
<string name="revanced_show_menu_icons_summary_on">نمادهای تنظیمات نشان داده میشوند</string>
|
||||
<string name="revanced_show_menu_icons_summary_off">نمادهای تنظیمات نمایش داده نمی شوند</string>
|
||||
<string name="revanced_language_title">زبان ReVanced</string>
|
||||
<string name="revanced_language_DEFAULT">زبان برنامه</string>
|
||||
<string name="revanced_pref_import_export_title">وارد کردن/صادر کردن</string>
|
||||
<string name="revanced_pref_import_export_summary">وارد کردن / صادر کردن تنظیمات ReVanced</string>
|
||||
<!-- Settings about dialog. -->
|
||||
<string name="revanced_settings_about_links_body">شما درحال استفاده از نسخه <i>%s</i> از پچ Revanced هستید</string>
|
||||
<string name="revanced_settings_about_links_dev_header">توجه</string>
|
||||
<string name="revanced_settings_about_links_header">لینکهای رسمی</string>
|
||||
<!-- NOTE: the about strings above are duplicated in the TikTok about screen code,
|
||||
and changes made here must also be made there. -->
|
||||
</patch>
|
||||
<patch id="misc.gms.gmsCoreSupportResourcePatch">
|
||||
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
|
||||
<string name="gms_core_toast_not_installed_message">MicroG GmsCore نصب نشده است. آنرا نصب کنید.</string>
|
||||
<string name="gms_core_dialog_title">اقدام لازم است</string>
|
||||
<string name="gms_core_dialog_open_website_text">باز کردن تارنما</string>
|
||||
<string name="gms_core_dialog_continue_text">ادامه</string>
|
||||
</patch>
|
||||
</app>
|
||||
<app id="youtube">
|
||||
<patch id="misc.settings.settingsPatch">
|
||||
<string name="revanced_settings_screen_00_about_title">درباره</string>
|
||||
<string name="revanced_settings_screen_04_general_title">عمومی</string>
|
||||
<string name="revanced_settings_screen_05_player_title">اجراکننده</string>
|
||||
<string name="revanced_settings_screen_07_seekbar_title">نوار جریان پخش</string>
|
||||
<string name="revanced_settings_screen_12_video_title">ويدئو</string>
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
</patch>
|
||||
<patch id="misc.debugging.enableDebuggingPatch">
|
||||
<string name="revanced_debug_screen_title">عیبیابی</string>
|
||||
<string name="revanced_debug_screen_summary">فعال یا غیرفعال کردن گزینههای عیب یابی</string>
|
||||
<string name="revanced_debug_title">گزارش عیب</string>
|
||||
<string name="revanced_debug_summary_on">لاگ عیب فعال است</string>
|
||||
<string name="revanced_debug_summary_off">لاگ عیب غیرفعال است</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.general.hideLayoutComponentsPatch">
|
||||
<!-- 'Join' should be translated using the same localized wording YouTube displays.
|
||||
@@ -67,6 +94,10 @@ Second \"item\" text"</string>
|
||||
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">پنهان سازی دکمه \'نمایش بیشتر\'</string>
|
||||
<string name="revanced_hide_show_more_button_summary_on">دکمه پنهان است</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">دکمه نمایان است</string>
|
||||
<string name="revanced_hide_ticket_shelf_title">پنهان سازی قفسه بلیط</string>
|
||||
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
|
||||
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
|
||||
<!-- For localization, it is preferred, but not required, if 'LeBlanc' is replaced with a localized name or a familiar word that has upper case letters in the middle of the word.
|
||||
|
||||
@@ -42,8 +42,8 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_settings_import_reset">Paramètres ReVanced réinitialisés aux valeurs par défaut</string>
|
||||
<string name="revanced_settings_import_success">%d paramètres importés</string>
|
||||
<string name="revanced_settings_import_failure_parse">Importation échouée : %s</string>
|
||||
<string name="revanced_settings_search_hint">Paramètres de recherche</string>
|
||||
<string name="revanced_settings_search_no_results_title">Aucun résultat trouvé pour \".%s\".</string>
|
||||
<string name="revanced_settings_search_hint">Rechercher dans les paramètres</string>
|
||||
<string name="revanced_settings_search_no_results_title">Aucun résultat trouvé pour \"%s\"</string>
|
||||
<string name="revanced_settings_search_no_results_summary">Essayez un autre mot-clé</string>
|
||||
<string name="revanced_settings_search_remove_message">Supprimer de l\'historique des recherches ?</string>
|
||||
<string name="revanced_show_menu_icons_title">Afficher les icônes des paramètres ReVanced</string>
|
||||
@@ -169,9 +169,9 @@ Vous ne serez pas informé des événements inattendus."</string>
|
||||
<string name="revanced_hide_show_more_button_title">Masquer le bouton Afficher plus</string>
|
||||
<string name="revanced_hide_show_more_button_summary_on">Le bouton est masqué</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">Le bouton est affiché</string>
|
||||
<string name="revanced_hide_ticket_shelf_title">Masquer le rayon de billets</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_on">Le rayon de billets est masqué</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_off">Le rayon de billets est affiché</string>
|
||||
<string name="revanced_hide_ticket_shelf_title">Masquer l\'étagère des billets</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_on">L\'étagère des billets est masquée</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_off">L\'étagère des billets est affichée</string>
|
||||
<string name="revanced_hide_timed_reactions_title">Masquer les réactions minutées</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">Les réactions minutées sont masquées</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">Les réactions minutées sont affichées</string>
|
||||
@@ -241,9 +241,9 @@ Vous ne serez pas informé des événements inattendus."</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Masquer \"Résumé de la vidéo généré par IA\"</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">La section du résumé de la vidéo est masquée</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">La section du résumé de la vidéo est affichée</string>
|
||||
<string name="revanced_hide_ask_section_title">Masquer la section \"Demander\"</string>
|
||||
<string name="revanced_hide_ask_section_summary_on">La section \"Demander\" est masquée</string>
|
||||
<string name="revanced_hide_ask_section_summary_off">La section \"Demander\" est affichée</string>
|
||||
<string name="revanced_hide_ask_section_title">Masquer \"Demander\"</string>
|
||||
<string name="revanced_hide_ask_section_summary_on">La section Demander est masquée</string>
|
||||
<string name="revanced_hide_ask_section_summary_off">La section Demander est affichée</string>
|
||||
<string name="revanced_hide_attributes_section_title">Masquer les attributions</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Les sections Lieux mentionnés, Jeux, Musique et Personnes mentionnées sont masquées</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">Les sections Lieux mentionnés, Jeux, Musique et Personnes mentionnées sont affichées</string>
|
||||
|
||||
@@ -162,8 +162,8 @@ Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne."</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">Taispeántar an cnaipe</string>
|
||||
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendation_labels_title">Folaigh lipéid moltaí físeáin</string>
|
||||
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Tá lipéid \",,D’fhéach daoine eile air freisin\",, agus \",,B’fhéidir gur mhaith leat é seo freisin\",, folaithe</string>
|
||||
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Tá lipéid \",,D’fhéach daoine eile air freisin\",, agus \",,B’fhéidir gur mhaith leat é seo freisin\",, ar taispeáint</string>
|
||||
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Tá na lipéid \'Daoine a d\'fhéach orthu freisin\' agus \'B\'fhéidir gur mhaith leat freisin\' i bhfolach</string>
|
||||
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Taispeántar lipéid ‘Daoine a d’fhéach freisin’ agus ‘B’fhéidir gur mhaith leat freisin’</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">Folaigh cnaipe \'Taispeáin tuilleadh\'</string>
|
||||
@@ -263,8 +263,8 @@ Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne."</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_on">Tá an chuid Príomhchoincheapa i bhfolach</string>
|
||||
<string name="revanced_hide_key_concepts_section_summary_off">Taispeántar an chuid Príomhchoincheapa</string>
|
||||
<string name="revanced_hide_transcript_section_title">Folaigh Tras-scríbhinn</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Tá an chuid trasscríbhinne i bhfolach</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Taispeántar alt an trasscríbhinne</string>
|
||||
<string name="revanced_hide_transcript_section_summary_on">Tá alt an tras-scríbhinn i bhfolach</string>
|
||||
<string name="revanced_hide_transcript_section_summary_off">Taispeántar alt an tras-scríbhinn</string>
|
||||
<string name="revanced_hide_description_components_screen_title">Cur síos físeán</string>
|
||||
<string name="revanced_hide_description_components_screen_summary">Folaigh nó taispeáint comhpháirteanna tuairisc</string>
|
||||
<string name="revanced_hide_filter_bar_screen_title">Barra scagaire</string>
|
||||
@@ -278,8 +278,8 @@ Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne."</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">Folaigh i bhfíseáin gaolmhara</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">I bhfolach i bhfíseáin ghaolmhara</string>
|
||||
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Taispeántar i bhfíseáin ghaolmhara</string>
|
||||
<string name="revanced_comments_screen_title">Tuairimí</string>
|
||||
<string name="revanced_comments_screen_summary">Folaigh nó taispeáin comhpháirteanna na rannóige tuairimí</string>
|
||||
<string name="revanced_comments_screen_title">Tráchtanna</string>
|
||||
<string name="revanced_comments_screen_summary">Folaigh nó taispeáin comhpháirteanna na rannóige tráchtanna</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_title">Folaigh achoimre Comhrá AI</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_summary_on">Tá achoimre comhrá i bhfolach</string>
|
||||
<string name="revanced_hide_comments_ai_chat_summary_summary_off">Taispeántar achoimre comhrá</string>
|
||||
|
||||
@@ -42,8 +42,8 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_settings_import_reset">ReVanced 設定をデフォルトにリセット</string>
|
||||
<string name="revanced_settings_import_success">%d 個の設定をインポートしました</string>
|
||||
<string name="revanced_settings_import_failure_parse">インポート失敗: %s</string>
|
||||
<string name="revanced_settings_search_hint">検索設定</string>
|
||||
<string name="revanced_settings_search_no_results_title">\'%s\' の検索結果は見つかりませんでした</string>
|
||||
<string name="revanced_settings_search_hint">ReVanced の設定を検索</string>
|
||||
<string name="revanced_settings_search_no_results_title">\'%s\' に一致する ReVanced の設定は見つかりませんでした</string>
|
||||
<string name="revanced_settings_search_no_results_summary">別のキーワードを試してください</string>
|
||||
<string name="revanced_settings_search_remove_message">検索履歴から削除しますか?</string>
|
||||
<string name="revanced_show_menu_icons_title">ReVanced 設定にアイコンを表示する</string>
|
||||
@@ -98,9 +98,9 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_restore_old_settings_menus_title">設定メニューを旧バージョンに戻す</string>
|
||||
<string name="revanced_restore_old_settings_menus_summary_on">旧バージョンの設定メニューが表示されます</string>
|
||||
<string name="revanced_restore_old_settings_menus_summary_off">通常の設定メニューが表示されます</string>
|
||||
<string name="revanced_settings_search_history_title">設定の検索履歴を表示</string>
|
||||
<string name="revanced_settings_search_history_summary_on">設定の検索履歴が表示されています</string>
|
||||
<string name="revanced_settings_search_history_summary_off">設定の検索履歴は表示されません</string>
|
||||
<string name="revanced_settings_search_history_title">設定検索の履歴を表示する</string>
|
||||
<string name="revanced_settings_search_history_summary_on">設定検索の履歴は表示されます</string>
|
||||
<string name="revanced_settings_search_history_summary_off">設定検索の履歴は表示されません</string>
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">ショート動画のバックグラウンド再生を無効にする</string>
|
||||
@@ -244,7 +244,7 @@ MicroG GmsCore に対する電池の最適化を無効にしても、バッテ
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_title">「AI 生成による動画の要約」を非表示</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">動画の要約セクションは表示されません</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">動画の要約セクションは表示されます</string>
|
||||
<string name="revanced_hide_ask_section_title">質問ボタンを非表示</string>
|
||||
<string name="revanced_hide_ask_section_title">質問セクションを非表示</string>
|
||||
<string name="revanced_hide_ask_section_summary_on">質問セクションは表示されません</string>
|
||||
<string name="revanced_hide_ask_section_summary_off">質問セクションは表示されます</string>
|
||||
<string name="revanced_hide_attributes_section_title">関連情報を非表示</string>
|
||||
@@ -1167,7 +1167,7 @@ Automotive レイアウト
|
||||
<string name="revanced_change_start_page_always_summary_on">"スタート画面の変更は常時適用されます
|
||||
|
||||
制限事項: ツールバーの [戻る] ボタンが機能しない可能性があります"</string>
|
||||
<string name="revanced_change_start_page_always_summary_off">スタート画面の変更はアプリ起動時にのみ適用されます</string>
|
||||
<string name="revanced_change_start_page_always_summary_off">スタート画面の変更は、アプリ起動時にのみ適用されます</string>
|
||||
</patch>
|
||||
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
|
||||
<string name="revanced_disable_resuming_shorts_player_title">ショート動画プレーヤーの再開を無効にする</string>
|
||||
@@ -1296,8 +1296,8 @@ Automotive レイアウト
|
||||
</patch>
|
||||
<patch id="misc.announcements.announcementsPatch">
|
||||
<string name="revanced_announcements_title">ReVanced のお知らせを表示する</string>
|
||||
<string name="revanced_announcements_summary_on">アプリ起動時にお知らせが表示されます</string>
|
||||
<string name="revanced_announcements_summary_off">アプリ起動時にお知らせは表示されません</string>
|
||||
<string name="revanced_announcements_summary_on">お知らせは、アプリ起動時に表示されます</string>
|
||||
<string name="revanced_announcements_summary_off">お知らせは、アプリ起動時に表示されません</string>
|
||||
<string name="revanced_announcements_enabled_summary">アプリ起動時にお知らせを表示する</string>
|
||||
<string name="revanced_announcements_connection_failed">お知らせの取得に失敗しました</string>
|
||||
<string name="revanced_announcements_dialog_dismiss">閉じる</string>
|
||||
|
||||
@@ -24,7 +24,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_check_environment_failed_title">환경 검사에 실패함</string>
|
||||
<string name="revanced_check_environment_dialog_open_official_source_button">공식 홈페이지 열기</string>
|
||||
<string name="revanced_check_environment_dialog_ignore_button">닫기</string>
|
||||
<string name="revanced_check_environment_failed_message"><h5>이 앱은 사용자가 패치하지 않은 것 같습니다.</h5><br>이 앱은 제대로 작동하지 않을 수 있으며, <b>사용 시 해롭거나 심지어 위험할 수도 있습니다</b>.<br><br>이러한 검사는 이 앱이 사전에 패치되었거나 다른 사람으로부터 받은 것임을 의미합니다:<br><br><small>%1$s</small><br>검증되고 안전한 앱을 사용하고 있는지 확인하려면 <b>이 앱을 제거하고 직접 패치하는 것</b>을 강력히 권장합니다.<p><br>이 경고는 두 번만 표시됩니다.</string>
|
||||
<string name="revanced_check_environment_failed_message"><h5>이 앱은 사용자가 패치하지 않은 것 같습니다.</h5><br>이 앱은 제대로 작동하지 않을 수 있으며, <b>사용 시 해롭거나 심지어 위험할 수도 있습니다</b>.<br><br>이러한 검사는 이 앱이 사전에 패치되었거나 다른 사람으로부터 받은 것임을 의미합니다:<br><br><small>%1$s</small><br>검증되고 안전한 앱을 사용하고 있는지 확인하려면 <b>이 앱을 삭제하고 직접 패치하는 것</b>을 강력히 권장합니다.<p><br>이 경고는 두 번만 표시됩니다.</string>
|
||||
<string name="revanced_check_environment_not_same_patching_device">다른 기기에서 패치됨</string>
|
||||
<string name="revanced_check_environment_manager_not_expected_installer">ReVanced Manager에 의해 설치되지 않음</string>
|
||||
<string name="revanced_check_environment_not_near_patch_time">10분 이상 전에 패치됨</string>
|
||||
@@ -44,8 +44,8 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_settings_import_failure_parse">설정을 가져올 수 없습니다: %s</string>
|
||||
<string name="revanced_settings_search_hint">설정 검색</string>
|
||||
<string name="revanced_settings_search_no_results_title">\'%s\'에 대한 검색 결과가 없습니다</string>
|
||||
<string name="revanced_settings_search_no_results_summary">다른 키워드를 사용해 보세요</string>
|
||||
<string name="revanced_settings_search_remove_message">검색 기록에서 제거하시겠습니까?</string>
|
||||
<string name="revanced_settings_search_no_results_summary">다른 키워드를 검색해 보세요</string>
|
||||
<string name="revanced_settings_search_remove_message">검색 기록에서 삭제하시겠습니까?</string>
|
||||
<string name="revanced_show_menu_icons_title">ReVanced 설정 아이콘 표시하기</string>
|
||||
<string name="revanced_show_menu_icons_summary_on">설정 아이콘을 표시합니다</string>
|
||||
<string name="revanced_show_menu_icons_summary_off">설정 아이콘을 표시하지 않습니다</string>
|
||||
@@ -98,8 +98,8 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
<string name="revanced_restore_old_settings_menus_summary_on">이전 설정 메뉴를 표시합니다</string>
|
||||
<string name="revanced_restore_old_settings_menus_summary_off">이전 설정 메뉴를 표시하지 않습니다</string>
|
||||
<string name="revanced_settings_search_history_title">설정 검색 기록 표시하기</string>
|
||||
<string name="revanced_settings_search_history_summary_on">설정 검색 기록이 표시됩니다</string>
|
||||
<string name="revanced_settings_search_history_summary_off">설정 검색 기록이 표시되지 않습니다</string>
|
||||
<string name="revanced_settings_search_history_summary_on">설정 검색 기록을 표시합니다</string>
|
||||
<string name="revanced_settings_search_history_summary_off">설정 검색 기록을 표시하지 않습니다</string>
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">Shorts 백그라운드 재생 비활성화하기</string>
|
||||
@@ -166,8 +166,8 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
<string name="revanced_hide_notify_me_button_summary_off">\'알림 받기\' 버튼이 표시됩니다</string>
|
||||
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendation_labels_title">동영상 추천 라벨 숨기기</string>
|
||||
<string name="revanced_hide_search_result_recommendation_labels_summary_on">다음 동영상 추천 라벨이 숨겨집니다\n• 시청자가 이 동영상도 시청함\n• 내가 좋아할 만한 동영상</string>
|
||||
<string name="revanced_hide_search_result_recommendation_labels_summary_off">다음 동영상 추천 라벨이 표시됩니다\n• 시청자가 이 동영상도 시청함\n• 내가 좋아할 만한 동영상</string>
|
||||
<string name="revanced_hide_search_result_recommendation_labels_summary_on">다음 동영상 추천 라벨이 숨겨집니다:\n• 시청자가 이 동영상도 시청함\n• 내가 좋아할 만한 동영상</string>
|
||||
<string name="revanced_hide_search_result_recommendation_labels_summary_off">다음 동영상 추천 라벨이 표시됩니다:\n• 시청자가 이 동영상도 시청함\n• 내가 좋아할 만한 동영상</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">\'자세히 보기\' 버튼 숨기기</string>
|
||||
@@ -423,9 +423,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
<string name="revanced_copy_video_url_timestamp_summary_off">버튼을 표시하지 않습니다</string>
|
||||
</patch>
|
||||
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">시청 경고 다이얼로그 제거하기</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_on">다음 동영상을 시청하기 전에 표시되는 시청 경고 다이얼로그를 제거합니다\n• 연령 제한 동영상\n• 자살 또는 자해와 관련된 동영상, etc.</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_off">다음 동영상을 시청하기 전에 표시되는 시청 경고 다이얼로그를 제거하지 않습니다\n• 연령 제한 동영상\n• 자살 또는 자해와 관련된 동영상, etc.</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_title">시청 경고 다이얼로그 삭제하기</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_on">다음 동영상을 시청하기 전에 표시되는 시청 경고 다이얼로그를 삭제합니다:\n• 연령 제한 동영상\n• 자살 또는 자해와 관련된 동영상, etc.</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_summary_off">다음 동영상을 시청하기 전에 표시되는 시청 경고 다이얼로그를 삭제하지 않습니다:\n• 연령 제한 동영상\n• 자살 또는 자해와 관련된 동영상, etc.</string>
|
||||
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">이 설정은 다이얼로그를 자동으로 허용하기만 하며 연령 제한(성인인증 절차)을 우회할 수 없습니다.</string>
|
||||
</patch>
|
||||
<patch id="interaction.downloads.downloadsResourcePatch">
|
||||
@@ -685,8 +685,8 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
|
||||
</patch>
|
||||
<patch id="layout.hide.rollingnumber.disableRollingNumberAnimationPatch">
|
||||
<string name="revanced_disable_rolling_number_animations_title">롤링 넘버 애니메이션 비활성화하기</string>
|
||||
<string name="revanced_disable_rolling_number_animations_summary_on">다음 롤링 넘버 애니메이션을 비활성화합니다\n• 조회수, 시청자 수 롤링 애니메이션 (플레이어 하단)\n• 좋아요 수, 조회수 롤링 애니메이션 (동영상 설명)</string>
|
||||
<string name="revanced_disable_rolling_number_animations_summary_off">다음 롤링 넘버 애니메이션을 활성화합니다\n• 조회수, 시청자 수 롤링 애니메이션 (플레이어 하단)\n• 좋아요 수, 조회수 롤링 애니메이션 (동영상 설명)</string>
|
||||
<string name="revanced_disable_rolling_number_animations_summary_on">다음 롤링 넘버 애니메이션을 비활성화합니다:\n• 조회수, 시청자 수 롤링 애니메이션 (플레이어 하단)\n• 좋아요 수, 조회수 롤링 애니메이션 (동영상 설명)</string>
|
||||
<string name="revanced_disable_rolling_number_animations_summary_off">다음 롤링 넘버 애니메이션을 활성화합니다:\n• 조회수, 시청자 수 롤링 애니메이션 (플레이어 하단)\n• 좋아요 수, 조회수 롤링 애니메이션 (동영상 설명)</string>
|
||||
</patch>
|
||||
<patch id="layout.hide.seekbar.hideSeekbarPatch">
|
||||
<string name="revanced_hide_seekbar_title">동영상 플레이어 재생바 숨기기</string>
|
||||
@@ -1332,7 +1332,7 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
|
||||
<string name="microg_settings_summary">알림 수신을 위한 클라우드 메시징을 설정할 수 있습니다</string>
|
||||
</patch>
|
||||
<patch id="misc.gms.accountCredentialsInvalidTextPatch">
|
||||
<string name="microg_offline_account_login_error">최근에 계정 로그인 정보를 변경했다면 MicroG를 제거하고 다시 설치하세요.</string>
|
||||
<string name="microg_offline_account_login_error">최근에 계정 로그인 정보를 변경했다면 MicroG를 삭제하고 다시 설치하세요.</string>
|
||||
</patch>
|
||||
<patch id="misc.links.bypassURLRedirectsPatch">
|
||||
<string name="revanced_bypass_url_redirects_title">리다이렉션 없이 링크 바로 열기</string>
|
||||
@@ -1345,9 +1345,9 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
|
||||
<string name="revanced_external_browser_summary_off">앱 내에서 외부 링크를 열 때, 내부 브라우저를 사용합니다</string>
|
||||
</patch>
|
||||
<patch id="misc.privacy.removeTrackingQueryParameterPatch">
|
||||
<string name="revanced_remove_tracking_query_parameter_title">추적 쿼리를 제거한 링크 공유하기</string>
|
||||
<string name="revanced_remove_tracking_query_parameter_summary_on">링크를 공유할 때, URL에서 추적 쿼리 매개변수를 제거합니다 (URL의 뒷부분 \'?si=...\' 이 제거됨)</string>
|
||||
<string name="revanced_remove_tracking_query_parameter_summary_off">링크를 공유할 때, URL에서 추적 쿼리 매개변수를 제거하지 않습니다</string>
|
||||
<string name="revanced_remove_tracking_query_parameter_title">추적 쿼리를 삭제한 링크 공유하기</string>
|
||||
<string name="revanced_remove_tracking_query_parameter_summary_on">링크를 공유할 때, URL에서 추적 쿼리 매개변수를 삭제합니다 (URL의 뒷부분 \'?si=...\' 이 삭제됨)</string>
|
||||
<string name="revanced_remove_tracking_query_parameter_summary_off">링크를 공유할 때, URL에서 추적 쿼리 매개변수를 삭제하지 않습니다</string>
|
||||
</patch>
|
||||
<patch id="misc.zoomhaptics.zoomHapticsPatch">
|
||||
<string name="revanced_disable_zoom_haptics_title">동영상을 확대할 때, 진동 피드백 비활성화하기</string>
|
||||
@@ -1428,8 +1428,8 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
|
||||
<string name="revanced_spoof_video_streams_user_dialog_message">이 설정을 비활성화하면 동영상 재생 문제가 발생할 수 있습니다.</string>
|
||||
<string name="revanced_spoof_video_streams_client_type_title">기본 클라이언트</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_title">iOS AVC (H.264) 강제로 활성화하기</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">동영상 코덱을 AVC (H.264)로 강제로 활성화합니다\n\n• 일부 VP9 코덱 동영상에서 제거되었던 화질 값이 표시될 수 있습니다\n• 최대 화질 값이 1080p이므로, 초고화질 동영상을 재생할 수 없습니다\n• HDR 동영상을 재생할 수 없습니다</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">동영상 코덱을 자동으로 결정합니다\n\n• 예전에 업로드된 동영상을 재생했는데 VP9 코덱 응답을 받았을 경우, 일부 화질값이 제거되어 360p와 1080p(Premium 기능)만 선택가능할 수 있거나 화질 메뉴를 선택불가능할 수 있습니다</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">동영상 코덱을 AVC (H.264)로 강제로 활성화합니다\n\n• 일부 VP9 코덱 동영상에서 삭제되었던 화질 값이 표시될 수 있습니다\n• 최대 화질 값이 1080p이므로, 초고화질 동영상을 재생할 수 없습니다\n• HDR 동영상을 재생할 수 없습니다</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">동영상 코덱을 자동으로 결정합니다\n\n• 예전에 업로드된 동영상을 재생했는데 VP9 코덱 응답을 받았을 경우, 일부 화질값이 삭제되어 360p와 1080p(Premium 기능)만 선택가능할 수 있거나 화질 메뉴를 선택불가능할 수 있습니다</string>
|
||||
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"이 설정를 활성화하면 배터리 수명이 향상되고, 동영상 재생 끊김 문제가 해결될 수 있습니다.
|
||||
|
||||
AVC의 최대 화질 값은 1080p이고, OPUS 코덱을 사용불가 및 HDR 동영상을 재생할 수 없으며, 동영상을 재생했을 경우에는 VP9 또는 AV1보다 더 많은 모바일 데이터를 사용되오니 주의하세요."</string>
|
||||
@@ -1469,11 +1469,11 @@ AVC의 최대 화질 값은 1080p이고, OPUS 코덱을 사용불가 및 HDR 동
|
||||
<string name="revanced_block_video_ads_summary_off">동영상 광고를 차단하지 않습니다</string>
|
||||
</patch>
|
||||
<patch id="chat.antidelete.showDeletedMessagesPatch">
|
||||
<string name="revanced_deleted_msg">메시지를 제거합니다</string>
|
||||
<string name="revanced_show_deleted_messages_title">제거된 메시지 표시하기</string>
|
||||
<string name="revanced_show_deleted_messages_entry_1">제거된 메시지 표시하지 않기</string>
|
||||
<string name="revanced_show_deleted_messages_entry_2">스포일러 뒤에 제거된 메시지 숨기기</string>
|
||||
<string name="revanced_show_deleted_messages_entry_3">제거된 메시지를 줄이 그어진 텍스트로 표시하기</string>
|
||||
<string name="revanced_deleted_msg">메시지를 삭제합니다</string>
|
||||
<string name="revanced_show_deleted_messages_title">삭제된 메시지 표시하기</string>
|
||||
<string name="revanced_show_deleted_messages_entry_1">삭제된 메시지 표시하지 않기</string>
|
||||
<string name="revanced_show_deleted_messages_entry_2">스포일러 뒤에 삭제된 메시지 숨기기</string>
|
||||
<string name="revanced_show_deleted_messages_entry_3">삭제된 메시지를 줄이 그어진 텍스트로 표시하기</string>
|
||||
</patch>
|
||||
<patch id="chat.autoclaim.autoClaimChannelPointsPatch">
|
||||
<string name="revanced_auto_claim_channel_points_title">채널 포인트 자동 적립하기</string>
|
||||
|
||||
@@ -42,7 +42,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_settings_import_reset">Настройки ReVanced восстановлены до значений по умолчанию</string>
|
||||
<string name="revanced_settings_import_success">Импортировано %d настроек</string>
|
||||
<string name="revanced_settings_import_failure_parse">Ошибка импорта: %s</string>
|
||||
<string name="revanced_settings_search_hint">Настройки поиска</string>
|
||||
<string name="revanced_settings_search_hint">Поиск настроек</string>
|
||||
<string name="revanced_settings_search_no_results_title">По запросу \"%s\" ничего не найдено</string>
|
||||
<string name="revanced_settings_search_no_results_summary">Попробуйте другое ключевое слово</string>
|
||||
<string name="revanced_settings_search_remove_message">Удалить из истории поиска?</string>
|
||||
@@ -97,9 +97,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_restore_old_settings_menus_title">Включить старое меню настроек</string>
|
||||
<string name="revanced_restore_old_settings_menus_summary_on">Старое меню настроек включено</string>
|
||||
<string name="revanced_restore_old_settings_menus_summary_off">Новое меню настроек включено</string>
|
||||
<string name="revanced_settings_search_history_title">Показывать историю поиска в настройках</string>
|
||||
<string name="revanced_settings_search_history_summary_on">История поиска в настройках отображается</string>
|
||||
<string name="revanced_settings_search_history_summary_off">История поиска настроек не отображается</string>
|
||||
<string name="revanced_settings_search_history_title">Показать историю поиска настроек</string>
|
||||
<string name="revanced_settings_search_history_summary_on">История поиска настроек показана</string>
|
||||
<string name="revanced_settings_search_history_summary_off">История поиска настроек скрыта</string>
|
||||
</patch>
|
||||
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
|
||||
<string name="revanced_shorts_disable_background_playback_title">Отключить воспроизведение Shorts в фоновом режиме</string>
|
||||
@@ -161,17 +161,17 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_on">Кнопка \"Прислать уведомление\" под плеером скрыта</string>
|
||||
<string name="revanced_hide_notify_me_button_summary_off">Кнопка \"Прислать уведомление\" под плеером показана</string>
|
||||
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
|
||||
<string name="revanced_hide_search_result_recommendation_labels_title">Скрыть ярлыки с рекомендациями видео</string>
|
||||
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Ярлыки \"Люди также смотрят\" и \"Вам также может понравиться\" скрыты</string>
|
||||
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Ярлыки \"Люди также смотрят\" и \"Вам также может понравиться\" показаны</string>
|
||||
<string name="revanced_hide_search_result_recommendation_labels_title">Скрыть метки видеорекомендаций</string>
|
||||
<string name="revanced_hide_search_result_recommendation_labels_summary_on">Метки \"Люди также смотрели\" и \"Вам также может понравиться\" в результатах поиска скрыты</string>
|
||||
<string name="revanced_hide_search_result_recommendation_labels_summary_off">Метки \"Люди также смотрели\" и \"Вам также может понравиться\" в результатах поиска показаны</string>
|
||||
<!-- 'Show more' should be translated with the same localized wording that YouTube displays.
|
||||
This button usually appears when searching for a YT creator. -->
|
||||
<string name="revanced_hide_show_more_button_title">Скрыть кнопку \"Показать еще\"</string>
|
||||
<string name="revanced_hide_show_more_button_summary_on">Кнопка \"Показать еще\" в результатах поиска скрыта</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">Кнопка \"Показать еще\" в результатах поиска показана</string>
|
||||
<string name="revanced_hide_ticket_shelf_title">Скрыть секцию билетов</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_on">Секция билетов скрыта</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_off">Секция билетов показана</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_on">Секция билетов под плеером скрыта</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_off">Секция билетов под плеером показана</string>
|
||||
<string name="revanced_hide_timed_reactions_title">Скрыть временные реакции</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">Временные реакции в комментариях и живом чате скрыты</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">Временные реакции в комментариях и живом чате показаны</string>
|
||||
@@ -241,9 +241,9 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_title">Скрыть секцию AI-резюме видео</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Секция AI-резюме видео в описании видео скрыта</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Секция AI-резюме видео в описании видео показана</string>
|
||||
<string name="revanced_hide_ask_section_title">Скрыть кнопку \"Спросить\"</string>
|
||||
<string name="revanced_hide_ask_section_summary_on">Раздел \"Спросить\" скрыт</string>
|
||||
<string name="revanced_hide_ask_section_summary_off">Раздел \"Спросить\" показан</string>
|
||||
<string name="revanced_hide_ask_section_title">Скрыть раздел \"Спросить\"</string>
|
||||
<string name="revanced_hide_ask_section_summary_on">Раздел \"Спросить\" в описании видео скрыт</string>
|
||||
<string name="revanced_hide_ask_section_summary_off">Раздел \"Спросить\" в описании видео показан</string>
|
||||
<string name="revanced_hide_attributes_section_title">Скрыть раздел атрибутов</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Разделы \"Упомянутые или показанные места\", \"Игры\", \"Музыка\" и \"Люди, которых упоминали\" скрыты</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">Разделы \"Упомянутые или показанные места\", \"Игры\", \"Музыка\" и \"Люди, которых упоминали\" показаны</string>
|
||||
|
||||
@@ -42,7 +42,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_settings_import_reset">ReVanced ayarları varsayılanlara sıfırlandı</string>
|
||||
<string name="revanced_settings_import_success">%d ayar içe aktarıldı</string>
|
||||
<string name="revanced_settings_import_failure_parse">İçe aktarılamadı: %s</string>
|
||||
<string name="revanced_settings_search_hint">Arama ayarları</string>
|
||||
<string name="revanced_settings_search_hint">Ayarları ara</string>
|
||||
<string name="revanced_settings_search_no_results_title">\'%s\' için sonuç bulunamadı</string>
|
||||
<string name="revanced_settings_search_no_results_summary">Başka bir anahtar kelime deneyin</string>
|
||||
<string name="revanced_settings_search_remove_message">Arama geçmişinden kaldırılsın mı?</string>
|
||||
@@ -171,7 +171,7 @@ Beklenmedik olaylar hakkında bilgilendirilmeyeceksiniz."</string>
|
||||
<string name="revanced_hide_show_more_button_summary_off">Düğme görünür</string>
|
||||
<string name="revanced_hide_ticket_shelf_title">Bilet rafını gizle</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_on">Bilet rafı gizli</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_off">Bilet rafı görünüyor</string>
|
||||
<string name="revanced_hide_ticket_shelf_summary_off">Bilet rafı görünür</string>
|
||||
<string name="revanced_hide_timed_reactions_title">Süreli tepkileri gizle</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_on">Süreli tepkiler gizli</string>
|
||||
<string name="revanced_hide_timed_reactions_summary_off">Süreli tepkiler görünür</string>
|
||||
@@ -242,8 +242,8 @@ Beklenmedik olaylar hakkında bilgilendirilmeyeceksiniz."</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">Video özeti bölümü gizli</string>
|
||||
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Video özeti bölümü görünür</string>
|
||||
<string name="revanced_hide_ask_section_title">\'Sor\'u gizle</string>
|
||||
<string name="revanced_hide_ask_section_summary_on">Sor bölümü gizli</string>
|
||||
<string name="revanced_hide_ask_section_summary_off">Sor bölümü görünür</string>
|
||||
<string name="revanced_hide_ask_section_summary_on">Sor kısmı gizli</string>
|
||||
<string name="revanced_hide_ask_section_summary_off">Sor kısmı görünür</string>
|
||||
<string name="revanced_hide_attributes_section_title">Nitelikleri gizle</string>
|
||||
<string name="revanced_hide_attributes_section_summary_on">Öne çıkan yerler, Oyunlar, Müzik ve Bahsedilen kişiler bölümleri gizli</string>
|
||||
<string name="revanced_hide_attributes_section_summary_off">Öne çıkan yerler, Oyunlar, Müzik ve Bahsedilen kişiler bölümleri görünür</string>
|
||||
|
||||
@@ -42,7 +42,7 @@ Second \"item\" text"</string>
|
||||
<string name="revanced_settings_import_reset">Cài đặt ReVanced đặt lại thành mặc định</string>
|
||||
<string name="revanced_settings_import_success">Đã nhập cài đặt %d</string>
|
||||
<string name="revanced_settings_import_failure_parse">Nhập thất bại: %s</string>
|
||||
<string name="revanced_settings_search_hint">Cài đặt tìm kiếm</string>
|
||||
<string name="revanced_settings_search_hint">Tìm kiếm</string>
|
||||
<string name="revanced_settings_search_no_results_title">Không tìm thấy kết quả nào cho \'%s\'</string>
|
||||
<string name="revanced_settings_search_no_results_summary">Thử một từ khóa khác</string>
|
||||
<string name="revanced_settings_search_remove_message">Xóa khỏi lịch sử tìm kiếm?</string>
|
||||
|
||||
Reference in New Issue
Block a user