Compare commits

...

8 Commits

Author SHA1 Message Date
semantic-release-bot
4085d1f9dc chore(release): 4.12.0-dev.16 [skip ci]
# [4.12.0-dev.16](https://github.com/ReVanced/revanced-patches/compare/v4.12.0-dev.15...v4.12.0-dev.16) (2024-08-04)

### Bug Fixes

* **YouTube - Spoof client:** Restore livestream audio only playback with iOS spoofing ([#3504](https://github.com/ReVanced/revanced-patches/issues/3504)) ([eadbf5f](eadbf5f459))
2024-08-04 19:40:12 +00:00
LisoUseInAIKyrios
eadbf5f459 fix(YouTube - Spoof client): Restore livestream audio only playback with iOS spoofing (#3504) 2024-08-04 21:38:10 +02:00
ILoveOpenSourceApplications
b12b3a73a6 refactor(YouTube Music): Rename Hide music video ads to Hide video ads and add patch description (#3494)
Co-authored-by: ILoveOpenSourceApplications <ILoveOpenSourceApplications@users.noreply.github.com>
Co-authored-by: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com>
2024-08-04 10:09:48 +02:00
semantic-release-bot
572a310589 chore(release): 4.12.0-dev.15 [skip ci]
# [4.12.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v4.12.0-dev.14...v4.12.0-dev.15) (2024-08-02)

### Bug Fixes

* **YouTube - SponsorBlock:** Improve create segment manual seek accuracy ([#3491](https://github.com/ReVanced/revanced-patches/issues/3491)) ([2e8d5c6](2e8d5c61f8))
2024-08-02 13:42:52 +00:00
LisoUseInAIKyrios
2e8d5c61f8 fix(YouTube - SponsorBlock): Improve create segment manual seek accuracy (#3491) 2024-08-02 09:40:28 -04:00
ReVanced Bot
025766bb42 chore: Sync translations (#3499) 2024-08-02 09:37:23 -04:00
semantic-release-bot
e31966159a chore(release): 4.12.0-dev.14 [skip ci]
# [4.12.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v4.12.0-dev.13...v4.12.0-dev.14) (2024-08-01)

### Features

* **YouTube - Description components:** Add `Hide 'Key concepts' section` option ([#3495](https://github.com/ReVanced/revanced-patches/issues/3495)) ([337bdc3](337bdc3d39))
2024-08-01 11:29:29 +00:00
ILoveOpenSourceApplications
337bdc3d39 feat(YouTube - Description components): Add Hide 'Key concepts' section option (#3495)
Co-authored-by: ILoveOpenSourceApplications <ILoveOpenSourceApplications@users.noreply.github.com>
2024-08-01 13:27:28 +02:00
44 changed files with 372 additions and 172 deletions

View File

@@ -1,3 +1,24 @@
# [4.12.0-dev.16](https://github.com/ReVanced/revanced-patches/compare/v4.12.0-dev.15...v4.12.0-dev.16) (2024-08-04)
### Bug Fixes
* **YouTube - Spoof client:** Restore livestream audio only playback with iOS spoofing ([#3504](https://github.com/ReVanced/revanced-patches/issues/3504)) ([90d3288](https://github.com/ReVanced/revanced-patches/commit/90d32880906787d82c4b9a7a1099b46dff3a0870))
# [4.12.0-dev.15](https://github.com/ReVanced/revanced-patches/compare/v4.12.0-dev.14...v4.12.0-dev.15) (2024-08-02)
### Bug Fixes
* **YouTube - SponsorBlock:** Improve create segment manual seek accuracy ([#3491](https://github.com/ReVanced/revanced-patches/issues/3491)) ([1544981](https://github.com/ReVanced/revanced-patches/commit/15449819ff74b636fb2fa6aacd770142c51d2e5d))
# [4.12.0-dev.14](https://github.com/ReVanced/revanced-patches/compare/v4.12.0-dev.13...v4.12.0-dev.14) (2024-08-01)
### Features
* **YouTube - Description components:** Add `Hide 'Key concepts' section` option ([#3495](https://github.com/ReVanced/revanced-patches/issues/3495)) ([d75b645](https://github.com/ReVanced/revanced-patches/commit/d75b64595a7ac26faca4c0ae21923b22f6783975))
# [4.12.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v4.12.0-dev.12...v4.12.0-dev.13) (2024-07-31)

View File

@@ -423,6 +423,12 @@ public final class app/revanced/patches/music/ad/video/HideMusicVideoAds : app/r
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
}
public final class app/revanced/patches/music/ad/video/HideVideoAds : app/revanced/patcher/patch/BytecodePatch {
public static final field INSTANCE Lapp/revanced/patches/music/ad/video/HideVideoAds;
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
public synthetic fun execute (Lapp/revanced/patcher/data/Context;)V
}
public final class app/revanced/patches/music/ad/video/MusicVideoAdsPatch : app/revanced/patcher/patch/BytecodePatch {
public static final field INSTANCE Lapp/revanced/patches/music/ad/video/MusicVideoAdsPatch;
public fun execute (Lapp/revanced/patcher/data/BytecodeContext;)V
@@ -2104,6 +2110,7 @@ public final class app/revanced/patches/yuka/misc/unlockpremium/UnlockPremiumPat
}
public final class app/revanced/util/BytecodeUtilsKt {
public static final fun alsoResolve (Lapp/revanced/patcher/fingerprint/MethodFingerprint;Lapp/revanced/patcher/data/BytecodeContext;Lapp/revanced/patcher/fingerprint/MethodFingerprint;)Lapp/revanced/patcher/fingerprint/MethodFingerprintResult;
public static final fun containsWideLiteralInstructionValue (Lcom/android/tools/smali/dexlib2/iface/Method;J)Z
public static final fun findMutableMethodOf (Lapp/revanced/patcher/util/proxy/mutableTypes/MutableClass;Lcom/android/tools/smali/dexlib2/iface/Method;)Lapp/revanced/patcher/util/proxy/mutableTypes/MutableMethod;
public static final fun findOpcodeIndicesReversed (Lcom/android/tools/smali/dexlib2/iface/Method;Lcom/android/tools/smali/dexlib2/Opcode;)Ljava/util/List;

View File

@@ -1,4 +1,4 @@
org.gradle.parallel = true
org.gradle.caching = true
kotlin.code.style = official
version = 4.12.0-dev.13
version = 4.12.0-dev.16

View File

@@ -6,11 +6,12 @@ import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotation.CompatiblePackage
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patches.music.ad.video.fingerprints.ShowMusicVideoAdsParentFingerprint
import app.revanced.patches.music.ad.video.fingerprints.ShowVideoAdsParentFingerprint
import app.revanced.util.exception
@Patch(
name = "Hide music video ads",
name = "Hide video ads",
description = "Hides ads that appear while listening to or streaming music videos, podcasts, or songs.",
compatiblePackages = [
CompatiblePackage(
"com.google.android.apps.youtube.music",
@@ -25,24 +26,32 @@ import app.revanced.util.exception
],
)
@Suppress("unused")
object HideMusicVideoAds : BytecodePatch(
setOf(ShowMusicVideoAdsParentFingerprint),
object HideVideoAds : BytecodePatch(
setOf(ShowVideoAdsParentFingerprint),
) {
override fun execute(context: BytecodeContext) {
ShowMusicVideoAdsParentFingerprint.result?.let {
val showMusicVideoAdsMethod = context
ShowVideoAdsParentFingerprint.result?.let {
val showVideoAdsMethod = context
.toMethodWalker(it.mutableMethod)
.nextMethod(it.scanResult.patternScanResult!!.startIndex + 1, true).getMethod() as MutableMethod
showMusicVideoAdsMethod.addInstruction(0, "const/4 p1, 0x0")
} ?: throw ShowMusicVideoAdsParentFingerprint.exception
showVideoAdsMethod.addInstruction(0, "const/4 p1, 0x0")
} ?: throw ShowVideoAdsParentFingerprint.exception
}
}
@Deprecated("This patch class has been renamed to HideMusicVideoAds.")
@Deprecated("This patch class has been renamed to HideVideoAds.")
object HideMusicVideoAds : BytecodePatch(
dependencies = setOf(HideVideoAds::class)
) {
override fun execute(context: BytecodeContext) {
}
}
@Deprecated("This patch class has been renamed to HideVideoAds.")
object MusicVideoAdsPatch : BytecodePatch(
dependencies = setOf(HideMusicVideoAds::class),
) {
override fun execute(context: BytecodeContext) {
}
}
}

View File

@@ -3,7 +3,7 @@ package app.revanced.patches.music.ad.video.fingerprints
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.Opcode
internal object ShowMusicVideoAdsParentFingerprint : MethodFingerprint(
internal object ShowVideoAdsParentFingerprint : MethodFingerprint(
opcodes = listOf(
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL,

View File

@@ -97,6 +97,7 @@ object HideLayoutComponentsPatch : BytecodePatch(
SwitchPreference("revanced_hide_attributes_section"),
SwitchPreference("revanced_hide_chapters_section"),
SwitchPreference("revanced_hide_info_cards_section"),
SwitchPreference("revanced_hide_key_concepts_section"),
SwitchPreference("revanced_hide_podcast_section"),
SwitchPreference("revanced_hide_transcript_section"),
),

View File

@@ -16,7 +16,9 @@ import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMu
import app.revanced.patches.all.misc.resources.AddResourcesPatch
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreen
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.backgroundplayback.BackgroundPlaybackPatch
import app.revanced.patches.youtube.misc.fix.playback.fingerprints.*
import app.revanced.patches.youtube.misc.playertype.PlayerTypeHookPatch
import app.revanced.patches.youtube.misc.settings.SettingsPatch
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
@@ -38,16 +40,21 @@ import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
SettingsPatch::class,
AddResourcesPatch::class,
UserAgentClientSpoofPatch::class,
// Required since iOS livestream fix partially enables background playback.
BackgroundPlaybackPatch::class,
PlayerTypeHookPatch::class,
],
compatiblePackages = [
CompatiblePackage(
"com.google.android.youtube",
[
"18.37.36",
"18.38.44",
"18.43.45",
"18.44.41",
"18.45.43",
// This patch works with these versions,
// but the dependent background playback patch does not.
// "18.37.36",
// "18.38.44",
// "18.43.45",
// "18.44.41",
// "18.45.43",
"18.48.39",
"18.49.37",
"19.01.34",
@@ -89,9 +96,9 @@ object SpoofClientPatch : BytecodePatch(
// Video qualities missing.
BuildRequestFingerprint,
// Watch history.
GetTrackingUriFingerprint,
),
// Livestream audio only background playback.
PlayerResponseModelBackgroundAudioPlaybackFingerprint,
)
) {
private const val INTEGRATIONS_CLASS_DESCRIPTOR =
"Lapp/revanced/integrations/youtube/patches/spoof/SpoofClientPatch;"
@@ -316,6 +323,23 @@ object SpoofClientPatch : BytecodePatch(
// endregion
// region Fix livestream audio only background play if spoofing to iOS.
// This force enables audio background playback.
PlayerResponseModelBackgroundAudioPlaybackFingerprint.resultOrThrow().mutableMethod.addInstructions(
0,
"""
invoke-static { }, $INTEGRATIONS_CLASS_DESCRIPTOR->overrideBackgroundAudioPlayback()Z
move-result v0
if-eqz v0, :do_not_override
return v0
:do_not_override
nop
"""
)
// endregion
// Fix playback speed menu item if spoofing to iOS.
CreatePlaybackSpeedMenuItemFingerprint.resultOrThrow().let {
@@ -340,25 +364,6 @@ object SpoofClientPatch : BytecodePatch(
// endregion
// Fix watch history if spoofing to iOS.
GetTrackingUriFingerprint.resultOrThrow().let {
it.mutableMethod.apply {
val returnUrlIndex = it.scanResult.patternScanResult!!.endIndex
val urlRegister = getInstruction<OneRegisterInstruction>(returnUrlIndex).registerA
addInstructions(
returnUrlIndex,
"""
invoke-static { v$urlRegister }, $INTEGRATIONS_CLASS_DESCRIPTOR->overrideTrackingUrl(Landroid/net/Uri;)Landroid/net/Uri;
move-result-object v$urlRegister
"""
)
}
}
// endregion
// region Fix video qualities missing, if spoofing to iOS by overriding the user agent.
BuildRequestFingerprint.resultOrThrow().let { result ->

View File

@@ -1,21 +0,0 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal object GetTrackingUriFingerprint : MethodFingerprint(
returnType = "Landroid/net/Uri;",
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
parameters = emptyList(),
opcodes = listOf(
Opcode.IGET_OBJECT,
Opcode.INVOKE_STATIC,
Opcode.MOVE_RESULT_OBJECT,
Opcode.RETURN_OBJECT
),
customFingerprint = { _, classDef ->
classDef.endsWith("TrackingUrlModel;")
}
)

View File

@@ -0,0 +1,25 @@
package app.revanced.patches.youtube.misc.fix.playback.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal object PlayerResponseModelBackgroundAudioPlaybackFingerprint : MethodFingerprint(
returnType = "Z",
accessFlags = AccessFlags.PUBLIC or AccessFlags.STATIC,
parameters = listOf("Lcom/google/android/libraries/youtube/innertube/model/player/PlayerResponseModel;"),
opcodes = listOf(
Opcode.CONST_4,
Opcode.IF_EQZ,
Opcode.INVOKE_INTERFACE,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT,
Opcode.IF_NEZ,
Opcode.GOTO,
Opcode.RETURN,
null, // Opcode.CONST_4 or Opcode.MOVE
Opcode.RETURN,
)
)

View File

@@ -32,11 +32,12 @@ object GmsCoreSupportPatch : BaseGmsCoreSupportPatch(
CompatiblePackage(
"com.google.android.youtube",
setOf(
"18.37.36",
"18.38.44",
"18.43.45",
"18.44.41",
"18.45.43",
// Patch supports these versions but ClientSpoof does not.
// "18.37.36",
// "18.38.44",
// "18.43.45",
// "18.44.41",
// "18.45.43",
"18.48.39",
"18.49.37",
"19.01.34",

View File

@@ -16,6 +16,7 @@ import app.revanced.patches.youtube.misc.imageurlhook.fingerprints.cronet.reques
import app.revanced.patches.youtube.misc.imageurlhook.fingerprints.cronet.request.callback.OnResponseStartedFingerprint
import app.revanced.patches.youtube.misc.imageurlhook.fingerprints.cronet.request.callback.OnSucceededFingerprint
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
import app.revanced.util.alsoResolve
import app.revanced.util.resultOrThrow
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
@@ -84,17 +85,14 @@ object CronetImageUrlHook : BytecodePatch(
}
override fun execute(context: BytecodeContext) {
fun MethodFingerprint.alsoResolve(fingerprint: MethodFingerprint) =
also { resolve(context, fingerprint.resultOrThrow().classDef) }.resultOrThrow()
loadImageUrlMethod = MessageDigestImageUrlFingerprint
.alsoResolve(MessageDigestImageUrlParentFingerprint).mutableMethod
.alsoResolve(context, MessageDigestImageUrlParentFingerprint).mutableMethod
loadImageSuccessCallbackMethod = OnSucceededFingerprint
.alsoResolve(OnResponseStartedFingerprint).mutableMethod
.alsoResolve(context, OnResponseStartedFingerprint).mutableMethod
loadImageErrorCallbackMethod = OnFailureFingerprint
.alsoResolve(OnResponseStartedFingerprint).mutableMethod
.alsoResolve(context, OnResponseStartedFingerprint).mutableMethod
// The URL is required for the failure callback hook, but the URL field is obfuscated.
// Add a helper get method that returns the URL field.

View File

@@ -7,12 +7,14 @@ import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.extensions.or
import app.revanced.patcher.patch.BytecodePatch
import app.revanced.patcher.patch.annotation.Patch
import app.revanced.patcher.util.proxy.mutableTypes.MutableClass
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
import app.revanced.patches.youtube.misc.integrations.IntegrationsPatch
import app.revanced.patches.youtube.video.information.fingerprints.*
import app.revanced.patches.youtube.video.playerresponse.PlayerResponseMethodHookPatch
import app.revanced.patches.youtube.video.videoid.VideoIdPatch
import app.revanced.util.alsoResolve
import app.revanced.util.exception
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
@@ -45,9 +47,11 @@ object VideoInformationPatch : BytecodePatch(
)
) {
private const val INTEGRATIONS_CLASS_DESCRIPTOR = "Lapp/revanced/integrations/youtube/patches/VideoInformation;"
private const val INTEGRATIONS_PLAYER_INTERFACE = "Lapp/revanced/integrations/youtube/patches/VideoInformation${'$'}PlaybackController;"
private lateinit var playerInitMethod: MutableMethod
private var playerInitInsertIndex = 4
private var playerInitInsertIndex = -1
private var playerInitInsertRegister = -1
private lateinit var mdxInitMethod: MutableMethod
private var mdxInitInsertIndex = -1
@@ -70,42 +74,43 @@ object VideoInformationPatch : BytecodePatch(
with(PlayerInitFingerprint.resultOrThrow()) {
playerInitMethod = mutableClass.methods.first { MethodUtil.isConstructor(it) }
// hook the player controller for use through integrations
// find the location of the first invoke-direct call and extract the register storing the 'this' object reference.
val initThisIndex = playerInitMethod.indexOfFirstInstructionOrThrow {
opcode == Opcode.INVOKE_DIRECT && getReference<MethodReference>()?.name == "<init>"
}
playerInitInsertRegister = playerInitMethod.getInstruction<FiveRegisterInstruction>(initThisIndex).registerC
playerInitInsertIndex = initThisIndex + 1
// Hook the player controller for use through integrations.
onCreateHook(INTEGRATIONS_CLASS_DESCRIPTOR, "initialize")
// seek method
val seekFingerprintResultMethod =
SeekFingerprint.also { it.resolve(context, classDef) }.resultOrThrow().method
SeekFingerprint.alsoResolve(context, PlayerInitFingerprint).method
val seekRelativeFingerprintResultMethod =
SeekRelativeFingerprint.alsoResolve(context, PlayerInitFingerprint).method
// create helper method
val seekHelperMethod = generateSeekMethodHelper(seekFingerprintResultMethod)
// add the seekTo method to the class for the integrations to call
mutableClass.methods.add(seekHelperMethod)
// Create integrations interface methods.
addSeekInterfaceMethods(mutableClass, seekFingerprintResultMethod, seekRelativeFingerprintResultMethod)
}
with(MdxPlayerDirectorSetVideoStageFingerprint.resultOrThrow()) {
mdxInitMethod = mutableClass.methods.first { MethodUtil.isConstructor(it) }
// find the location of the first invoke-direct call and extract the register storing the 'this' object reference
val initThisIndex = mdxInitMethod.indexOfFirstInstructionOrThrow {
opcode == Opcode.INVOKE_DIRECT && getReference<MethodReference>()?.name == "<init>"
}
mdxInitInsertRegister = mdxInitMethod.getInstruction<FiveRegisterInstruction>(initThisIndex).registerC
mdxInitInsertIndex = initThisIndex + 1
// hook the MDX director for use through integrations
// Hook the MDX director for use through integrations.
onCreateHookMdx(INTEGRATIONS_CLASS_DESCRIPTOR, "initializeMdx")
// MDX seek method
val mdxSeekFingerprintResultMethod =
MdxSeekFingerprint.apply { resolve(context, classDef) }.resultOrThrow().method
MdxSeekFingerprint.alsoResolve(context, MdxPlayerDirectorSetVideoStageFingerprint).method
val mdxSeekRelativeFingerprintResultMethod =
MdxSeekRelativeFingerprint.alsoResolve(context, MdxPlayerDirectorSetVideoStageFingerprint).method
// create helper method
val mdxSeekHelperMethod = generateSeekMethodHelper(mdxSeekFingerprintResultMethod)
// add the seekTo method to the class for the integrations to call
mutableClass.methods.add(mdxSeekHelperMethod)
addSeekInterfaceMethods(mutableClass, mdxSeekFingerprintResultMethod, mdxSeekRelativeFingerprintResultMethod)
}
with(CreateVideoPlayerSeekbarFingerprint.result!!) {
@@ -173,33 +178,42 @@ object VideoInformationPatch : BytecodePatch(
userSelectedPlaybackSpeedHook(INTEGRATIONS_CLASS_DESCRIPTOR, "userSelectedPlaybackSpeed")
}
private fun generateSeekMethodHelper(seekMethod: Method): MutableMethod {
private fun addSeekInterfaceMethods(targetClass: MutableClass, seekToMethod: Method, seekToRelativeMethod: Method) {
// Add the interface and methods that integrations calls.
targetClass.interfaces.add(INTEGRATIONS_PLAYER_INTERFACE)
// create helper method
val generatedMethod = ImmutableMethod(
seekMethod.definingClass,
"seekTo",
listOf(ImmutableMethodParameter("J", null, "time")),
"Z",
AccessFlags.PUBLIC or AccessFlags.FINAL,
null, null,
MutableMethodImplementation(4)
).toMutable()
arrayOf(
seekToMethod to "seekTo",
seekToRelativeMethod to "seekToRelative"
).forEach { (method, name) ->
// Add interface method.
// Get enum type for the seek helper method.
val seekSourceEnumType = method.parameterTypes[1].toString()
// get enum type for the seek helper method
val seekSourceEnumType = seekMethod.parameterTypes[1].toString()
val interfaceImplementation = ImmutableMethod(
targetClass.type,
name,
listOf(ImmutableMethodParameter("J", null, "time")),
"Z",
AccessFlags.PUBLIC or AccessFlags.FINAL,
null, null,
MutableMethodImplementation(4)
).toMutable()
// insert helper method instructions
generatedMethod.addInstructions(
0,
"""
sget-object v0, $seekSourceEnumType->a:$seekSourceEnumType
invoke-virtual { p0, p1, p2, v0 }, $seekMethod
move-result p1
return p1
"""
)
return generatedMethod
// Insert helper method instructions.
interfaceImplementation.addInstructions(
0,
"""
# first enum (field a) is SEEK_SOURCE_UNKNOWN
sget-object v0, $seekSourceEnumType->a:$seekSourceEnumType
invoke-virtual { p0, p1, p2, v0 }, $method
move-result p1
return p1
"""
)
targetClass.methods.add(interfaceImplementation)
}
}
private fun MutableMethod.insert(insertIndex: Int, register: String, descriptor: String) =
@@ -220,8 +234,8 @@ object VideoInformationPatch : BytecodePatch(
internal fun onCreateHook(targetMethodClass: String, targetMethodName: String) =
playerInitMethod.insert(
playerInitInsertIndex++,
"v0",
"$targetMethodClass->$targetMethodName(Ljava/lang/Object;)V"
"v$playerInitInsertRegister",
"$targetMethodClass->$targetMethodName($INTEGRATIONS_PLAYER_INTERFACE)V"
)
/**
@@ -234,7 +248,7 @@ object VideoInformationPatch : BytecodePatch(
mdxInitMethod.insert(
mdxInitInsertIndex++,
"v$mdxInitInsertRegister",
"$targetMethodClass->$targetMethodName(Ljava/lang/Object;)V"
"$targetMethodClass->$targetMethodName($INTEGRATIONS_PLAYER_INTERFACE)V"
)
/**

View File

@@ -5,6 +5,9 @@ import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
/**
* Resolves using class found in [MdxPlayerDirectorSetVideoStageFingerprint].
*/
internal object MdxSeekFingerprint : MethodFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
returnType = "Z",

View File

@@ -0,0 +1,19 @@
package app.revanced.patches.youtube.video.information.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
/**
* Resolves using class found in [MdxPlayerDirectorSetVideoStageFingerprint].
*/
internal object MdxSeekRelativeFingerprint : MethodFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
returnType = "Z",
parameters = listOf("J", "L"),
opcodes = listOf(
Opcode.IGET_OBJECT,
Opcode.INVOKE_INTERFACE
)
)

View File

@@ -3,6 +3,9 @@ package app.revanced.patches.youtube.video.information.fingerprints
import app.revanced.patcher.fingerprint.MethodFingerprint
/**
* Resolves using class found in [PlayerInitFingerprint].
*/
internal object SeekFingerprint : MethodFingerprint(
strings = listOf("Attempting to seek during an ad")
)

View File

@@ -0,0 +1,21 @@
package app.revanced.patches.youtube.video.information.fingerprints
import app.revanced.patcher.extensions.or
import app.revanced.patcher.fingerprint.MethodFingerprint
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
/**
* Resolves using class found in [PlayerInitFingerprint].
*/
internal object SeekRelativeFingerprint : MethodFingerprint(
accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
returnType = "Z",
parameters = listOf("J", "L"),
opcodes = listOf(
Opcode.ADD_LONG_2ADDR,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT,
Opcode.RETURN
)
)

View File

@@ -249,3 +249,9 @@ fun Iterable<MethodFingerprint>.returnEarly(bool: Boolean = false) = forEach { f
fun List<MethodFingerprint>.returnEarly(bool: Boolean = false) = forEach { fingerprint ->
fingerprint.returnEarly(bool)
}
/**
* Resolves this fingerprint using the classDef of a parent fingerprint.
*/
fun MethodFingerprint.alsoResolve(context: BytecodeContext, parentFingerprint: MethodFingerprint) =
also { resolve(context, parentFingerprint.resultOrThrow().classDef) }.resultOrThrow()

View File

@@ -211,6 +211,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">إخفاء قسم بطاقات المعلومات</string>
<string name="revanced_hide_info_cards_section_summary_on">تم إخفاء قسم بطاقات المعلومات</string>
<string name="revanced_hide_info_cards_section_summary_off">يتم عرض قسم بطاقات المعلومات</string>
<string name="revanced_hide_key_concepts_section_title">إخفاء قسم \'المفاهيم الأساسية\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">تم إخفاء قسم \'المفاهيم الأساسية\'</string>
<string name="revanced_hide_key_concepts_section_summary_off">يتم عرض قسم \'المفاهيم الأساسية\'</string>
<string name="revanced_hide_transcript_section_title">إخفاء قسم النص</string>
<string name="revanced_hide_transcript_section_summary_on">تم إخفاء قسم النص</string>
<string name="revanced_hide_transcript_section_summary_off">يتم عرض قسم النص</string>
@@ -1115,8 +1118,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_client_summary_off">لا يتم محاكاة العميل\n\nقد لا يعمل تشغيل الفيديو</string>
<string name="revanced_spoof_client_user_dialog_message">إيقاف تشغيل هذا الإعداد قد يسبب مشاكل في تشغيل الفيديو.</string>
<string name="revanced_spoof_client_use_ios_title">Spoof Client to iOS</string>
<string name="revanced_spoof_client_use_ios_summary_on">العميل مرسل حالياً إلى iOS\n\nالآثار الجانبية تشمل:\n• لا يوجد HDR فيديو\n• قد تكون جودة فيديو أعلى مفقودة\n• لا يمكن تشغيل البث المباشر للصوت فقط</string>
<string name="revanced_spoof_client_use_ios_summary_off">العميل معطوب حالياً إلى أندرويد VR\n\nالآثار الجانبية تشمل:\n• لا يوجد فيديو HDR\n• فيديوهات الأطفال لا يتم تشغيلهم\n• مقاطع الفيديو الموقوفة يمكن أن تستأنف عشوائياً\n• جودة منخفضة لصور مصغرة شريط البحث\n• زر التحميل مخفي\n• بطاقات إنهاء الشاشة مخفية</string>
<string name="revanced_spoof_client_use_ios_summary_on">تتم حاليًا محاكاة العميل إلـى iOS\n\nالآثار الجانبية تشمل:\n• لا يوجد فيديو HDR\n• قد تكون جودة الفيديو الأعلى مفقودة\n• لا يمكن تشغيل البث المباشر كصوت فقط</string>
<string name="revanced_spoof_client_use_ios_summary_off">تتم حاليًا محاكاة العميل إلـى Android VR\n\nالآثار الجانبية تشمل:\n• لا يوجد فيديو HDR\n• فيديوهات الأطفال لا يتم تشغيلهم\n• مقاطع الفيديو الموقوفة يمكن أن تستأنف عشوائياً\n• جودة منخفضة لمصغرات شريط التقدم\n• زر التنزيل مخفي\n• بطاقات نهاية الشاشة مخفية</string>
<string name="revanced_spoof_client_storyboard_timeout">محاكاة مصغرات العميل غير متوفرة (انتهت مهلة API)</string>
<string name="revanced_spoof_client_storyboard_io_exception">محاكاة مصغرات العميل غير متوفرة مؤقتًا: %s</string>
</patch>

View File

@@ -145,9 +145,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_community_posts_title">İcma elanların gizlət</string>
<string name="revanced_hide_community_posts_summary_on">İcma elanları gizlədilib</string>
<string name="revanced_hide_community_posts_summary_off">İcma elanları göstərilir</string>
<string name="revanced_hide_compact_banner_title">Yığcam bannerləri gizlət</string>
<string name="revanced_hide_compact_banner_summary_on">Yığcam bannerlər gizlidir</string>
<string name="revanced_hide_compact_banner_summary_off">Yığcam bannerlər göstərilir</string>
<string name="revanced_hide_compact_banner_title">Yığcam etiketləri gizlət</string>
<string name="revanced_hide_compact_banner_summary_on">Yığcam etiketlər gizlidir</string>
<string name="revanced_hide_compact_banner_summary_off">Yığcam etiketlər göstərilir</string>
<string name="revanced_hide_movies_section_title">Filmlər bölməsini gizlət</string>
<string name="revanced_hide_movies_section_summary_on">Filmlər bölməsi gizlidir</string>
<string name="revanced_hide_movies_section_summary_off">Filmlər bölməsi göstərilir</string>
@@ -184,7 +184,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_related_videos_title">Cəld fəaliyyətlərdə əlaqəli videoları gizlə</string>
<string name="revanced_hide_related_videos_summary_on">Əlaqədar videolar gizlədilib</string>
<string name="revanced_hide_related_videos_summary_off">Əlaqədar videolar göstərilir</string>
<string name="revanced_hide_image_shelf_title">Axtarış nəticələrindəki şəkil bölməsin gizlət</string>
<string name="revanced_hide_image_shelf_title">Axtarış nəticəsində şəkil bölməsin gizlə</string>
<string name="revanced_hide_image_shelf_summary_on">Şəkil bölməsi gizlidir</string>
<string name="revanced_hide_image_shelf_summary_off">Şəkil bölməsi göstərilir</string>
<string name="revanced_hide_latest_posts_ads_title">Son elanları gizlət</string>
@@ -211,6 +211,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Məlumat kartları bölməsini gizlət</string>
<string name="revanced_hide_info_cards_section_summary_on">Məlumat kartları bölməsi gizlədilir</string>
<string name="revanced_hide_info_cards_section_summary_off">Məlumat kartları bölməsi göstərilir</string>
<string name="revanced_hide_key_concepts_section_title">\"Əsas anlayışlar\" bölməsin gizlət</string>
<string name="revanced_hide_key_concepts_section_summary_on">\"Əsas anlayışlar\" bölməsi gizlidir</string>
<string name="revanced_hide_key_concepts_section_summary_off">\"Əsas anlayışlar\" bölməsi göstərilir</string>
<string name="revanced_hide_transcript_section_title">Transkripsiya bölməsini gizlət</string>
<string name="revanced_hide_transcript_section_summary_on">Transkripsiya bölməsi gizlidir</string>
<string name="revanced_hide_transcript_section_summary_off">Transkripsiya bölməsi göstərilir</string>
@@ -264,21 +267,21 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_self_sponsor_ads_title">Öz-sponsorlu kartları gizlət</string>
<string name="revanced_hide_self_sponsor_ads_summary_on">Özünə sponsorluq edilən kartlar gizlidir</string>
<string name="revanced_hide_self_sponsor_ads_summary_off">Özünə sponsorluq edilən kartlar göstərilir</string>
<string name="revanced_hide_products_banner_title">Məhsullara baxma panelin gizlət</string>
<string name="revanced_hide_products_banner_summary_on">Panel gizlədilib</string>
<string name="revanced_hide_products_banner_summary_off">Panel göstərilir</string>
<string name="revanced_hide_shopping_links_title">Video açıqlamadakı alış-veriş linklərin gizlə</string>
<string name="revanced_hide_products_banner_title">Məhsullara baxma etiketin gizlət</string>
<string name="revanced_hide_products_banner_summary_on">Etiket gizlədilib</string>
<string name="revanced_hide_products_banner_summary_off">Etiket göstərilir</string>
<string name="revanced_hide_shopping_links_title">Video açıqlama alış-veriş linklər gizlə</string>
<string name="revanced_hide_shopping_links_summary_on">Alış-veriş bağlantıları gizlədilir</string>
<string name="revanced_hide_shopping_links_summary_off">Alış-veriş bağlantıları göstərilir</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">Kanaldakı \"Mağazanı ziyarət et\" düyməsin gizlə</string>
<string name="revanced_hide_visit_store_button_title">Kanalda \"Mağaza ziyarət\" düymə gizlə</string>
<string name="revanced_hide_visit_store_button_summary_on">Düymə gizlidir</string>
<string name="revanced_hide_visit_store_button_summary_off">Düymə göstərilir</string>
<string name="revanced_hide_web_search_results_title">Veb axtarış nəticələrini gizlət</string>
<string name="revanced_hide_web_search_results_summary_on">Veb axtarış nəticələri gizlədilir</string>
<string name="revanced_hide_web_search_results_summary_off">Veb axtarış nəticələri göstərilir</string>
<string name="revanced_hide_merchandise_banners_title">Məhsul bannerlərini gizlət</string>
<string name="revanced_hide_merchandise_banners_summary_on">Məhsul bannerləri gizlədilir</string>
<string name="revanced_hide_merchandise_banners_title">Məhsul etiketlərini gizlət</string>
<string name="revanced_hide_merchandise_banners_summary_on">Məhsul etiketləri gizlədilir</string>
<string name="revanced_hide_merchandise_banners_summary_off">Məhsul bannerləri göstərilir</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">Tam ekran reklamları gizlətmə yalnız köhnə cihazlarda işləyir</string>
@@ -316,7 +319,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_external_downloader_summary_on">Yükləmə düyməsi oynadıcıda göstərilir</string>
<string name="revanced_external_downloader_summary_off">Yükləmə düyməsi oynadıcıda göstərilmir</string>
<!-- 'download action button' should be translated using the same wording as the translation of 'revanced_hide_download_button_title' -->
<string name="revanced_external_downloader_action_button_title">Yükləmə fəaliyyəti düyməsini qəbul etmə</string>
<string name="revanced_external_downloader_action_button_title">Yükləmə fəaliyyət düyməsin qəbul etmə</string>
<string name="revanced_external_downloader_action_button_summary_on">Yükləmə düyməsi, xarici yükləyicini açır</string>
<string name="revanced_external_downloader_action_button_summary_off">Yükləmə düyməsi tətbiqdəki standart yükləyicini açır</string>
<string name="revanced_external_downloader_name_title">Yükləyici paketi adı</string>
@@ -567,7 +570,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_disable_rolling_number_animations_summary_off">Sürüşən say animasiyasııqdır</string>
</patch>
<patch id="layout.hide.seekbar.HideSeekbarPatch">
<string name="revanced_hide_seekbar_title">Video oynadıcıda axtarış çubuğunu gizlət</string>
<string name="revanced_hide_seekbar_title">Video oynadıcıda axtarış çubuğun gizlə</string>
<string name="revanced_hide_seekbar_summary_on">Video oynadıcı axtarış çubuğu gizlidir</string>
<string name="revanced_hide_seekbar_summary_off">Video oynadıcı axtarış çubuğu göstərilir</string>
<string name="revanced_hide_seekbar_thumbnail_title">Video miniatürlərdə vaxt çubuğun gizlə</string>
@@ -665,7 +668,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_timestamp_summary_off">Vaxt möhürü göstərilir</string>
</patch>
<patch id="layout.panels.popup.PlayerPopupPanelsPatch">
<string name="revanced_hide_player_popup_panels_title">Oynadıcıılan pəncərə panellərini gizlət</string>
<string name="revanced_hide_player_popup_panels_title">Oynadıcıılan pəncərə panellərin gizlə</string>
<string name="revanced_hide_player_popup_panels_summary_on">Oynadıcıılan pəncərə panelləri gizlidir</string>
<string name="revanced_hide_player_popup_panels_summary_off">Oynadıcıılan pəncərə panelləri göstərilir</string>
</patch>
@@ -725,7 +728,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_wide_searchbar_summary_off">Geniş axtarış çubuğu qeyri-aktivdir</string>
</patch>
<patch id="layout.seekbar.RestoreOldSeekbarThumbnailsPatch">
<string name="revanced_restore_old_seekbar_thumbnails_title">Köhnə axtarış çubuğu miniatürlərini qaytar</string>
<string name="revanced_restore_old_seekbar_thumbnails_title">Köhnə axtarış çubuğu miniatürlərin al</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_on">Axtarış çubuğu miniatürləri axtarış çubuğu üstündə görünəcək</string>
<string name="revanced_restore_old_seekbar_thumbnails_summary_off">Axtarış çubuğu miniatürləri tam ekranda görünəcək</string>
</patch>
@@ -788,7 +791,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_settings_export_failed">%s ixrac uğursuz</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning">Tənzimləmələr şəxsi SponsorBlock istifadəçi kimliyi ehtiva edir.\n\nİstifadəçi kimliyiniz parol kimidir və bu paylaşılmamalıdır.\n</string>
<string name="revanced_sb_settings_revanced_export_user_id_warning_dismiss">Təkrar göstərmə</string>
<string name="revanced_sb_diff_segments">Seqment davranışını dəyişdir</string>
<string name="revanced_sb_diff_segments">Bölüm davranışını dəyişdir</string>
<string name="revanced_sb_segments_sponsor">Sponsor</string>
<string name="revanced_sb_segments_sponsor_sum">Ödənişli tanıtım, ödənişli yönləndirmələr və birbaşa reklamlar. Öz-tanıtım və ya bəyəndikləri səbəblərə/yaradıcılara/veb saytlara/məhsullara ödənişsiz çağırışlar etmək üçün deyil</string>
<string name="revanced_sb_segments_selfpromo">Ödənişsiz/Öz reklamı</string>
@@ -942,7 +945,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_start_page_entry_9">Trenddə olan</string>
</patch>
<patch id="layout.startupshortsreset.DisableResumingShortsOnStartupPatch">
<string name="revanced_disable_resuming_shorts_player_title">Shorts oynadıcı davam etdirməsini bağla</string>
<string name="revanced_disable_resuming_shorts_player_title">Shorts oynadıcı başladıcını bağla</string>
<string name="revanced_disable_resuming_shorts_player_summary_on">Tətbiq açılanda Shorts oynadıcı davam etməyəcək</string>
<string name="revanced_disable_resuming_shorts_player_summary_off">Tətbiq açılanda Shorts oynadıcı davam edəcək</string>
</patch>

View File

@@ -214,6 +214,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Skrýt sekci informačních karet</string>
<string name="revanced_hide_info_cards_section_summary_on">Sekce Info karty je skrytá</string>
<string name="revanced_hide_info_cards_section_summary_off">Je zobrazena sekce Info karty</string>
<string name="revanced_hide_key_concepts_section_summary_on">Sekce \'Klíčové pojmy\' je skryta</string>
<string name="revanced_hide_key_concepts_section_summary_off">Zobrazí se sekce \'Klíčové pojmy\'</string>
<string name="revanced_hide_transcript_section_title">Skrýt sekci přepisu</string>
<string name="revanced_hide_transcript_section_summary_on">Přepsat oddíl je skrytý</string>
<string name="revanced_hide_transcript_section_summary_off">Je zobrazena sekce přepisu</string>

View File

@@ -213,6 +213,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Skjul infokort sektion</string>
<string name="revanced_hide_info_cards_section_summary_on">Info-kort sektion er skjult</string>
<string name="revanced_hide_info_cards_section_summary_off">Info-kort sektion er vist</string>
<string name="revanced_hide_key_concepts_section_title">Skjul sektion \'Nøglebegreber\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">\'Nøglebegreber\' sektion er skjult</string>
<string name="revanced_hide_key_concepts_section_summary_off">\'Nøglebegreber\' afsnit vises</string>
<string name="revanced_hide_transcript_section_title">Skjul udskriftsafsnittet</string>
<string name="revanced_hide_transcript_section_summary_on">Afsnittet er skjult</string>
<string name="revanced_hide_transcript_section_summary_off">Afsnittet er vist</string>

View File

@@ -214,6 +214,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Info-Kartenbereich ausblenden</string>
<string name="revanced_hide_info_cards_section_summary_on">Info-Kartenbereich ist ausgeblendet</string>
<string name="revanced_hide_info_cards_section_summary_off">Info-Kartenbereich wird angezeigt</string>
<string name="revanced_hide_key_concepts_section_title">\'Schlüsselbegriffe\' ausblenden</string>
<string name="revanced_hide_key_concepts_section_summary_on">\'Schlüsselbegriffe\' Abschnitt ist versteckt</string>
<string name="revanced_hide_key_concepts_section_summary_off">Abschnitt \'Schlüsselkonzepte\' wird angezeigt</string>
<string name="revanced_hide_transcript_section_title">Transkript-Abschnitt ausblenden</string>
<string name="revanced_hide_transcript_section_summary_on">Transkript-Abschnitt ist ausgeblendet</string>
<string name="revanced_hide_transcript_section_summary_off">Sektion Transkripte wird angezeigt</string>

View File

@@ -212,6 +212,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Ενότητα καρτών πληροφοριών</string>
<string name="revanced_hide_info_cards_section_summary_on">Κρυμμένη</string>
<string name="revanced_hide_info_cards_section_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_key_concepts_section_title">Απόκρυψη ενότητας \'Έννοιες κλειδιού\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">\'Βασικές έννοιες\' ενότητα είναι κρυμμένη</string>
<string name="revanced_hide_key_concepts_section_summary_off">\'Βασικές έννοιες\' ενότητα εμφανίζεται</string>
<string name="revanced_hide_transcript_section_title">Ενότητα Απομαγνητοφώνησης</string>
<string name="revanced_hide_transcript_section_summary_on">Κρυμμένη</string>
<string name="revanced_hide_transcript_section_summary_off">Εμφανίζεται</string>

View File

@@ -212,6 +212,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Ocultar sección de tarjetas de información</string>
<string name="revanced_hide_info_cards_section_summary_on">La sección de tarjetas de información está oculta</string>
<string name="revanced_hide_info_cards_section_summary_off">Se muestra la sección de tarjetas de información</string>
<string name="revanced_hide_key_concepts_section_title">Ocultar sección \'Conceptos clave\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">la sección \'Conceptos clave\' está oculta</string>
<string name="revanced_hide_key_concepts_section_summary_off">la sección \'Conceptos clave\' se muestra</string>
<string name="revanced_hide_transcript_section_title">Ocultar sección de transcripción</string>
<string name="revanced_hide_transcript_section_summary_on">La sección transcripción está oculta</string>
<string name="revanced_hide_transcript_section_summary_off">Se muestra la sección transcripción</string>
@@ -282,7 +285,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_merchandise_banners_summary_on">Los banners de mercadería están ocultos</string>
<string name="revanced_hide_merchandise_banners_summary_off">Se muestran los banners de Mercandise</string>
<!-- Translations of this should not be longer than the original English text, otherwise the text can be clipped and not entirely shown. -->
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">Ocultar anuncios a pantalla completa sólo funciona con dispositivos antiguos</string>
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">Ocultar anuncio solo con dispositivos viejos</string>
</patch>
<patch id="ad.getpremium.HideGetPremiumPatch">
<string name="revanced_hide_get_premium_title">Ocultar promociones de YouTube Premium</string>
@@ -673,7 +676,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<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_summary">Valor de potencia entre 0-100, donde 0 es transparente</string>
<string name="revanced_player_overlay_opacity_invalid_toast">Opacidad de superposición del jugador debe estar entre 0-100</string>
<string name="revanced_player_overlay_opacity_invalid_toast">Opacidad del reproductor debe estar entre 0 y 100</string>
</patch>
<patch id="layout.returnyoutubedislike.ReturnYouTubeDislikeResourcePatch">
<string name="revanced_ryd_video_likes_hidden_by_video_owner">Oculto</string>
@@ -975,7 +978,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_miniplayer_hide_rewind_forward_summary_off">Saltar adelante y atrás se muestran</string>
<string name="revanced_miniplayer_opacity_title">Overlay opacity</string>
<string name="revanced_miniplayer_opacity_summary">Valor de potencia entre 0-100, donde 0 es transparente</string>
<string name="revanced_miniplayer_opacity_invalid_toast">La opacidad de superposición del Miniplayer debe estar entre 0-100</string>
<string name="revanced_miniplayer_opacity_invalid_toast"> Opacidad de reproductor debe estar en 0 -100</string>
</patch>
<patch id="layout.theme.ThemeBytecodePatch">
<string name="revanced_gradient_loading_screen_title">Activar la pantalla de carga del degradado</string>

View File

@@ -213,6 +213,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Piilota infokorttien osio</string>
<string name="revanced_hide_info_cards_section_summary_on">Infokorttien osio on piilotettu</string>
<string name="revanced_hide_info_cards_section_summary_off">Infokorttien osio näytetään</string>
<string name="revanced_hide_key_concepts_section_summary_on">\'Keskeiset käsitteet\' -osio on piilotettu</string>
<string name="revanced_hide_key_concepts_section_summary_off">\'Keskeiset käsitteet\' -osio näytetään</string>
<string name="revanced_hide_transcript_section_title">Piilota Transkriptio-osio</string>
<string name="revanced_hide_transcript_section_summary_on">Transkriptio-osio on piilotettu</string>
<string name="revanced_hide_transcript_section_summary_off">Transkriptio-osio näytetään</string>

View File

@@ -213,6 +213,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Masquer les cartes d\'information</string>
<string name="revanced_hide_info_cards_section_summary_on">Les cartes d\'information sont masquées</string>
<string name="revanced_hide_info_cards_section_summary_off">Les cartes d\'information sont affichées</string>
<string name="revanced_hide_key_concepts_section_title">Masquer la section \"concepts clés\"</string>
<string name="revanced_hide_key_concepts_section_summary_on">La section \"Concepts clé\" est masquée</string>
<string name="revanced_hide_key_concepts_section_summary_off">La section \"Concepts clé\" est affichée</string>
<string name="revanced_hide_transcript_section_title">Masquer la section de transcription</string>
<string name="revanced_hide_transcript_section_summary_on">La section transcription est masquée</string>
<string name="revanced_hide_transcript_section_summary_off">La section transcription est affichée</string>

View File

@@ -212,6 +212,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Infó kártyák rész elrejtése</string>
<string name="revanced_hide_info_cards_section_summary_on">Az infó kártyák rész el van rejtve</string>
<string name="revanced_hide_info_cards_section_summary_off">Az infó kártyák rész látható</string>
<string name="revanced_hide_key_concepts_section_title">A „Kulcsfogalmak” szakasz elrejtése</string>
<string name="revanced_hide_key_concepts_section_summary_on">A „Kulcsfogalmak” szakasz el van rejtve</string>
<string name="revanced_hide_key_concepts_section_summary_off">Megjelenik a „Kulcsfogalmak” rész</string>
<string name="revanced_hide_transcript_section_title">Az Átirat szakasz elrejtése</string>
<string name="revanced_hide_transcript_section_summary_on">Az átirat rész el van rejtve</string>
<string name="revanced_hide_transcript_section_summary_off">Az átirat rész megjelenik</string>

View File

@@ -864,6 +864,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_new_segment_choose_category">Pilih kategori segmen</string>
<string name="revanced_sb_new_segment_disabled_category">Kategori dinonaktifkan di pengaturan. Aktifkan untuk kirim.</string>
<string name="revanced_sb_new_segment_title">Segmen SponsorBlock Baru</string>
<string name="revanced_sb_new_segment_mark_time_as_question">Tetapkan %s sebagai awal atau akhir segmen baru?</string>
<string name="revanced_sb_new_segment_mark_start">awal</string>
<string name="revanced_sb_new_segment_mark_end">akhir</string>
<string name="revanced_sb_new_segment_now">sekarang</string>
@@ -919,15 +920,29 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_app_version_target_title">Target versi app yang dipalsukan</string>
<!-- 'RYD' is 'Return YouTube Dislike' -->
<string name="revanced_spoof_app_version_target_entry_1">18.33.40 - Kembalikan RYD pada mode incognito Shorts</string>
<string name="revanced_spoof_app_version_target_entry_2">18.20.39 - Pulihkan menu kecepatan &amp; kualitas video lebar</string>
<string name="revanced_spoof_app_version_target_entry_3">18.09.39 - Pulihkan tab perpustakaan</string>
<string name="revanced_spoof_app_version_target_entry_4">17.41.37 - Pulihkan rak daftar putar lama</string>
<string name="revanced_spoof_app_version_target_entry_5">17.33.42 - Mengembalikan tata letak UI lama</string>
</patch>
<patch id="layout.startpage.ChangeStartPagePatch">
<string name="revanced_start_page_title">Tetapkan halaman awal</string>
<string name="revanced_start_page_entry_0">Bawaan</string>
<!-- 'Home' should be translated using the same localized wording YouTube displays for the home tab. -->
<string name="revanced_start_page_entry_1">Beranda</string>
<string name="revanced_start_page_entry_2">Pencarian</string>
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays for the subscriptions tab. -->
<string name="revanced_start_page_entry_3">Langganan</string>
<string name="revanced_start_page_entry_4">Jelajahi</string>
<!-- 'You' should be translated using the same localized wording YouTube displays for the You (library) tab. -->
<string name="revanced_start_page_entry_6">Tab Anda</string>
<string name="revanced_start_page_entry_7">Video yang disukai</string>
<!-- 'History' should be translated using the same localized wording YouTube displays for the 'history' section in the 'You' tab. -->
<string name="revanced_start_page_entry_8">Riwayat</string>
<string name="revanced_start_page_entry_9">Sedang tren</string>
</patch>
<patch id="layout.startupshortsreset.DisableResumingShortsOnStartupPatch">
<string name="revanced_disable_resuming_shorts_player_title">Matikan melanjutkan pemutar video Shorts</string>
</patch>
<patch id="layout.tablet.EnableTabletLayoutPatch">
</patch>

View File

@@ -211,6 +211,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Nascondi sezione schede info</string>
<string name="revanced_hide_info_cards_section_summary_on">La sezione delle schede informative è nascosta</string>
<string name="revanced_hide_info_cards_section_summary_off">La sezione delle schede informative è mostrata</string>
<string name="revanced_hide_key_concepts_section_title">Nascondi sezione \'Concetti chiave\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">La sezione \'Concetti chiave\' è nascosta</string>
<string name="revanced_hide_key_concepts_section_summary_off">La sezione \'Concetti chiave\' è mostrata</string>
<string name="revanced_hide_transcript_section_title">Nascondi sezione Trascrizione</string>
<string name="revanced_hide_transcript_section_summary_on">La sezione della trascrizione è nascosta</string>
<string name="revanced_hide_transcript_section_summary_off">La sezione della trascrizione è mostrata</string>

View File

@@ -212,6 +212,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">情報カードセクションを隠す</string>
<string name="revanced_hide_info_cards_section_summary_on">情報カードセクションは非表示です</string>
<string name="revanced_hide_info_cards_section_summary_off">カード情報セクションが表示されます</string>
<string name="revanced_hide_key_concepts_section_title">「キーコンセプト」セクションを非表示</string>
<string name="revanced_hide_key_concepts_section_summary_on">「キーコンセプト」セクションは非表示です</string>
<string name="revanced_hide_key_concepts_section_summary_off">「キーコンセプト」セクションが表示されます</string>
<string name="revanced_hide_transcript_section_title">トランスクリプトセクションを隠す</string>
<string name="revanced_hide_transcript_section_summary_on">トランスクリプトセクションは非表示です</string>
<string name="revanced_hide_transcript_section_summary_off">トランスクリプトセクションが表示されます</string>

View File

@@ -172,9 +172,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_panels_title">정보 패널 숨기기</string>
<string name="revanced_hide_info_panels_summary_on">정보 패널이 숨겨집니다</string>
<string name="revanced_hide_info_panels_summary_off">정보 패널이 노출됩니다</string>
<string name="revanced_hide_medical_panels_title">의학 정보 패널 숨기기</string>
<string name="revanced_hide_medical_panels_summary_on">의학 정보 패널이 숨겨집니다</string>
<string name="revanced_hide_medical_panels_summary_off">의학 정보 패널이 노출됩니다</string>
<string name="revanced_hide_medical_panels_title">보건 정보 패널 숨기기</string>
<string name="revanced_hide_medical_panels_summary_on">보건 정보 패널이 숨겨집니다</string>
<string name="revanced_hide_medical_panels_summary_off">보건 정보 패널이 노출됩니다</string>
<string name="revanced_hide_channel_bar_title">채널바 숨기기</string>
<string name="revanced_hide_channel_bar_summary_on">채널바가 숨겨집니다</string>
<string name="revanced_hide_channel_bar_summary_off">채널바가 노출됩니다</string>
@@ -214,6 +214,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">크리에이터 정보 카드 섹션 숨기기</string>
<string name="revanced_hide_info_cards_section_summary_on">크리에이터 정보 카드 섹션이 숨겨집니다</string>
<string name="revanced_hide_info_cards_section_summary_off">크리에이터 정보 카드 섹션이 노출됩니다</string>
<string name="revanced_hide_key_concepts_section_title">주요 개념 섹션 숨기기</string>
<string name="revanced_hide_key_concepts_section_summary_on">주요 개념 섹션이 숨겨집니다</string>
<string name="revanced_hide_key_concepts_section_summary_off">주요 개념 섹션이 노출됩니다</string>
<string name="revanced_hide_transcript_section_title">스크립트 섹션 숨기기</string>
<string name="revanced_hide_transcript_section_summary_on">스크립트 섹션이 숨겨집니다</string>
<string name="revanced_hide_transcript_section_summary_off">스크립트 섹션이 노출됩니다</string>
@@ -300,10 +303,10 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_share_copy_url_success">URL을 클립보드에 복사하였습니다</string>
<string name="revanced_share_copy_url_timestamp_success">타임스탬프를 표기한 URL을 클립보드에 복사하였습니다</string>
<string name="revanced_copy_video_url_title">동영상 URL 복사 버튼 표시하기</string>
<string name="revanced_copy_video_url_summary_on">버튼을 표시합니다. \n버튼을 눌러서 동영상 URL을 복사할 수 있습니다. 길게 누르면 타임스탬프를 표기한 동영상 URL이 복사됩니다</string>
<string name="revanced_copy_video_url_summary_on">버튼을 표시합니다. 버튼을 눌러서 동영상 URL을 복사할 수 있습니다. 길게 누르면 타임스탬프를 표기한 동영상 URL이 복사됩니다</string>
<string name="revanced_copy_video_url_summary_off">버튼을 표시하지 않습니다</string>
<string name="revanced_copy_video_url_timestamp_title">타임스탬프를 표기한 URL 복사 버튼 표시하기</string>
<string name="revanced_copy_video_url_timestamp_summary_on">버튼을 표시합니다. \n버튼을 눌러서 타임스탬프를 표기한 동영상 URL을 복사할 수 있습니다. 길게 누르면 타임스탬프를 표기하지 않은 동영상 URL이 복사됩니다</string>
<string name="revanced_copy_video_url_timestamp_summary_on">버튼을 표시합니다. 버튼을 눌러서 타임스탬프를 표기한 동영상 URL을 복사할 수 있습니다. 길게 누르면 타임스탬프를 표기하지 않은 동영상 URL이 복사됩니다</string>
<string name="revanced_copy_video_url_timestamp_summary_off">버튼을 표시하지 않습니다</string>
</patch>
<patch id="interaction.dialog.RemoveViewerDiscretionDialogPatch">
@@ -993,7 +996,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_seekbar_custom_color_invalid">잘못된 재생바 색상 값이므로 기본값으로 초기화합니다</string>
</patch>
<patch id="layout.thumbnails.BypassImageRegionRestrictions">
<string name="revanced_bypass_image_region_restrictions_title">이미지 표시 국가 제한 우회하기</string>
<string name="revanced_bypass_image_region_restrictions_title">이미지 표시 제한 국가 우회하기</string>
<string name="revanced_bypass_image_region_restrictions_summary_on">이미지 호스트로 yt4.ggpht.com를 사용합니다</string>
<string name="revanced_bypass_image_region_restrictions_summary_off">기본 이미지 호스트를 사용합니다\n\n이 설정을 활성화하면 일부 국가에서 차단된 이미지를 수신할 수 있습니다 (채널 프로필 사진, 커뮤니티 게시물 이미지, etc.)</string>
</patch>
@@ -1006,11 +1009,11 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_alt_thumbnail_library_title">나(보관함) 탭</string>
<string name="revanced_alt_thumbnail_player_title">플레이어 구성요소: 재생목록, 관련 동영상, etc.</string>
<string name="revanced_alt_thumbnail_search_title">검색 결과</string>
<string name="revanced_alt_thumbnail_options_entry_1">본 썸네일</string>
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow &amp; 본 썸네일</string>
<string name="revanced_alt_thumbnail_options_entry_1">본 썸네일</string>
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow &amp; 본 썸네일</string>
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow &amp; 동영상 스틸 컷 썸네일</string>
<string name="revanced_alt_thumbnail_options_entry_4">동영상 스틸 컷 썸네일</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow는 YouTube 동영상에 크라우드 소싱된 썸네일을 제공합니다. 이러한 썸네일은 YouTube에서 제공하는 썸네일보다 관련성이 높은 경우가 많습니다\n\n이 설정을 활성화하면 동영상 URL이 API 서버로 전송되며 다른 데이터는 전송되지 않습니다. 동영상에 DeArrow 썸네일이 없는 경우에는 본 썸네일 또는 동영상 스틸 컷 썸네일을 표시합니다\n\nDeArrow에 대해 자세히 알아보려면 여기를 누르세요</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow는 YouTube 동영상에 크라우드 소싱된 썸네일을 제공합니다. 이러한 썸네일은 YouTube에서 제공하는 썸네일보다 관련성이 높은 경우가 많습니다\n\n이 설정을 활성화하면 동영상 URL이 API 서버로 전송되며 다른 데이터는 전송되지 않습니다. 동영상에 DeArrow 썸네일이 없는 경우에는 본 썸네일 또는 동영상 스틸 컷 썸네일을 표시합니다\n\nDeArrow에 대해 자세히 알아보려면 여기를 누르세요</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">API를 사용할 수 없을 때, 팝업 메시지 표시하기</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">DeArrow를 사용할 수 없을 때, 팝업 메시지를 표시합니다</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">DeArrow를 사용할 수 없을 때, 팝업 메시지를 표시하지 않습니다</string>

View File

@@ -211,6 +211,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Skjule seksjonen for informasjonskort</string>
<string name="revanced_hide_info_cards_section_summary_on">Informasjonskort seksjonen er skjult</string>
<string name="revanced_hide_info_cards_section_summary_off">Informasjonskort delen vises</string>
<string name="revanced_hide_key_concepts_section_title">Skjul seksjonen «Key concepts»</string>
<string name="revanced_hide_transcript_section_title">Skjul transkripsjonsseksjonen</string>
<string name="revanced_hide_transcript_section_summary_on">Transkripsjonsseksjonen er skjult</string>
<string name="revanced_hide_transcript_section_summary_off">Transskripsjonsseksjonen vises</string>
@@ -896,7 +897,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_color_reset">Farge tilbakestilt</string>
<string name="revanced_sb_color_invalid">Ugyldig fargekode</string>
<string name="revanced_sb_reset_color">Tilbakestill farge</string>
<string name="revanced_sb_reset">Reset</string>
<string name="revanced_sb_reset">Tilbakestill</string>
<string name="revanced_sb_about">Om</string>
<string name="revanced_sb_about_api_sum">Data leveres av SponsorBlock API. Trykk her for å lære mer og se nedlastinger for andre plattformer</string>
</patch>

View File

@@ -213,6 +213,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Verberg info kaarten sectie</string>
<string name="revanced_hide_info_cards_section_summary_on">Sectie informatiekaarten is verborgen</string>
<string name="revanced_hide_info_cards_section_summary_off">Sectie informatiekaarten wordt weergegeven</string>
<string name="revanced_hide_key_concepts_section_title">Verberg \'Sleutelbegrippen\' sectie</string>
<string name="revanced_hide_key_concepts_section_summary_on">\'Sleutelbegrippen\' sectie is verborgen</string>
<string name="revanced_hide_key_concepts_section_summary_off">\'Sleutelbegrippen\' sectie wordt weergegeven</string>
<string name="revanced_hide_transcript_section_title">Transcriptsectie verbergen</string>
<string name="revanced_hide_transcript_section_summary_on">Transcriptsectie is verborgen</string>
<string name="revanced_hide_transcript_section_summary_off">Transcriptsectie wordt weergegeven</string>
@@ -376,29 +379,30 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_like_dislike_button_summary_on">Leuk- en niet-leuk-knoppen zijn verborgen</string>
<string name="revanced_hide_like_dislike_button_summary_off">Leuk- en niet-leuk-knoppen worden weergegeven</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_share_button_title">Verberg deel</string>
<string name="revanced_hide_share_button_summary_on">Share knop is verborgen</string>
<string name="revanced_hide_share_button_summary_off">Share knop wordt weergegeven</string>
<string name="revanced_hide_share_button_title">Verberg delen</string>
<string name="revanced_hide_share_button_summary_on">Deel knop is verborgen</string>
<string name="revanced_hide_share_button_summary_off">Deel knop wordt weergegeven</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
<string name="revanced_hide_report_button_title">Rapport verbergen</string>
<string name="revanced_hide_report_button_summary_on">Rapportknop is verborgen</string>
<string name="revanced_hide_report_button_summary_off">Rapportknop wordt weergegeven</string>
<string name="revanced_hide_report_button_title">Melden verbergen</string>
<string name="revanced_hide_report_button_summary_on">Melden is verborgen</string>
<string name="revanced_hide_report_button_summary_off">Melden wordt weergegeven</string>
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_remix_button_title">Verberg Remix</string>
<string name="revanced_hide_remix_button_summary_on">Remix knop is verborgen</string>
<string name="revanced_hide_remix_button_summary_off">Remix knop wordt weergegeven</string>
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_download_button_title">Download verbergen</string>
<string name="revanced_hide_download_button_summary_on">Download knop is verborgen</string>
<string name="revanced_hide_download_button_summary_off">Download knop wordt weergegeven</string>
<string name="revanced_hide_download_button_title">Downloaden verbergen</string>
<string name="revanced_hide_download_button_summary_on">Downloaden knop is verborgen</string>
<string name="revanced_hide_download_button_summary_off">Downloaden knop wordt weergegeven</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Bedankt verbergen</string>
<string name="revanced_hide_thanks_button_summary_on">Bedankt knop is verborgen</string>
<string name="revanced_hide_thanks_button_summary_off">Bedankt knop wordt weergegeven</string>
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_clip_button_summary_on">Clip knop is verborgen</string>
<string name="revanced_hide_clip_button_summary_off">Clip knop wordt weergegeven</string>
<string name="revanced_hide_clip_button_title">Fragment verbergen</string>
<string name="revanced_hide_clip_button_summary_on">Fragment knop is verborgen</string>
<string name="revanced_hide_clip_button_summary_off">Fragment knop wordt weergegeven</string>
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_playlist_button_title">Verberg opslaan in afspeellijst</string>
<string name="revanced_hide_playlist_button_summary_on">Opslaan naar afspeellijst knop is verborgen</string>
@@ -631,8 +635,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_shorts_remix_button_summary_off">Remix knop wordt weergegeven</string>
<!-- 'share' should be translated using the same localized wording YouTube displays for the button. -->
<string name="revanced_hide_shorts_share_button_title">Verberg share knop</string>
<string name="revanced_hide_shorts_share_button_summary_on">Share knop is verborgen</string>
<string name="revanced_hide_shorts_share_button_summary_off">Share knop wordt weergegeven</string>
<string name="revanced_hide_shorts_share_button_summary_on">Deel knop is verborgen</string>
<string name="revanced_hide_shorts_share_button_summary_off">Deel knop wordt weergegeven</string>
<string name="revanced_hide_shorts_info_panel_title">Verberg informatiepaneel</string>
<string name="revanced_hide_shorts_info_panel_summary_on">Info paneel is verborgen</string>
<string name="revanced_hide_shorts_info_panel_summary_off">Info paneel wordt weergegeven</string>

View File

@@ -213,6 +213,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Ukryj sekcję kart informacyjnych</string>
<string name="revanced_hide_info_cards_section_summary_on">Sekcja kart informacyjnych jest ukryta</string>
<string name="revanced_hide_info_cards_section_summary_off">Sekcja kart informacyjnych jest wyświetlana</string>
<string name="revanced_hide_key_concepts_section_title">Ukryj sekcję \'Koncepcje kluczowe\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">Sekcja \"Koncepcje kluczowe\" jest ukryta</string>
<string name="revanced_hide_key_concepts_section_summary_off">Sekcja \"Koncepcje kluczowe\" jest pokazana</string>
<string name="revanced_hide_transcript_section_title">Ukryj sekcję transkryptu</string>
<string name="revanced_hide_transcript_section_summary_on">Sekcja transkryptu jest ukryta</string>
<string name="revanced_hide_transcript_section_summary_off">Sekcja transkryptu jest wyświetlana</string>

View File

@@ -211,6 +211,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Esconder seção de cartões de informações</string>
<string name="revanced_hide_info_cards_section_summary_on">Seção de cartões de informações está escondida</string>
<string name="revanced_hide_info_cards_section_summary_off">Mostrar a seção de cartões de informações</string>
<string name="revanced_hide_key_concepts_section_title">Ocultar seção \'Temas principais\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">Secção \'Conceitos-chave\' está oculta</string>
<string name="revanced_hide_key_concepts_section_summary_off">A seção \'conceitos principais\' é mostrada</string>
<string name="revanced_hide_transcript_section_title">Ocultar seção de transcrição</string>
<string name="revanced_hide_transcript_section_summary_on">Seção de transcrição escondida</string>
<string name="revanced_hide_transcript_section_summary_off">Seção de transcrição exibida</string>

View File

@@ -213,6 +213,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Ascunde secțiunea carduri de informații</string>
<string name="revanced_hide_info_cards_section_summary_on">Secţiunea carduri de informaţii este ascunsă</string>
<string name="revanced_hide_info_cards_section_summary_off">Secțiunea cartonașelor de informații este afișată</string>
<string name="revanced_hide_key_concepts_section_title">Ascunde secţiunea \"Concepte cheie\"</string>
<string name="revanced_hide_key_concepts_section_summary_on">Secțiunea „Concepte cheie” este ascunsă</string>
<string name="revanced_hide_key_concepts_section_summary_off">Secțiunea „Concepte cheie” este afișată</string>
<string name="revanced_hide_transcript_section_title">Ascunde secțiunea de Transcriere</string>
<string name="revanced_hide_transcript_section_summary_on">Secțiunea de transcriere este ascunsă</string>
<string name="revanced_hide_transcript_section_summary_off">Secțiunea de Transcriere este afișată</string>
@@ -908,7 +911,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_color_reset">Resetare culoare</string>
<string name="revanced_sb_color_invalid">Cod culoare nevalid</string>
<string name="revanced_sb_reset_color">Resetare culoare</string>
<string name="revanced_sb_reset">Reset</string>
<string name="revanced_sb_reset">Resetează</string>
<string name="revanced_sb_about">Despre</string>
<string name="revanced_sb_about_api_sum">Datele sunt furnizate de API-ul SponsorBlock. Apasă aici pentru a afla mai multe și a vedea descărcările pentru alte platforme</string>
</patch>

View File

@@ -213,6 +213,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Раздел подсказок</string>
<string name="revanced_hide_info_cards_section_summary_on">Раздел подсказок в описании видео скрыт</string>
<string name="revanced_hide_info_cards_section_summary_off">Раздел подсказок в описании видео отображен</string>
<string name="revanced_hide_key_concepts_section_title">Раздел \"Ключевые понятия\"</string>
<string name="revanced_hide_key_concepts_section_summary_on">Раздел \"Ключевые понятия\" скрыт</string>
<string name="revanced_hide_key_concepts_section_summary_off">Раздел \"Ключевые понятия\" отображен</string>
<string name="revanced_hide_transcript_section_title">Раздел расшифровки</string>
<string name="revanced_hide_transcript_section_summary_on">Раздел расшифровки в описании видео скрыт</string>
<string name="revanced_hide_transcript_section_summary_off">Раздел расшифровки в описании видео отображен</string>
@@ -793,19 +796,19 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_diff_segments">Изменить поведение сегмента</string>
<string name="revanced_sb_segments_sponsor">Спонсорская реклама</string>
<string name="revanced_sb_segments_sponsor_sum">Рекламные интеграции, реферальные ссылки и прямая реклама. Не для саморекламы или рекомендаций различных событий/создателей/сайтов/продуктов, которые нравятся автору видео</string>
<string name="revanced_sb_segments_selfpromo">Бесплатная реклама / Самореклама</string>
<string name="revanced_sb_segments_selfpromo">Бесплатная реклама / самореклама</string>
<string name="revanced_sb_segments_selfpromo_sum">Подобно \"Спонсорской рекламе\", за исключением неоплачиваемой рекламы или саморекламы. Включает разделы о товарах, пожертвованиях или информации о том, с кем сотрудничал автор</string>
<string name="revanced_sb_segments_interaction">Напоминание о взаимодействии (подписка)</string>
<string name="revanced_sb_segments_interaction_sum">Короткое напоминание поставить лайк, подписаться на канал или соцсети посреди видеоролика. Если эта вставка длительная или о чем-то конкретном, она должна классифицироваться как самореклама</string>
<string name="revanced_sb_segments_highlight">Основной момент</string>
<string name="revanced_sb_segments_highlight_sum">Часть видео, которая интересна большинству людей</string>
<string name="revanced_sb_segments_intro">Антракт / Вступительная анимация </string>
<string name="revanced_sb_segments_intro">Антракт / вступительная анимация </string>
<string name="revanced_sb_segments_intro_sum">Интервал без фактического содержания. Может быть паузой, статическим кадром или повторяющейся анимацией. Не включает переходы, содержащие информацию</string>
<string name="revanced_sb_segments_outro">Конечные заставки / Титры</string>
<string name="revanced_sb_segments_outro">Конечные заставки / титры</string>
<string name="revanced_sb_segments_outro_sum">Титры или время появления конечных заставок YouTube. Не для выводов с информацией</string>
<string name="revanced_sb_segments_preview">Предпросмотр / Пересказ / Завязка</string>
<string name="revanced_sb_segments_preview">Предпросмотр / пересказ / завязка</string>
<string name="revanced_sb_segments_preview_sum">Фрагменты, повторяющие текущее видео или предыдущие серии</string>
<string name="revanced_sb_segments_filler">Отвлеченные темы / Шутки</string>
<string name="revanced_sb_segments_filler">Отвлеченные темы / шутки</string>
<string name="revanced_sb_segments_filler_sum">Сегменты, которые увеличивают длительность видео за счет отвлеченных тем или шуток, но не требуются для понимания основного содержания. Не включает сегменты, объясняющие контекст или предысторию</string>
<string name="revanced_sb_segments_nomusic">Музыка: сегмент без музыки</string>
<string name="revanced_sb_segments_nomusic_sum">Только для использования в музыкальных видеороликах. Разделы музыкальных видео без музыки, которые еще не охвачены другой категорией</string>
@@ -859,8 +862,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_sb_vote_failed_timeout">Невозможно проголосовать за сегмент (время API истекло)</string>
<string name="revanced_sb_vote_failed_unknown_error">Невозможно проголосовать за сегмент (статус: %1$d %2$s)</string>
<string name="revanced_sb_vote_failed_forbidden">Невозможно проголосовать за сегмент: %s</string>
<string name="revanced_sb_vote_upvote">Проголосовать за</string>
<string name="revanced_sb_vote_downvote">Проголосовать против</string>
<string name="revanced_sb_vote_upvote">Голос \"за\"</string>
<string name="revanced_sb_vote_downvote">Голос \"против\"</string>
<string name="revanced_sb_vote_category">Изменить категорию</string>
<string name="revanced_sb_vote_no_segments">Нет сегментов для голосования</string>
<string name="revanced_sb_new_segment_choose_category">Выбрать категорию сегмента</string>

View File

@@ -1119,6 +1119,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_client_summary_off">Клијент није лажиран\n\nРепродукција видеа можда неће радити</string>
<string name="revanced_spoof_client_user_dialog_message">Искључивање овог подешавања можда ће изазвати проблеме са репродукцијом видеа.</string>
<string name="revanced_spoof_client_use_ios_title">Лажиран клијент на iOS</string>
<string name="revanced_spoof_client_use_ios_summary_on">Клијент је тренутно лажиран на iOS\n\nНежељени ефекти обухватају:\n• Нема HDR видеа\n• Виши квалитети видеа можда недостају\n• Стримови уживо не могу да се репродукују само као аудио</string>
<string name="revanced_spoof_client_use_ios_summary_off">Клијент је тренутно лажиран на Android VR\n\nНежељени ефекти обухватају:\н• Нема HDR видеа\n• Дечји видео снимци се не репродукују\n• Паузирани видео снимци могу насумично да се настављају\n• Сличице на траци за премотавање Shorts видеа лошег квалитета\n• Дугме за радњу „Преузми“ је скривено\n• Картице завршног екрана су скривене</string>
<string name="revanced_spoof_client_storyboard_timeout">Сличице у лажираном клијенту нису доступне (API истекао)</string>
<string name="revanced_spoof_client_storyboard_io_exception">Сличице у лажираном клијенту привремено нису доступне: %s</string>
</patch>

View File

@@ -213,6 +213,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Dölj sektion för infokort</string>
<string name="revanced_hide_info_cards_section_summary_on">Sektionen för infokort är dold</string>
<string name="revanced_hide_info_cards_section_summary_off">Informationskortssektionen är synlig</string>
<string name="revanced_hide_key_concepts_section_title">Dölj sektionen \'Nyckelbegrepp\'</string>
<string name="revanced_hide_key_concepts_section_summary_on">Avsnittet \"Nyckelbegrepp\" är dolt</string>
<string name="revanced_hide_key_concepts_section_summary_off">Avsnittet \"Nyckelbegrepp\" visas</string>
<string name="revanced_hide_transcript_section_title">Dölj avskrift sektion</string>
<string name="revanced_hide_transcript_section_summary_on">Avskrift sektionen är dold</string>
<string name="revanced_hide_transcript_section_summary_off">Transkriptsektionen är synlig</string>

View File

@@ -211,6 +211,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Приховати секцію інформаційних карток</string>
<string name="revanced_hide_info_cards_section_summary_on">Секцію інформаційних карток приховано</string>
<string name="revanced_hide_info_cards_section_summary_off">Секція інформаційних карток показується</string>
<string name="revanced_hide_key_concepts_section_title">Приховати секцію \"Основні поняття\"</string>
<string name="revanced_hide_key_concepts_section_summary_on">Секцію \"Основні поняття\" приховано</string>
<string name="revanced_hide_key_concepts_section_summary_off">Секція \"Основні поняття\" показується</string>
<string name="revanced_hide_transcript_section_title">Приховати секцію \"Текст відео\"</string>
<string name="revanced_hide_transcript_section_summary_on">Секцію \"Текст відео\" приховано</string>
<string name="revanced_hide_transcript_section_summary_off">Секція \"Текст відео\" показується</string>
@@ -1006,7 +1009,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_alt_thumbnail_options_entry_2">DeArrow &amp; Оригінальні прев\'ю</string>
<string name="revanced_alt_thumbnail_options_entry_3">DeArrow &amp; Стоп-кадри</string>
<string name="revanced_alt_thumbnail_options_entry_4">Стоп-кадри</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow надає краудсорсингові мініатюри для відео з YouTube. Ці прев\'ю часто більш релевантні, ніж ті, що надаються YouTube\nЯкщо ввімкнено, серверу API надсилатимуться лише посилання на відео, і більше жодних інших даних. Якщо відео не має прев\'ю DeArrow, то відображаються оригінальні або стоп-кадри\n\nНатисніть тут, щоб дізнатися більше про DeArrow</string>
<string name="revanced_alt_thumbnail_dearrow_about_summary">DeArrow надає краудсорсингові прев\'ю для відео YouTube. Ці прев\'ю часто більш релевантні, ніж ті, що надає YouTube\nЯкщо ввімкнено, серверу API надсилатимуться лише посилання на відео, і більше жодних інших даних. Якщо відео не має прев\'ю DeArrow, то відображаються оригінальні прев\'ю або стоп-кадри\n\nНатисніть тут, щоб дізнатися більше про DeArrow</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_title">Показувати тост, якщо API не доступний</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_on">Тост показується, якщо DeArrow не доступний</string>
<string name="revanced_alt_thumbnail_dearrow_connection_toast_summary_off">Тост не показується, якщо DeArrow не доступний</string>
@@ -1015,7 +1018,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_alt_thumbnail_stills_about_title">Стоп-кадри з відео</string>
<string name="revanced_alt_thumbnail_stills_about_summary">Кадри беруться з початку/середини/кінця кожного відео. Ці зображення вбудовані в YouTube і зовнішній API не використовується</string>
<string name="revanced_alt_thumbnail_stills_fast_title">Використовувати неточні кадри</string>
<string name="revanced_alt_thumbnail_stills_fast_summary_on">Використовуються кадри середньої якості. Мініатюри завантажуватиметься швидше, але прямі трансляції, неопубліковані або дуже старі відео можуть зображатися порожніми мініатюрами</string>
<string name="revanced_alt_thumbnail_stills_fast_summary_on">Використовуються кадри середньої якості. Прев\'ю завантажуватимуться швидше, але прямі трансляції, неопубліковані або дуже старі відео можуть відображатися з порожніми прев\'ю</string>
<string name="revanced_alt_thumbnail_stills_fast_summary_off">Використовуються кадри високої якості</string>
<string name="revanced_alt_thumbnail_stills_time_title">Час відео з якого береться кадр</string>
<string name="revanced_alt_thumbnail_stills_time_entry_1">Початок відео</string>

View File

@@ -1115,6 +1115,8 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_client_summary_off">Máy khách chưa được giả mạo\n\nPhát nền video có thể không hoạt động</string>
<string name="revanced_spoof_client_user_dialog_message">Việc tắt cài đặt này có thể gây ra sự cố phát nền video.</string>
<string name="revanced_spoof_client_use_ios_title">Giả mạo máy khách cho iOS</string>
<string name="revanced_spoof_client_use_ios_summary_on">Hiện tại máy khách đang giả mạo thành iOS\n\nTác dụng phụ bao gồm:\n• Không có video HDR\n• Chất lượng cao hơn cho video có thể thiếu\n• Phát trực tiếp chỉ có âm thanh</string>
<string name="revanced_spoof_client_use_ios_summary_off">Hiện tại máy khách đang giả mạo thành Android VR\n\nTác dụng phụ bao gồm:\n• Không có video HDR\n• Video dành cho trẻ em không phát lắp\n• Video đã tạm dừng có thể ngẫu nhiên phát tiếp\n• Hình thu nhỏ thanh tiến trình Shorts có chất lượng thấp\n• Nút hành động tải xuống luôn ẩn\n• Các thẻ màn hình kết thúc luôn ẩn</string>
<string name="revanced_spoof_client_storyboard_timeout">Hình thu nhỏ giả mạo máy khách không khả dụng (API hết hạn)</string>
<string name="revanced_spoof_client_storyboard_io_exception">Hình thu nhỏ giả mạo máy khách tạm thời không khả dụng: %s</string>
</patch>

View File

@@ -211,6 +211,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">隐藏信息卡片部分</string>
<string name="revanced_hide_info_cards_section_summary_on">信息卡片段已隐藏</string>
<string name="revanced_hide_info_cards_section_summary_off">信息卡片段已显示</string>
<string name="revanced_hide_key_concepts_section_title">隐藏“关键概念”部分</string>
<string name="revanced_hide_key_concepts_section_summary_on">“关键概念”部分已隐藏</string>
<string name="revanced_hide_key_concepts_section_summary_off">\'密钥概念\'部分已显示</string>
<string name="revanced_hide_transcript_section_title">隐藏字幕部分</string>
<string name="revanced_hide_transcript_section_summary_on">字幕部分已隐藏</string>
<string name="revanced_hide_transcript_section_summary_off">显示字幕部分</string>

View File

@@ -211,6 +211,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">隱藏資訊卡區</string>
<string name="revanced_hide_info_cards_section_summary_on">已隱藏資訊卡區</string>
<string name="revanced_hide_info_cards_section_summary_off">已顯示資訊卡區</string>
<string name="revanced_hide_key_concepts_section_title">隱藏關鍵概念部分</string>
<string name="revanced_hide_key_concepts_section_summary_on">已隱藏關鍵概念部分</string>
<string name="revanced_hide_key_concepts_section_summary_off">已顯示關鍵概念部分</string>
<string name="revanced_hide_transcript_section_title">隱藏文字紀錄區</string>
<string name="revanced_hide_transcript_section_summary_on">已隱藏字幕記錄區</string>
<string name="revanced_hide_transcript_section_summary_off">已顯示字幕記錄區</string>

View File

@@ -213,6 +213,9 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_hide_info_cards_section_title">Hide info cards section</string>
<string name="revanced_hide_info_cards_section_summary_on">Info cards section is hidden</string>
<string name="revanced_hide_info_cards_section_summary_off">Info cards section is shown</string>
<string name="revanced_hide_key_concepts_section_title">Hide \'Key concepts\' section</string>
<string name="revanced_hide_key_concepts_section_summary_on">\'Key concepts\' section is hidden</string>
<string name="revanced_hide_key_concepts_section_summary_off">\'Key concepts\' section is shown</string>
<string name="revanced_hide_transcript_section_title">Hide Transcript section</string>
<string name="revanced_hide_transcript_section_summary_on">Transcript section is hidden</string>
<string name="revanced_hide_transcript_section_summary_off">Transcript section is shown</string>
@@ -1132,7 +1135,7 @@ This is because Crowdin requires temporarily flattening this file and removing t
<string name="revanced_spoof_client_summary_off">Client is not spoofed\n\nVideo playback may not work</string>
<string name="revanced_spoof_client_user_dialog_message">Turning off this setting may cause video playback issues.</string>
<string name="revanced_spoof_client_use_ios_title">Spoof client to iOS</string>
<string name="revanced_spoof_client_use_ios_summary_on">Client is currently spoofed to iOS\n\nSide effects include:\n• No HDR video\n• Higher video qualities may be missing\n• Live streams cannot play as audio only</string>
<string name="revanced_spoof_client_use_ios_summary_on">Client is currently spoofed to iOS\n\nSide effects include:\n• HDR video may not be available\n• Watch history may not work</string>
<string name="revanced_spoof_client_use_ios_summary_off">Client is currently spoofed to Android VR\n\nSide effects include:\n• No HDR video\n• Kids videos do not playback\n• Paused videos can randomly resume\n• Low quality Shorts seekbar thumbnails\n• Download action button is hidden\n• End screen cards are hidden</string>
<string name="revanced_spoof_client_storyboard_timeout">Spoof client thumbnails not available (API timed out)</string>
<string name="revanced_spoof_client_storyboard_io_exception">Spoof client thumbnails temporarily not available: %s</string>