Compare commits

..

16 Commits

Author SHA1 Message Date
semantic-release-bot
3d25da18bc chore: Release v5.37.1-dev.1 [skip ci]
## [5.37.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.37.0...v5.37.1-dev.1) (2025-09-15)

### Bug Fixes

* **YouTube Music - Spoof video streams:** Fix playback issues when using a cellular network ([fa04c8e](fa04c8eecf))
2025-09-15 12:47:02 +00:00
LisoUseInAIKyrios
fa04c8eecf fix(YouTube Music - Spoof video streams): Fix playback issues when using a cellular network
Code adapted from 5f35e51a27
2025-09-15 16:43:04 +04:00
semantic-release-bot
105f6e0e97 chore: Release v5.37.0 [skip ci]
# [5.37.0](https://github.com/ReVanced/revanced-patches/compare/v5.36.0...v5.37.0) (2025-09-15)

### Bug Fixes

* **Instagram - Hide navigation buttons:** Add constrain to known working version ([e6c79f1](e6c79f1383))
* Resolve patching with dev branch ([09b941a](09b941abf0))
* **Spotify:** Remove broken `Spoof client` patch ([#5833](https://github.com/ReVanced/revanced-patches/issues/5833)) ([dcd4245](dcd42454bd))
* **Viber - Hide ads:** Add constrain to known working version ([2db0948](2db0948bea))
* **YouTube Music - Spoof streaming data:** Fix audio playback stuttering ([#5839](https://github.com/ReVanced/revanced-patches/issues/5839)) ([2a85a3b](2a85a3b290))

### Features

* **Viber:** Add `Hide ads` patch ([#5826](https://github.com/ReVanced/revanced-patches/issues/5826)) ([0abfab7](0abfab79d7))
2025-09-15 06:45:56 +00:00
LisoUseInAIKyrios
7d59efe05d chore: Merge branch dev to main (#5830) 2025-09-15 10:43:05 +04:00
github-actions[bot]
81ff5576b0 chore: Sync translations (#5854) 2025-09-15 10:41:42 +04:00
semantic-release-bot
9a5c102c0d chore: Release v5.37.0-dev.6 [skip ci]
# [5.37.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.37.0-dev.5...v5.37.0-dev.6) (2025-09-15)

### Bug Fixes

* **Instagram - Hide navigation buttons:** Add constrain to known working version ([e6c79f1](e6c79f1383))
2025-09-15 06:40:30 +00:00
LisoUseInAIKyrios
e6c79f1383 fix(Instagram - Hide navigation buttons): Add constrain to known working version 2025-09-15 10:36:57 +04:00
semantic-release-bot
2a582eced8 chore: Release v5.37.0-dev.5 [skip ci]
# [5.37.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.37.0-dev.4...v5.37.0-dev.5) (2025-09-15)

### Bug Fixes

* **Viber - Hide ads:** Add constrain to known working version ([2db0948](2db0948bea))
2025-09-15 06:29:31 +00:00
LisoUseInAIKyrios
2db0948bea fix(Viber - Hide ads): Add constrain to known working version 2025-09-15 10:26:30 +04:00
semantic-release-bot
a3ba92e742 chore: Release v5.37.0-dev.4 [skip ci]
# [5.37.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.37.0-dev.3...v5.37.0-dev.4) (2025-09-14)

### Bug Fixes

* **YouTube Music - Spoof streaming data:** Fix audio playback stuttering ([#5839](https://github.com/ReVanced/revanced-patches/issues/5839)) ([2a85a3b](2a85a3b290))
2025-09-14 18:22:57 +00:00
LisoUseInAIKyrios
2a85a3b290 fix(YouTube Music - Spoof streaming data): Fix audio playback stuttering (#5839) 2025-09-14 22:19:13 +04:00
semantic-release-bot
eee72208dd chore: Release v5.37.0-dev.3 [skip ci]
# [5.37.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.37.0-dev.2...v5.37.0-dev.3) (2025-09-14)

### Bug Fixes

* **Spotify:** Remove broken `Spoof client` patch ([#5833](https://github.com/ReVanced/revanced-patches/issues/5833)) ([dcd4245](dcd42454bd))
2025-09-14 17:15:28 +00:00
LisoUseInAIKyrios
dcd42454bd fix(Spotify): Remove broken Spoof client patch (#5833) 2025-09-14 21:11:15 +04:00
LisoUseInAIKyrios
782353c18a refactor(Spoof video streams): Handle migration of default spoof client for users upgrading from very old patches 2025-09-14 18:06:40 +04:00
semantic-release-bot
b53b870e8f chore: Release v5.37.0-dev.2 [skip ci]
# [5.37.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.37.0-dev.1...v5.37.0-dev.2) (2025-09-14)

### Bug Fixes

* Resolve patching with dev branch ([09b941a](09b941abf0))
2025-09-14 12:00:38 +00:00
LisoUseInAIKyrios
09b941abf0 fix: Resolve patching with dev branch 2025-09-14 15:58:05 +04:00
22 changed files with 367 additions and 188 deletions

View File

@@ -1,3 +1,61 @@
## [5.37.1-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.37.0...v5.37.1-dev.1) (2025-09-15)
### Bug Fixes
* **YouTube Music - Spoof video streams:** Fix playback issues when using a cellular network ([fa04c8e](https://github.com/ReVanced/revanced-patches/commit/fa04c8eecfbdd0b6ed082b464ca9032536d71762))
# [5.37.0](https://github.com/ReVanced/revanced-patches/compare/v5.36.0...v5.37.0) (2025-09-15)
### Bug Fixes
* **Instagram - Hide navigation buttons:** Add constrain to known working version ([e6c79f1](https://github.com/ReVanced/revanced-patches/commit/e6c79f13834c83fef04e4dee5e628cb0b9a27765))
* Resolve patching with dev branch ([09b941a](https://github.com/ReVanced/revanced-patches/commit/09b941abf0e8029999565082b02a88b5de507ec4))
* **Spotify:** Remove broken `Spoof client` patch ([#5833](https://github.com/ReVanced/revanced-patches/issues/5833)) ([dcd4245](https://github.com/ReVanced/revanced-patches/commit/dcd42454bd5f87dddd720534f6120c4ef90063a3))
* **Viber - Hide ads:** Add constrain to known working version ([2db0948](https://github.com/ReVanced/revanced-patches/commit/2db0948beaf2b68391a1fe7f21e92d31c7df61e7))
* **YouTube Music - Spoof streaming data:** Fix audio playback stuttering ([#5839](https://github.com/ReVanced/revanced-patches/issues/5839)) ([2a85a3b](https://github.com/ReVanced/revanced-patches/commit/2a85a3b29092729ae16d1fd93803634ce5f08e95))
### Features
* **Viber:** Add `Hide ads` patch ([#5826](https://github.com/ReVanced/revanced-patches/issues/5826)) ([0abfab7](https://github.com/ReVanced/revanced-patches/commit/0abfab79d7cda15bf17c53679fbfffb021662649))
# [5.37.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.37.0-dev.5...v5.37.0-dev.6) (2025-09-15)
### Bug Fixes
* **Instagram - Hide navigation buttons:** Add constrain to known working version ([e6c79f1](https://github.com/ReVanced/revanced-patches/commit/e6c79f13834c83fef04e4dee5e628cb0b9a27765))
# [5.37.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.37.0-dev.4...v5.37.0-dev.5) (2025-09-15)
### Bug Fixes
* **Viber - Hide ads:** Add constrain to known working version ([2db0948](https://github.com/ReVanced/revanced-patches/commit/2db0948beaf2b68391a1fe7f21e92d31c7df61e7))
# [5.37.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.37.0-dev.3...v5.37.0-dev.4) (2025-09-14)
### Bug Fixes
* **YouTube Music - Spoof streaming data:** Fix audio playback stuttering ([#5839](https://github.com/ReVanced/revanced-patches/issues/5839)) ([2a85a3b](https://github.com/ReVanced/revanced-patches/commit/2a85a3b29092729ae16d1fd93803634ce5f08e95))
# [5.37.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.37.0-dev.2...v5.37.0-dev.3) (2025-09-14)
### Bug Fixes
* **Spotify:** Remove broken `Spoof client` patch ([#5833](https://github.com/ReVanced/revanced-patches/issues/5833)) ([dcd4245](https://github.com/ReVanced/revanced-patches/commit/dcd42454bd5f87dddd720534f6120c4ef90063a3))
# [5.37.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.37.0-dev.1...v5.37.0-dev.2) (2025-09-14)
### Bug Fixes
* Resolve patching with dev branch ([09b941a](https://github.com/ReVanced/revanced-patches/commit/09b941abf0e8029999565082b02a88b5de507ec4))
# [5.37.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.36.0...v5.37.0-dev.1) (2025-09-14)

View File

@@ -1,3 +1,9 @@
dependencies {
compileOnly(project(":extensions:shared:library"))
compileOnly(project(":extensions:youtube:stub"))
compileOnly(libs.annotation)
}
android {
defaultConfig {
minSdk = 26

View File

@@ -0,0 +1,23 @@
package app.revanced.extension.music.patches.spoof;
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_43_32;
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_61_48;
import app.revanced.extension.shared.spoof.ClientType;
import app.revanced.extension.shared.spoof.requests.StreamingDataRequest;
@SuppressWarnings("unused")
public class SpoofVideoStreamsPatch {
/**
* Injection point.
*/
public static void setClientOrderToUse() {
ClientType[] availableClients = {
ANDROID_VR_1_43_32,
ANDROID_VR_1_61_48,
};
StreamingDataRequest.setClientOrderToUse(availableClients, ANDROID_VR_1_43_32);
}
}

View File

@@ -34,6 +34,5 @@ public class BaseSettings {
public static final BooleanSetting SPOOF_VIDEO_STREAMS_IOS_FORCE_AVC = new BooleanSetting("revanced_spoof_video_streams_ios_force_avc", FALSE, true,
"revanced_spoof_video_streams_ios_force_avc_user_dialog_message", new SpoofiOSAvailability());
// Client type must be last spoof setting due to cyclic references.
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client_type", ClientType.ANDROID_VR_NO_AUTH, true, parent(SPOOF_VIDEO_STREAMS));
public static final EnumSetting<ClientType> SPOOF_VIDEO_STREAMS_CLIENT_TYPE = new EnumSetting<>("revanced_spoof_video_streams_client_type", ClientType.ANDROID_VR_1_61_48, true, parent(SPOOF_VIDEO_STREAMS));
}

View File

@@ -12,7 +12,7 @@ import app.revanced.extension.shared.settings.BaseSettings;
public enum ClientType {
// https://dumps.tadiphone.dev/dumps/oculus/eureka
ANDROID_VR_NO_AUTH(
ANDROID_VR_1_61_48(
28,
"ANDROID_VR",
"com.google.android.apps.youtube.vr.oculus",
@@ -27,7 +27,7 @@ public enum ClientType {
"1.61.48",
false,
false,
"Android VR No auth"
"Android VR 1.61"
),
// Chromecast with Google TV 4K.
// https://dumps.tadiphone.dev/dumps/google/kirkwood
@@ -96,6 +96,26 @@ public enum ClientType {
forceAVC()
? "iOS TV Force AVC"
: "iOS TV"
),
/**
* Uses non adaptive bitrate, which fixes audio stuttering with YT Music.
* Uses VP9 and not AV1.
*/
ANDROID_VR_1_43_32(
ANDROID_VR_1_61_48.id,
ANDROID_VR_1_61_48.clientName,
ANDROID_VR_1_61_48.packageName,
ANDROID_VR_1_61_48.deviceMake,
ANDROID_VR_1_61_48.deviceModel,
ANDROID_VR_1_61_48.osName,
ANDROID_VR_1_61_48.osVersion,
ANDROID_VR_1_61_48.androidSdkVersion,
ANDROID_VR_1_61_48.buildId,
"107.0.5284.2",
"1.43.32",
ANDROID_VR_1_61_48.requiresAuth,
ANDROID_VR_1_61_48.useAuth,
"Android VR 1.43"
);
private static boolean forceAVC() {

View File

@@ -22,10 +22,19 @@ public class SpoofVideoStreamsPatch {
&& BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.IOS_UNPLUGGED;
/**
* Any unreachable ip address. Used to intentionally fail requests.
* Domain used for internet connectivity verification.
* It has an empty response body and is only used to check for a 204 response code.
* <p>
* If an unreachable IP address (127.0.0.1) is used, no response code is provided.
* <p>
* YouTube handles unreachable IP addresses without issue.
* YouTube Music has an issue with waiting for the Cronet connect timeout of 30s on mobile networks.
* <p>
* Using a VPN or DNS can temporarily resolve this issue,
* But the ideal workaround is to avoid using an unreachable IP address.
*/
private static final String UNREACHABLE_HOST_URI_STRING = "https://127.0.0.0";
private static final Uri UNREACHABLE_HOST_URI = Uri.parse(UNREACHABLE_HOST_URI_STRING);
private static final String INTERNET_CONNECTION_CHECK_URI_STRING = "https://www.google.com/gen_204";
private static final Uri INTERNET_CONNECTION_CHECK_URI = Uri.parse(INTERNET_CONNECTION_CHECK_URI_STRING);
/**
* @return If this patch was included during patching.
@@ -53,9 +62,9 @@ public class SpoofVideoStreamsPatch {
String path = playerRequestUri.getPath();
if (path != null && path.contains("get_watch")) {
Logger.printDebug(() -> "Blocking 'get_watch' by returning unreachable uri");
Logger.printDebug(() -> "Blocking 'get_watch' by returning internet connection check uri");
return UNREACHABLE_HOST_URI;
return INTERNET_CONNECTION_CHECK_URI;
}
} catch (Exception ex) {
Logger.printException(() -> "blockGetWatchRequest failure", ex);
@@ -77,9 +86,9 @@ public class SpoofVideoStreamsPatch {
String path = originalUri.getPath();
if (path != null && path.contains("initplayback")) {
Logger.printDebug(() -> "Blocking 'initplayback' by clearing query");
Logger.printDebug(() -> "Blocking 'initplayback' by returning internet connection check uri");
return originalUri.buildUpon().clearQuery().build().toString();
return INTERNET_CONNECTION_CHECK_URI_STRING;
}
} catch (Exception ex) {
Logger.printException(() -> "blockInitPlaybackRequest failure", ex);
@@ -252,8 +261,9 @@ public class SpoofVideoStreamsPatch {
public static final class AudioStreamLanguageOverrideAvailability implements Setting.Availability {
@Override
public boolean isAvailable() {
ClientType clientType = BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
return BaseSettings.SPOOF_VIDEO_STREAMS.get()
&& BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get() == ClientType.ANDROID_VR_NO_AUTH;
&& (clientType == ClientType.ANDROID_VR_1_61_48 || clientType == ClientType.ANDROID_VR_1_43_32);
}
}

View File

@@ -42,7 +42,8 @@ final class PlayerRoutes {
// but if this is a fall over client it will set the language even though
// the audio language is not selectable in the UI.
ClientType userSelectedClient = BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
Locale streamLocale = userSelectedClient == ClientType.ANDROID_VR_NO_AUTH
Locale streamLocale = (userSelectedClient == ClientType.ANDROID_VR_1_61_48
|| userSelectedClient == ClientType.ANDROID_VR_1_43_32)
? BaseSettings.SPOOF_VIDEO_STREAMS_LANGUAGE.get().getLocale()
: Locale.getDefault();

View File

@@ -35,21 +35,22 @@ import app.revanced.extension.shared.spoof.ClientType;
*/
public class StreamingDataRequest {
private static final ClientType[] CLIENT_ORDER_TO_USE;
private static volatile ClientType[] clientOrderToUse = ClientType.values();
static {
ClientType[] allClientTypes = ClientType.values();
ClientType preferredClient = BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get();
public static void setClientOrderToUse(ClientType[] availableClients, ClientType preferredClient) {
Objects.requireNonNull(availableClients);
CLIENT_ORDER_TO_USE = new ClientType[allClientTypes.length];
CLIENT_ORDER_TO_USE[0] = preferredClient;
clientOrderToUse = new ClientType[availableClients.length];
clientOrderToUse[0] = preferredClient;
int i = 1;
for (ClientType c : allClientTypes) {
for (ClientType c : availableClients) {
if (c != preferredClient) {
CLIENT_ORDER_TO_USE[i++] = c;
clientOrderToUse[i++] = c;
}
}
Logger.printDebug(() -> "Available spoof clients: " + Arrays.toString(clientOrderToUse));
}
private static final String AUTHORIZATION_HEADER = "Authorization";
@@ -193,9 +194,9 @@ public class StreamingDataRequest {
// Retry with different client if empty response body is received.
int i = 0;
for (ClientType clientType : CLIENT_ORDER_TO_USE) {
for (ClientType clientType : clientOrderToUse) {
// Show an error if the last client type fails, or if debug is enabled then show for all attempts.
final boolean showErrorToast = (++i == CLIENT_ORDER_TO_USE.length) || debugEnabled;
final boolean showErrorToast = (++i == clientOrderToUse.length) || debugEnabled;
HttpURLConnection connection = send(clientType, videoId, playerHeaders, showErrorToast);
if (connection != null) {

View File

@@ -0,0 +1,29 @@
package app.revanced.extension.youtube.patches.spoof;
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_CREATOR;
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_UNPLUGGED;
import static app.revanced.extension.shared.spoof.ClientType.ANDROID_VR_1_61_48;
import static app.revanced.extension.shared.spoof.ClientType.IOS_UNPLUGGED;
import app.revanced.extension.shared.settings.BaseSettings;
import app.revanced.extension.shared.spoof.ClientType;
import app.revanced.extension.shared.spoof.requests.StreamingDataRequest;
@SuppressWarnings("unused")
public class SpoofVideoStreamsPatch {
/**
* Injection point.
*/
public static void setClientOrderToUse() {
ClientType[] availableClients = {
ANDROID_VR_1_61_48,
ANDROID_UNPLUGGED,
ANDROID_CREATOR,
IOS_UNPLUGGED
};
StreamingDataRequest.setClientOrderToUse(availableClients,
BaseSettings.SPOOF_VIDEO_STREAMS_CLIENT_TYPE.get());
}
}

View File

@@ -86,7 +86,8 @@ public class SpoofStreamingDataSideEffectsPreference extends Preference {
String summary = str(key + "_summary");
// Android VR supports AV1 but all other clients do not.
if (clientType != ClientType.ANDROID_VR_NO_AUTH) {
if (clientType != ClientType.ANDROID_VR_1_61_48
&& clientType != ClientType.ANDROID_VR_1_43_32) {
summary += '\n' + str("revanced_spoof_video_streams_about_no_av1");
}

View File

@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
org.gradle.parallel = true
android.useAndroidX = true
kotlin.code.style = official
version = 5.37.0-dev.1
version = 5.37.1-dev.1

View File

@@ -15,7 +15,7 @@ val hideNavigationButtonsPatch = bytecodePatch(
description = "Hides navigation bar buttons, such as the Reels and Create button.",
use = false
) {
compatibleWith("com.instagram.android")
compatibleWith("com.instagram.android"("396.0.0.46.242"))
val hideReels by booleanOption(
key = "hideReels",

View File

@@ -1,12 +1,20 @@
package app.revanced.patches.music.misc.spoof
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patches.music.misc.extension.sharedExtensionPatch
import app.revanced.patches.music.misc.gms.musicActivityOnCreateFingerprint
import app.revanced.patches.music.playservice.is_7_33_or_greater
import app.revanced.patches.music.playservice.is_8_11_or_greater
import app.revanced.patches.music.playservice.is_8_15_or_greater
import app.revanced.patches.music.playservice.versionCheckPatch
import app.revanced.patches.shared.misc.spoof.spoofVideoStreamsPatch
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/music/patches/spoof/SpoofVideoStreamsPatch;"
val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
fixMediaFetchHotConfigChanges = { true },
fixMediaFetchHotConfigAlternativeChanges = { is_8_11_or_greater && !is_8_15_or_greater },
fixParsePlaybackResponseFeatureFlag = { is_7_33_or_greater },
block = {
compatibleWith(
"com.google.android.apps.youtube.music"(
@@ -14,9 +22,12 @@ val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
)
)
dependsOn(versionCheckPatch, userAgentClientSpoofPatch)
dependsOn(sharedExtensionPatch, versionCheckPatch, userAgentClientSpoofPatch)
},
fixMediaFetchHotConfigChanges = { true },
fixMediaFetchHotConfigAlternativeChanges = { is_8_11_or_greater && !is_8_15_or_greater },
fixParsePlaybackResponseFeatureFlag = { is_7_33_or_greater }
executeBlock = {
musicActivityOnCreateFingerprint.method.addInstruction(
1, // Must use 1 index so context is set by extension patch.
"invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->setClientOrderToUse()V"
)
}
)

View File

@@ -43,7 +43,7 @@ fun spoofVideoStreamsPatch(
) {
block()
dependsOn(sharedExtensionPatch, addResourcesPatch)
dependsOn(addResourcesPatch)
execute {
// region Enable extension helper method used by other patches

View File

@@ -187,11 +187,16 @@ val customThemePatch = resourcePatch(
}
// Login screen gradient.
document("res/drawable/start_screen_gradient.xml").use { document ->
val gradientNode = document.getElementsByTagName("gradient").item(0) as Element
try {
document("res/drawable/start_screen_gradient.xml").use { document ->
val gradientNode = document.getElementsByTagName("gradient").item(0) as Element
gradientNode.setAttribute("android:startColor", "@color/gray_7")
gradientNode.setAttribute("android:endColor", "@color/gray_7")
gradientNode.setAttribute("android:startColor", "@color/gray_7")
gradientNode.setAttribute("android:endColor", "@color/gray_7")
}
} catch (_: Exception) {
// Fails for 9.0.66+
// printWarn("Failed to locate start_screen_gradient.xml, skipping modification.")
}
}
}

View File

@@ -12,9 +12,9 @@ import app.revanced.util.returnEarly
internal const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/spotify/misc/fix/SpoofClientPatch;"
@Deprecated("Patch no longer functions")
@Suppress("unused")
val spoofClientPatch = bytecodePatch(
name = "Spoof client",
description = "Spoofs the client to fix various functions of the app.",
) {
val requestListenerPort by intOption(

View File

@@ -8,7 +8,7 @@ val hideAdsPatch = bytecodePatch(
name = "Hide Ads",
description = "Hides ad banners between chats.",
) {
compatibleWith("com.viber.voip")
compatibleWith("com.viber.voip"("25.9.2.0"))
execute {
// Return 1 (true) indicating ads should be disabled.

View File

@@ -1,5 +1,6 @@
package app.revanced.patches.youtube.misc.spoof
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.shared.misc.settings.preference.ListPreference
import app.revanced.patches.shared.misc.settings.preference.NonInteractivePreference
@@ -13,56 +14,70 @@ import app.revanced.patches.youtube.misc.playservice.is_20_14_or_greater
import app.revanced.patches.youtube.misc.playservice.versionCheckPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.patches.youtube.shared.mainActivityOnCreateFingerprint
val spoofVideoStreamsPatch = spoofVideoStreamsPatch({
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"19.47.53",
"20.07.39",
"20.12.46",
"20.13.41",
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/spoof/SpoofVideoStreamsPatch;"
val spoofVideoStreamsPatch = spoofVideoStreamsPatch(
block = {
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"19.47.53",
"20.07.39",
"20.12.46",
"20.13.41",
)
)
)
dependsOn(
userAgentClientSpoofPatch,
settingsPatch,
versionCheckPatch
)
}, {
is_19_34_or_greater
}, {
// In 20.14 the flag was merged with 20.03 start playback flag.
is_20_10_or_greater && !is_20_14_or_greater
}, {
is_20_03_or_greater
}, {
addResources("youtube", "misc.fix.playback.spoofVideoStreamsPatch")
dependsOn(
userAgentClientSpoofPatch,
settingsPatch,
versionCheckPatch
)
},
fixMediaFetchHotConfigChanges = {
is_19_34_or_greater
},
fixMediaFetchHotConfigAlternativeChanges = {
// In 20.14 the flag was merged with 20.03 start playback flag.
is_20_10_or_greater && !is_20_14_or_greater
},
fixParsePlaybackResponseFeatureFlag = {
is_20_03_or_greater
},
executeBlock = {
addResources("youtube", "misc.fix.playback.spoofVideoStreamsPatch")
PreferenceScreen.MISC.addPreferences(
PreferenceScreenPreference(
key = "revanced_spoof_video_streams_screen",
sorting = PreferenceScreenPreference.Sorting.UNSORTED,
preferences = setOf(
SwitchPreference("revanced_spoof_video_streams"),
ListPreference("revanced_spoof_video_streams_client_type"),
NonInteractivePreference(
// Requires a key and title but the actual text is chosen at runtime.
key = "revanced_spoof_video_streams_about_android",
tag = "app.revanced.extension.youtube.settings.preference.SpoofStreamingDataSideEffectsPreference"
PreferenceScreen.MISC.addPreferences(
PreferenceScreenPreference(
key = "revanced_spoof_video_streams_screen",
sorting = PreferenceScreenPreference.Sorting.UNSORTED,
preferences = setOf(
SwitchPreference("revanced_spoof_video_streams"),
ListPreference("revanced_spoof_video_streams_client_type"),
NonInteractivePreference(
// Requires a key and title but the actual text is chosen at runtime.
key = "revanced_spoof_video_streams_about_android",
tag = "app.revanced.extension.youtube.settings.preference.SpoofStreamingDataSideEffectsPreference"
),
ListPreference(
key = "revanced_spoof_video_streams_language",
// Language strings are declared in Setting patch.
entriesKey = "revanced_language_entries",
entryValuesKey = "revanced_language_entry_values",
tag = "app.revanced.extension.shared.settings.preference.SortedListPreference"
),
SwitchPreference("revanced_spoof_video_streams_ios_force_avc"),
SwitchPreference("revanced_spoof_streaming_data_stats_for_nerds"),
),
ListPreference(
key = "revanced_spoof_video_streams_language",
// Language strings are declared in Setting patch.
entriesKey = "revanced_language_entries",
entryValuesKey = "revanced_language_entry_values",
tag = "app.revanced.extension.shared.settings.preference.SortedListPreference"
),
SwitchPreference("revanced_spoof_video_streams_ios_force_avc"),
SwitchPreference("revanced_spoof_streaming_data_stats_for_nerds"),
),
),
)
})
)
mainActivityOnCreateFingerprint.method.addInstruction(
1, // Must use 1 index so context is set by extension patch.,
"invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->setClientOrderToUse()V"
)
}
)

View File

@@ -96,13 +96,13 @@ Toca el botón continuar y permite los cambios de optimización."</string>
<string name="revanced_settings_screen_07_seekbar_title">Barra de progreso</string>
<string name="revanced_settings_screen_08_swipe_controls_title">Controles de deslizamiento</string>
<string name="revanced_settings_screen_11_misc_title">Otros</string>
<string name="revanced_settings_screen_12_video_title">Video</string>
<string name="revanced_settings_screen_12_video_title">Vídeo</string>
<string name="revanced_restore_old_settings_menus_title">Restaurar menús de configuración antiguos</string>
<string name="revanced_restore_old_settings_menus_summary_on">Se muestran los menús de configuración antiguos</string>
<string name="revanced_restore_old_settings_menus_summary_off">No se muestran los menús de configuración antiguos</string>
<string name="revanced_restore_old_settings_menus_summary_on">Los menús de configuración antiguos son visibles</string>
<string name="revanced_restore_old_settings_menus_summary_off">Los menús de configuración antiguos están ocultos</string>
<string name="revanced_settings_search_history_title">Mostrar el historial de búsqueda de ajustes</string>
<string name="revanced_settings_search_history_summary_on">El historial de búsqueda de los ajustes es visible</string>
<string name="revanced_settings_search_history_summary_off">El historial de búsqueda de ajustes no se muestra</string>
<string name="revanced_settings_search_history_summary_on">El historial de búsqueda de los ajustes es visible</string>
<string name="revanced_settings_search_history_summary_off">El historial de búsqueda de ajustes está oculto</string>
</patch>
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
<string name="revanced_shorts_disable_background_playback_title">Desactivar la reproducción en segundo plano de Shorts</string>
@@ -151,19 +151,19 @@ No se le notificará de ningún evento inesperado."</string>
<string name="revanced_hide_artist_cards_summary_off">Se muestran las tarjetas de artista</string>
<string name="revanced_hide_chips_shelf_title">Ocultar \"Más como esto\"</string>
<string name="revanced_hide_chips_shelf_summary_on">\"Más como esto\" está oculto</string>
<string name="revanced_hide_chips_shelf_summary_off">\"Más como esto\" está habilitado</string>
<string name="revanced_hide_chips_shelf_summary_off">\"Más como esto\" es visible</string>
<string name="revanced_hide_community_posts_title">Ocultar publicaciones de comunidad</string>
<string name="revanced_hide_community_posts_summary_on">Las publicaciones de la comunidad están ocultas</string>
<string name="revanced_hide_community_posts_summary_off">Se muestran las publicaciones de la comunidad</string>
<string name="revanced_hide_community_posts_summary_off">Las publicaciones de la comunidad se muestran</string>
<string name="revanced_hide_compact_banner_title">Ocultar banners compactos</string>
<string name="revanced_hide_compact_banner_summary_on">Los banners compactos están ocultos</string>
<string name="revanced_hide_compact_banner_summary_off">Se muestran los banners compactos</string>
<string name="revanced_hide_crowdfunding_box_title">Ocultar caja de Crowdfunding</string>
<string name="revanced_hide_crowdfunding_box_summary_on">La caja de Crowdfunding está oculta</string>
<string name="revanced_hide_crowdfunding_box_summary_off">La caja de Crowdfunding es visible</string>
<string name="revanced_hide_crowdfunding_box_summary_off">La caja de Crowdfunding es visible</string>
<string name="revanced_hide_expandable_card_title">Ocultar tarjeta expandible</string>
<string name="revanced_hide_expandable_card_summary_on">Tarjeta expandible debajo de los videos oculta</string>
<string name="revanced_hide_expandable_card_summary_off">Tarjeta expandible debajo de los videos visible</string>
<string name="revanced_hide_expandable_card_summary_on">La tarjeta expandible debajo de los vídeos está oculta</string>
<string name="revanced_hide_expandable_card_summary_off">La tarjeta expandible debajo de los vídeos es visible</string>
<string name="revanced_hide_floating_microphone_button_title">Ocultar botón de micrófono flotante</string>
<string name="revanced_hide_floating_microphone_button_summary_on">El botón flotante del micrófono en la búsqueda está oculto</string>
<string name="revanced_hide_floating_microphone_button_summary_off">Se muestra el botón flotante del micrófono en la búsqueda</string>
@@ -175,42 +175,42 @@ No se le notificará de ningún evento inesperado."</string>
• Más relevantes
• Compras
• Ver de nuevo"</string>
<string name="revanced_hide_horizontal_shelves_summary_off">Los estantes horizontales están visibles</string>
<string name="revanced_hide_horizontal_shelves_summary_off">Los estantes horizontales son visibles</string>
<string name="revanced_hide_image_shelf_title">Ocultar estantería de imágenes</string>
<string name="revanced_hide_image_shelf_summary_on">Estantería de imágenes en los resultados de búsqueda oculta</string>
<string name="revanced_hide_image_shelf_summary_off">Estantería de imágenes en los resultados de búsqueda visible</string>
<string name="revanced_hide_image_shelf_summary_on">La estantería de imágenes en los resultados de búsqueda está oculta</string>
<string name="revanced_hide_image_shelf_summary_off">La estantería de imágenes en los resultados de búsqueda es visible</string>
<string name="revanced_hide_latest_posts_title">Ocultar últimas publicaciones</string>
<string name="revanced_hide_latest_posts_summary_on">Las últimas publicaciones están ocultas</string>
<string name="revanced_hide_latest_posts_summary_off">Se muestran las últimas publicaciones</string>
<string name="revanced_hide_mix_playlists_title">Ocultar lista de reproducción Mix</string>
<string name="revanced_hide_mix_playlists_summary_on">La lista de reproducción Mix está oculta</string>
<string name="revanced_hide_mix_playlists_summary_off">La lista de reproducción Mix es visible</string>
<string name="revanced_hide_mix_playlists_summary_on">Las listas de reproducción Mix están ocultas</string>
<string name="revanced_hide_mix_playlists_summary_off">La lista de reproducción Mix es visible</string>
<string name="revanced_hide_movies_section_title">Ocultar sección de películas</string>
<string name="revanced_hide_movies_section_summary_on">La sección de películas está oculta</string>
<string name="revanced_hide_movies_section_summary_off">La sección de películas es visible</string>
<string name="revanced_hide_movies_section_summary_off">La sección de películas es visible</string>
<!-- 'Notify me' should be translated using the same localized wording YouTube displays.
This item appear in the Subscriptions feed for future livestreams or unreleased videos. -->
<string name="revanced_hide_notify_me_button_title">Ocultar el botón \'Notificarme\'</string>
<string name="revanced_hide_notify_me_button_title">Ocultar el botón \"Notificarme\"</string>
<string name="revanced_hide_notify_me_button_summary_on">El botón Notificarme está oculto</string>
<string name="revanced_hide_notify_me_button_summary_off">El botón Notificarme es visible</string>
<string name="revanced_hide_notify_me_button_summary_off">El botón Notificarme es visible</string>
<string name="revanced_hide_playables_title">Ocultar jugables</string>
<string name="revanced_hide_playables_summary_on">Los jugables están ocultos</string>
<string name="revanced_hide_playables_summary_off">Los jugables están visibles</string>
<string name="revanced_hide_playables_summary_off">Los jugables son visibles</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">Ocultar botón \'Mostrar más\'</string>
<string name="revanced_hide_show_more_button_summary_on">El botón Mostrar más en los resultados de búsqueda está oculto</string>
<string name="revanced_hide_show_more_button_summary_off">El botón Mostrar más en los resultados de búsqueda es visible</string>
<string name="revanced_hide_show_more_button_summary_off">El botón Mostrar más en los resultados de búsqueda es visible</string>
<string name="revanced_hide_surveys_title">Ocultar encuestas</string>
<string name="revanced_hide_surveys_summary_on">Las encuestas están ocultas</string>
<string name="revanced_hide_surveys_summary_off">Las encuestas están visibles</string>
<string name="revanced_hide_surveys_summary_off">Las encuestas son visibles</string>
<string name="revanced_hide_ticket_shelf_title">Ocultar estantes de tickets</string>
<string name="revanced_hide_ticket_shelf_summary_on">El estante de tickets está oculto</string>
<string name="revanced_hide_ticket_shelf_summary_off">El estante de boletos es visible</string>
<string name="revanced_hide_ticket_shelf_summary_on">La estantería de tickets está oculta</string>
<string name="revanced_hide_ticket_shelf_summary_off">La estantería de tickets es visible</string>
<!-- 'People also watched' and 'You might also like' should be translated using the same localized wording YouTube displays. -->
<string name="revanced_hide_video_recommendation_labels_title">Ocultar etiquetas de recomendación de vídeo</string>
<string name="revanced_hide_video_recommendation_labels_summary_on">Las etiquetas \"La gente también vio\" y \"También te puede gustar\" en los resultados de búsqueda están ocultas</string>
<string name="revanced_hide_video_recommendation_labels_summary_off">Las etiquetas \"La gente también vio\" y \"También te puede gustar\" en los resultados de búsqueda están visibles</string>
<string name="revanced_hide_video_recommendation_labels_summary_off">Las etiquetas \"La gente también vio\" y \"También te puede gustar\" en los resultados de búsqueda son visibles</string>
<!-- https://logos.fandom.com/wiki/YouTube/Yoodles -->
<string name="revanced_hide_doodles_title">Ocultar YouTube Doodles</string>
<string name="revanced_hide_doodles_summary_on">La animación de los Doodles de YouTube en el logotipo está oculta</string>
@@ -219,10 +219,10 @@ No se le notificará de ningún evento inesperado."</string>
Si un doodle se está mostrando actualmente en tu región y este ajuste de ocultación está activado, la barra de filtro situada debajo de la barra de búsqueda también estará oculta."</string>
<string name="revanced_hide_channel_bar_title">Ocultar barra de canal</string>
<string name="revanced_hide_channel_bar_summary_on">Barra de canales oculta</string>
<string name="revanced_hide_channel_bar_summary_on">La barra de canales está oculta</string>
<string name="revanced_hide_channel_bar_summary_off">Barra de canales mostrada</string>
<string name="revanced_hide_channel_watermark_title">Ocultar marca de agua del canal</string>
<string name="revanced_hide_channel_watermark_summary_on">Marca de agua oculta</string>
<string name="revanced_hide_channel_watermark_summary_on">La marca de agua está oculta</string>
<string name="revanced_hide_channel_watermark_summary_off">Marca de agua mostrada</string>
<string name="revanced_hide_emergency_box_title">Ocultar cajas de emergencia</string>
<string name="revanced_hide_emergency_box_summary_on">Las cajas de emergencia están ocultas</string>
@@ -232,17 +232,17 @@ Si un doodle se está mostrando actualmente en tu región y este ajuste de ocult
<string name="revanced_hide_info_panels_summary_off">Los paneles de información se muestran</string>
<!-- 'Join' should be translated using the same localized wording YouTube displays.
This appears in the video player for certain videos. -->
<string name="revanced_hide_join_membership_button_title">Ocultar el botón Unirse</string>
<string name="revanced_hide_join_membership_button_title">Ocultar el botón \"Unirse\"</string>
<string name="revanced_hide_join_membership_button_summary_on">El botón Unirse está oculto</string>
<string name="revanced_hide_join_membership_button_summary_off">El botón Unirse es visible</string>
<string name="revanced_hide_join_membership_button_summary_off">El botón Unirse es visible</string>
<string name="revanced_hide_medical_panels_title">Ocultar paneles médicos</string>
<string name="revanced_hide_medical_panels_summary_on">Los paneles médicos están ocultos</string>
<string name="revanced_hide_medical_panels_summary_off">Se muestran paneles médicos</string>
<string name="revanced_hide_quick_actions_title">Ocultar acciones rápidas</string>
<string name="revanced_hide_quick_actions_summary_on">Acciones rápidas en pantalla completa ocultas</string>
<string name="revanced_hide_quick_actions_summary_on">Las rápidas en pantalla completa están ocultas</string>
<string name="revanced_hide_quick_actions_summary_off">Acciones rápidas en pantalla completa visibles</string>
<string name="revanced_hide_related_videos_title">Ocultar videos relacionados</string>
<string name="revanced_hide_related_videos_summary_on">Videos relacionados en acciones rápidas ocultos</string>
<string name="revanced_hide_related_videos_summary_on">Los vídeos relacionados en acciones rápidas están ocultos</string>
<string name="revanced_hide_related_videos_summary_off">Videos relacionados en acciones rápidas visibles</string>
<string name="revanced_hide_subscribers_community_guidelines_title">Ocultar las directrices para suscriptores</string>
<string name="revanced_hide_subscribers_community_guidelines_summary_on">Las pautas comunitarias de los suscriptores están ocultas</string>
@@ -250,7 +250,7 @@ Si un doodle se está mostrando actualmente en tu región y este ajuste de ocult
<string name="revanced_hide_timed_reactions_title">Ocultar reacciones temporizadas</string>
<string name="revanced_hide_timed_reactions_summary_on">Las reacciones temporizadas están ocultas</string>
<string name="revanced_hide_timed_reactions_summary_off">Se muestran reacciones temporizadas</string>
<string name="revanced_hide_ai_generated_video_summary_section_title">Ocultar \"Resumen de video generado por IA\"</string>
<string name="revanced_hide_ai_generated_video_summary_section_title">Ocultar \"Resumen de vídeo generado por IA\"</string>
<string name="revanced_hide_ai_generated_video_summary_section_summary_on">La sección de resumen de vídeo generada por IA está oculta</string>
<string name="revanced_hide_ai_generated_video_summary_section_summary_off">Sección de resumen de vídeo generada por IA está mostrada</string>
<string name="revanced_hide_ask_section_title">Ocultar pregunta</string>
@@ -285,7 +285,7 @@ Si un doodle se está mostrando actualmente en tu región y este ajuste de ocult
<string name="revanced_hide_filter_bar_feed_in_feed_summary_on">Oculto en feeds</string>
<string name="revanced_hide_filter_bar_feed_in_feed_summary_off">Visible en feeds</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_title">Ocultar en vídeos relacionados</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">Escondido en videos relacionados</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_on">Oculto en vídeos relacionados</string>
<string name="revanced_hide_filter_bar_feed_in_related_videos_summary_off">Mostrar en vídeos relacionados</string>
<string name="revanced_hide_filter_bar_feed_in_search_title">Ocultar en los resultados de búsqueda</string>
<string name="revanced_hide_filter_bar_feed_in_search_summary_on">Oculto en los resultados de búsqueda</string>
@@ -298,29 +298,29 @@ Si un doodle se está mostrando actualmente en tu región y este ajuste de ocult
<!-- 'For You' should be translated using the same localized wording YouTube displays. -->
<string name="revanced_hide_for_you_shelf_title">Ocultar la sección \"Para ti\"</string>
<string name="revanced_hide_for_you_shelf_summary_on">La estantería \"Para ti\" está oculta</string>
<string name="revanced_hide_for_you_shelf_summary_off">La estantería \"Para ti\" es visible</string>
<string name="revanced_hide_for_you_shelf_summary_off">La estantería \"Para ti\" es visible</string>
<string name="revanced_hide_links_preview_title">Ocultar vista previa de enlaces</string>
<string name="revanced_hide_links_preview_summary_on">Vista previa de enlaces oculta</string>
<string name="revanced_hide_links_preview_summary_on">La vista previa de enlaces está oculta</string>
<string name="revanced_hide_links_preview_summary_off">Vista previa de enlaces visible</string>
<string name="revanced_hide_members_shelf_title">Ocultar estantería de miembros</string>
<string name="revanced_hide_members_shelf_summary_on">Estantería de miembros oculta</string>
<string name="revanced_hide_members_shelf_summary_off">El estante de miembros se muestra</string>
<string name="revanced_hide_members_shelf_summary_on">La estantería de miembros está oculta</string>
<string name="revanced_hide_members_shelf_summary_off">La estantería de miembros se muestra</string>
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_community_button_title">Ocultar el botón \"Visitar comunidad\"</string>
<string name="revanced_hide_visit_community_button_summary_on">El botón Visitar comunidad está oculto</string>
<string name="revanced_hide_visit_community_button_summary_off">El botón \"Visitar comunidad\" es visible</string>
<string name="revanced_hide_visit_community_button_summary_off">El botón \"Visitar comunidad\" es visible</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">Ocultar el botón \'Visitar tienda\' en las páginas del canal</string>
<string name="revanced_hide_visit_store_button_summary_on">El botón \"Visitar tienda\" está oculto</string>
<string name="revanced_hide_visit_store_button_summary_off">El botón \"Visitar tienda\" es visible</string>
<string name="revanced_hide_visit_store_button_summary_off">El botón \"Visitar tienda\" es visible</string>
<string name="revanced_comments_screen_title">Comentarios</string>
<string name="revanced_comments_screen_summary">Ocultar o mostrar los componentes de sección de comentarios</string>
<string name="revanced_hide_comments_ai_chat_summary_title">Ocultar resumen de chat de IA</string>
<string name="revanced_hide_comments_ai_chat_summary_summary_on">El resumen del chat de IA está oculto</string>
<string name="revanced_hide_comments_ai_chat_summary_summary_off">El resumen del chat de IA es visible</string>
<string name="revanced_hide_comments_ai_chat_summary_summary_off">El resumen del chat de IA es visible</string>
<string name="revanced_hide_comments_ai_summary_title">Ocultar el resumen de los comentarios de la IA</string>
<string name="revanced_hide_comments_ai_summary_summary_on">El resumen de comentarios de IA está oculto</string>
<string name="revanced_hide_comments_ai_summary_summary_off">El resumen de comentarios de IA es visible</string>
<string name="revanced_hide_comments_ai_summary_summary_off">El resumen de comentarios de IA es visible</string>
<string name="revanced_hide_comments_channel_guidelines_title">Ocultar directrices del canal</string>
<string name="revanced_hide_comments_channel_guidelines_summary_on">Las directrices del canal están ocultas</string>
<string name="revanced_hide_comments_channel_guidelines_summary_off">Las directrices del canal se muestran</string>
@@ -357,14 +357,14 @@ Si un doodle se está mostrando actualmente en tu región y este ajuste de ocult
<string name="revanced_hide_keyword_content_screen_title">Ocultar contenido de palabra clave</string>
<string name="revanced_hide_keyword_content_screen_summary">Ocultar videos de búsqueda y feed usando filtros de palabras clave</string>
<string name="revanced_hide_keyword_content_home_title">Ocultar videos domésticos por palabras clave</string>
<string name="revanced_hide_keyword_content_home_summary_on">Los videos en la pestaña \'Inicio\' son filtrados por palabras clave</string>
<string name="revanced_hide_keyword_content_home_summary_off">Los videos en la pestaña \'Inicio\' no son filtrados por palabras clave</string>
<string name="revanced_hide_keyword_content_home_summary_on">Los vídeos en la pestaña \'Inicio\' son filtrados por palabras clave</string>
<string name="revanced_hide_keyword_content_home_summary_off">Los vídeos en la pestaña \'Inicio\' no son filtrados por palabras clave</string>
<string name="revanced_hide_keyword_content_search_title">Ocultar resultados de búsqueda por palabras clave</string>
<string name="revanced_hide_keyword_content_search_summary_on">Los resultados de la búsqueda son filtrados por palabras clave</string>
<string name="revanced_hide_keyword_content_search_summary_off">Los resultados de la búsqueda no son filtrados por palabras clave</string>
<string name="revanced_hide_keyword_content_subscriptions_title">Ocultar vídeos de suscripción por palabras clave</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_on">Los videos en la pestaña \'Suscripciones\' son filtrados por palabras clave</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_off">Los videos en la pestaña \'Suscripciones\' no son filtrados por palabras clave</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_on">Los vídeos en la pestaña \'Suscripciones\' son filtrados por palabras clave</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_off">Los vídeos en la pestaña \'Suscripciones\' no son filtrados por palabras clave</string>
<string name="revanced_hide_keyword_content_phrases_title">Palabras clave a ocultar</string>
<!-- 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.
This is because keywords can be in any language, and showing an example in the localized script helps convey this. -->
@@ -392,11 +392,11 @@ Limitaciones
</patch>
<patch id="ad.general.hideAdsResourcePatch">
<string name="revanced_hide_creator_store_shelf_title">Ocultar estantería de la tienda del creador</string>
<string name="revanced_hide_creator_store_shelf_summary_on">El estante de la tienda del creador debajo del reproductor de vídeo está oculto</string>
<string name="revanced_hide_creator_store_shelf_summary_off">Se muestra el estante de la tienda del creador debajo del reproductor de video</string>
<string name="revanced_hide_creator_store_shelf_summary_on">La estantería de la tienda del creador debajo del reproductor de vídeo está oculta</string>
<string name="revanced_hide_creator_store_shelf_summary_off">La estantería de la tienda del creador debajo del reproductor de vídeo es visible</string>
<string name="revanced_hide_end_screen_store_banner_title">Ocultar banner de la tienda en la pantalla final</string>
<string name="revanced_hide_end_screen_store_banner_summary_on">El banner de la tienda de la pantalla final está oculto</string>
<string name="revanced_hide_end_screen_store_banner_summary_off">El banner de la tienda de la pantalla final es visible</string>
<string name="revanced_hide_end_screen_store_banner_summary_off">El banner de la tienda de la pantalla final es visible</string>
<string name="revanced_hide_fullscreen_ads_title">Ocultar anuncios a pantalla completa</string>
<string name="revanced_hide_fullscreen_ads_summary_on">"Los anuncios a pantalla completa están ocultos
@@ -421,7 +421,7 @@ Esta función solo está disponible para dispositivos antiguos"</string>
<string name="revanced_hide_shopping_links_summary_off">Se muestran los enlaces de compras en la descripción del video</string>
<string name="revanced_hide_view_products_banner_title">Ocultar el banner \"Ver productos\"</string>
<string name="revanced_hide_view_products_banner_summary_on">El banner \"Ver productos\" en la superposición de vídeo está oculto</string>
<string name="revanced_hide_view_products_banner_summary_off">El banner \"Ver productos\" en la superposición de vídeo es visible</string>
<string name="revanced_hide_view_products_banner_summary_off">El banner \"Ver productos\" en la superposición de vídeo es visible</string>
<string name="revanced_hide_web_search_results_title">Ocultar resultados de búsqueda web</string>
<string name="revanced_hide_web_search_results_summary_on">Los resultados de búsqueda web están ocultos</string>
<string name="revanced_hide_web_search_results_summary_off">Se muestran los resultados de la búsqueda web</string>
@@ -432,7 +432,7 @@ Esta función solo está disponible para dispositivos antiguos"</string>
<string name="revanced_hide_get_premium_summary_off">Se muestran las promociones de YouTube Premium en el reproductor de vídeo</string>
</patch>
<patch id="ad.video.videoAdsPatch">
<string name="revanced_hide_video_ads_title">Ocultar anuncios de video</string>
<string name="revanced_hide_video_ads_title">Ocultar anuncios de vídeo</string>
<string name="revanced_hide_video_ads_summary_on">Los anuncios de vídeo están ocultos</string>
<string name="revanced_hide_video_ads_summary_off">Los anuncios de vídeo se muestran</string>
</patch>
@@ -463,7 +463,7 @@ Esta función solo está disponible para dispositivos antiguos"</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_off">El doble toque puede ocasionalmente activar un salto al capítulo siguiente/anterior</string>
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
<string name="revanced_external_downloader_screen_title">Descargas externa</string>
<string name="revanced_external_downloader_screen_title">Descargas externas</string>
<string name="revanced_external_downloader_screen_summary">Configuración para el uso de un descargador externo</string>
<string name="revanced_external_downloader_title">Mostrar botón externo de descarga</string>
<string name="revanced_external_downloader_summary_on">Se muestra el botón de descarga en el reproductor</string>
@@ -486,7 +486,7 @@ Verifica que el nombre del paquete sea correcto y que la aplicación esté insta
<patch id="interaction.seekbar.disablePreciseSeekingGesturePatch">
<string name="revanced_disable_precise_seeking_gesture_title">Desactivar gesto de búsqueda preciso</string>
<string name="revanced_disable_precise_seeking_gesture_summary_on">El gesto está desactivado</string>
<string name="revanced_disable_precise_seeking_gesture_summary_off">Gesto habilitado</string>
<string name="revanced_disable_precise_seeking_gesture_summary_off">Gesto activado</string>
</patch>
<patch id="interaction.seekbar.enableSeekbarTappingPatch">
<string name="revanced_seekbar_tapping_title">Habilitar tocar para buscar</string>
@@ -495,7 +495,7 @@ Verifica que el nombre del paquete sea correcto y que la aplicación esté insta
</patch>
<patch id="interaction.swipecontrols.swipeControlsResourcePatch">
<string name="revanced_swipe_brightness_title">Activar gesto de brillo</string>
<string name="revanced_swipe_brightness_summary_on">"El deslizamiento de brillo a pantalla completa está habilitado
<string name="revanced_swipe_brightness_summary_on">"El deslizamiento de brillo a pantalla completa está activado
Ajusta el brillo deslizando verticalmente en el lado izquierdo de la pantalla"</string>
<string name="revanced_swipe_brightness_summary_off">El deslizamiento de brillo a pantalla completa está desactivado</string>
@@ -584,11 +584,11 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"</s
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Ocultar Hype</string>
<string name="revanced_hide_hype_button_summary_on">El botón Hype está oculto</string>
<string name="revanced_hide_hype_button_summary_off">El botón de hype es visible</string>
<string name="revanced_hide_hype_button_summary_off">El botón de hype es visible</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Ocultar pestaña \'Promocionar\'</string>
<string name="revanced_hide_promote_button_summary_on">El botón de Promocionar está oculto</string>
<string name="revanced_hide_promote_button_summary_off">El botón de Promocionar es visible</string>
<string name="revanced_hide_promote_button_summary_off">El botón de Promocionar es visible</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Ocultar Gracias</string>
<string name="revanced_hide_thanks_button_summary_on">El botón de gracias está oculto</string>
@@ -633,14 +633,14 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"</s
<string name="revanced_switch_create_with_notifications_button_title">Cambiar botón Crear con el de Notificaciones</string>
<string name="revanced_switch_create_with_notifications_button_summary_on">"El botón Crear se cambia por el botón Notificaciones
Nota: Habilitar esto también ocultará forzosamente los anuncios de video"</string>
Nota: Habilitar esto también ocultará forzosamente los anuncios de vídeo"</string>
<string name="revanced_switch_create_with_notifications_button_summary_off">El botón Crear no se cambia con el botón de notificaciones</string>
<string name="revanced_switch_create_with_notifications_button_user_dialog_message">"Deshabilitar este ajuste también deshabilitará el bloqueo de anuncios de Shorts.
Si cambiar este ajuste no tiene efecto, intenta cambiar al modo incógnito."</string>
<string name="revanced_hide_navigation_button_labels_title">Ocultar etiquetas de navegación</string>
<string name="revanced_hide_navigation_button_labels_summary_on">Las etiquetas están ocultas</string>
<string name="revanced_hide_navigation_button_labels_summary_off">Las etiquetas están visibles</string>
<string name="revanced_hide_navigation_button_labels_summary_off">Las etiquetas son visibles</string>
<string name="revanced_disable_translucent_status_bar_title">Desactivar la barra de estado translúcida</string>
<string name="revanced_disable_translucent_status_bar_summary_on">La barra de estado es opaca</string>
<string name="revanced_disable_translucent_status_bar_summary_off">La barra de estado es opaca o translúcida</string>
@@ -669,7 +669,7 @@ Si cambiar este ajuste no tiene efecto, intenta cambiar al modo incógnito."</st
<string name="revanced_hide_player_flyout_sleep_timer_summary_off">El menú de temporizador de sueño se muestra</string>
<!-- 'Loop video' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_loop_video_title">Ocultar video de bucle</string>
<string name="revanced_hide_player_flyout_loop_video_summary_on">El menú de video en bucle está oculto</string>
<string name="revanced_hide_player_flyout_loop_video_summary_on">El menú de vídeo en bucle está oculto</string>
<string name="revanced_hide_player_flyout_loop_video_summary_off">El menú de vídeo en bucle se muestra</string>
<!-- 'Ambient mode' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_ambient_mode_title">Ocultar Modo ambiente</string>
@@ -702,14 +702,14 @@ Si cambiar este ajuste no tiene efecto, intenta cambiar al modo incógnito."</st
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<string name="revanced_hide_player_flyout_audio_track_not_available">"El menú de la pista de audio está oculto.
Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de video\" a iOS TV"</string>
Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de vídeo\" a iOS TV"</string>
<!-- 'Watch in VR' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_watch_in_vr_title">Ocultar reloj en VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Ver en el menú VR está oculto</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Ver en el menú VR se muestra</string>
<string name="revanced_hide_player_flyout_video_quality_title">Ocultar menú de calidad de vídeo</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">El menú de calidad de video está oculto</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">El menú de calidad de video es visible</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">El menú de calidad de vídeo está oculto</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">El menú de calidad de vídeo es visible</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Ocultar pie de página del menú de calidad de vídeo</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Pie de menú de calidad de vídeo oculto</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">El pie del menú de calidad de vídeo se muestra</string>
@@ -745,7 +745,7 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de
<patch id="layout.hide.infocards.hideInfocardsResourcePatch">
<string name="revanced_hide_info_cards_title">Ocultar tarjetas de información</string>
<string name="revanced_hide_info_cards_summary_on">Las tarjetas de información están ocultas</string>
<string name="revanced_hide_info_cards_summary_off">Las tarjetas de información están visibles</string>
<string name="revanced_hide_info_cards_summary_off">Las tarjetas de información son visibles</string>
</patch>
<patch id="layout.hide.rollingnumber.disableRollingNumberAnimationPatch">
<string name="revanced_disable_rolling_number_animations_title">Desactivar animaciones de número de rodamiento</string>
@@ -759,7 +759,7 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de
<!-- Seekbar shown inside video thumbnails found the home/feed/search/history. The seekbar shows the prior watch progress when the video was last open. -->
<string name="revanced_hide_seekbar_thumbnail_title">Ocultar barra de búsqueda de miniaturas de vídeo</string>
<string name="revanced_hide_seekbar_thumbnail_summary_on">La barra de búsqueda de miniaturas de vídeo está oculta</string>
<string name="revanced_hide_seekbar_thumbnail_summary_off">La barra de búsqueda de miniaturas de vídeo es visible</string>
<string name="revanced_hide_seekbar_thumbnail_summary_off">La barra de búsqueda de miniaturas de vídeo es visible</string>
</patch>
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
<string name="revanced_shorts_player_screen_title">Reproductor de Shorts</string>
@@ -780,10 +780,10 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de
<string name="revanced_hide_shorts_history_summary_off">Mostrado en el historial de visualización</string>
<string name="revanced_hide_shorts_super_thanks_button_title">Ocultar el botón Comprar Súper Gracias</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_on">El botón Comprar Super Thanks está oculto</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_off">El botón Comprar Super Thanks es visible</string>
<string name="revanced_hide_shorts_super_thanks_button_summary_off">El botón Comprar Super Thanks es visible</string>
<string name="revanced_hide_shorts_effect_button_title">Ocultar botón de efecto</string>
<string name="revanced_hide_shorts_effect_button_summary_on">El botón de efecto está oculto</string>
<string name="revanced_hide_shorts_effect_button_summary_off">El botón de efecto es visible</string>
<string name="revanced_hide_shorts_effect_button_summary_off">El botón de efecto es visible</string>
<string name="revanced_hide_shorts_green_screen_button_title">Ocultar el botón Pantalla verde</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">El botón verde de pantalla está oculto</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">Se muestra el botón verde de pantalla</string>
@@ -829,7 +829,7 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de
<string name="revanced_hide_shorts_upcoming_button_summary_off">Se muestra el botón próximo</string>
<string name="revanced_hide_shorts_use_sound_button_title">Ocultar el botón Usar este sonido</string>
<string name="revanced_hide_shorts_use_sound_button_summary_on">El botón Usar este sonido está oculto</string>
<string name="revanced_hide_shorts_use_sound_button_summary_off">El botón Usar este sonido es visible</string>
<string name="revanced_hide_shorts_use_sound_button_summary_off">El botón Usar este sonido es visible</string>
<string name="revanced_hide_shorts_use_template_button_title">Ocultar botón Usar esta plantilla</string>
<string name="revanced_hide_shorts_use_template_button_summary_on">El botón Usar esta plantilla está oculto</string>
<string name="revanced_hide_shorts_use_template_button_summary_off">El botón Usar esta plantilla se muestra</string>
@@ -864,16 +864,16 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de
<string name="revanced_hide_shorts_channel_bar_summary_off">Barra de canales mostrada</string>
<string name="revanced_hide_shorts_video_title_title">Ocultar título de vídeo</string>
<string name="revanced_hide_shorts_video_title_summary_on">El título del vídeo está oculto</string>
<string name="revanced_hide_shorts_video_title_summary_off">El título del vídeo es visible</string>
<string name="revanced_hide_shorts_video_title_summary_off">El título del vídeo es visible</string>
<string name="revanced_hide_shorts_sound_metadata_label_title">Ocultar etiqueta de metadatos de sonido</string>
<string name="revanced_hide_shorts_sound_metadata_label_summary_on">La etiqueta de metadatos de sonido está oculta</string>
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">La etiqueta de metadatos de sonido es visible</string>
<string name="revanced_hide_shorts_sound_metadata_label_summary_off">La etiqueta de metadatos de sonido es visible</string>
<string name="revanced_hide_shorts_full_video_link_label_title">Ocultar la etiqueta del enlace del video</string>
<string name="revanced_hide_shorts_full_video_link_label_summary_on">Etiqueta de enlace de vídeo oculto</string>
<string name="revanced_hide_shorts_full_video_link_label_summary_off">Etiqueta de enlace de vídeo mostrada</string>
<string name="revanced_hide_shorts_navigation_bar_title">Ocultar barra de navegación</string>
<string name="revanced_hide_shorts_navigation_bar_summary_on">La barra de navegación está oculta</string>
<string name="revanced_hide_shorts_navigation_bar_summary_off">La barra de navegación es visible</string>
<string name="revanced_hide_shorts_navigation_bar_summary_off">La barra de navegación es visible</string>
</patch>
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
<string name="revanced_end_screen_suggested_video_title">Ocultar el vídeo sugerido de la pantalla final</string>
@@ -886,7 +886,7 @@ Configuración → Reproducción → Reproducir el siguiente vídeo automáticam
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
<string name="revanced_hide_related_videos_overlay_title">Ocultar la superposición de vídeos relacionados</string>
<string name="revanced_hide_related_videos_overlay_summary_on">La superposición de vídeos relacionados en pantalla completa está oculta</string>
<string name="revanced_hide_related_videos_overlay_summary_off">La superposición de vídeos relacionados en pantalla completa es visible</string>
<string name="revanced_hide_related_videos_overlay_summary_off">La superposición de vídeos relacionados en pantalla completa es visible</string>
</patch>
<patch id="layout.hide.time.hideTimestampPatch">
<string name="revanced_hide_timestamp_title">Ocultar fecha y hora de vídeo</string>
@@ -894,9 +894,9 @@ Configuración → Reproducción → Reproducir el siguiente vídeo automáticam
<string name="revanced_hide_timestamp_summary_off">Marca de tiempo mostrada</string>
</patch>
<patch id="layout.panels.popup.playerPopupPanelsPatch">
<string name="revanced_hide_player_popup_panels_title">Ocultar paneles emergentes del jugador</string>
<string name="revanced_hide_player_popup_panels_summary_on">Los paneles emergentes del jugador están ocultos</string>
<string name="revanced_hide_player_popup_panels_summary_off">Se muestran paneles emergentes del jugador</string>
<string name="revanced_hide_player_popup_panels_title">Ocultar paneles emergentes del reproductor</string>
<string name="revanced_hide_player_popup_panels_summary_on">Los paneles emergentes del reproductor están ocultos</string>
<string name="revanced_hide_player_popup_panels_summary_off">Se muestran paneles emergentes del reproductor</string>
</patch>
<patch id="layout.player.fullscreen.exitFullscreenPatch">
<string name="revanced_exit_fullscreen_title">Salir del modo de pantalla completa al final del vídeo</string>
@@ -908,10 +908,10 @@ Configuración → Reproducción → Reproducir el siguiente vídeo automáticam
<patch id="layout.player.fullscreen.openVideosFullscreen">
<string name="revanced_open_videos_fullscreen_portrait_title">Abrir vídeos en el retrato de pantalla completa</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_on">Videos abiertos a pantalla completa</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Los videos no se abren en pantalla completa</string>
<string name="revanced_open_videos_fullscreen_portrait_summary_off">Los vídeos no se abren en pantalla completa</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">Opacidad de superposición del jugador</string>
<string name="revanced_player_overlay_opacity_title">Opacidad de superposición del reproductor</string>
<string name="revanced_player_overlay_opacity_summary">Valor de potencia entre 0-100, donde 0 es transparente</string>
<string name="revanced_player_overlay_opacity_invalid_toast">Opacidad del reproductor debe estar entre 0 y 100</string>
</patch>
@@ -967,7 +967,7 @@ Limitación: Es posible que los Dislikes no aparezcan en el modo de incógnito"<
<patch id="layout.searchbar.wideSearchbarPatch">
<string name="revanced_wide_searchbar_title">Habilitar barra de búsqueda ancha</string>
<string name="revanced_wide_searchbar_summary_on">Barra de búsqueda ancha habilitada</string>
<string name="revanced_wide_searchbar_summary_off">Barra de búsqueda ancha desactivada</string>
<string name="revanced_wide_searchbar_summary_off">La barra de búsqueda ancha está desactivada</string>
</patch>
<patch id="layout.seekbar.seekbarThumbnailsPatch">
<string name="revanced_seekbar_thumbnails_high_quality_title">Habilitar miniaturas de alta calidad</string>
@@ -984,7 +984,7 @@ Esta función funciona mejor con una calidad de vídeo de 720p o inferior y cuan
</patch>
<patch id="layout.sponsorblock.sponsorBlockResourcePatch">
<string name="revanced_sb_enable_sb">Activar SponsorBlock</string>
<string name="revanced_sb_enable_sb_sum">SponsorBlock es un sistema de colaboración abierta para omitir partes molestas de los videos de YouTube</string>
<string name="revanced_sb_enable_sb_sum">SponsorBlock es un sistema de colaboración abierta para omitir partes molestas de los vídeos de YouTube</string>
<string name="revanced_sb_appearance_category">Apariencia</string>
<string name="revanced_sb_enable_voting">Mostrar botón de voto</string>
<string name="revanced_sb_enable_voting_sum_on">Se muestra el botón de voto del segmento</string>
@@ -1038,7 +1038,7 @@ Esta función funciona mejor con una calidad de vídeo de 720p o inferior y cuan
<string name="revanced_sb_toast_on_connection_error_summary_off">Toast no se muestra si SponsorBlock no está disponible</string>
<string name="revanced_sb_general_skipcount">Habilitar rastreo del conteo de saltos</string>
<string name="revanced_sb_general_skipcount_sum_on">Permite que la tabla de clasificación de SponsorBlock sepa cuánto tiempo se ha ahorrado. Un mensaje se envía al tablero de clasificación cada vez que se omite un segmento</string>
<string name="revanced_sb_general_skipcount_sum_off">El rastreo del conteo de saltos no está habilitado</string>
<string name="revanced_sb_general_skipcount_sum_off">El rastreo del conteo de saltos no está activado</string>
<string name="revanced_sb_general_min_duration">Duración mínima del segmento</string>
<string name="revanced_sb_general_min_duration_sum">Los segmentos más cortos que este valor (en segundos) no se mostrarán o se omitirán</string>
<string name="revanced_sb_general_min_duration_invalid">Duración de tiempo no válida</string>
@@ -1357,7 +1357,7 @@ Habilitar esto puede solucionar las imágenes que faltan que están bloqueadas e
<string name="revanced_alt_thumbnail_options_entry_4">Sigue capturando</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">"DeArrow proporciona miniaturas de vídeos de YouTube obtenidas mediante crowdsourcing. Estas miniaturas suelen ser más relevantes que las que proporciona YouTube
Si está habilitado, las URL de los vídeos se enviarán al servidor de la API y no se envían otros datos. Si un vídeo no tiene miniaturas de DeArrow, se mostrarán las originales o las capturas fijas
Si está activado, las URL de los vídeos se enviarán al servidor de la API y no se envían otros datos. Si un vídeo no tiene miniaturas de DeArrow, se mostrarán las originales o las capturas fijas
Toca aquí para obtener más información sobre DeArrow"</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Mostrar un brindis si la API no está disponible</string>
@@ -1449,7 +1449,7 @@ Habilitar esto puede desbloquear calidades de vídeo más altas"</string>
<string name="revanced_force_original_audio_summary_on">Usar el idioma de audio original</string>
<string name="revanced_force_original_audio_summary_off">Utilizando audio predeterminado</string>
<!-- 'Spoof video streams' should be the same translation used for 'revanced_spoof_video_streams_screen_title'. -->
<string name="revanced_force_original_audio_not_available">Para usar esta función, cambia \"Suplantar transmisiones de video\" a iOS TV</string>
<string name="revanced_force_original_audio_not_available">Para usar esta función, cambia \"Suplantar transmisiones de vídeo\" a iOS TV</string>
</patch>
<patch id="video.quality.rememberVideoQualityPatch">
<!-- Translations should use the same text as 'revanced_custom_playback_speeds_auto'. -->
@@ -1457,9 +1457,9 @@ Habilitar esto puede desbloquear calidades de vídeo más altas"</string>
<string name="revanced_remember_video_quality_last_selected_title">Recordar cambios de calidad de vídeo</string>
<string name="revanced_remember_video_quality_last_selected_summary_on">Los cambios de calidad se aplican a todos los vídeos</string>
<string name="revanced_remember_video_quality_last_selected_summary_off">Los cambios de calidad sólo se aplican al vídeo actual</string>
<string name="revanced_remember_video_quality_last_selected_toast_title">Mostrar notificación al cambiar la calidad de video</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">Se muestra una notificación cuando se cambia la calidad de video predeterminada</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">No se muestra una notificación cuando se cambia la calidad de video predeterminada</string>
<string name="revanced_remember_video_quality_last_selected_toast_title">Mostrar notificación al cambiar la calidad de vídeo</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">Se muestra una notificación cuando se cambia la calidad de vídeo predeterminada</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">No se muestra una notificación cuando se cambia la calidad de vídeo predeterminada</string>
<string name="revanced_video_quality_default_wifi_title">Calidad de vídeo predeterminada en la red Wi-Fi</string>
<string name="revanced_video_quality_default_mobile_title">Calidad de vídeo predeterminada en la red móvil</string>
<string name="revanced_remember_shorts_quality_last_selected_title">Recordar cambios en la calidad de Shorts</string>
@@ -1478,14 +1478,14 @@ Habilitar esto puede desbloquear calidades de vídeo más altas"</string>
<string name="revanced_playback_speed_dialog_button_summary_off">El botón no se muestra</string>
</patch>
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Mostrar botón de calidad de video</string>
<string name="revanced_video_quality_dialog_button_title">Mostrar botón de calidad de vídeo</string>
<string name="revanced_video_quality_dialog_button_summary_on">Botón visible. Toca y mantén para restablecer la calidad a los valores predeterminados</string>
<string name="revanced_video_quality_dialog_button_summary_off">Botón no visible</string>
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
<string name="revanced_custom_speed_menu_title">Menú de velocidad de reproducción personalizada</string>
<string name="revanced_custom_speed_menu_summary_on">Menú de velocidad personalizado se muestra</string>
<string name="revanced_custom_speed_menu_summary_off">Menú de velocidad personalizado no se muestra</string>
<string name="revanced_custom_speed_menu_summary_on">El menú de velocidad personalizada se muestra</string>
<string name="revanced_custom_speed_menu_summary_off">El menú de velocidad personalizada no se muestra</string>
<string name="revanced_restore_old_speed_menu_title">Restaurar el menú de velocidad de reproducción antiguo</string>
<string name="revanced_restore_old_speed_menu_summary_on">Se muestra el menú de velocidad antiguo</string>
<string name="revanced_restore_old_speed_menu_summary_off">Se muestra el menú de velocidad moderno</string>
@@ -1520,7 +1520,7 @@ Habilitar esto puede desbloquear calidades de vídeo más altas"</string>
<patch id="interaction.seekbar.enableSlideToSeekPatch">
<string name="revanced_slide_to_seek_title">Habilitar diapositiva para buscar</string>
<string name="revanced_slide_to_seek_summary_on">Deslizar para buscar está activado</string>
<string name="revanced_slide_to_seek_summary_off">Slide to seek no está habilitado</string>
<string name="revanced_slide_to_seek_summary_off">Slide to seek no está activado</string>
</patch>
<patch id="misc.fix.playback.spoofVideoStreamsPatch">
<string name="revanced_spoof_video_streams_screen_title">Falsificación del stream de vídeo</string>
@@ -1533,21 +1533,21 @@ Es posible que la reproducción de vídeo no funcione"</string>
<string name="revanced_spoof_video_streams_user_dialog_message">Desactivar esta configuración puede causar problemas de reproducción de vídeo.</string>
<string name="revanced_spoof_video_streams_client_type_title">Cliente por defecto</string>
<string name="revanced_spoof_video_streams_ios_force_avc_title">Forzar iOS AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">El códec de video se fuerza a AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">El códec de video se determina automáticamente</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_on">El códec de vídeo se fuerza a AVC (H.264)</string>
<string name="revanced_spoof_video_streams_ios_force_avc_summary_off">El códec de vídeo se determina automáticamente</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"Habilitar esto puede mejorar la duración de la batería y solucionar el tartamudeo de la reproducción.
AVC tiene una resolución máxima de 1080p, el códec de audio Opus no está disponible y la reproducción de video utilizará más datos de Internet que VP9 o AV1."</string>
AVC tiene una resolución máxima de 1080p, el códec de audio Opus no está disponible y la reproducción de vídeo utilizará más datos de Internet que VP9 o AV1."</string>
<string name="revanced_spoof_video_streams_about_ios_tv_title">Efectos secundarios de la suplantación de iOS</string>
<string name="revanced_spoof_video_streams_about_ios_tv_summary">"• Es posible que las películas o los videos pagos no se reproduzcan
<string name="revanced_spoof_video_streams_about_ios_tv_summary">"• Es posible que las películas o los vídeos pagos no se reproduzcan
• El volumen estable no está disponible
• Los videos terminan 1 segundo antes"</string>
• Los vídeos terminan 1 segundo antes"</string>
<string name="revanced_spoof_video_streams_about_android_title">Efectos secundarios de la suplantación de Android</string>
<string name="revanced_spoof_video_streams_about_android_summary">"• Falta el menú de la pista de audio
• El volumen estable no está disponible
• Forzar el audio original no está disponible"</string>
<string name="revanced_spoof_video_streams_about_no_av1">• No AV1 códec de vídeo</string>
<string name="revanced_spoof_video_streams_about_kids_videos">• Es posible que los videos infantiles no se reproduzcan cuando se cierra la sesión o se está en modo incógnito</string>
<string name="revanced_spoof_video_streams_about_kids_videos">• Es posible que los vídeos infantiles no se reproduzcan cuando se cierra la sesión o se está en modo incógnito</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_title">Mostrar en Estadísticas para nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_on">El tipo de cliente se muestra en Estadísticas para nerds</string>
<string name="revanced_spoof_streaming_data_stats_for_nerds_summary_off">El cliente está oculto en Estadísticas para nerds</string>
@@ -1588,7 +1588,7 @@ AVC tiene una resolución máxima de 1080p, el códec de audio Opus no está dis
<patch id="debug.debugModePatch">
<!-- Twitch specific internal debug mode, and not the same as 'revanced_debug_title'. -->
<string name="revanced_twitch_debug_mode_title">Activar modo de depuración de Twitch</string>
<string name="revanced_twitch_debug_mode_summary_on">El modo de depuración de Twitch está habilitado (no recomendado)</string>
<string name="revanced_twitch_debug_mode_summary_on">El modo de depuración de Twitch está activado (no recomendado)</string>
<string name="revanced_twitch_debug_mode_summary_off">El modo de depuración de Twitch está desactivado</string>
</patch>
<patch id="misc.settings.settingsPatch">

View File

@@ -1078,7 +1078,7 @@ Id pengguna Anda seperti kata sandi dan jangan pernah dibagikan."</string>
<string name="revanced_sb_segments_hook_sum">Trailer yang dinarasikan untuk video mendatang, sapaan, dan perpisahan. Tidak termasuk bagian yang menambahkan konten tambahan</string>
<string name="revanced_sb_segments_preview">Pratinjau / Rekap</string>
<string name="revanced_sb_segments_preview_sum">Kumpulan klip yang menunjukkan apa yang akan datang atau apa yang terjadi di video atau di video lain dari sebuah seri, di mana semua informasi diulang di tempat lain</string>
<string name="revanced_sb_segments_filler">Penyimpangan / Lelucon</string>
<string name="revanced_sb_segments_filler">Singgungan / Lelucon</string>
<string name="revanced_sb_segments_filler_sum">Adegan atau lelucon sampingan yang tidak diperlukan untuk memahami konten utama video. Tidak termasuk bagian yang memberikan konteks atau detail latar belakang</string>
<string name="revanced_sb_segments_nomusic">Musik: Bagian Non-Musik</string>
<string name="revanced_sb_segments_nomusic_sum">Hanya untuk digunakan pada video musik. Bagian video musik tanpa musiknya, yang belum tercakup dalam kategori lain</string>
@@ -1092,11 +1092,11 @@ Id pengguna Anda seperti kata sandi dan jangan pernah dibagikan."</string>
<string name="revanced_sb_skip_button_intro_middle">Lewati jeda</string>
<string name="revanced_sb_skip_button_intro_end">Lewati jeda</string>
<string name="revanced_sb_skip_button_outro">Lewati outro</string>
<string name="revanced_sb_skip_button_hook">Lewati hook</string>
<string name="revanced_sb_skip_button_hook">Lewati pengantar</string>
<string name="revanced_sb_skip_button_preview_beginning">Lewati pratinjau</string>
<string name="revanced_sb_skip_button_preview_middle">Lewati pratinjau</string>
<string name="revanced_sb_skip_button_preview_end">Lewati rekap</string>
<string name="revanced_sb_skip_button_filler">Lewati penyimpangan</string>
<string name="revanced_sb_skip_button_filler">Lewati singgungan</string>
<string name="revanced_sb_skip_button_nomusic">Lewati non-musik</string>
<string name="revanced_sb_skip_button_unsubmitted">Lewati segmen</string>
<string name="revanced_sb_skipped_sponsor">Sponsor dilewati</string>
@@ -1107,11 +1107,11 @@ Id pengguna Anda seperti kata sandi dan jangan pernah dibagikan."</string>
<string name="revanced_sb_skipped_intro_middle">Jeda dilewati</string>
<string name="revanced_sb_skipped_intro_end">Jeda dilewati</string>
<string name="revanced_sb_skipped_outro">Outro dilewati</string>
<string name="revanced_sb_skipped_hook">Hook dilewati</string>
<string name="revanced_sb_skipped_hook">Sapaan dilewati</string>
<string name="revanced_sb_skipped_preview_beginning">Pratinjau dilewati</string>
<string name="revanced_sb_skipped_preview_middle">Pratinjau dilewati</string>
<string name="revanced_sb_skipped_preview_end">Rekap dilewati</string>
<string name="revanced_sb_skipped_filler">Penyimpangan dilewati</string>
<string name="revanced_sb_skipped_filler">Singgungan dilewati</string>
<string name="revanced_sb_skipped_nomusic">Melewati bagian non-musik</string>
<string name="revanced_sb_skipped_unsubmitted">Melewati segmen yang belum dikirim</string>
<string name="revanced_sb_skipped_multiple_segments">Beberapa segmen dilewati</string>

View File

@@ -1077,7 +1077,7 @@ Second \"item\" text"</string>
<string name="revanced_sb_segments_intro_sum">Интервал без фактического содержания. Может быть паузой, статическим кадром или повторяющейся анимацией. Не включает переходы, содержащие информацию</string>
<string name="revanced_sb_segments_outro">Конечные заставки / Титры</string>
<string name="revanced_sb_segments_outro_sum">Титры или время появления конечных заставок YouTube. Не для выводов с информацией</string>
<string name="revanced_sb_segments_hook">Вступление / Приветствия</string>
<string name="revanced_sb_segments_hook">Вступление / Приветствие</string>
<string name="revanced_sb_segments_hook_sum">Трейлеры с закадровым голосом для предстоящего видео, приветствия и прощания. Не включает разделы, добавляющие дополнительный контент</string>
<string name="revanced_sb_segments_preview">Предпросмотр / Пересказ</string>
<string name="revanced_sb_segments_preview_sum">Фрагменты, повторяющие текущее видео или предыдущие серии</string>
@@ -1095,11 +1095,11 @@ Second \"item\" text"</string>
<string name="revanced_sb_skip_button_intro_middle">Пропустить паузу</string>
<string name="revanced_sb_skip_button_intro_end">Пропустить паузу</string>
<string name="revanced_sb_skip_button_outro">Пропустить концовку</string>
<string name="revanced_sb_skip_button_hook">Пропустить завязку</string>
<string name="revanced_sb_skip_button_hook">Пропустить вступление</string>
<string name="revanced_sb_skip_button_preview_beginning">Пропустить предпросмотр</string>
<string name="revanced_sb_skip_button_preview_middle">Пропустить предпросмотр</string>
<string name="revanced_sb_skip_button_preview_end">Пропустить пересказ</string>
<string name="revanced_sb_skip_button_filler">Пропустить отступление</string>
<string name="revanced_sb_skip_button_filler">Пропустить отвлеченные темы</string>
<string name="revanced_sb_skip_button_nomusic">Пропустить сегмент без музыки</string>
<string name="revanced_sb_skip_button_unsubmitted">Пропустить сегмент</string>
<string name="revanced_sb_skipped_sponsor">Спонсорская реклама пропущена</string>
@@ -1110,11 +1110,11 @@ Second \"item\" text"</string>
<string name="revanced_sb_skipped_intro_middle">Пауза пропущена</string>
<string name="revanced_sb_skipped_intro_end">Пауза пропущена</string>
<string name="revanced_sb_skipped_outro">Концовка пропущена</string>
<string name="revanced_sb_skipped_hook">Завязка пропущена</string>
<string name="revanced_sb_skipped_hook">Вступление пропущено</string>
<string name="revanced_sb_skipped_preview_beginning">Предпросмотр пропущен</string>
<string name="revanced_sb_skipped_preview_middle">Предпросмотр пропущен</string>
<string name="revanced_sb_skipped_preview_end">Пересказ пропущен</string>
<string name="revanced_sb_skipped_filler">Отступление пропущено</string>
<string name="revanced_sb_skipped_filler">Отвлеченные темы пропущены</string>
<string name="revanced_sb_skipped_nomusic">Сегмент без музыки пропущен</string>
<string name="revanced_sb_skipped_unsubmitted">Неподтвержденный сегмент пропущен</string>
<string name="revanced_sb_skipped_multiple_segments">Несколько сегментов пропущены</string>

View File

@@ -131,7 +131,7 @@
</string-array>
<string-array name="revanced_spoof_video_streams_client_type_entry_values">
<item>ANDROID_UNPLUGGED</item>
<item>ANDROID_VR_NO_AUTH</item>
<item>ANDROID_VR_1_61_48</item>
<item>IOS_UNPLUGGED</item>
</string-array>
</patch>