chore: Merge branch dev to main (#5617)

This commit is contained in:
LisoUseInAIKyrios
2025-08-19 11:08:46 -04:00
committed by GitHub
155 changed files with 2878 additions and 1572 deletions

View File

@@ -1,3 +1,131 @@
# [5.34.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.12...v5.34.0-dev.13) (2025-08-19)
### Bug Fixes
* **YouTube - Player Controls:** Fix chapter title overlapping the bottom buttons ([#5673](https://github.com/ReVanced/revanced-patches/issues/5673)) ([09ccee7](https://github.com/ReVanced/revanced-patches/commit/09ccee71384df338bbf8acc1097f619a372c4868))
# [5.34.0-dev.13](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.12...v5.34.0-dev.13) (2025-08-18)
### Bug Fixes
* **YouTube - Player Controls:** Fix chapter title overlapping the bottom buttons ([#5673](https://github.com/ReVanced/revanced-patches/issues/5673)) ([09ccee7](https://github.com/ReVanced/revanced-patches/commit/09ccee71384df338bbf8acc1097f619a372c4868))
# [5.34.0-dev.12](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.11...v5.34.0-dev.12) (2025-08-18)
### Bug Fixes
* **YouTube:** Use correct fade out animation when tapping to dismiss the video overlay ([#5670](https://github.com/ReVanced/revanced-patches/issues/5670)) ([cce6737](https://github.com/ReVanced/revanced-patches/commit/cce6737f627fc7621bbde50a5653b6af14c6f31a))
# [5.34.0-dev.11](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.10...v5.34.0-dev.11) (2025-08-16)
### Bug Fixes
* **YouTube - SponsorBlock:** Do not hide voting or create button when the video ends ([6aba4e2](https://github.com/ReVanced/revanced-patches/commit/6aba4e284de9bb94b49eea8be2baf2870eecbbcf))
# [5.34.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.9...v5.34.0-dev.10) (2025-08-16)
### Bug Fixes
* **YouTube - Video playback:** Disable HDR video does not disable Dolby Vision HDR ([#5661](https://github.com/ReVanced/revanced-patches/issues/5661)) ([6dab988](https://github.com/ReVanced/revanced-patches/commit/6dab98810645b96bd0387ba7d607e5d8ffb1b5bb))
### Features
* **YouTube - Hide video action buttons:** Add "Hide Promote button" setting ([1959396](https://github.com/ReVanced/revanced-patches/commit/1959396a53f4c07b94acddc5c0ee6cdf7ade7c7b))
# [5.34.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.9...v5.34.0-dev.10) (2025-08-16)
### Features
* **YouTube - Hide video action buttons:** Add "Hide Promote button" setting ([1959396](https://github.com/ReVanced/revanced-patches/commit/1959396a53f4c07b94acddc5c0ee6cdf7ade7c7b))
# [5.34.0-dev.10](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.9...v5.34.0-dev.10) (2025-08-16)
### Features
* **YouTube - Hide video action buttons:** Add "Hide Promote button" setting ([1959396](https://github.com/ReVanced/revanced-patches/commit/1959396a53f4c07b94acddc5c0ee6cdf7ade7c7b))
# [5.34.0-dev.9](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.8...v5.34.0-dev.9) (2025-08-16)
### Features
* **YouTube - Hide video action buttons:** Add "Hide Hype button" setting ([f13f377](https://github.com/ReVanced/revanced-patches/commit/f13f3770e7c4fd5bff8f3e224fb1b1ead50a3c18))
# [5.34.0-dev.8](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.7...v5.34.0-dev.8) (2025-08-15)
### Features
* **NU.nl:** Support latest app version ([#5643](https://github.com/ReVanced/revanced-patches/issues/5643)) ([7338e4a](https://github.com/ReVanced/revanced-patches/commit/7338e4a5a99f913256120d0d58fede3aa4ee8922))
* **YouTube:** Add `Disable sign in to TV popup` patch ([#5639](https://github.com/ReVanced/revanced-patches/issues/5639)) ([d0e5bd0](https://github.com/ReVanced/revanced-patches/commit/d0e5bd0479a8910b081c483ed2a6ab4d7134e3c3))
# [5.34.0-dev.7](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.6...v5.34.0-dev.7) (2025-08-13)
### Bug Fixes
* **YouTube - Video quality:** Fix additional incorrect quality resolutions used by YouTube ([a2a1fbe](https://github.com/ReVanced/revanced-patches/commit/a2a1fbe2959be8334c54cfc3426c24a960c55c8f))
# [5.34.0-dev.6](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.5...v5.34.0-dev.6) (2025-08-11)
### Bug Fixes
* **YouTube - Video quality:** Show FHD+ icon for 1080p 60fps enhanced bitrate ([76bed37](https://github.com/ReVanced/revanced-patches/commit/76bed3734093713af24ef065d5ffc5b1cd83f29a))
# [5.34.0-dev.5](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.4...v5.34.0-dev.5) (2025-08-10)
### Features
* **YouTube - Hide player flyout menu items:** Add option to hide quality flyout menu ([eb55068](https://github.com/ReVanced/revanced-patches/commit/eb5506856a2eaf2a8585e598868ddba3e1429159))
# [5.34.0-dev.4](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.3...v5.34.0-dev.4) (2025-08-10)
### Bug Fixes
* **YouTube - Hide layout components:** Do not hide community posts on channel profiles ([#5634](https://github.com/ReVanced/revanced-patches/issues/5634)) ([9e3d5a2](https://github.com/ReVanced/revanced-patches/commit/9e3d5a2b36106479470f3f69920518b57e8c4dca))
# [5.34.0-dev.3](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.2...v5.34.0-dev.3) (2025-08-09)
### Bug Fixes
* **pixiv - Hide ads:** Constrain patch to last working app target ([d8ea56c](https://github.com/ReVanced/revanced-patches/commit/d8ea56ca4be47df1c43f96ec41b91c800f1d9daf))
# [5.34.0-dev.2](https://github.com/ReVanced/revanced-patches/compare/v5.34.0-dev.1...v5.34.0-dev.2) (2025-08-09)
### Bug Fixes
* **Backdrops:** Remove broken patch that is no longer supported ([#5627](https://github.com/ReVanced/revanced-patches/issues/5627)) ([ebb8332](https://github.com/ReVanced/revanced-patches/commit/ebb83320838aa99dd4417d45a50333dd42c1218a))
### Features
* **YouTube - Playback speed:** Show current playback speed on player speed dialog button ([#5607](https://github.com/ReVanced/revanced-patches/issues/5607)) ([279436a](https://github.com/ReVanced/revanced-patches/commit/279436a3657b50f98bb4cc64dc88dc14e422f204))
# [5.34.0-dev.1](https://github.com/ReVanced/revanced-patches/compare/v5.33.0...v5.34.0-dev.1) (2025-08-08)
### Bug Fixes
* **Twitch:** Constrain patches to last working app targets ([#5373](https://github.com/ReVanced/revanced-patches/issues/5373)) ([29a4748](https://github.com/ReVanced/revanced-patches/commit/29a47481c4efa209a3a53df60613b59a73adbe07))
### Features
* **Instagram:** Support latest app version ([#5611](https://github.com/ReVanced/revanced-patches/issues/5611)) ([26fe690](https://github.com/ReVanced/revanced-patches/commit/26fe690dfbefe6c412c5f81f208a3b1d2fbd7a0a))
# [5.33.0](https://github.com/ReVanced/revanced-patches/compare/v5.32.0...v5.33.0) (2025-08-05)

View File

@@ -329,7 +329,7 @@ public class Utils {
return (R) child;
}
throw new IllegalArgumentException("View with resource name '" + str + "' not found");
throw new IllegalArgumentException("View with resource name not found: " + str);
}
/**

View File

@@ -1,16 +1,20 @@
package app.revanced.extension.youtube
import app.revanced.extension.shared.Logger
import java.util.Collections
/**
* generic event provider class
*/
class Event<T> {
private val eventListeners = mutableSetOf<(T) -> Unit>()
private val eventListeners = Collections.synchronizedSet(mutableSetOf<(T) -> Unit>())
operator fun plusAssign(observer: (T) -> Unit) {
addObserver(observer)
}
fun addObserver(observer: (T) -> Unit) {
Logger.printDebug { "Adding observer: $observer" }
eventListeners.add(observer)
}
@@ -23,7 +27,8 @@ class Event<T> {
}
operator fun invoke(value: T) {
for (observer in eventListeners)
for (observer in eventListeners) {
observer.invoke(value)
}
}
}

View File

@@ -1,5 +1,7 @@
package app.revanced.extension.youtube.patches;
import android.view.Display;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
@@ -8,8 +10,10 @@ public class DisableHdrPatch {
/**
* Injection point.
*/
public static boolean disableHDRVideo() {
return !Settings.DISABLE_HDR_VIDEO.get();
public static int[] disableHdrVideo(Display.HdrCapabilities capabilities) {
return Settings.DISABLE_HDR_VIDEO.get()
? new int[0]
: capabilities.getSupportedHdrTypes();
}
}

View File

@@ -0,0 +1,14 @@
package app.revanced.extension.youtube.patches;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
public class DisableSignInToTvPopupPatch {
/**
* Injection point.
*/
public static boolean disableSignInToTvPopup() {
return Settings.DISABLE_SIGNIN_TO_TV_POPUP.get();
}
}

View File

@@ -57,11 +57,4 @@ public class PlayerControlsPatch {
private static void fullscreenButtonVisibilityChanged(boolean isVisible) {
// Code added during patching.
}
/**
* Injection point.
*/
public static String getPlayerTopControlsLayoutResourceName(String original) {
return "default";
}
}

View File

@@ -0,0 +1,18 @@
package app.revanced.extension.youtube.patches;
import androidx.annotation.Nullable;
import app.revanced.extension.youtube.shared.PlayerControlsVisibility;
@SuppressWarnings("unused")
public class PlayerControlsVisibilityHookPatch {
/**
* Injection point.
*/
public static void setPlayerControlsVisibility(@Nullable Enum<?> youTubePlayerControlsVisibility) {
if (youTubePlayerControlsVisibility == null) return;
PlayerControlsVisibility.setFromString(youTubePlayerControlsVisibility.name());
}
}

View File

@@ -1,12 +1,18 @@
package app.revanced.extension.youtube.patches;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.google.android.libraries.youtube.innertube.model.media.VideoQuality;
import java.lang.ref.WeakReference;
import java.util.Arrays;
import java.util.Objects;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.youtube.Event;
import app.revanced.extension.youtube.shared.ShortsPlayerState;
import app.revanced.extension.youtube.shared.VideoState;
/**
@@ -16,11 +22,30 @@ import app.revanced.extension.youtube.shared.VideoState;
public final class VideoInformation {
public interface PlaybackController {
// Methods are added to YT classes during patching.
boolean seekTo(long videoTime);
void seekToRelative(long videoTimeOffset);
// Methods are added during patching.
boolean patch_seekTo(long videoTime);
void patch_seekToRelative(long videoTimeOffset);
}
/**
* Interface to use obfuscated methods.
*/
public interface VideoQualityMenuInterface {
// Method is added during patching.
void patch_setQuality(VideoQuality quality);
}
/**
* Video resolution of the automatic quality option..
*/
public static final int AUTOMATIC_VIDEO_QUALITY_VALUE = -2;
/**
* Video quality names are the same text for all languages.
* Premium can be "1080p Premium" or "1080p60 Premium"
*/
public static final String VIDEO_QUALITY_PREMIUM_NAME = "Premium";
private static final float DEFAULT_YOUTUBE_PLAYBACK_SPEED = 1.0f;
/**
* Prefix present in all Short player parameters signature.
@@ -30,12 +55,10 @@ public final class VideoInformation {
private static WeakReference<PlaybackController> playerControllerRef = new WeakReference<>(null);
private static WeakReference<PlaybackController> mdxPlayerDirectorRef = new WeakReference<>(null);
@NonNull
private static String videoId = "";
private static long videoLength = 0;
private static long videoTime = -1;
@NonNull
private static volatile String playerResponseVideoId = "";
private static volatile boolean playerResponseVideoIdIsShort;
private static volatile boolean videoIdIsShort;
@@ -45,6 +68,44 @@ public final class VideoInformation {
*/
private static float playbackSpeed = DEFAULT_YOUTUBE_PLAYBACK_SPEED;
private static int desiredVideoResolution = AUTOMATIC_VIDEO_QUALITY_VALUE;
private static boolean qualityNeedsUpdating;
/**
* The available qualities of the current video.
*/
@Nullable
private static VideoQuality[] currentQualities;
/**
* The current quality of the video playing.
* This is always the actual quality even if Automatic quality is active.
*/
@Nullable
private static VideoQuality currentQuality;
/**
* The current VideoQualityMenuInterface, set during setVideoQuality.
*/
@Nullable
private static VideoQualityMenuInterface currentMenuInterface;
/**
* Callback for when the current quality changes.
*/
public static final Event<VideoQuality> onQualityChange = new Event<>();
@Nullable
public static VideoQuality[] getCurrentQualities() {
return currentQualities;
}
@Nullable
public static VideoQuality getCurrentQuality() {
return currentQuality;
}
/**
* Injection point.
*
@@ -52,12 +113,18 @@ public final class VideoInformation {
*/
public static void initialize(@NonNull PlaybackController playerController) {
try {
Logger.printDebug(() -> "newVideoStarted");
playerControllerRef = new WeakReference<>(Objects.requireNonNull(playerController));
videoTime = -1;
videoLength = 0;
playbackSpeed = DEFAULT_YOUTUBE_PLAYBACK_SPEED;
desiredVideoResolution = AUTOMATIC_VIDEO_QUALITY_VALUE;
currentQualities = null;
currentMenuInterface = null;
setCurrentQuality(null);
} catch (Exception ex) {
Logger.printException(() -> "Failed to initialize", ex);
Logger.printException(() -> "initialize failure", ex);
}
}
@@ -197,14 +264,14 @@ public final class VideoInformation {
if (controller == null) {
Logger.printDebug(() -> "Cannot seekTo because player controller is null");
} else {
if (controller.seekTo(adjustedSeekTime)) return true;
if (controller.patch_seekTo(adjustedSeekTime)) return true;
Logger.printDebug(() -> "seekTo did not succeeded. Trying MXD.");
// Else the video is loading or changing videos, or video is casting to a different device.
}
// Try calling the seekTo method of the MDX player director (called when casting).
// The difference has to be a different second mark in order to avoid infinite skip loops
// as the Lounge API only supports seconds.
// as the Lounge API only supports whole seconds.
if (adjustedSeekTime / 1000 == videoTime / 1000) {
Logger.printDebug(() -> "Skipping seekTo for MDX because seek time is too small "
+ "(" + (adjustedSeekTime - videoTime) + "ms)");
@@ -217,9 +284,9 @@ public final class VideoInformation {
return false;
}
return controller.seekTo(adjustedSeekTime);
return controller.patch_seekTo(adjustedSeekTime);
} catch (Exception ex) {
Logger.printException(() -> "Failed to seek", ex);
Logger.printException(() -> "seekTo failure", ex);
return false;
}
}
@@ -239,7 +306,7 @@ public final class VideoInformation {
if (controller == null) {
Logger.printDebug(() -> "Cannot seek relative as player controller is null");
} else {
controller.seekToRelative(seekTime);
controller.patch_seekToRelative(seekTime);
}
// Adjust the fine adjustment function so it's at least 1 second before/after.
@@ -255,10 +322,10 @@ public final class VideoInformation {
if (controller == null) {
Logger.printDebug(() -> "Cannot seek relative as MXD player controller is null");
} else {
controller.seekToRelative(adjustedSeekTime);
controller.patch_seekToRelative(adjustedSeekTime);
}
} catch (Exception ex) {
Logger.printException(() -> "Failed to seek relative", ex);
Logger.printException(() -> "seekToRelative failure", ex);
}
}
@@ -339,14 +406,13 @@ public final class VideoInformation {
}
/**
* @return If the playback is at the end of the video.
* <p>
* If video is playing in the background with no video visible,
* this always returns false (even if the video is actually at the end).
* <p>
* This is equivalent to checking for {@link VideoState#ENDED},
* but can give a more up-to-date result for code calling from some hooks.
*
* @return If the playback is at the end of the video.
* @see VideoState
*/
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
@@ -373,4 +439,134 @@ public final class VideoInformation {
playbackSpeed = newlyLoadedPlaybackSpeed;
}
}
/**
* @param resolution The desired video quality resolution to use.
*/
public static void setDesiredVideoResolution(int resolution) {
Utils.verifyOnMainThread();
Logger.printDebug(() -> "Setting desired video resolution: " + resolution);
desiredVideoResolution = resolution;
qualityNeedsUpdating = true;
}
private static void setCurrentQuality(@Nullable VideoQuality quality) {
Utils.verifyOnMainThread();
if (currentQuality != quality) {
Logger.printDebug(() -> "Current quality changed to: " + quality);
currentQuality = quality;
onQualityChange.invoke(quality);
}
}
/**
* Forcefully changes the video quality of the currently playing video.
*/
public static void changeQuality(VideoQuality quality) {
Utils.verifyOnMainThread();
if (currentMenuInterface == null) {
Logger.printException(() -> "Cannot change quality, menu interface is null");
return;
}
currentMenuInterface.patch_setQuality(quality);
}
/**
* Injection point. Fixes bad data used by YouTube.
* Issue can be reproduced by selecting 480p quality on any Short,
* and occasionally with random regular videos.
*/
public static int fixVideoQualityResolution(String name, int quality) {
try {
if (!name.startsWith(Integer.toString(quality))) {
final int suffixIndex = name.indexOf('p');
if (suffixIndex > 0) {
final int fixedQuality = Integer.parseInt(name.substring(0, suffixIndex));
Logger.printDebug(() -> "Fixing wrong quality resolution from: " +
name + "(" + quality + ") to: " + name + ")" + fixedQuality + ")");
return fixedQuality;
}
}
} catch (Exception ex) {
Logger.printException(() -> "fixVideoQualityResolution failed", ex);
}
return quality;
}
/**
* Injection point.
*
* @param qualities Video qualities available, ordered from largest to smallest, with index 0 being the 'automatic' value of -2
* @param originalQualityIndex quality index to use, as chosen by YouTube
*/
public static int setVideoQuality(VideoQuality[] qualities, VideoQualityMenuInterface menu, int originalQualityIndex) {
try {
Utils.verifyOnMainThread();
currentMenuInterface = menu;
final boolean availableQualitiesChanged = (currentQualities == null)
|| !Arrays.equals(currentQualities, qualities);
if (availableQualitiesChanged) {
currentQualities = qualities;
Logger.printDebug(() -> "VideoQualities: " + Arrays.toString(currentQualities));
}
VideoQuality updatedCurrentQuality = qualities[originalQualityIndex];
if (updatedCurrentQuality.patch_getResolution() != AUTOMATIC_VIDEO_QUALITY_VALUE
&& (currentQuality == null || currentQuality != updatedCurrentQuality)) {
setCurrentQuality(updatedCurrentQuality);
}
final int preferredQuality = desiredVideoResolution;
if (preferredQuality == AUTOMATIC_VIDEO_QUALITY_VALUE) {
return originalQualityIndex; // Nothing to do.
}
// After changing videos the qualities can initially be for the prior video.
// If the qualities have changed and the default is not auto then an update is needed.
if (qualityNeedsUpdating) {
qualityNeedsUpdating = false;
} else if (!availableQualitiesChanged) {
return originalQualityIndex;
}
// Find the highest quality that is equal to or less than the preferred.
int i = 0;
final int lastQualityIndex = qualities.length - 1;
for (VideoQuality quality : qualities) {
final int qualityResolution = quality.patch_getResolution();
if ((qualityResolution != AUTOMATIC_VIDEO_QUALITY_VALUE && qualityResolution <= preferredQuality)
// Use the lowest video quality if the default is lower than all available.
|| i == lastQualityIndex) {
final boolean qualityNeedsChange = (i != originalQualityIndex);
Logger.printDebug(() -> qualityNeedsChange
? "Changing video quality from: " + updatedCurrentQuality + " to: " + quality
: "Video is already the preferred quality: " + quality
);
// On first load of a new regular video, if the video is already the
// desired quality then the quality flyout will show 'Auto' (ie: Auto (720p)).
//
// To prevent user confusion, set the video index even if the
// quality is already correct so the UI picker will not display "Auto".
//
// Only change Shorts quality if the quality actually needs to change,
// because the "auto" option is not shown in the flyout
// and setting the same quality again can cause the Short to restart.
if (qualityNeedsChange || !ShortsPlayerState.isOpen()) {
changeQuality(quality);
return i;
}
return originalQualityIndex;
}
i++;
}
} catch (Exception ex) {
Logger.printException(() -> "setVideoQuality failure", ex);
}
return originalQualityIndex;
}
}

View File

@@ -83,6 +83,14 @@ final class ButtonsFilter extends Filter {
new ByteArrayFilterGroup(
Settings.HIDE_CLIP_BUTTON,
"yt_outline_scissors"
),
new ByteArrayFilterGroup(
Settings.HIDE_HYPE_BUTTON,
"yt_outline_star_shooting"
),
new ByteArrayFilterGroup(
Settings.HIDE_PROMOTE_BUTTON,
"yt_outline_megaphone"
)
);
}

View File

@@ -40,7 +40,6 @@ abstract class Filter {
/**
* Adds callbacks to {@link #isFiltered(String, String, byte[], StringFilterGroup, FilterContentType, int)}
* if any of the groups are found.
* <p>
*/
protected final void addIdentifierCallbacks(StringFilterGroup... groups) {
identifierCallbacks.addAll(Arrays.asList(groups));
@@ -58,7 +57,6 @@ abstract class Filter {
* Called after an enabled filter has been matched.
* Default implementation is to always filter the matched component and log the action.
* Subclasses can perform additional or different checks if needed.
*
* <p>
* Method is called off the main thread.
*

View File

@@ -32,6 +32,7 @@ public final class LayoutComponentsFilter extends Filter {
);
private final StringTrieSearch exceptions = new StringTrieSearch();
private final StringFilterGroup communityPosts;
private final StringFilterGroup surveys;
private final StringFilterGroup notifyMe;
private final StringFilterGroup singleItemInformationPanel;
@@ -68,7 +69,7 @@ public final class LayoutComponentsFilter extends Filter {
// Paths.
final var communityPosts = new StringFilterGroup(
communityPosts = new StringFilterGroup(
Settings.HIDE_COMMUNITY_POSTS,
"post_base_wrapper", // may be obsolete and no longer needed.
"text_post_root.eml",
@@ -325,6 +326,12 @@ public final class LayoutComponentsFilter extends Filter {
return channelProfileBuffer.check(buffer).isFiltered();
}
if (matchedGroup == communityPosts && NavigationBar.isBackButtonVisible()) {
// Allow community posts on channel profile page,
// or if viewing an individual channel in the feed.
return false;
}
if (exceptions.matches(path)) return false; // Exceptions are not filtered.
if (matchedGroup == compactChannelBarInner) {

View File

@@ -3,7 +3,7 @@ package app.revanced.extension.youtube.patches.components;
import app.revanced.extension.shared.settings.Setting;
import app.revanced.extension.shared.spoof.SpoofVideoStreamsPatch;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.shared.PlayerType;
import app.revanced.extension.youtube.shared.ShortsPlayerState;
@SuppressWarnings("unused")
public class PlayerFlyoutMenuItemsFilter extends Filter {
@@ -20,17 +20,9 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
}
private final ByteArrayFilterGroupList flyoutFilterGroupList = new ByteArrayFilterGroupList();
private final ByteArrayFilterGroup exception;
private final StringFilterGroup videoQualityMenuFooter;
public PlayerFlyoutMenuItemsFilter() {
exception = new ByteArrayFilterGroup(
// Whitelist Quality menu item when "Hide Additional settings menu" is enabled
Settings.HIDE_PLAYER_FLYOUT_ADDITIONAL_SETTINGS,
"quality_sheet"
);
videoQualityMenuFooter = new StringFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER,
"quality_sheet_footer"
@@ -44,11 +36,11 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
flyoutFilterGroupList.addAll(
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_CAPTIONS,
"closed_caption"
"closed_caption_"
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_ADDITIONAL_SETTINGS,
"yt_outline_gear"
"yt_outline_gear_"
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_LOOP_VIDEO,
@@ -56,31 +48,31 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_AMBIENT_MODE,
"yt_outline_screen_light"
"yt_outline_screen_light_"
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_STABLE_VOLUME,
"volume_stable"
"volume_stable_"
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_HELP,
"yt_outline_question_circle"
"yt_outline_question_circle_"
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_MORE_INFO,
"yt_outline_info_circle"
"yt_outline_info_circle_"
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_LOCK_SCREEN,
"yt_outline_lock"
"yt_outline_lock_"
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_SPEED,
"yt_outline_play_arrow_half_circle"
"yt_outline_play_arrow_half_circle_"
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_AUDIO_TRACK,
"yt_outline_person_radar"
"yt_outline_person_radar_"
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_SLEEP_TIMER,
@@ -88,7 +80,11 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_WATCH_IN_VR,
"yt_outline_vr"
"yt_outline_vr_"
),
new ByteArrayFilterGroup(
Settings.HIDE_PLAYER_FLYOUT_VIDEO_QUALITY,
"yt_outline_adjust_"
)
);
}
@@ -105,7 +101,7 @@ public class PlayerFlyoutMenuItemsFilter extends Filter {
}
// Shorts also use this player flyout panel
if (PlayerType.getCurrent().isNoneOrHidden() || exception.check(buffer).isFiltered()) {
if (ShortsPlayerState.isOpen()) {
return false;
}

View File

@@ -3,12 +3,8 @@ package app.revanced.extension.youtube.patches.playback.quality;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.shared.Utils.NetworkType;
import androidx.annotation.Nullable;
import com.google.android.libraries.youtube.innertube.model.media.VideoQuality;
import java.util.Arrays;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.shared.settings.BooleanSetting;
@@ -16,69 +12,15 @@ import app.revanced.extension.shared.settings.IntegerSetting;
import app.revanced.extension.youtube.patches.VideoInformation;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.shared.ShortsPlayerState;
import app.revanced.extension.youtube.videoplayer.VideoQualityDialogButton;
@SuppressWarnings("unused")
public class RememberVideoQualityPatch {
/**
* Interface to use obfuscated methods.
*/
public interface VideoQualityMenuInterface {
void patch_setQuality(VideoQuality quality);
}
/**
* Video resolution of the automatic quality option..
*/
public static final int AUTOMATIC_VIDEO_QUALITY_VALUE = -2;
/**
* All quality names are the same for all languages.
* VideoQuality also has a resolution enum that can be used if needed.
*/
public static final String VIDEO_QUALITY_1080P_PREMIUM_NAME = "1080p Premium";
private static final IntegerSetting videoQualityWifi = Settings.VIDEO_QUALITY_DEFAULT_WIFI;
private static final IntegerSetting videoQualityMobile = Settings.VIDEO_QUALITY_DEFAULT_MOBILE;
private static final IntegerSetting shortsQualityWifi = Settings.SHORTS_QUALITY_DEFAULT_WIFI;
private static final IntegerSetting shortsQualityMobile = Settings.SHORTS_QUALITY_DEFAULT_MOBILE;
private static boolean qualityNeedsUpdating;
/**
* The available qualities of the current video.
*/
@Nullable
private static VideoQuality[] currentQualities;
/**
* The current quality of the video playing.
* This is always the actual quality even if Automatic quality is active.
*/
@Nullable
private static VideoQuality currentQuality;
/**
* The current VideoQualityMenuInterface, set during setVideoQuality.
*/
@Nullable
private static VideoQualityMenuInterface currentMenuInterface;
@Nullable
public static VideoQuality[] getCurrentQualities() {
return currentQualities;
}
@Nullable
public static VideoQuality getCurrentQuality() {
return currentQuality;
}
@Nullable
public static VideoQualityMenuInterface getCurrentMenuInterface() {
return currentMenuInterface;
}
public static boolean shouldRememberVideoQuality() {
BooleanSetting preference = ShortsPlayerState.isOpen()
@@ -128,87 +70,12 @@ public class RememberVideoQualityPatch {
/**
* Injection point.
*
* @param qualities Video qualities available, ordered from largest to smallest, with index 0 being the 'automatic' value of -2
* @param originalQualityIndex quality index to use, as chosen by YouTube
*/
public static int setVideoQuality(VideoQuality[] qualities, VideoQualityMenuInterface menu, int originalQualityIndex) {
try {
Utils.verifyOnMainThread();
currentMenuInterface = menu;
final boolean availableQualitiesChanged = (currentQualities == null)
|| !Arrays.equals(currentQualities, qualities);
if (availableQualitiesChanged) {
currentQualities = qualities;
Logger.printDebug(() -> "VideoQualities: " + Arrays.toString(currentQualities));
}
VideoQuality updatedCurrentQuality = qualities[originalQualityIndex];
if (updatedCurrentQuality.patch_getResolution() != AUTOMATIC_VIDEO_QUALITY_VALUE
&& (currentQuality == null || currentQuality != updatedCurrentQuality)) {
currentQuality = updatedCurrentQuality;
Logger.printDebug(() -> "Current quality changed to: " + updatedCurrentQuality);
VideoQualityDialogButton.updateButtonIcon(updatedCurrentQuality);
}
final int preferredQuality = getDefaultQualityResolution();
if (preferredQuality == AUTOMATIC_VIDEO_QUALITY_VALUE) {
return originalQualityIndex; // Nothing to do.
}
// After changing videos the qualities can initially be for the prior video.
// If the qualities have changed and the default is not auto then an update is needed.
if (!qualityNeedsUpdating && !availableQualitiesChanged) {
return originalQualityIndex;
}
qualityNeedsUpdating = false;
// Find the highest quality that is equal to or less than the preferred.
int i = 0;
for (VideoQuality quality : qualities) {
final int qualityResolution = quality.patch_getResolution();
if ((qualityResolution != AUTOMATIC_VIDEO_QUALITY_VALUE && qualityResolution <= preferredQuality)
// Use the lowest video quality if the default is lower than all available.
|| i == qualities.length - 1) {
final boolean qualityNeedsChange = (i != originalQualityIndex);
Logger.printDebug(() -> qualityNeedsChange
? "Changing video quality from: " + updatedCurrentQuality + " to: " + quality
: "Video is already the preferred quality: " + quality
);
// On first load of a new regular video, if the video is already the
// desired quality then the quality flyout will show 'Auto' (ie: Auto (720p)).
//
// To prevent user confusion, set the video index even if the
// quality is already correct so the UI picker will not display "Auto".
//
// Only change Shorts quality if the quality actually needs to change,
// because the "auto" option is not shown in the flyout
// and setting the same quality again can cause the Short to restart.
if (qualityNeedsChange || !ShortsPlayerState.isOpen()) {
menu.patch_setQuality(qualities[i]);
return i;
}
return originalQualityIndex;
}
i++;
}
} catch (Exception ex) {
Logger.printException(() -> "setVideoQuality failure", ex);
}
return originalQualityIndex;
}
/**
* Injection point.
* @param userSelectedQualityIndex Element index of {@link #currentQualities}.
* @param userSelectedQualityIndex Element index of {@link VideoInformation#getCurrentQualities()}.
*/
public static void userChangedShortsQuality(int userSelectedQualityIndex) {
try {
if (shouldRememberVideoQuality()) {
VideoQuality[] currentQualities = VideoInformation.getCurrentQualities();
if (currentQualities == null) {
Logger.printDebug(() -> "Cannot save default quality, qualities is null");
return;
@@ -227,6 +94,7 @@ public class RememberVideoQualityPatch {
*/
public static void userChangedQuality(int videoResolution) {
Utils.verifyOnMainThread();
Logger.printDebug(() -> "User changed quality to: " + videoResolution);
if (shouldRememberVideoQuality()) {
saveDefaultQuality(videoResolution);
@@ -237,27 +105,6 @@ public class RememberVideoQualityPatch {
* Injection point.
*/
public static void newVideoStarted(VideoInformation.PlaybackController ignoredPlayerController) {
Utils.verifyOnMainThread();
Logger.printDebug(() -> "newVideoStarted");
currentQualities = null;
currentQuality = null;
currentMenuInterface = null;
qualityNeedsUpdating = true;
// Hide the quality button until playback starts and the qualities are available.
VideoQualityDialogButton.updateButtonIcon(null);
}
/**
* Injection point. Fixes bad data used by YouTube.
*/
public static int fixVideoQualityResolution(String name, int quality) {
final int correctQuality = 480;
if (name.equals("480p") && quality != correctQuality) {
return correctQuality;
}
return quality;
VideoInformation.setDesiredVideoResolution(getDefaultQualityResolution());
}
}

View File

@@ -100,7 +100,8 @@ public class CustomPlaybackSpeedPatch {
private static WeakReference<Dialog> currentDialog = new WeakReference<>(null);
static {
// Cap at 2 decimals (rounds automatically).
// Use same 2 digit format as built in speed picker,
speedFormatter.setMinimumFractionDigits(2);
speedFormatter.setMaximumFractionDigits(2);
final float holdSpeed = Settings.SPEED_TAP_AND_HOLD.get();
@@ -321,7 +322,7 @@ public class CustomPlaybackSpeedPatch {
TextView currentSpeedText = new TextView(context);
float currentSpeed = VideoInformation.getPlaybackSpeed();
// Initially show with only 0 minimum digits, so 1.0 shows as 1x
currentSpeedText.setText(formatSpeedStringX(currentSpeed, 0));
currentSpeedText.setText(formatSpeedStringX(currentSpeed));
currentSpeedText.setTextColor(Utils.getAppForegroundColor());
currentSpeedText.setTextSize(16);
currentSpeedText.setTypeface(Typeface.DEFAULT_BOLD);
@@ -398,10 +399,11 @@ public class CustomPlaybackSpeedPatch {
return null;
}
VideoInformation.overridePlaybackSpeed(roundedSpeed);
RememberPlaybackSpeedPatch.userSelectedPlaybackSpeed(roundedSpeed);
currentSpeedText.setText(formatSpeedStringX(roundedSpeed, 2)); // Update display.
currentSpeedText.setText(formatSpeedStringX(roundedSpeed)); // Update display.
speedSlider.setProgress(speedToProgressValue(roundedSpeed)); // Update slider.
RememberPlaybackSpeedPatch.userSelectedPlaybackSpeed(roundedSpeed);
VideoInformation.overridePlaybackSpeed(roundedSpeed);
return null;
};
@@ -437,7 +439,7 @@ public class CustomPlaybackSpeedPatch {
gridParams.setMargins(0, 0, 0, 0); // No margins around GridLayout.
gridLayout.setLayoutParams(gridParams);
// For all buttons show at least 1 zero in decimal (2 -> "2.0").
// For button use 1 digit minimum.
speedFormatter.setMinimumFractionDigits(1);
// Add buttons for each preset playback speed.
@@ -455,7 +457,7 @@ public class CustomPlaybackSpeedPatch {
// Create speed button.
Button speedButton = new Button(context, null, 0);
speedButton.setText(speedFormatter.format(speed)); // Do not use 'x' speed format.
speedButton.setText(speedFormatter.format(speed));
speedButton.setTextColor(Utils.getAppForegroundColor());
speedButton.setTextSize(12);
speedButton.setAllCaps(false);
@@ -498,6 +500,9 @@ public class CustomPlaybackSpeedPatch {
gridLayout.addView(buttonContainer);
}
// Restore 2 digit minimum.
speedFormatter.setMinimumFractionDigits(2);
// Add in-rows speed buttons layout to main layout.
mainLayout.addView(gridLayout);
@@ -631,8 +636,7 @@ public class CustomPlaybackSpeedPatch {
* @param speed The playback speed value to format.
* @return A string representation of the speed with 'x' (e.g. "1.25x" or "1.00x").
*/
private static String formatSpeedStringX(float speed, int minimumFractionDigits) {
speedFormatter.setMinimumFractionDigits(minimumFractionDigits);
private static String formatSpeedStringX(float speed) {
return speedFormatter.format(speed) + 'x';
}

View File

@@ -9,7 +9,7 @@ public class SpoofAppVersionPatch {
private static final String SPOOF_APP_VERSION_TARGET = Settings.SPOOF_APP_VERSION_TARGET.get();
/**
* Injection point
* injection point.
*/
public static String getYouTubeVersionOverride(String version) {
if (SPOOF_APP_VERSION_ENABLED) return SPOOF_APP_VERSION_TARGET;

View File

@@ -126,7 +126,7 @@ public final class SeekbarColorPatch {
}
/**
* Injection point
* injection point.
*/
public static boolean useLotteLaunchSplashScreen(boolean original) {
// This method is only used for development purposes to force the old style launch screen.

View File

@@ -223,7 +223,9 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_ASK_BUTTON = new BooleanSetting("revanced_hide_ask_button", FALSE);
public static final BooleanSetting HIDE_CLIP_BUTTON = new BooleanSetting("revanced_hide_clip_button", TRUE);
public static final BooleanSetting HIDE_DOWNLOAD_BUTTON = new BooleanSetting("revanced_hide_download_button", FALSE);
public static final BooleanSetting HIDE_HYPE_BUTTON = new BooleanSetting("revanced_hide_hype_button", FALSE);
public static final BooleanSetting HIDE_LIKE_DISLIKE_BUTTON = new BooleanSetting("revanced_hide_like_dislike_button", FALSE);
public static final BooleanSetting HIDE_PROMOTE_BUTTON = new BooleanSetting("revanced_hide_promote_button", FALSE);
public static final BooleanSetting HIDE_REMIX_BUTTON = new BooleanSetting("revanced_hide_remix_button", TRUE);
public static final BooleanSetting HIDE_REPORT_BUTTON = new BooleanSetting("revanced_hide_report_button", FALSE);
public static final BooleanSetting HIDE_SAVE_BUTTON = new BooleanSetting("revanced_hide_save_button", FALSE);
@@ -244,6 +246,7 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_PLAYER_FLYOUT_SPEED = new BooleanSetting("revanced_hide_player_flyout_speed", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_STABLE_VOLUME = new BooleanSetting("revanced_hide_player_flyout_stable_volume", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_VIDEO_QUALITY_FOOTER = new BooleanSetting("revanced_hide_player_flyout_video_quality_footer", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_VIDEO_QUALITY = new BooleanSetting("revanced_hide_player_flyout_video_quality", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_WATCH_IN_VR = new BooleanSetting("revanced_hide_player_flyout_watch_in_vr", TRUE);
// General layout
@@ -255,6 +258,7 @@ public class Settings extends BaseSettings {
public static final BooleanSetting GRADIENT_LOADING_SCREEN = new BooleanSetting("revanced_gradient_loading_screen", FALSE, true);
public static final EnumSetting<SplashScreenAnimationStyle> SPLASH_SCREEN_ANIMATION_STYLE = new EnumSetting<>("revanced_splash_screen_animation_style", SplashScreenAnimationStyle.FPS_60_ONE_SECOND, true);
public static final EnumSetting<HeaderLogo> HEADER_LOGO = new EnumSetting<>("revanced_header_logo", HeaderLogo.DEFAULT, true);
public static final BooleanSetting DISABLE_SIGNIN_TO_TV_POPUP = new BooleanSetting("revanced_disable_signin_to_tv_popup", FALSE);
public static final BooleanSetting REMOVE_VIEWER_DISCRETION_DIALOG = new BooleanSetting("revanced_remove_viewer_discretion_dialog", FALSE,
"revanced_remove_viewer_discretion_dialog_user_dialog_message");

View File

@@ -0,0 +1,48 @@
package app.revanced.extension.youtube.shared
import app.revanced.extension.shared.Logger
import app.revanced.extension.youtube.Event
/**
* PlayerControls visibility state.
*/
enum class PlayerControlsVisibility {
PLAYER_CONTROLS_VISIBILITY_UNKNOWN,
PLAYER_CONTROLS_VISIBILITY_WILL_HIDE,
PLAYER_CONTROLS_VISIBILITY_HIDDEN,
PLAYER_CONTROLS_VISIBILITY_WILL_SHOW,
PLAYER_CONTROLS_VISIBILITY_SHOWN;
companion object {
private val nameToPlayerControlsVisibility = PlayerControlsVisibility.entries.associateBy { it.name }
@JvmStatic
fun setFromString(enumName: String) {
val newType = nameToPlayerControlsVisibility[enumName]
if (newType == null) {
Logger.printException { "Unknown PlayerControlsVisibility encountered: $enumName" }
} else {
current = newType
}
}
@JvmStatic
var current
get() = currentPlayerControlsVisibility
private set(type) {
if (currentPlayerControlsVisibility != type) {
Logger.printDebug { "Changed to: $type" }
currentPlayerControlsVisibility = type
onChange(type)
}
}
@Volatile // Read/write from different threads.
private var currentPlayerControlsVisibility = PLAYER_CONTROLS_VISIBILITY_UNKNOWN
@JvmStatic
val onChange = Event<PlayerControlsVisibility>()
}
}

View File

@@ -13,7 +13,6 @@ import android.graphics.Rect;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RoundRectShape;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.Range;
import android.view.Gravity;
import android.view.ViewGroup;
@@ -877,7 +876,7 @@ public class SegmentPlaybackController {
}
/**
* Injection point
* injection point.
*/
@SuppressWarnings("unused")
public static void setSponsorBarRect(Object self) {
@@ -909,7 +908,7 @@ public class SegmentPlaybackController {
}
/**
* Injection point
* injection point.
*/
@SuppressWarnings("unused")
public static void setSponsorBarThickness(int thickness) {

View File

@@ -5,10 +5,10 @@ import android.view.View;
import androidx.annotation.Nullable;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.youtube.patches.VideoInformation;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.videoplayer.PlayerControlButton;
@SuppressWarnings("unused")
public class CreateSegmentButton {
@Nullable
private static PlayerControlButton instance;
@@ -18,7 +18,7 @@ public class CreateSegmentButton {
}
/**
* injection point
* injection point.
*/
public static void initialize(View controlsView) {
try {
@@ -36,21 +36,27 @@ public class CreateSegmentButton {
}
/**
* Injection point
* injection point.
*/
public static void setVisibilityNegatedImmediate() {
if (instance != null) instance.setVisibilityNegatedImmediate();
}
/**
* injection point.
*/
public static void setVisibilityImmediate(boolean visible) {
if (instance != null) instance.setVisibilityImmediate(visible);
}
/**
* Injection point
* injection point.
*/
public static void setVisibility(boolean visible, boolean animated) {
if (instance != null) instance.setVisibility(visible, animated);
}
private static boolean shouldBeShown() {
return Settings.SB_ENABLED.get() && Settings.SB_CREATE_NEW_SEGMENT.get()
&& !VideoInformation.isAtEndOfVideo();
return Settings.SB_ENABLED.get() && Settings.SB_CREATE_NEW_SEGMENT.get();
}
}

View File

@@ -16,7 +16,6 @@ import java.util.Objects;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.shared.PlayerType;
import app.revanced.extension.youtube.sponsorblock.objects.SponsorSegment;
import kotlin.Unit;
@@ -227,22 +226,4 @@ public class SponsorBlockViewController {
params.bottomMargin = fullScreen ? ctaBottomMargin : defaultBottomMargin;
view.setLayoutParams(params);
}
/**
* Injection point.
*/
public static void endOfVideoReached() {
try {
Logger.printDebug(() -> "endOfVideoReached");
// the buttons automatically set themselves to visible when appropriate,
// but if buttons are showing when the end of the video is reached then they need
// to be forcefully hidden
if (!Settings.AUTO_REPEAT.get()) {
CreateSegmentButton.hideControls();
VotingButton.hideControls();
}
} catch (Exception ex) {
Logger.printException(() -> "endOfVideoReached failure", ex);
}
}
}

View File

@@ -5,12 +5,12 @@ import android.view.View;
import androidx.annotation.Nullable;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.youtube.patches.VideoInformation;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.sponsorblock.SegmentPlaybackController;
import app.revanced.extension.youtube.sponsorblock.SponsorBlockUtils;
import app.revanced.extension.youtube.videoplayer.PlayerControlButton;
@SuppressWarnings("unused")
public class VotingButton {
@Nullable
private static PlayerControlButton instance;
@@ -20,7 +20,7 @@ public class VotingButton {
}
/**
* injection point
* injection point.
*/
public static void initialize(View controlsView) {
try {
@@ -38,14 +38,21 @@ public class VotingButton {
}
/**
* Injection point
* injection point.
*/
public static void setVisibilityNegatedImmediate() {
if (instance != null) instance.setVisibilityNegatedImmediate();
}
/**
* injection point.
*/
public static void setVisibilityImmediate(boolean visible) {
if (instance != null) instance.setVisibilityImmediate(visible);
}
/**
* Injection point
* injection point.
*/
public static void setVisibility(boolean visible, boolean animated) {
if (instance != null) instance.setVisibility(visible, animated);
@@ -53,6 +60,6 @@ public class VotingButton {
private static boolean shouldBeShown() {
return Settings.SB_ENABLED.get() && Settings.SB_VOTING_BUTTON.get()
&& SegmentPlaybackController.videoHasSegments() && !VideoInformation.isAtEndOfVideo();
&& SegmentPlaybackController.videoHasSegments();
}
}

View File

@@ -7,7 +7,6 @@ import androidx.annotation.Nullable;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.youtube.patches.CopyVideoUrlPatch;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.shared.PlayerType;
@SuppressWarnings("unused")
public class CopyVideoUrlButton {
@@ -22,7 +21,7 @@ public class CopyVideoUrlButton {
instance = new PlayerControlButton(
controlsView,
"revanced_copy_video_url_button",
"revanced_copy_video_url_button_placeholder",
null,
Settings.COPY_VIDEO_URL::get,
view -> CopyVideoUrlPatch.copyUrl(false),
view -> {
@@ -35,15 +34,22 @@ public class CopyVideoUrlButton {
}
}
/**`
* injection point.
*/
public static void setVisibilityNegatedImmediate() {
if (instance != null) instance.setVisibilityNegatedImmediate();
}
/**
* injection point
* injection point.
*/
public static void setVisibilityImmediate(boolean visible) {
if (instance != null) instance.setVisibilityImmediate(visible);
}
/**
* injection point
* injection point.
*/
public static void setVisibility(boolean visible, boolean animated) {
if (instance != null) instance.setVisibility(visible, animated);

View File

@@ -7,7 +7,6 @@ import androidx.annotation.Nullable;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.youtube.patches.CopyVideoUrlPatch;
import app.revanced.extension.youtube.settings.Settings;
import app.revanced.extension.youtube.shared.PlayerType;
@SuppressWarnings("unused")
public class CopyVideoUrlTimestampButton {
@@ -22,7 +21,7 @@ public class CopyVideoUrlTimestampButton {
instance = new PlayerControlButton(
controlsView,
"revanced_copy_video_url_timestamp_button",
"revanced_copy_video_url_timestamp_button_placeholder",
null,
Settings.COPY_VIDEO_URL_TIMESTAMP::get,
view -> CopyVideoUrlPatch.copyUrl(true),
view -> {
@@ -36,14 +35,21 @@ public class CopyVideoUrlTimestampButton {
}
/**
* injection point
* injection point.
*/
public static void setVisibilityNegatedImmediate() {
if (instance != null) instance.setVisibilityNegatedImmediate();
}
/**
* injection point.
*/
public static void setVisibilityImmediate(boolean visible) {
if (instance != null) instance.setVisibilityImmediate(visible);
}
/**
* injection point
* injection point.
*/
public static void setVisibility(boolean visible, boolean animated) {
if (instance != null) instance.setVisibility(visible, animated);

View File

@@ -22,7 +22,7 @@ public class ExternalDownloadButton {
instance = new PlayerControlButton(
controlsView,
"revanced_external_download_button",
"revanced_external_download_button_placeholder",
null,
Settings.EXTERNAL_DOWNLOADER::get,
ExternalDownloadButton::onDownloadClick,
null
@@ -33,14 +33,21 @@ public class ExternalDownloadButton {
}
/**
* injection point
* injection point.
*/
public static void setVisibilityNegatedImmediate() {
if (instance != null) instance.setVisibilityNegatedImmediate();
}
/**
* injection point.
*/
public static void setVisibilityImmediate(boolean visible) {
if (instance != null) instance.setVisibilityImmediate(visible);
}
/**
* Injection point
* injection point.
*/
public static void setVisibility(boolean visible, boolean animated) {
if (instance != null) instance.setVisibility(visible, animated);

View File

@@ -4,16 +4,26 @@ import android.view.View;
import androidx.annotation.Nullable;
import java.text.DecimalFormat;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.youtube.patches.VideoInformation;
import app.revanced.extension.youtube.patches.playback.speed.CustomPlaybackSpeedPatch;
import app.revanced.extension.youtube.settings.Settings;
@SuppressWarnings("unused")
public class PlaybackSpeedDialogButton {
@Nullable
private static PlayerControlButton instance;
private static final DecimalFormat speedDecimalFormatter = new DecimalFormat();
static {
speedDecimalFormatter.setMinimumFractionDigits(1);
speedDecimalFormatter.setMaximumFractionDigits(2);
}
/**
* Injection point.
*/
@@ -21,8 +31,9 @@ public class PlaybackSpeedDialogButton {
try {
instance = new PlayerControlButton(
controlsView,
"revanced_playback_speed_dialog_button_container",
"revanced_playback_speed_dialog_button",
"revanced_playback_speed_dialog_button_placeholder",
"revanced_playback_speed_dialog_button_text",
Settings.PLAYBACK_SPEED_DIALOG_BUTTON::get,
view -> {
try {
@@ -37,11 +48,11 @@ public class PlaybackSpeedDialogButton {
},
view -> {
try {
final float defaultSpeed = Settings.PLAYBACK_SPEED_DEFAULT.get();
final float speed = (!Settings.REMEMBER_PLAYBACK_SPEED_LAST_SELECTED.get() ||
VideoInformation.getPlaybackSpeed() == Settings.PLAYBACK_SPEED_DEFAULT.get())
VideoInformation.getPlaybackSpeed() == defaultSpeed)
? 1.0f
: Settings.PLAYBACK_SPEED_DEFAULT.get();
: defaultSpeed;
VideoInformation.overridePlaybackSpeed(speed);
} catch (Exception ex) {
Logger.printException(() -> "speed button reset failure", ex);
@@ -49,22 +60,60 @@ public class PlaybackSpeedDialogButton {
return true;
}
);
// Set the appropriate icon.
updateButtonAppearance();
} catch (Exception ex) {
Logger.printException(() -> "initializeButton failure", ex);
}
}
/**
* injection point
* injection point.
*/
public static void setVisibilityImmediate(boolean visible) {
if (instance != null) instance.setVisibilityImmediate(visible);
public static void setVisibilityNegatedImmediate() {
if (instance != null) instance.setVisibilityNegatedImmediate();
}
/**
* injection point
* Injection point.
*/
public static void setVisibilityImmediate(boolean visible) {
if (instance != null) {
instance.setVisibilityImmediate(visible);
}
}
/**
* Injection point.
*/
public static void setVisibility(boolean visible, boolean animated) {
if (instance != null) instance.setVisibility(visible, animated);
if (instance != null) {
instance.setVisibility(visible, animated);
}
}
/**
* Injection point.
*/
public static void videoSpeedChanged(float currentVideoSpeed) {
updateButtonAppearance();
}
/**
* Updates the button's appearance, including icon and text overlay.
*/
private static void updateButtonAppearance() {
if (instance == null) return;
try {
Utils.verifyOnMainThread();
String speedText = speedDecimalFormatter.format(VideoInformation.getPlaybackSpeed());
instance.setTextOverlay(speedText);
Logger.printDebug(() -> "Updated playback speed button text to: " + speedText);
} catch (Exception ex) {
Logger.printException(() -> "updateButtonAppearance failure", ex);
}
}
}

View File

@@ -1,8 +1,9 @@
package app.revanced.extension.youtube.videoplayer;
import android.view.View;
import android.view.animation.Animation;
import android.view.ViewPropertyAnimator;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.annotation.Nullable;
@@ -10,78 +11,70 @@ import java.lang.ref.WeakReference;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.youtube.shared.PlayerControlsVisibility;
import app.revanced.extension.youtube.shared.PlayerType;
import kotlin.Unit;
public class PlayerControlButton {
public interface PlayerControlButtonVisibility {
public interface PlayerControlButtonStatus {
/**
* @return If the button should be shown when the player overlay is visible.
*/
boolean shouldBeShown();
boolean buttonEnabled();
}
private static final int fadeInDuration;
private static final int fadeOutDuration;
private static final Animation fadeInAnimation;
private static final Animation fadeOutAnimation;
private static final Animation fadeOutImmediate;
static {
fadeInDuration = Utils.getResourceInteger("fade_duration_fast");
fadeOutDuration = Utils.getResourceInteger("fade_duration_scheduled");
fadeInAnimation = Utils.getResourceAnimation("fade_in");
fadeInAnimation.setDuration(fadeInDuration);
fadeOutAnimation = Utils.getResourceAnimation("fade_out");
fadeOutAnimation.setDuration(fadeOutDuration);
// Animation for the fast fade out after tapping the overlay.
// Currently not used but should be.
fadeOutImmediate = Utils.getResourceAnimation("abc_fade_out");
fadeOutImmediate.setDuration(Utils.getResourceInteger("fade_duration_fast"));
}
private static final int fadeInDuration = Utils.getResourceInteger("fade_duration_fast");
private static final int fadeOutDuration = Utils.getResourceInteger("fade_duration_scheduled");
private final WeakReference<View> containerRef;
private final WeakReference<View> buttonRef;
/**
* Empty view with the same layout size as the button. Used to fill empty space while the
* fade out animation runs. Without this the chapter titles overlapping the button when fading out.
*/
private final WeakReference<View> placeHolderRef;
private final PlayerControlButtonVisibility visibilityCheck;
private final WeakReference<TextView> textOverlayRef;
private final PlayerControlButtonStatus enabledStatus;
private boolean isVisible;
private long lastTimeSetVisible;
public PlayerControlButton(View controlsViewGroup,
String imageViewButtonId,
@Nullable String placeholderId,
PlayerControlButtonVisibility buttonVisibility,
String buttonId,
@Nullable String textOverlayId,
PlayerControlButtonStatus enabledStatus,
View.OnClickListener onClickListener,
@Nullable View.OnLongClickListener longClickListener) {
ImageView imageView = Utils.getChildViewByResourceName(controlsViewGroup, imageViewButtonId);
imageView.setVisibility(View.GONE);
this(controlsViewGroup, buttonId, buttonId, textOverlayId,
enabledStatus, onClickListener, longClickListener);
}
View tempPlaceholder = null;
if (placeholderId != null) {
tempPlaceholder = Utils.getChildViewByResourceName(controlsViewGroup, placeholderId);
tempPlaceholder.setVisibility(View.GONE);
}
placeHolderRef = new WeakReference<>(tempPlaceholder);
public PlayerControlButton(View controlsViewGroup,
String viewToHide,
String buttonId,
@Nullable String textOverlayId,
PlayerControlButtonStatus enabledStatus,
View.OnClickListener onClickListener,
@Nullable View.OnLongClickListener longClickListener) {
View containerView = Utils.getChildViewByResourceName(controlsViewGroup, viewToHide);
containerView.setVisibility(View.GONE);
containerRef = new WeakReference<>(containerView);
imageView.setOnClickListener(onClickListener);
View button = Utils.getChildViewByResourceName(controlsViewGroup, buttonId);
button.setOnClickListener(onClickListener);
if (longClickListener != null) {
imageView.setOnLongClickListener(longClickListener);
button.setOnLongClickListener(longClickListener);
}
buttonRef = new WeakReference<>(button);
visibilityCheck = buttonVisibility;
buttonRef = new WeakReference<>(imageView);
TextView tempTextOverlay = null;
if (textOverlayId != null) {
tempTextOverlay = Utils.getChildViewByResourceName(controlsViewGroup, textOverlayId);
}
textOverlayRef = new WeakReference<>(tempTextOverlay);
this.enabledStatus = enabledStatus;
isVisible = false;
// Update the visibility after the player type changes.
// This ensures that button animations are cleared and their states are updated correctly
// when switching between states like minimized, maximized, or fullscreen, preventing
// "stuck" animations or incorrect visibility. Without this fix the issue is most noticable
// "stuck" animations or incorrect visibility. Without this fix the issue is most noticeable
// when maximizing type 3 miniplayer.
PlayerType.getOnChange().addObserver((PlayerType type) -> {
playerTypeChanged(type);
@@ -89,13 +82,55 @@ public class PlayerControlButton {
});
}
public void setVisibilityNegatedImmediate() {
try {
Utils.verifyOnMainThread();
if (PlayerControlsVisibility.getCurrent() != PlayerControlsVisibility.PLAYER_CONTROLS_VISIBILITY_HIDDEN) {
return;
}
final boolean buttonEnabled = enabledStatus.buttonEnabled();
if (!buttonEnabled) {
return;
}
View container = containerRef.get();
if (container == null) {
return;
}
isVisible = false;
ViewPropertyAnimator animate = container.animate();
animate.cancel();
// If the overlay is tapped to display then immediately tapped to dismiss
// before the fade in animation finishes, then the fade out animation is
// the time between when the fade in started and now.
final long animationDuration = Math.min(fadeInDuration,
System.currentTimeMillis() - lastTimeSetVisible);
if (animationDuration <= 0) {
// Should never happen, but handle just in case.
container.setVisibility(View.GONE);
return;
}
animate.alpha(0)
.setDuration(animationDuration)
.withEndAction(() -> container.setVisibility(View.GONE))
.start();
} catch (Exception ex) {
Logger.printException(() -> "setVisibilityNegatedImmediate failure", ex);
}
}
public void setVisibilityImmediate(boolean visible) {
if (visible) {
// Fix button flickering, by pushing this call to the back of
// the main thread and letting other layout code run first.
Utils.runOnMainThread(() -> private_setVisibility(true, false));
Utils.runOnMainThread(() -> privateSetVisibility(true, false));
} else {
private_setVisibility(false, false);
privateSetVisibility(false, false);
}
}
@@ -103,47 +138,53 @@ public class PlayerControlButton {
// Ignore this call, otherwise with full screen thumbnails the buttons are visible while seeking.
if (visible && !animated) return;
private_setVisibility(visible, animated);
privateSetVisibility(visible, animated);
}
private void private_setVisibility(boolean visible, boolean animated) {
private void privateSetVisibility(boolean visible, boolean animated) {
try {
Utils.verifyOnMainThread();
if (isVisible == visible) return;
isVisible = visible;
View button = buttonRef.get();
if (button == null) return;
if (visible) {
lastTimeSetVisible = System.currentTimeMillis();
}
View placeholder = placeHolderRef.get();
final boolean shouldBeShown = visibilityCheck.shouldBeShown();
View container = containerRef.get();
if (container == null) {
return;
}
if (visible && enabledStatus.buttonEnabled()) {
ViewPropertyAnimator animate = container.animate();
animate.cancel();
container.setVisibility(View.VISIBLE);
if (visible && shouldBeShown) {
button.clearAnimation();
if (animated) {
button.startAnimation(PlayerControlButton.fadeInAnimation);
container.setAlpha(0);
animate.alpha(1)
.setDuration(fadeInDuration)
.start();
} else {
container.setAlpha(1);
}
button.setVisibility(View.VISIBLE);
} else if (container.getVisibility() == View.VISIBLE) {
ViewPropertyAnimator animate = container.animate();
animate.cancel();
if (placeholder != null) {
placeholder.setVisibility(View.GONE);
}
} else {
if (button.getVisibility() == View.VISIBLE) {
button.clearAnimation();
if (animated) {
button.startAnimation(PlayerControlButton.fadeOutAnimation);
}
button.setVisibility(View.GONE);
}
if (placeholder != null) {
placeholder.setVisibility(shouldBeShown
? View.VISIBLE
: View.GONE);
if (animated) {
animate.alpha(0)
.setDuration(fadeOutDuration)
.withEndAction(() -> container.setVisibility(View.GONE))
.start();
} else {
container.setVisibility(View.GONE);
}
}
} catch (Exception ex) {
Logger.printException(() -> "private_setVisibility failure", ex);
Logger.printException(() -> "privateSetVisibility failure", ex);
}
}
@@ -151,41 +192,36 @@ public class PlayerControlButton {
* Synchronizes the button state after the player state changes.
*/
private void playerTypeChanged(PlayerType newType) {
Utils.verifyOnMainThread();
if (newType != PlayerType.WATCH_WHILE_MINIMIZED && !newType.isMaximizedOrFullscreen()) {
return;
}
View button = buttonRef.get();
if (button == null) return;
View container = containerRef.get();
if (container == null) {
return;
}
button.clearAnimation();
View placeholder = placeHolderRef.get();
container.animate().cancel();
if (visibilityCheck.shouldBeShown()) {
if (isVisible) {
button.setVisibility(View.VISIBLE);
if (placeholder != null) placeholder.setVisibility(View.GONE);
} else {
button.setVisibility(View.GONE);
if (placeholder != null) placeholder.setVisibility(View.VISIBLE);
}
if (isVisible && enabledStatus.buttonEnabled()) {
container.setVisibility(View.VISIBLE);
container.setAlpha(1);
} else {
button.setVisibility(View.GONE);
if (placeholder != null) placeholder.setVisibility(View.GONE);
container.setVisibility(View.GONE);
}
}
public void hide() {
if (!isVisible) return;
Utils.verifyOnMainThread();
View view = buttonRef.get();
if (!isVisible) {
return;
}
isVisible = false;
View view = containerRef.get();
if (view == null) return;
view.setVisibility(View.GONE);
view = placeHolderRef.get();
if (view != null) view.setVisibility(View.GONE);
isVisible = false;
}
/**
@@ -193,50 +229,24 @@ public class PlayerControlButton {
* @param resourceId Drawable identifier, or zero to hide the icon.
*/
public void setIcon(int resourceId) {
try {
View button = buttonRef.get();
if (button instanceof ImageView imageButton) {
imageButton.setImageResource(resourceId);
}
} catch (Exception ex) {
Logger.printException(() -> "setIcon failure", ex);
Utils.verifyOnMainThread();
View button = buttonRef.get();
if (button instanceof ImageView imageButton) {
imageButton.setImageResource(resourceId);
}
}
/**
* Starts an animation on the button.
* @param animation The animation to apply.
* Sets the text to be displayed on the text overlay.
* @param text The text to set on the overlay, or null to clear the text.
*/
public void startAnimation(Animation animation) {
try {
View button = buttonRef.get();
if (button != null) {
button.startAnimation(animation);
}
} catch (Exception ex) {
Logger.printException(() -> "startAnimation failure", ex);
}
}
public void setTextOverlay(CharSequence text) {
Utils.verifyOnMainThread();
/**
* Clears any animation on the button.
*/
public void clearAnimation() {
try {
View button = buttonRef.get();
if (button != null) {
button.clearAnimation();
}
} catch (Exception ex) {
Logger.printException(() -> "clearAnimation failure", ex);
TextView textOverlay = textOverlayRef.get();
if (textOverlay != null) {
textOverlay.setText(text);
}
}
/**
* Returns the View associated with this button.
* @return The button View.
*/
public View getView() {
return buttonRef.get();
}
}

View File

@@ -2,9 +2,8 @@ package app.revanced.extension.youtube.videoplayer;
import static app.revanced.extension.shared.StringRef.str;
import static app.revanced.extension.shared.Utils.dipToPixels;
import static app.revanced.extension.youtube.patches.playback.quality.RememberVideoQualityPatch.AUTOMATIC_VIDEO_QUALITY_VALUE;
import static app.revanced.extension.youtube.patches.playback.quality.RememberVideoQualityPatch.VIDEO_QUALITY_1080P_PREMIUM_NAME;
import static app.revanced.extension.youtube.patches.playback.quality.RememberVideoQualityPatch.VideoQualityMenuInterface;
import static app.revanced.extension.youtube.patches.VideoInformation.AUTOMATIC_VIDEO_QUALITY_VALUE;
import static app.revanced.extension.youtube.patches.VideoInformation.VIDEO_QUALITY_PREMIUM_NAME;
import android.app.Dialog;
import android.content.Context;
@@ -14,6 +13,7 @@ import android.graphics.drawable.shapes.RoundRectShape;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.text.style.UnderlineSpan;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -39,73 +39,25 @@ import java.util.List;
import app.revanced.extension.shared.Logger;
import app.revanced.extension.shared.Utils;
import app.revanced.extension.youtube.patches.VideoInformation;
import app.revanced.extension.youtube.patches.playback.quality.RememberVideoQualityPatch;
import app.revanced.extension.youtube.settings.Settings;
import kotlin.Unit;
@SuppressWarnings("unused")
public class VideoQualityDialogButton {
private static final int DRAWABLE_LD = getDrawableIdentifier("revanced_video_quality_dialog_button_ld");
private static final int DRAWABLE_SD = getDrawableIdentifier("revanced_video_quality_dialog_button_sd");
private static final int DRAWABLE_HD = getDrawableIdentifier("revanced_video_quality_dialog_button_hd");
private static final int DRAWABLE_FHD = getDrawableIdentifier("revanced_video_quality_dialog_button_fhd");
private static final int DRAWABLE_FHD_PLUS = getDrawableIdentifier("revanced_video_quality_dialog_button_fhd_plus");
private static final int DRAWABLE_QHD = getDrawableIdentifier("revanced_video_quality_dialog_button_qhd");
private static final int DRAWABLE_4K = getDrawableIdentifier("revanced_video_quality_dialog_button_4k");
private static final int DRAWABLE_UNKNOWN = getDrawableIdentifier("revanced_video_quality_dialog_button_unknown");
@Nullable
private static PlayerControlButton instance;
/**
* The current resource name of the button icon.
*/
private static int currentIconResource;
@Nullable
private static CharSequence currentOverlayText;
private static int getDrawableIdentifier(String resourceName) {
final int resourceId = Utils.getResourceIdentifier(resourceName, "drawable");
if (resourceId == 0) Logger.printException(() -> "Could not find resource: " + resourceName);
return resourceId;
}
/**
* Updates the button icon based on the current video quality.
*/
public static void updateButtonIcon(@Nullable VideoQuality quality) {
try {
Utils.verifyOnMainThread();
if (instance == null) return;
final int resolution = quality == null
? AUTOMATIC_VIDEO_QUALITY_VALUE // Video is still loading.
: quality.patch_getResolution();
final int iconResource = switch (resolution) {
case 144, 240, 360 -> DRAWABLE_LD;
case 480 -> DRAWABLE_SD;
case 720 -> DRAWABLE_HD;
case 1080 -> VIDEO_QUALITY_1080P_PREMIUM_NAME.equals(quality.patch_getQualityName())
? DRAWABLE_FHD_PLUS
: DRAWABLE_FHD;
case 1440 -> DRAWABLE_QHD;
case 2160 -> DRAWABLE_4K;
default -> DRAWABLE_UNKNOWN;
};
if (iconResource != currentIconResource) {
currentIconResource = iconResource;
Utils.runOnMainThreadDelayed(() -> {
if (iconResource != currentIconResource) {
Logger.printDebug(() -> "Ignoring stale button update to: " + quality);
return;
}
instance.setIcon(iconResource);
}, 100);
}
} catch (Exception ex) {
Logger.printException(() -> "updateButtonIcon failure", ex);
}
static {
VideoInformation.onQualityChange.addObserver((@Nullable VideoQuality quality) -> {
updateButtonText(quality);
return Unit.INSTANCE;
});
}
/**
@@ -115,8 +67,9 @@ public class VideoQualityDialogButton {
try {
instance = new PlayerControlButton(
controlsView,
"revanced_video_quality_dialog_button_container",
"revanced_video_quality_dialog_button",
"revanced_video_quality_dialog_button_placeholder",
"revanced_video_quality_dialog_button_text",
Settings.VIDEO_QUALITY_DIALOG_BUTTON::get,
view -> {
try {
@@ -127,9 +80,8 @@ public class VideoQualityDialogButton {
},
view -> {
try {
VideoQuality[] qualities = RememberVideoQualityPatch.getCurrentQualities();
VideoQualityMenuInterface menu = RememberVideoQualityPatch.getCurrentMenuInterface();
if (qualities == null || menu == null) {
VideoQuality[] qualities = VideoInformation.getCurrentQualities();
if (qualities == null) {
Logger.printDebug(() -> "Cannot reset quality, videoQualities is null");
return true;
}
@@ -140,7 +92,7 @@ public class VideoQualityDialogButton {
final int resolution = quality.patch_getResolution();
if (resolution != AUTOMATIC_VIDEO_QUALITY_VALUE && resolution <= defaultResolution) {
Logger.printDebug(() -> "Resetting quality to: " + quality);
menu.patch_setQuality(quality);
VideoInformation.changeQuality(quality);
return true;
}
}
@@ -156,13 +108,20 @@ public class VideoQualityDialogButton {
}
);
// Set initial icon.
updateButtonIcon(RememberVideoQualityPatch.getCurrentQuality());
// Set initial text.
updateButtonText(VideoInformation.getCurrentQuality());
} catch (Exception ex) {
Logger.printException(() -> "initializeButton failure", ex);
}
}
/**
* injection point.
*/
public static void setVisibilityNegatedImmediate() {
if (instance != null) instance.setVisibilityNegatedImmediate();
}
/**
* Injection point.
*/
@@ -181,13 +140,56 @@ public class VideoQualityDialogButton {
}
}
/**
* Updates the button text based on the current video quality.
*/
public static void updateButtonText(@Nullable VideoQuality quality) {
try {
Utils.verifyOnMainThread();
if (instance == null) return;
final int resolution = quality == null
? AUTOMATIC_VIDEO_QUALITY_VALUE // Video is still loading.
: quality.patch_getResolution();
SpannableStringBuilder text = new SpannableStringBuilder();
String qualityText = switch (resolution) {
case AUTOMATIC_VIDEO_QUALITY_VALUE -> "";
case 144, 240, 360 -> "LD";
case 480 -> "SD";
case 720 -> "HD";
case 1080 -> "FHD";
case 1440 -> "QHD";
case 2160 -> "4K";
default -> "?"; // Should never happen.
};
text.append(qualityText);
if (quality != null && quality.patch_getQualityName().contains(VIDEO_QUALITY_PREMIUM_NAME)) {
// Underline the entire "FHD" text for 1080p Premium.
text.setSpan(new UnderlineSpan(), 0, qualityText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
currentOverlayText = text;
Utils.runOnMainThreadDelayed(() -> {
if (currentOverlayText != text) {
Logger.printDebug(() -> "Ignoring stale button text update of: " + text);
return;
}
instance.setTextOverlay(text);
}, 100);
} catch (Exception ex) {
Logger.printException(() -> "updateButtonText failure", ex);
}
}
/**
* Shows a dialog with available video qualities, excluding Auto, with a title showing the current quality.
*/
private static void showVideoQualityDialog(Context context) {
try {
VideoQuality[] currentQualities = RememberVideoQualityPatch.getCurrentQualities();
VideoQuality currentQuality = RememberVideoQualityPatch.getCurrentQuality();
VideoQuality[] currentQualities = VideoInformation.getCurrentQualities();
VideoQuality currentQuality = VideoInformation.getCurrentQuality();
if (currentQualities == null || currentQuality == null) {
Logger.printDebug(() -> "Cannot show qualities dialog, videoQualities is null");
return;
@@ -198,12 +200,6 @@ public class VideoQualityDialogButton {
return;
}
VideoQualityMenuInterface menu = RememberVideoQualityPatch.getCurrentMenuInterface();
if (menu == null) {
Logger.printDebug(() -> "Cannot show qualities dialog, menu is null");
return;
}
// -1 adjustment for automatic quality at first index.
int listViewSelectedIndex = -1;
for (VideoQuality quality : currentQualities) {
@@ -317,15 +313,8 @@ public class VideoQualityDialogButton {
try {
final int originalIndex = which + 1; // Adjust for automatic.
VideoQuality selectedQuality = currentQualities[originalIndex];
Logger.printDebug(() -> "User clicked on quality: " + selectedQuality);
if (RememberVideoQualityPatch.shouldRememberVideoQuality()) {
RememberVideoQualityPatch.saveDefaultQuality(selectedQuality.patch_getResolution());
}
// Don't update button icon now. Icon will update when the actual
// quality is changed by YT. This is needed to ensure the icon is correct
// if YT ignores changing from 1080p Premium to regular 1080p.
menu.patch_setQuality(selectedQuality);
RememberVideoQualityPatch.userChangedQuality(selectedQuality.patch_getResolution());
VideoInformation.changeQuality(selectedQuality);
dialog.dismiss();
} catch (Exception ex) {
@@ -356,9 +345,12 @@ public class VideoQualityDialogButton {
portraitWidth = Math.min(
portraitWidth,
context.getResources().getDisplayMetrics().heightPixels);
// Limit height in landscape mode.
params.height = Utils.percentageHeightToPixels(80);
} else {
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
}
params.width = portraitWidth;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
window.setAttributes(params);
window.setBackgroundDrawable(null);
}
@@ -428,6 +420,15 @@ public class VideoQualityDialogButton {
}
private static class CustomQualityAdapter extends ArrayAdapter<String> {
private static final int CUSTOM_LIST_ITEM_CHECKED_ID = Utils.getResourceIdentifier(
"revanced_custom_list_item_checked", "layout");
private static final int CHECK_ICON_ID = Utils.getResourceIdentifier(
"revanced_check_icon", "id");
private static final int CHECK_ICON_PLACEHOLDER_ID = Utils.getResourceIdentifier(
"revanced_check_icon_placeholder", "id");
private static final int ITEM_TEXT_ID = Utils.getResourceIdentifier(
"revanced_item_text", "id");
private int selectedPosition = -1;
public CustomQualityAdapter(@NonNull Context context, @NonNull List<String> objects) {
@@ -446,20 +447,14 @@ public class VideoQualityDialogButton {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(
Utils.getResourceIdentifier("revanced_custom_list_item_checked", "layout"),
CUSTOM_LIST_ITEM_CHECKED_ID,
parent,
false
);
viewHolder = new ViewHolder();
viewHolder.checkIcon = convertView.findViewById(
Utils.getResourceIdentifier("revanced_check_icon", "id")
);
viewHolder.placeholder = convertView.findViewById(
Utils.getResourceIdentifier("revanced_check_icon_placeholder", "id")
);
viewHolder.textView = convertView.findViewById(
Utils.getResourceIdentifier("revanced_item_text", "id")
);
viewHolder.checkIcon = convertView.findViewById(CHECK_ICON_ID);
viewHolder.placeholder = convertView.findViewById(CHECK_ICON_PLACEHOLDER_ID);
viewHolder.textView = convertView.findViewById(ITEM_TEXT_ID);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();

View File

@@ -3,4 +3,4 @@ org.gradle.jvmargs = -Xms512M -Xmx2048M
org.gradle.parallel = true
android.useAndroidX = true
kotlin.code.style = official
version = 5.33.0
version = 5.34.0-dev.13

View File

@@ -1357,6 +1357,10 @@ public final class app/revanced/patches/youtube/layout/hide/shorts/HideShortsCom
public static final fun getHideShortsComponentsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/layout/hide/signintotvpopup/DisableSignInToTvPatchPopupKt {
public static final fun getDisableSignInToTvPopupPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/layout/hide/suggestedvideoendscreen/DisableSuggestedVideoEndScreenPatchKt {
public static final fun getDisableSuggestedVideoEndScreenPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
@@ -1532,6 +1536,10 @@ public final class app/revanced/patches/youtube/misc/navigation/NavigationBarHoo
public static final fun setHookNavigationButtonCreated (Lkotlin/jvm/functions/Function1;)V
}
public final class app/revanced/patches/youtube/misc/playercontrols/PlayerControlsOverlayVisibilityPatchKt {
public static final fun getPlayerControlsOverlayVisibilityPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/misc/playercontrols/PlayerControlsPatchKt {
public static final fun getAddBottomControl ()Lkotlin/jvm/functions/Function1;
public static final fun getPlayerControlsPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
@@ -1660,12 +1668,12 @@ public final class app/revanced/patches/youtube/video/quality/RememberVideoQuali
public static final fun getRememberVideoQualityPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/video/quality/VideoQualityPatchKt {
public static final fun getVideoQualityPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
public final class app/revanced/patches/youtube/video/quality/VideoQualityDialogButtonPatchKt {
public static final fun getVideoQualityDialogButtonPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/video/quality/button/VideoQualityDialogButtonPatchKt {
public static final fun getVideoQualityButtonPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
public final class app/revanced/patches/youtube/video/quality/VideoQualityPatchKt {
public static final fun getVideoQualityPatch ()Lapp/revanced/patcher/patch/BytecodePatch;
}
public final class app/revanced/patches/youtube/video/speed/PlaybackSpeedPatchKt {

View File

@@ -3,6 +3,7 @@ package app.revanced.patches.backdrops.misc.pro
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.Opcode
@Deprecated("Fingerprint no longer resolves and will soon be deleted.")
internal val proUnlockFingerprint = fingerprint {
opcodes(
Opcode.INVOKE_VIRTUAL,

View File

@@ -6,9 +6,8 @@ import app.revanced.patcher.patch.bytecodePatch
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Suppress("unused")
val proUnlockPatch = bytecodePatch(
name = "Pro unlock",
) {
@Deprecated("This patch no longer works and will soon be deleted.")
val proUnlockPatch = bytecodePatch{
compatibleWith("com.backdrops.wallpapers")
execute {

View File

@@ -8,7 +8,7 @@ val signatureCheckPatch = bytecodePatch(
name = "Disable signature check",
description = "Disables the signature check that causes the app to crash on startup."
) {
compatibleWith("com.instagram.android"("378.0.0.52.68"))
compatibleWith("com.instagram.android")
execute {
isValidSignatureMethodFingerprint

View File

@@ -3,6 +3,7 @@ package app.revanced.patches.music.layout.compactheader
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.findFreeRegister
import com.android.tools.smali.dexlib2.iface.instruction.OneRegisterInstruction
@Suppress("unused")
@@ -17,13 +18,14 @@ val hideCategoryBar = bytecodePatch(
constructCategoryBarFingerprint.method.apply {
val insertIndex = constructCategoryBarFingerprint.patternMatch!!.startIndex
val register = getInstruction<OneRegisterInstruction>(insertIndex - 1).registerA
val freeRegister = findFreeRegister(insertIndex, register)
addInstructions(
insertIndex,
"""
const/16 v2, 0x8
invoke-virtual {v$register, v2}, Landroid/view/View;->setVisibility(I)V
""",
const/16 v$freeRegister, 0x8
invoke-virtual { v$register, v$freeRegister }, Landroid/view/View;->setVisibility(I)V
"""
)
}
}

View File

@@ -14,7 +14,7 @@ val hideAdsPatch = bytecodePatch(
name = "Hide ads",
description = "Hide ads and sponsored articles in list pages and remove pre-roll ads on videos.",
) {
compatibleWith("nl.sanomamedia.android.nu"("11.3.0"))
compatibleWith("nl.sanomamedia.android.nu")
dependsOn(sharedExtensionPatch("nunl", mainActivityOnCreateHook))

View File

@@ -4,6 +4,6 @@ import app.revanced.patches.shared.misc.extension.extensionHook
internal val mainActivityOnCreateHook = extensionHook {
custom { method, classDef ->
classDef.type == "Lnl/sanomamedia/android/nu/main/NUMainActivity;" && method.name == "onCreate"
classDef.endsWith("/NUApplication;") && method.name == "onCreate"
}
}

View File

@@ -1,21 +1,15 @@
package app.revanced.patches.pixiv.ads
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.util.returnEarly
@Suppress("unused")
val hideAdsPatch = bytecodePatch(
name = "Hide ads",
) {
compatibleWith("jp.pxv.android")
compatibleWith("jp.pxv.android"("6.141.1"))
execute {
shouldShowAdsFingerprint.method.addInstructions(
0,
"""
const/4 v0, 0x0
return v0
""",
)
shouldShowAdsFingerprint.method.returnEarly(false)
}
}

View File

@@ -21,7 +21,7 @@ val audioAdsPatch = bytecodePatch(
addResourcesPatch,
)
compatibleWith("tv.twitch.android.app")
compatibleWith("tv.twitch.android.app"("16.9.1", "25.3.0"))
execute {
addResources("twitch", "ad.audio.audioAdsPatch")

View File

@@ -19,7 +19,7 @@ val embeddedAdsPatch = bytecodePatch(
settingsPatch,
)
compatibleWith("tv.twitch.android.app")
compatibleWith("tv.twitch.android.app"("16.9.1", "25.3.0"))
execute {
addResources("twitch", "ad.embedded.embeddedAdsPatch")

View File

@@ -155,7 +155,5 @@ val videoAdsPatch = bytecodePatch(
},
)
compatibleWith(
"tv.twitch.android.app",
)
compatibleWith("tv.twitch.android.app"("16.9.1", "25.3.0"))
}

View File

@@ -22,7 +22,7 @@ val showDeletedMessagesPatch = bytecodePatch(
addResourcesPatch,
)
compatibleWith("tv.twitch.android.app")
compatibleWith("tv.twitch.android.app"("16.9.1", "25.3.0"))
fun createSpoilerConditionInstructions(register: String = "v0") = """
invoke-static {}, Lapp/revanced/extension/twitch/patches/ShowDeletedMessagesPatch;->shouldUseSpoiler()Z

View File

@@ -20,7 +20,7 @@ val autoClaimChannelPointsPatch = bytecodePatch(
addResourcesPatch,
)
compatibleWith("tv.twitch.android.app")
compatibleWith("tv.twitch.android.app"("16.9.1", "25.3.0"))
execute {
addResources("twitch", "chat.autoclaim.autoClaimChannelPointsPatch")

View File

@@ -20,7 +20,7 @@ val debugModePatch = bytecodePatch(
addResourcesPatch,
)
compatibleWith("tv.twitch.android.app")
compatibleWith("tv.twitch.android.app"("16.9.1", "25.3.0"))
execute {
addResources("twitch", "debug.debugModePatch")

View File

@@ -48,7 +48,7 @@ val settingsPatch = bytecodePatch(
settingsPatch(preferences = preferences),
)
compatibleWith("tv.twitch.android.app")
compatibleWith("tv.twitch.android.app"("16.9.1"))
execute {
addResources("twitch", "misc.settings.settingsPatch")

View File

@@ -42,7 +42,9 @@ val hideButtonsPatch = resourcePatch(
SwitchPreference("revanced_hide_ask_button"),
SwitchPreference("revanced_hide_clip_button"),
SwitchPreference("revanced_hide_download_button"),
SwitchPreference("revanced_hide_hype_button"),
SwitchPreference("revanced_hide_like_dislike_button"),
SwitchPreference("revanced_hide_promote_button"),
SwitchPreference("revanced_hide_remix_button"),
SwitchPreference("revanced_hide_report_button"),
SwitchPreference("revanced_hide_save_button"),

View File

@@ -57,6 +57,7 @@ val hidePlayerFlyoutMenuPatch = bytecodePatch(
),
SwitchPreference("revanced_hide_player_flyout_watch_in_vr"),
SwitchPreference("revanced_hide_player_flyout_sleep_timer"),
SwitchPreference("revanced_hide_player_flyout_video_quality"),
SwitchPreference("revanced_hide_player_flyout_video_quality_footer"),
),
),

View File

@@ -0,0 +1,68 @@
package app.revanced.patches.youtube.layout.hide.signintotvpopup
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.shared.misc.mapping.get
import app.revanced.patches.shared.misc.mapping.resourceMappingPatch
import app.revanced.patches.shared.misc.mapping.resourceMappings
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
internal var mdx_seamless_tv_sign_in_drawer_fragment_title_id = -1L
private set
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/youtube/patches/DisableSignInToTvPopupPatch;"
val disableSignInToTvPopupPatch = bytecodePatch(
name = "Disable sign in to TV popup",
description = "Adds an option to disable the popup asking to sign into a TV on the same local network.",
) {
dependsOn(
settingsPatch,
sharedExtensionPatch,
addResourcesPatch,
resourceMappingPatch
)
compatibleWith(
"com.google.android.youtube"(
"19.34.42",
"19.43.41",
"19.47.53",
"20.07.39",
"20.12.46",
"20.13.41",
)
)
execute {
addResources("youtube", "layout.hide.signintotv.disableSignInToTvPopupPatch")
PreferenceScreen.MISC.addPreferences(
SwitchPreference("revanced_disable_signin_to_tv_popup"),
)
mdx_seamless_tv_sign_in_drawer_fragment_title_id = resourceMappings[
"string",
"mdx_seamless_tv_sign_in_drawer_fragment_title",
]
signInToTvPopupFingerprint.method.addInstructionsWithLabels(
0,
"""
invoke-static { }, $EXTENSION_CLASS_DESCRIPTOR->disableSignInToTvPopup()Z
move-result v0
if-eqz v0, :allow_sign_in_popup
const/4 v0, 0x0
return v0
:allow_sign_in_popup
nop
"""
)
}
}

View File

@@ -0,0 +1,12 @@
package app.revanced.patches.youtube.layout.hide.signintotvpopup
import app.revanced.patcher.fingerprint
import app.revanced.util.literal
internal val signInToTvPopupFingerprint = fingerprint {
returns("Z")
parameters("Ljava/lang/String;", "Z", "L")
literal {
mdx_seamless_tv_sign_in_drawer_fragment_title_id
}
}

View File

@@ -202,7 +202,7 @@ val sponsorBlockPatch = bytecodePatch(
"""
invoke-static { v$register }, $EXTENSION_SEGMENT_PLAYBACK_CONTROLLER_CLASS_DESCRIPTOR->appendTimeWithoutSegments(Ljava/lang/String;)Ljava/lang/String;
move-result-object v$register
""",
"""
)
}
@@ -252,15 +252,5 @@ val sponsorBlockPatch = bytecodePatch(
}
} ?: throw PatchException("Could not find the method which contains the replaceMeWith* strings")
}
// The vote and create segment buttons automatically change their visibility when appropriate,
// but if buttons are showing when the end of the video is reached then they will not automatically hide.
// Add a hook to forcefully hide when the end of the video is reached.
autoRepeatFingerprint.match(autoRepeatParentFingerprint.originalClassDef).method.addInstruction(
0,
"invoke-static {}, $EXTENSION_SPONSORBLOCK_VIEW_CONTROLLER_CLASS_DESCRIPTOR->endOfVideoReached()V",
)
// TODO: Channel whitelisting.
}
}

View File

@@ -2,14 +2,63 @@ package app.revanced.patches.youtube.misc.playercontrols
import app.revanced.patcher.fingerprint
import app.revanced.util.containsLiteralInstruction
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstruction
import app.revanced.util.indexOfFirstInstructionReversed
import app.revanced.util.literal
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.Method
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
internal fun indexOfFocusableInTouchModeInstruction(method: Method) =
method.indexOfFirstInstruction {
getReference<MethodReference>()?.name == "setFocusableInTouchMode"
}
internal fun indexOfTranslationInstruction(method: Method) =
method.indexOfFirstInstructionReversed {
getReference<MethodReference>()?.name == "setTranslationY"
}
internal val playerControlsVisibilityEntityModelFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC)
returns("L")
parameters()
opcodes(
Opcode.IGET,
Opcode.INVOKE_STATIC
)
custom { method, _ ->
method.name == "getPlayerControlsVisibility"
}
}
internal val youtubeControlsOverlayFingerprint = fingerprint {
accessFlags(AccessFlags.PRIVATE, AccessFlags.FINAL)
returns("V")
parameters()
custom { method, _ ->
indexOfFocusableInTouchModeInstruction(method) >= 0 &&
method.containsLiteralInstruction(inset_overlay_view_layout_id) &&
method.containsLiteralInstruction(scrim_overlay_id)
}
}
internal val motionEventFingerprint = fingerprint {
returns("V")
parameters("Landroid/view/MotionEvent;")
custom { method, _ ->
indexOfTranslationInstruction(method) >= 0
}
}
internal val playerTopControlsInflateFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("V")
parameters()
literal { controlsLayoutStub }
literal { controls_layout_stub_id }
}
internal val playerControlsExtensionHookListenersExistFingerprint = fingerprint {
@@ -35,7 +84,7 @@ internal val playerControlsExtensionHookFingerprint = fingerprint {
internal val playerBottomControlsInflateFingerprint = fingerprint {
returns("Ljava/lang/Object;")
parameters()
literal { bottomUiContainerResourceId }
literal { bottom_ui_container_stub_id }
}
internal val overlayViewInflateFingerprint = fingerprint {
@@ -43,8 +92,8 @@ internal val overlayViewInflateFingerprint = fingerprint {
returns("V")
parameters("Landroid/view/View;")
custom { methodDef, _ ->
methodDef.containsLiteralInstruction(fullscreenButton) &&
methodDef.containsLiteralInstruction(heatseekerViewstub)
methodDef.containsLiteralInstruction(fullscreen_button_id) &&
methodDef.containsLiteralInstruction(heatseeker_viewstub_id)
}
}

View File

@@ -0,0 +1,42 @@
package app.revanced.patches.youtube.misc.playercontrols
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.util.indexOfFirstInstructionOrThrow
import com.android.tools.smali.dexlib2.Opcode
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
private const val EXTENSION_PLAYER_CONTROLS_VISIBILITY_HOOK_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/youtube/patches/PlayerControlsVisibilityHookPatch;"
val PlayerControlsOverlayVisibilityPatch = bytecodePatch {
dependsOn(sharedExtensionPatch)
execute {
playerControlsVisibilityEntityModelFingerprint.let {
it.method.apply {
val startIndex = it.patternMatch!!.startIndex
val iGetReference = getInstruction<ReferenceInstruction>(startIndex).reference
val staticReference = getInstruction<ReferenceInstruction>(startIndex + 1).reference
it.classDef.methods.find { method -> method.name == "<init>" }?.apply {
val targetIndex = indexOfFirstInstructionOrThrow(Opcode.IPUT_OBJECT)
val targetRegister = getInstruction<TwoRegisterInstruction>(targetIndex).registerA
addInstructions(
targetIndex + 1,
"""
iget v$targetRegister, v$targetRegister, $iGetReference
invoke-static { v$targetRegister }, $staticReference
move-result-object v$targetRegister
invoke-static { v$targetRegister }, $EXTENSION_PLAYER_CONTROLS_VISIBILITY_HOOK_CLASS_DESCRIPTOR->setPlayerControlsVisibility(Ljava/lang/Enum;)V
"""
)
}
}
}
}
}

View File

@@ -1,7 +1,6 @@
package app.revanced.patches.youtube.misc.playercontrols
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.PatchException
import app.revanced.patcher.patch.bytecodePatch
@@ -40,13 +39,17 @@ internal lateinit var addTopControl: (String) -> Unit
lateinit var addBottomControl: (String) -> Unit
private set
internal var bottomUiContainerResourceId = -1L
internal var bottom_ui_container_stub_id = -1L
private set
internal var controlsLayoutStub = -1L
internal var controls_layout_stub_id = -1L
private set
internal var heatseekerViewstub = -1L
internal var heatseeker_viewstub_id = -1L
private set
internal var fullscreenButton = -1L
internal var fullscreen_button_id = -1L
private set
internal var inset_overlay_view_layout_id = -1L
private set
internal var scrim_overlay_id = -1L
private set
val playerControlsResourcePatch = resourcePatch {
@@ -65,10 +68,12 @@ val playerControlsResourcePatch = resourcePatch {
execute {
val targetResourceName = "youtube_controls_bottom_ui_container.xml"
bottomUiContainerResourceId = resourceMappings["id", "bottom_ui_container_stub"]
controlsLayoutStub = resourceMappings["id", "controls_layout_stub"]
heatseekerViewstub = resourceMappings["id", "heatseeker_viewstub"]
fullscreenButton = resourceMappings["id", "fullscreen_button"]
bottom_ui_container_stub_id = resourceMappings["id", "bottom_ui_container_stub"]
controls_layout_stub_id = resourceMappings["id", "controls_layout_stub"]
heatseeker_viewstub_id = resourceMappings["id", "heatseeker_viewstub"]
fullscreen_button_id = resourceMappings["id", "fullscreen_button"]
inset_overlay_view_layout_id = resourceMappings["id", "inset_overlay_view_layout"]
scrim_overlay_id = resourceMappings["id", "scrim_overlay"]
bottomTargetDocument = document("res/layout/$targetResourceName")
@@ -198,6 +203,13 @@ fun injectVisibilityCheckCall(descriptor: String) {
visibilityImmediateInsertIndex++,
"invoke-static { p0 }, $descriptor->setVisibilityImmediate(Z)V",
)
// Patch works without this hook, but it is needed to use the correct fade out animation
// duration when tapping the overlay to dismiss.
visibilityNegatedImmediateMethod.addInstruction(
visibilityNegatedImmediateInsertIndex++,
"invoke-static { }, $descriptor->setVisibilityNegatedImmediate()V",
)
}
internal const val EXTENSION_CLASS_DESCRIPTOR =
@@ -220,12 +232,16 @@ private lateinit var visibilityImmediateCallbacksExistMethod : MutableMethod
private lateinit var visibilityImmediateMethod: MutableMethod
private var visibilityImmediateInsertIndex: Int = 0
private lateinit var visibilityNegatedImmediateMethod: MutableMethod
private var visibilityNegatedImmediateInsertIndex: Int = 0
val playerControlsPatch = bytecodePatch(
description = "Manages the code for the player controls of the YouTube player.",
) {
dependsOn(
playerControlsResourcePatch,
sharedExtensionPatch,
PlayerControlsOverlayVisibilityPatch
)
execute {
@@ -258,7 +274,7 @@ val playerControlsPatch = bytecodePatch(
// Hook the fullscreen close button. Used to fix visibility
// when seeking and other situations.
overlayViewInflateFingerprint.method.apply {
val resourceIndex = indexOfFirstLiteralInstructionReversedOrThrow(fullscreenButton)
val resourceIndex = indexOfFirstLiteralInstructionReversedOrThrow(fullscreen_button_id)
val index = indexOfFirstInstructionOrThrow(resourceIndex) {
opcode == Opcode.CHECK_CAST &&
@@ -277,12 +293,17 @@ val playerControlsPatch = bytecodePatch(
visibilityImmediateCallbacksExistMethod = playerControlsExtensionHookListenersExistFingerprint.method
visibilityImmediateMethod = playerControlsExtensionHookFingerprint.method
motionEventFingerprint.match(youtubeControlsOverlayFingerprint.originalClassDef).method.apply {
visibilityNegatedImmediateMethod = this
visibilityNegatedImmediateInsertIndex = indexOfTranslationInstruction(this) + 1
}
// A/B test for a slightly different bottom overlay controls,
// that uses layout file youtube_video_exploder_controls_bottom_ui_container.xml
// The change to support this is simple and only requires adding buttons to both layout files,
// but for now force this different layout off since it's still an experimental test.
if (is_19_35_or_greater) {
playerBottomControlsExploderFeatureFlagFingerprint.method.returnEarly()
playerBottomControlsExploderFeatureFlagFingerprint.method.returnLate(false)
}
// A/B test of new top overlay controls. Two different layouts can be used:
@@ -299,12 +320,9 @@ val playerControlsPatch = bytecodePatch(
val index = indexOfFirstInstructionOrThrow(Opcode.MOVE_RESULT_OBJECT)
val register = getInstruction<OneRegisterInstruction>(index).registerA
addInstructions(
addInstruction(
index + 1,
"""
invoke-static { v$register }, $EXTENSION_CLASS_DESCRIPTOR->getPlayerTopControlsLayoutResourceName(Ljava/lang/String;)Ljava/lang/String;
move-result-object v$register
""",
"const-string v$register, \"default\""
)
}
}

View File

@@ -70,87 +70,84 @@ val forceOriginalAudioPatch = bytecodePatch(
)
}
val isDefaultAudioTrackMethod = formatStreamModelToStringFingerprint.originalMethod
.findMethodFromToString("isDefaultAudioTrack=")
val audioTrackDisplayNameMethod = formatStreamModelToStringFingerprint.originalMethod
.findMethodFromToString("audioTrackDisplayName=")
val audioTrackIdMethod = formatStreamModelToStringFingerprint.originalMethod
.findMethodFromToString("audioTrackId=")
formatStreamModelToStringFingerprint.let {
val isDefaultAudioTrackMethod = it.originalMethod.findMethodFromToString("isDefaultAudioTrack=")
val audioTrackDisplayNameMethod = it.originalMethod.findMethodFromToString("audioTrackDisplayName=")
val audioTrackIdMethod = it.originalMethod.findMethodFromToString("audioTrackId=")
proxy(classes.first {
it.type == audioTrackIdMethod.definingClass
}).mutableClass.apply {
// Add a new field to store the override.
val helperFieldName = "isDefaultAudioTrackOverride"
fields.add(
ImmutableField(
type,
helperFieldName,
"Ljava/lang/Boolean;",
// Boolean is a 100% immutable class (all fields are final)
// and safe to write to a shared field without volatile/synchronization,
// but without volatile the field can show stale data
// and the same field is calculated more than once by different threads.
AccessFlags.PRIVATE.value or AccessFlags.VOLATILE.value,
it.classDef.apply {
// Add a new field to store the override.
val helperFieldName = "patch_isDefaultAudioTrackOverride"
fields.add(
ImmutableField(
type,
helperFieldName,
"Ljava/lang/Boolean;",
// Boolean is a 100% immutable class (all fields are final)
// and safe to write to a shared field without volatile/synchronization,
// but without volatile the field can show stale data
// and the same field is calculated more than once by different threads.
AccessFlags.PRIVATE.value or AccessFlags.VOLATILE.value,
null,
null,
null
).toMutable()
)
// Add a helper method because the isDefaultAudioTrack() has only 2 registers and 3 are needed.
val helperMethodClass = type
val helperMethodName = "patch_isDefaultAudioTrack"
val helperMethod = ImmutableMethod(
helperMethodClass,
helperMethodName,
listOf(ImmutableMethodParameter("Z", null, null)),
"Z",
AccessFlags.PRIVATE.value,
null,
null,
null
).toMutable()
)
MutableMethodImplementation(6),
).toMutable().apply {
addInstructionsWithLabels(
0,
"""
iget-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean;
if-eqz v0, :call_extension
invoke-virtual { v0 }, Ljava/lang/Boolean;->booleanValue()Z
move-result v3
return v3
// Add a helper method because the isDefaultAudioTrack() has only 2 registers and 3 are needed.
val helperMethodClass = type
val helperMethodName = "patch_isDefaultAudioTrack"
val helperMethod = ImmutableMethod(
helperMethodClass,
helperMethodName,
listOf(ImmutableMethodParameter("Z", null, null)),
"Z",
AccessFlags.PRIVATE.value,
null,
null,
MutableMethodImplementation(6),
).toMutable().apply {
addInstructionsWithLabels(
0,
"""
iget-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean;
if-eqz v0, :call_extension
invoke-virtual { v0 }, Ljava/lang/Boolean;->booleanValue()Z
move-result v3
return v3
:call_extension
invoke-virtual { p0 }, $audioTrackIdMethod
move-result-object v1
:call_extension
invoke-virtual { p0 }, $audioTrackIdMethod
move-result-object v1
invoke-virtual { p0 }, $audioTrackDisplayNameMethod
move-result-object v2
invoke-virtual { p0 }, $audioTrackDisplayNameMethod
move-result-object v2
invoke-static { p1, v1, v2 }, $EXTENSION_CLASS_DESCRIPTOR->isDefaultAudioStream(ZLjava/lang/String;Ljava/lang/String;)Z
move-result v3
invoke-static { p1, v1, v2 }, $EXTENSION_CLASS_DESCRIPTOR->isDefaultAudioStream(ZLjava/lang/String;Ljava/lang/String;)Z
move-result v3
invoke-static { v3 }, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
move-result-object v0
iput-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean;
return v3
"""
)
}
methods.add(helperMethod)
invoke-static { v3 }, Ljava/lang/Boolean;->valueOf(Z)Ljava/lang/Boolean;
move-result-object v0
iput-object v0, p0, $helperMethodClass->$helperFieldName:Ljava/lang/Boolean;
return v3
"""
)
}
methods.add(helperMethod)
// Modify isDefaultAudioTrack() to call extension helper method.
isDefaultAudioTrackMethod.apply {
val index = indexOfFirstInstructionOrThrow(Opcode.RETURN)
val register = getInstruction<OneRegisterInstruction>(index).registerA
// Modify isDefaultAudioTrack() to call extension helper method.
isDefaultAudioTrackMethod.apply {
val index = indexOfFirstInstructionOrThrow(Opcode.RETURN)
val register = getInstruction<OneRegisterInstruction>(index).registerA
addInstructions(
index,
"""
invoke-direct { p0, v$register }, $helperMethodClass->$helperMethodName(Z)Z
move-result v$register
"""
)
addInstructions(
index,
"""
invoke-direct { p0, v$register }, $helperMethodClass->$helperMethodName(Z)Z
move-result v$register
"""
)
}
}
}
}

View File

@@ -1,15 +1,16 @@
package app.revanced.patches.youtube.video.hdr
import app.revanced.patcher.extensions.InstructionExtensions.addInstructionsWithLabels
import app.revanced.patcher.extensions.InstructionExtensions.replaceInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.all.misc.transformation.transformInstructionsPatch
import app.revanced.patches.shared.misc.settings.preference.SwitchPreference
import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.util.getReference
import app.revanced.util.indexOfFirstInstructionOrThrow
import com.android.tools.smali.dexlib2.iface.instruction.FiveRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.MethodReference
private const val EXTENSION_CLASS_DESCRIPTOR =
@@ -24,6 +25,31 @@ val disableHdrPatch = bytecodePatch(
sharedExtensionPatch,
settingsPatch,
addResourcesPatch,
// Override all calls of `getSupportedHdrTypes`.
transformInstructionsPatch(
filterMap = filterMap@{ classDef, _, instruction, instructionIndex ->
if (classDef.type.startsWith("Lapp/revanced/")) {
return@filterMap null
}
val reference = instruction.getReference<MethodReference>()
if (reference?.definingClass =="Landroid/view/Display\$HdrCapabilities;"
&& reference.name == "getSupportedHdrTypes") {
return@filterMap instruction to instructionIndex
}
return@filterMap null
},
transform = { method, entry ->
val (instruction, index) = entry
val register = (instruction as FiveRegisterInstruction).registerC
method.replaceInstruction(
index,
"invoke-static/range { v$register .. v$register }, $EXTENSION_CLASS_DESCRIPTOR->" +
"disableHdrVideo(Landroid/view/Display\$HdrCapabilities;)[I",
)
}
)
)
compatibleWith(
@@ -43,29 +69,5 @@ val disableHdrPatch = bytecodePatch(
PreferenceScreen.VIDEO.addPreferences(
SwitchPreference("revanced_disable_hdr_video")
)
hdrCapabilityFingerprint.let {
it.originalMethod.apply {
val stringIndex = it.stringMatches!!.first().index
val navigateIndex = indexOfFirstInstructionOrThrow(stringIndex) {
val reference = getReference<MethodReference>()
reference?.parameterTypes == listOf("I", "Landroid/view/Display;") &&
reference.returnType == "Z"
}
// Modify the HDR lookup method (Method is in the same class as the fingerprint).
navigate(this).to(navigateIndex).stop().addInstructionsWithLabels(
0,
"""
invoke-static {}, $EXTENSION_CLASS_DESCRIPTOR->disableHDRVideo()Z
move-result v0
if-nez v0, :useHdr
return v0
:useHdr
nop
"""
)
}
}
}
}

View File

@@ -1,12 +0,0 @@
package app.revanced.patches.youtube.video.hdr
import app.revanced.patcher.fingerprint
import com.android.tools.smali.dexlib2.AccessFlags
internal val hdrCapabilityFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
strings(
"av1_profile_main_10_hdr_10_plus_supported",
"video/av01"
)
}

View File

@@ -133,3 +133,46 @@ internal val playbackSpeedClassFingerprint = fingerprint {
)
strings("PLAYBACK_RATE_MENU_BOTTOM_SHEET_FRAGMENT")
}
internal const val YOUTUBE_VIDEO_QUALITY_CLASS_TYPE = "Lcom/google/android/libraries/youtube/innertube/model/media/VideoQuality;"
internal val videoQualityFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
parameters(
"I", // Resolution.
"Ljava/lang/String;", // Human readable resolution: "480p", "1080p Premium", etc
"Z",
"L"
)
custom { _, classDef ->
classDef.type == YOUTUBE_VIDEO_QUALITY_CLASS_TYPE
}
}
internal val videoQualitySetterFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("V")
parameters("[L", "I", "Z")
opcodes(
Opcode.IF_EQZ,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.IPUT_BOOLEAN,
)
strings("menu_item_video_quality")
}
/**
* Matches with the class found in [videoQualitySetterFingerprint].
*/
internal val setVideoQualityFingerprint = fingerprint {
returns("V")
parameters("L")
opcodes(
Opcode.IGET_OBJECT,
Opcode.IPUT_OBJECT,
Opcode.IGET_OBJECT,
)
}

View File

@@ -38,7 +38,9 @@ import com.android.tools.smali.dexlib2.util.MethodUtil
private const val EXTENSION_CLASS_DESCRIPTOR = "Lapp/revanced/extension/youtube/patches/VideoInformation;"
private const val EXTENSION_PLAYER_INTERFACE =
"Lapp/revanced/extension/youtube/patches/VideoInformation${'$'}PlaybackController;"
"Lapp/revanced/extension/youtube/patches/VideoInformation\$PlaybackController;"
private const val EXTENSION_VIDEO_QUALITY_MENU_INTERFACE =
"Lapp/revanced/extension/youtube/patches/VideoInformation\$VideoQualityMenuInterface;"
private lateinit var playerInitMethod: MutableMethod
private var playerInitInsertIndex = -1
@@ -83,7 +85,6 @@ val videoInformationPatch = bytecodePatch(
)
execute {
playerInitMethod = playerInitFingerprint.classDef.methods.first { MethodUtil.isConstructor(it) }
// Find the location of the first invoke-direct call and extract the register storing the 'this' object reference.
@@ -93,9 +94,6 @@ val videoInformationPatch = bytecodePatch(
playerInitInsertRegister = playerInitMethod.getInstruction<FiveRegisterInstruction>(initThisIndex).registerC
playerInitInsertIndex = initThisIndex + 1
// Hook the player controller for use through the extension.
onCreateHook(EXTENSION_CLASS_DESCRIPTOR, "initialize")
val seekFingerprintResultMethod = seekFingerprint.match(playerInitFingerprint.originalClassDef).method
val seekRelativeFingerprintResultMethod =
seekRelativeFingerprint.match(playerInitFingerprint.originalClassDef).method
@@ -272,6 +270,131 @@ val videoInformationPatch = bytecodePatch(
speedSelectionValueRegister = getInstruction<TwoRegisterInstruction>(index).registerA
}
videoQualityFingerprint.let {
// Fix bad data used by YouTube.
it.method.addInstructions(
0,
"""
invoke-static { p2, p1 }, $EXTENSION_CLASS_DESCRIPTOR->fixVideoQualityResolution(Ljava/lang/String;I)I
move-result p1
"""
)
// Add methods to access obfuscated quality fields.
it.classDef.apply {
methods.add(
ImmutableMethod(
type,
"patch_getQualityName",
listOf(),
"Ljava/lang/String;",
AccessFlags.PUBLIC.value or AccessFlags.FINAL.value,
null,
null,
MutableMethodImplementation(2),
).toMutable().apply {
// Only one string field.
val qualityNameField = fields.single { field ->
field.type == "Ljava/lang/String;"
}
addInstructions(
0,
"""
iget-object v0, p0, $qualityNameField
return-object v0
"""
)
}
)
methods.add(
ImmutableMethod(
type,
"patch_getResolution",
listOf(),
"I",
AccessFlags.PUBLIC.value or AccessFlags.FINAL.value,
null,
null,
MutableMethodImplementation(2),
).toMutable().apply {
val resolutionField = fields.single { field ->
field.type == "I"
}
addInstructions(
0,
"""
iget v0, p0, $resolutionField
return v0
"""
)
}
)
}
}
// Detect video quality changes and override the current quality.
setVideoQualityFingerprint.match(
videoQualitySetterFingerprint.originalClassDef
).let { match ->
// This instruction refers to the field with the type that contains the setQuality method.
val onItemClickListenerClassReference = match.method
.getInstruction<ReferenceInstruction>(0).reference
val setQualityFieldReference = match.method
.getInstruction<ReferenceInstruction>(1).reference as FieldReference
proxy(
classes.find { classDef ->
classDef.type == setQualityFieldReference.type
}!!
).mutableClass.apply {
// Add interface and helper methods to allow extension code to call obfuscated methods.
interfaces.add(EXTENSION_VIDEO_QUALITY_MENU_INTERFACE)
methods.add(
ImmutableMethod(
type,
"patch_setQuality",
listOf(
ImmutableMethodParameter(YOUTUBE_VIDEO_QUALITY_CLASS_TYPE, null, null)
),
"V",
AccessFlags.PUBLIC.value or AccessFlags.FINAL.value,
null,
null,
MutableMethodImplementation(2),
).toMutable().apply {
val setQualityMenuIndexMethod = methods.single { method ->
method.parameterTypes.firstOrNull() == YOUTUBE_VIDEO_QUALITY_CLASS_TYPE
}
addInstructions(
0,
"""
invoke-virtual { p0, p1 }, $setQualityMenuIndexMethod
return-void
"""
)
}
)
}
videoQualitySetterFingerprint.method.addInstructions(
0,
"""
# Get object instance to invoke setQuality method.
iget-object v0, p0, $onItemClickListenerClassReference
iget-object v0, v0, $setQualityFieldReference
invoke-static { p1, v0, p2 }, $EXTENSION_CLASS_DESCRIPTOR->setVideoQuality([$YOUTUBE_VIDEO_QUALITY_CLASS_TYPE${EXTENSION_VIDEO_QUALITY_MENU_INTERFACE}I)I
move-result p2
"""
)
}
onCreateHook(EXTENSION_CLASS_DESCRIPTOR, "initialize")
videoSpeedChangedHook(EXTENSION_CLASS_DESCRIPTOR, "videoSpeedChanged")
userSelectedPlaybackSpeedHook(EXTENSION_CLASS_DESCRIPTOR, "userSelectedPlaybackSpeed")
}
@@ -282,8 +405,8 @@ private fun addSeekInterfaceMethods(targetClass: MutableClass, seekToMethod: Met
targetClass.interfaces.add(EXTENSION_PLAYER_INTERFACE)
arrayOf(
Triple(seekToMethod, "seekTo", true),
Triple(seekToRelativeMethod, "seekToRelative", false),
Triple(seekToMethod, "patch_seekTo", true),
Triple(seekToRelativeMethod, "patch_seekToRelative", false),
).forEach { (method, name, returnsBoolean) ->
// Add interface method.
// Get enum type for the seek helper method.

View File

@@ -5,34 +5,6 @@ import app.revanced.util.literal
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.Opcode
internal const val YOUTUBE_VIDEO_QUALITY_CLASS_TYPE = "Lcom/google/android/libraries/youtube/innertube/model/media/VideoQuality;"
internal val videoQualityFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.CONSTRUCTOR)
parameters(
"I", // Resolution.
"Ljava/lang/String;", // Human readable resolution: "480p", "1080p Premium", etc
"Z",
"L"
)
custom { _, classDef ->
classDef.type == YOUTUBE_VIDEO_QUALITY_CLASS_TYPE
}
}
/**
* Matches with the class found in [videoQualitySetterFingerprint].
*/
internal val setVideoQualityFingerprint = fingerprint {
returns("V")
parameters("L")
opcodes(
Opcode.IGET_OBJECT,
Opcode.IPUT_OBJECT,
Opcode.IGET_OBJECT,
)
}
internal val videoQualityItemOnClickParentFingerprint = fingerprint {
returns("V")
strings("VIDEO_QUALITIES_MENU_BOTTOM_SHEET_FRAGMENT")
@@ -54,19 +26,6 @@ internal val videoQualityItemOnClickFingerprint = fingerprint {
}
}
internal val videoQualitySetterFingerprint = fingerprint {
accessFlags(AccessFlags.PUBLIC, AccessFlags.FINAL)
returns("V")
parameters("[L", "I", "Z")
opcodes(
Opcode.IF_EQZ,
Opcode.INVOKE_VIRTUAL,
Opcode.MOVE_RESULT_OBJECT,
Opcode.INVOKE_VIRTUAL,
Opcode.IPUT_BOOLEAN,
)
strings("menu_item_video_quality")
}
internal val videoQualityMenuOptionsFingerprint = fingerprint {
accessFlags(AccessFlags.STATIC)

View File

@@ -1,10 +1,8 @@
package app.revanced.patches.youtube.video.quality
import app.revanced.patcher.extensions.InstructionExtensions.addInstruction
import app.revanced.patcher.extensions.InstructionExtensions.addInstructions
import app.revanced.patcher.extensions.InstructionExtensions.getInstruction
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.util.proxy.mutableTypes.MutableMethod.Companion.toMutable
import app.revanced.patches.all.misc.resources.addResources
import app.revanced.patches.all.misc.resources.addResourcesPatch
import app.revanced.patches.shared.misc.settings.preference.ListPreference
@@ -15,18 +13,10 @@ import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.patches.youtube.shared.videoQualityChangedFingerprint
import app.revanced.patches.youtube.video.information.onCreateHook
import app.revanced.patches.youtube.video.information.videoInformationPatch
import com.android.tools.smali.dexlib2.AccessFlags
import com.android.tools.smali.dexlib2.builder.MutableMethodImplementation
import com.android.tools.smali.dexlib2.iface.instruction.ReferenceInstruction
import com.android.tools.smali.dexlib2.iface.instruction.TwoRegisterInstruction
import com.android.tools.smali.dexlib2.iface.reference.FieldReference
import com.android.tools.smali.dexlib2.immutable.ImmutableMethod
import com.android.tools.smali.dexlib2.immutable.ImmutableMethodParameter
private const val EXTENSION_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/youtube/patches/playback/quality/RememberVideoQualityPatch;"
private const val EXTENSION_VIDEO_QUALITY_MENU_INTERFACE =
"Lapp/revanced/extension/youtube/patches/playback/quality/RememberVideoQualityPatch\$VideoQualityMenuInterface;"
val rememberVideoQualityPatch = bytecodePatch {
dependsOn(
@@ -69,131 +59,6 @@ val rememberVideoQualityPatch = bytecodePatch {
onCreateHook(EXTENSION_CLASS_DESCRIPTOR, "newVideoStarted")
videoQualityFingerprint.let {
// Fix bad data used by YouTube.
it.method.addInstructions(
0,
"""
invoke-static { p2, p1 }, $EXTENSION_CLASS_DESCRIPTOR->fixVideoQualityResolution(Ljava/lang/String;I)I
move-result p1
"""
)
// Add methods to access obfuscated quality fields.
it.classDef.apply {
methods.add(
ImmutableMethod(
type,
"patch_getQualityName",
listOf(),
"Ljava/lang/String;",
AccessFlags.PUBLIC.value or AccessFlags.FINAL.value,
null,
null,
MutableMethodImplementation(2),
).toMutable().apply {
// Only one string field.
val qualityNameField = fields.single { field ->
field.type == "Ljava/lang/String;"
}
addInstructions(
0,
"""
iget-object v0, p0, $qualityNameField
return-object v0
"""
)
}
)
methods.add(
ImmutableMethod(
type,
"patch_getResolution",
listOf(),
"I",
AccessFlags.PUBLIC.value or AccessFlags.FINAL.value,
null,
null,
MutableMethodImplementation(2),
).toMutable().apply {
val resolutionField = fields.single { field ->
field.type == "I"
}
addInstructions(
0,
"""
iget v0, p0, $resolutionField
return v0
"""
)
}
)
}
}
// Inject a call to set the remembered quality once a video loads.
setVideoQualityFingerprint.match(
videoQualitySetterFingerprint.originalClassDef
).let { match ->
// This instruction refers to the field with the type that contains the setQuality method.
val instructions = match.method.implementation!!.instructions
val onItemClickListenerClassReference =
(instructions.elementAt(0) as ReferenceInstruction).reference
val setQualityFieldReference =
((instructions.elementAt(1) as ReferenceInstruction).reference) as FieldReference
proxy(
classes.find { classDef ->
classDef.type == setQualityFieldReference.type
}!!
).mutableClass.apply {
// Add interface and helper methods to allow extension code to call obfuscated methods.
interfaces.add(EXTENSION_VIDEO_QUALITY_MENU_INTERFACE)
methods.add(
ImmutableMethod(
type,
"patch_setQuality",
listOf(
ImmutableMethodParameter(YOUTUBE_VIDEO_QUALITY_CLASS_TYPE, null, null)
),
"V",
AccessFlags.PUBLIC.value or AccessFlags.FINAL.value,
null,
null,
MutableMethodImplementation(2),
).toMutable().apply {
val setQualityMenuIndexMethod = methods.single { method ->
method.parameterTypes.firstOrNull() == YOUTUBE_VIDEO_QUALITY_CLASS_TYPE
}
addInstructions(
0,
"""
invoke-virtual { p0, p1 }, $setQualityMenuIndexMethod
return-void
"""
)
}
)
}
videoQualitySetterFingerprint.method.addInstructions(
0,
"""
# Get object instance to invoke setQuality method.
iget-object v0, p0, $onItemClickListenerClassReference
iget-object v0, v0, $setQualityFieldReference
invoke-static { p1, v0, p2 }, $EXTENSION_CLASS_DESCRIPTOR->setVideoQuality([$YOUTUBE_VIDEO_QUALITY_CLASS_TYPE${EXTENSION_VIDEO_QUALITY_MENU_INTERFACE}I)I
move-result p2
"""
)
}
// Inject a call to remember the selected quality for Shorts.
videoQualityItemOnClickFingerprint.match(
videoQualityItemOnClickParentFingerprint.classDef

View File

@@ -1,4 +1,4 @@
package app.revanced.patches.youtube.video.quality.button
package app.revanced.patches.youtube.video.quality
import app.revanced.patcher.patch.bytecodePatch
import app.revanced.patcher.patch.resourcePatch
@@ -9,7 +9,6 @@ import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.playercontrols.*
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.patches.youtube.video.quality.rememberVideoQualityPatch
import app.revanced.util.ResourceGroup
import app.revanced.util.copyResources
@@ -21,14 +20,7 @@ private val videoQualityButtonResourcePatch = resourcePatch {
"qualitybutton",
ResourceGroup(
"drawable",
"revanced_video_quality_dialog_button_ld.xml",
"revanced_video_quality_dialog_button_sd.xml",
"revanced_video_quality_dialog_button_hd.xml",
"revanced_video_quality_dialog_button_fhd.xml",
"revanced_video_quality_dialog_button_fhd_plus.xml",
"revanced_video_quality_dialog_button_qhd.xml",
"revanced_video_quality_dialog_button_4k.xml",
"revanced_video_quality_dialog_button_unknown.xml",
"revanced_video_quality_dialog_button_rectangle.xml",
),
)
@@ -39,7 +31,7 @@ private val videoQualityButtonResourcePatch = resourcePatch {
private const val QUALITY_BUTTON_CLASS_DESCRIPTOR =
"Lapp/revanced/extension/youtube/videoplayer/VideoQualityDialogButton;"
val videoQualityButtonPatch = bytecodePatch(
val videoQualityDialogButtonPatch = bytecodePatch(
description = "Adds the option to display video quality dialog button in the video player.",
) {
dependsOn(
@@ -52,7 +44,7 @@ val videoQualityButtonPatch = bytecodePatch(
)
execute {
addResources("youtube", "video.quality.button.videoQualityButtonPatch")
addResources("youtube", "video.quality.button.videoQualityDialogButtonPatch")
PreferenceScreen.PLAYER.addPreferences(
SwitchPreference("revanced_video_quality_dialog_button"),

View File

@@ -5,7 +5,6 @@ import app.revanced.patches.shared.misc.settings.preference.BasePreference
import app.revanced.patches.shared.misc.settings.preference.PreferenceCategory
import app.revanced.patches.shared.misc.settings.preference.PreferenceScreenPreference.Sorting
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.video.quality.button.videoQualityButtonPatch
/**
* Video quality settings. Used to organize all speed related settings together.
@@ -20,7 +19,7 @@ val videoQualityPatch = bytecodePatch(
dependsOn(
rememberVideoQualityPatch,
advancedVideoQualityMenuPatch,
videoQualityButtonPatch,
videoQualityDialogButtonPatch,
)
compatibleWith(

View File

@@ -9,6 +9,9 @@ import app.revanced.patches.youtube.misc.extension.sharedExtensionPatch
import app.revanced.patches.youtube.misc.playercontrols.*
import app.revanced.patches.youtube.misc.settings.PreferenceScreen
import app.revanced.patches.youtube.misc.settings.settingsPatch
import app.revanced.patches.youtube.video.information.userSelectedPlaybackSpeedHook
import app.revanced.patches.youtube.video.information.videoInformationPatch
import app.revanced.patches.youtube.video.information.videoSpeedChangedHook
import app.revanced.patches.youtube.video.speed.custom.customPlaybackSpeedPatch
import app.revanced.util.ResourceGroup
import app.revanced.util.copyResources
@@ -21,8 +24,8 @@ private val playbackSpeedButtonResourcePatch = resourcePatch {
"speedbutton",
ResourceGroup(
"drawable",
"revanced_playback_speed_dialog_button.xml",
),
"revanced_playback_speed_dialog_button_rectangle.xml"
)
)
addBottomControl("speedbutton")
@@ -42,6 +45,7 @@ val playbackSpeedButtonPatch = bytecodePatch(
customPlaybackSpeedPatch,
playbackSpeedButtonResourcePatch,
playerControlsPatch,
videoInformationPatch,
)
execute {
@@ -53,5 +57,8 @@ val playbackSpeedButtonPatch = bytecodePatch(
initializeBottomControl(SPEED_BUTTON_CLASS_DESCRIPTOR)
injectVisibilityCheckCall(SPEED_BUTTON_CLASS_DESCRIPTOR)
videoSpeedChangedHook(SPEED_BUTTON_CLASS_DESCRIPTOR, "videoSpeedChanged")
userSelectedPlaybackSpeedHook(SPEED_BUTTON_CLASS_DESCRIPTOR, "videoSpeedChanged")
}
}

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -222,7 +227,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -222,7 +227,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -452,6 +452,11 @@ Second \"item\" text"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">سيتم عرض مربع الحوار</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">وهذا لا يتجاوز قيود السن. بل يقبلها تلقائيًا.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">تعطيل النافذة المنبثقة لتسجيل الدخول إلى التلفزيون</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">النافذة المنبثقة لتسجيل الدخول إلى التلفزيون معطلة</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">النافذة المنبثقة لتسجيل الدخول إلى التلفزيون مفعلة</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">تعطيل تخطي الفصل بالنقر المزدوج</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">لا يمكن للنقر المزدوج مطلقًا أن يؤدي إلى تخطي الفصل التالي/السابق</string>
@@ -563,7 +568,7 @@ Second \"item\" text"</string>
<string name="revanced_hide_stop_ads_button_summary_on">زر إيقاف الإعلانات مخفي</string>
<string name="revanced_hide_stop_ads_button_summary_off">زر إيقاف الإعلانات معروض</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">إخفاء الإبلاغ</string>
<string name="revanced_hide_report_button_summary_on">تم إخفاء زر الإبلاغ</string>
<string name="revanced_hide_report_button_summary_off">يتم عرض زر الإبلاغ</string>
@@ -575,12 +580,21 @@ Second \"item\" text"</string>
<string name="revanced_hide_download_button_title">إخفاء التنزيل</string>
<string name="revanced_hide_download_button_summary_on">تم إخفاء زر التنزيل</string>
<string name="revanced_hide_download_button_summary_off">يتم عرض زر التنزيل</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">إخفاء الضجة</string>
<string name="revanced_hide_hype_button_summary_on">زر الضجة مخفي</string>
<string name="revanced_hide_hype_button_summary_off">يظهر زر الحماس</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">إخفاء الترويج</string>
<string name="revanced_hide_promote_button_summary_on">زر الترويج مخفي</string>
<string name="revanced_hide_promote_button_summary_off">زر الترويج ظاهر</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">إخفاء شكرًا</string>
<string name="revanced_hide_thanks_button_summary_on">تم إخفاء زر شكرًا</string>
<string name="revanced_hide_thanks_button_summary_off">يتم عرض زر شكرًا</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">إخفاء \"Ask\"</string>
<string name="revanced_hide_ask_button_summary_on">تم إخفاء زر \"Ask\"</string>
<string name="revanced_hide_ask_button_summary_off">يتم عرض زر \"Ask\"</string>
@@ -693,6 +707,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_watch_in_vr_title">إخفاء المشاهدة في VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">تم إخفاء قائمة المشاهدة في الوضع الافتراضي</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">يتم عرض قائمة المشاهدة في الوضع الافتراضي</string>
<string name="revanced_hide_player_flyout_video_quality_title">إخفاء قائمة جودة الفيديو</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">قائمة جودة الفيديو مخفية</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">قائمة جودة الفيديو معروضة</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">إخفاء تذييل قائمة جودة الفيديو</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">تم إخفاء تذييل قائمة جودة الفيديو</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">يتم عرض تذييل قائمة جودة الفيديو</string>
@@ -1465,7 +1482,7 @@ Second \"item\" text"</string>
<string name="revanced_playback_speed_dialog_button_summary_on">الزر معروض. انقر مع الاستمرار لإعادة ضبط سرعة التشغيل إلى الوضع الافتراضي</string>
<string name="revanced_playback_speed_dialog_button_summary_off">لا يتم عرض الزر</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">عرض زر جودة الفيديو</string>
<string name="revanced_video_quality_dialog_button_summary_on">الزر معروض. انقر مع الاستمرار لإعادة تعيين الجودة إلى الافتراضي</string>
<string name="revanced_video_quality_dialog_button_summary_off">الزر غير معروض</string>

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -224,7 +229,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -452,6 +452,11 @@ Bu xüsusiyyət yalnız köhnə cihazlar üçün mövcuddur"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Dialoq göstərilir</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Bu, yaş məhdudiyyətini ötürmür. Sadəcə birbaşa qəbul edir.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">TV ani görüntüsü girişin qapat</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">TV ani görüntüyə giriş qapadılıb</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">TV ani görüntüyə giriş işləkdir</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Cüt toxunuşla fəsil ötürməsini qapat</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Cüt toxunma heç vaxt növbəti/əvvəlki fəsilə keçidi zorlaya bilməz</string>
@@ -563,7 +568,7 @@ Ekranın sağ tərəfində düzünə sürüşdürərək səs səviyyəsini tənz
<string name="revanced_hide_stop_ads_button_summary_on">Reklamları dayandır düyməsi gizlidir</string>
<string name="revanced_hide_stop_ads_button_summary_off">Reklamları dayandır düyməsi görünür</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">\"Xəbər verin\"i gizlət</string>
<string name="revanced_hide_report_button_summary_on">Xəbər ver/düyməsi gizlidir</string>
<string name="revanced_hide_report_button_summary_off">Xəbər ver/düyməsi göstərilir</string>
@@ -575,12 +580,21 @@ Ekranın sağ tərəfində düzünə sürüşdürərək səs səviyyəsini tənz
<string name="revanced_hide_download_button_title">\"Endirin\"i gizlət</string>
<string name="revanced_hide_download_button_summary_on">Yükləmə düyməsi gizlidir</string>
<string name="revanced_hide_download_button_summary_off">Yükləmə düyməsi göstərilir</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Coşqu Gizlət</string>
<string name="revanced_hide_hype_button_summary_on">Coşqu düyməsi gizlidir</string>
<string name="revanced_hide_hype_button_summary_off">Coşqu düyməsi görünür</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Sponsor-u Gizlət</string>
<string name="revanced_hide_promote_button_summary_on">Sponsor düyməsi gizlidir</string>
<string name="revanced_hide_promote_button_summary_off"> Sponsor düyməsi görünür</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">\"Təşəkkürlər\"i gizlət</string>
<string name="revanced_hide_thanks_button_summary_on">Təşəkkür düyməsi gizlidir</string>
<string name="revanced_hide_thanks_button_summary_off">Təşəkkür düyməsi göstərilir</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Soruş\'u Gizlət</string>
<string name="revanced_hide_ask_button_summary_on">Soruş düyməsi gizlidir</string>
<string name="revanced_hide_ask_button_summary_off">\"Soruş\" düyməsi göstərilir</string>
@@ -693,6 +707,9 @@ Audio trek seçimin göstərmək üçün \"Video axınları saxtalaşdır\"ı iO
<string name="revanced_hide_player_flyout_watch_in_vr_title">\"VR-da İzləni\" gizlət</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">VR menyusunda izləmə gizlidir</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">VR menyusunda izləmə göstərilir</string>
<string name="revanced_hide_player_flyout_video_quality_title">Video keyfiyyət menyusunu gizlət</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Video keyfiyyət menyusu gizlidir</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Video keyfiyyət menyusu görünür</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Video keyfiyyət menyusu alt məlumatını gizlət</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Video keyfiyyət menyusu alt məlumatı gizlidir</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Video keyfiyyət menyusu alt məlumatı göstərilir</string>
@@ -1464,7 +1481,7 @@ Bunu aktivləşdirmə daha yüksək video keyfiyyətləri əngəlin silə bilər
<string name="revanced_playback_speed_dialog_button_summary_on">Düymə göstərilir. Oynatma sürətin standart olaraq qaytarmaq üçün toxunub saxla</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Düymə göstərilmir</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Video keyfiyyəti düyməsini göstər</string>
<string name="revanced_video_quality_dialog_button_summary_on">Düymə görünür. Keyfiyyəti ilkin vəziyyətinə qaytarmaq üçün toxunub saxlayın</string>
<string name="revanced_video_quality_dialog_button_summary_off">Düymə görünmür</string>

View File

@@ -452,6 +452,11 @@ Second \"item\" text"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Будзе паказана дыялогавае акно</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Гэта не абыходзіць узроставае абмежаванне. Ён проста прымае гэта аўтаматычна.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Адключыць усплывальнае акно «Уваход у ТБ»</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Усплывальнае акно «Уваход у ТБ» адключана</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Усплывальнае акно «Уваход у ТБ» уключана</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Адключыць прапуск раздзела па двайным націску</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Двайны націск ніколі не можа выклікаць прапуск да наступнага/папярэдняга раздзела</string>
@@ -563,7 +568,7 @@ Second \"item\" text"</string>
<string name="revanced_hide_stop_ads_button_summary_on">Кнопка \"Спыніць рэкламу\" схавана</string>
<string name="revanced_hide_stop_ads_button_summary_off">Кнопка \"Спыніць рэкламу\" паказана</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Схаваць справаздачу</string>
<string name="revanced_hide_report_button_summary_on">Кнопка \"Паведаміць\" схавана</string>
<string name="revanced_hide_report_button_summary_off">Паказана кнопка \"Паведаміць\"</string>
@@ -575,12 +580,21 @@ Second \"item\" text"</string>
<string name="revanced_hide_download_button_title">Схаваць загрузку</string>
<string name="revanced_hide_download_button_summary_on">Кнопка загрузкі схавана</string>
<string name="revanced_hide_download_button_summary_off">Паказана кнопка загрузкі</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Схаваць хайп</string>
<string name="revanced_hide_hype_button_summary_on">Кнопка Hype схаваная</string>
<string name="revanced_hide_hype_button_summary_off">Кнопка хайпу паказана</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Схаваць Рэкламу</string>
<string name="revanced_hide_promote_button_summary_on">Кнопка \"Прасоўваць\" схавана</string>
<string name="revanced_hide_promote_button_summary_off">Кнопка \"Прасоўваць\" паказана</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Схаваць Дзякуй</string>
<string name="revanced_hide_thanks_button_summary_on">Кнопка падзякі схавана</string>
<string name="revanced_hide_thanks_button_summary_off">Паказана кнопка падзякі</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Схаваць кнопку «Запытацца»</string>
<string name="revanced_hide_ask_button_summary_on">Кнопка «Запытацца» схаваная</string>
<string name="revanced_hide_ask_button_summary_off">Кнопка «Запытацца» паказаная</string>
@@ -693,6 +707,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_watch_in_vr_title">Схаваць гадзіннік у VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Меню прагляду ў VR схавана</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Паказана меню \"Глядзець у VR\"</string>
<string name="revanced_hide_player_flyout_video_quality_title">Схаваць меню якасці відэа</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Меню якасці відэа схавана</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Меню якасці відэа паказана</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Схаваць калонтытул меню якасці відэа</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Ніжні калонтытул меню якасці відэа схаваны</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Паказваецца ніжні калонтытул меню якасці відэа</string>
@@ -1466,7 +1483,7 @@ Second \"item\" text"</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Кнопка паказана. Націсніце і ўтрымлівайце, каб скінуць хуткасць прайгравання да стандартнай</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Кнопка не паказваецца</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Паказаць кнопку якасці відэа</string>
<string name="revanced_video_quality_dialog_button_summary_on">Кнопка паказана. Націсніце і ўтрымлівайце, каб скінуць якасць да па змаўчанні</string>
<string name="revanced_video_quality_dialog_button_summary_off">Кнопка не паказваецца</string>

View File

@@ -452,6 +452,11 @@ Second \"item\" text"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Диалоговият прозорец ще бъде показан</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Тази функция не заобикаля възрастовото ограничение. Тя просто приема възрастовата граница автоматично.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Деактивиране на изскачащия прозорец „Влизане в телевизора“</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Изскачащият прозорец „Влизане в телевизора“ е деактивиран</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Изскачащият прозорец „Влизане в телевизора“ е активиран</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Деактивиране на пропускане на глава с двойно докосване</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Двойното докосване никога не може да предизвика пропускане до следваща/предишна глава</string>
@@ -563,7 +568,7 @@ Second \"item\" text"</string>
<string name="revanced_hide_stop_ads_button_summary_on">Бутонът за спиране на реклами е скрит</string>
<string name="revanced_hide_stop_ads_button_summary_off">Бутонът за спиране на реклами е показан</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Бутон за доклади</string>
<string name="revanced_hide_report_button_summary_on">Бутона за докладване е скрит</string>
<string name="revanced_hide_report_button_summary_off">Бутона за докладване се показва</string>
@@ -575,12 +580,21 @@ Second \"item\" text"</string>
<string name="revanced_hide_download_button_title">Бутон за изтегляне</string>
<string name="revanced_hide_download_button_summary_on">Бутона за изтегляне е скрит</string>
<string name="revanced_hide_download_button_summary_off">Бутона за изтегляне се показва</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Скрий хайпа</string>
<string name="revanced_hide_hype_button_summary_on">Бутонът за хайп е скрит</string>
<string name="revanced_hide_hype_button_summary_off">Бутонът за хайп е показан</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Скриване на промоция</string>
<string name="revanced_hide_promote_button_summary_on">Бутонът за популяризиране е скрит</string>
<string name="revanced_hide_promote_button_summary_off">Бутонът за популяризиране е показан</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Бутон за благодарност</string>
<string name="revanced_hide_thanks_button_summary_on">Бутона за благодарност е скрит</string>
<string name="revanced_hide_thanks_button_summary_off">Бутона за благодарност се показва</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Скриване на \"Попитай\"</string>
<string name="revanced_hide_ask_button_summary_on">Бутонът \"Попитай\" е скрит</string>
<string name="revanced_hide_ask_button_summary_off">Бутонът \"Попитай\" е показан</string>
@@ -693,6 +707,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_watch_in_vr_title">Гледайте във VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Менюто за гледане в VR е скрито</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Менюто за гледане в VR се показва</string>
<string name="revanced_hide_player_flyout_video_quality_title">Скриване на менюто за качество на видеото</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Менюто за качество на видеото е скрито</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Менюто за качество на видеото е показано</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Скриване на футъра на менюто за качество на видеото</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Долният колонтитул на менюто за качество на видеото е скрит</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Долният колонтитул на менюто за качество на видеото се показва</string>
@@ -1465,7 +1482,7 @@ Second \"item\" text"</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Бутонът е показан. Докоснете и задръжте, за да върнете скоростта на възпроизвеждане към стойността по подразбиране</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Бутонът не е показан</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Покажи бутона за качество на видеото</string>
<string name="revanced_video_quality_dialog_button_summary_on">Бутонът е показан. Докоснете и задръжте, за да възстановите качеството до подразбиране</string>
<string name="revanced_video_quality_dialog_button_summary_off">Бутонът не е показан</string>

View File

@@ -448,6 +448,11 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
<string name="revanced_remove_viewer_discretion_dialog_summary_off">ডায়ালগ প্রদর্শিত হবে</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">এটি বয়সের সীমাবদ্ধতাকে বাইপাস করে না। এটা শুধু স্বয়ংক্রিয়ভাবে গ্রহণ করে।</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">টিভিতে সাইন ইন পপআপ অক্ষম করুন</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">টিভিতে সাইন ইন পপআপ অক্ষম করা হয়েছে</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">টিভিতে সাইন ইন পপআপ সক্ষম করা হয়েছে</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">ডাবল ট্যাপ অধ্যায় স্কিপ অক্ষম করুন</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">ডাবল ট্যাপ কখনও পরবর্তী/পূর্ববর্তী অধ্যায়ে স্কিপ ট্রিগার করতে পারে না</string>
@@ -559,7 +564,7 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
<string name="revanced_hide_stop_ads_button_summary_on">বিজ্ঞাপন বন্ধ করুন বোতামটি লুকানো আছে</string>
<string name="revanced_hide_stop_ads_button_summary_off">বিজ্ঞাপন বন্ধ করুন বোতামটি দেখানো হচ্ছে</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Report লুকান</string>
<string name="revanced_hide_report_button_summary_on">রিপোর্ট বাটন লুকিয়ে রয়েছে</string>
<string name="revanced_hide_report_button_summary_off">রিপোর্ট বাটন প্রদর্শিত</string>
@@ -571,12 +576,21 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
<string name="revanced_hide_download_button_title">ডাউনলোডগুলো হাইড করাও</string>
<string name="revanced_hide_download_button_summary_on">ডাউনলোড বোতাম লুকানো আছে</string>
<string name="revanced_hide_download_button_summary_off">ডাউনলোড বোতাম দেখানো হয়েছে</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">হাইপ লুকান</string>
<string name="revanced_hide_hype_button_summary_on">হাইপ বোতাম লুকানো আছে</string>
<string name="revanced_hide_hype_button_summary_off">হাইপ বাটন দেখানো হয়েছে</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">প্রমোট লুকান</string>
<string name="revanced_hide_promote_button_summary_on">প্রোমোশন বাটন লুকানো আছে</string>
<string name="revanced_hide_promote_button_summary_off">প্রোমোশন বাটন দেখানো আছে</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">ধন্যবাদ লুকান</string>
<string name="revanced_hide_thanks_button_summary_on">ধন্যবাদ বোতাম লুকানো আছে</string>
<string name="revanced_hide_thanks_button_summary_off">ধন্যবাদ বোতাম দেখানো হয়</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">জিজ্ঞাসা লুকান</string>
<string name="revanced_hide_ask_button_summary_on">জিজ্ঞাসা বোতাম লুকানো আছে</string>
<string name="revanced_hide_ask_button_summary_off">জিজ্ঞাসা বোতাম দেখানো হয়েছে</string>
@@ -689,6 +703,9 @@ MicroG-এর জন্য ব্যাটারি অপ্টিমাইজ
<string name="revanced_hide_player_flyout_watch_in_vr_title">ভিআর-এ ঘড়ি লুকান</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">ভিআর মেনুতে দেখুন লুকানো আছে</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">ভিআর মেনুতে দেখুন দেখানো হয়েছে</string>
<string name="revanced_hide_player_flyout_video_quality_title">ভিডিও গুণমান মেনু লুকান</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">ভিডিও মানের মেনু লুকানো আছে</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">ভিডিও মানের মেনু দেখানো হয়েছে</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">ভিডিও গুণমান মেনুর ফুটার লুকান</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">ভিডিও গুণমান মেনু ফুটার লুকানো আছে</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">ভিডিও গুণমান মেনু ফুটার দেখানো হচ্ছে</string>
@@ -1461,7 +1478,7 @@ DeArrow সম্পর্কে আরও জানতে এখানে ট
<string name="revanced_playback_speed_dialog_button_summary_on">বোতামটি দেখানো হয়েছে। প্লেব্যাক স্পীড ডিফল্টে রিসেট করতে ট্যাপ করে ধরে রাখুন।</string>
<string name="revanced_playback_speed_dialog_button_summary_off">বোতাম প্রদর্শিত হয়নি</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">ভিডিও গুণমান বোতাম দেখান</string>
<string name="revanced_video_quality_dialog_button_summary_on">বোতামটি দেখানো হয়েছে। গুণমান ডিফল্টে রিসেট করতে ট্যাপ করে ধরে রাখুন।</string>
<string name="revanced_video_quality_dialog_button_summary_off">বোতামটি দেখানো হয়নি।</string>

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -222,7 +227,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -222,7 +227,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -452,6 +452,11 @@ Tato funkce je dostupná pouze pro starší zařízení"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Dialog bude zobrazen</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Tímto krokem neobcházíte věkové omezení. Pouze jej automaticky akceptujete.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Zakázat vyskakovací okno Přihlásit se k televizi</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Vyskakovací okno Přihlásit se k televizi je zakázáno</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Vyskakovací okno Přihlásit se k televizi je povoleno</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Zakázat přeskočení kapitoly dvojitým klepnutím</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Dvojité klepnutí nikdy nespustí přeskočení na další/předchozí kapitolu</string>
@@ -563,7 +568,7 @@ Hlasitost se upravuje svislým přejetím po pravé straně obrazovky"</string>
<string name="revanced_hide_stop_ads_button_summary_on">Tlačítko pro zastavení reklam je skryté</string>
<string name="revanced_hide_stop_ads_button_summary_off">Tlačítko pro zastavení reklam je zobrazeno</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Skrýt Nahlásit</string>
<string name="revanced_hide_report_button_summary_on">Tlačítko Nahlásit je skryto</string>
<string name="revanced_hide_report_button_summary_off">Tlačítko Nahlásit je zobrazeno</string>
@@ -575,12 +580,21 @@ Hlasitost se upravuje svislým přejetím po pravé straně obrazovky"</string>
<string name="revanced_hide_download_button_title">Skrýt Stáhnout</string>
<string name="revanced_hide_download_button_summary_on">Tlačítko Stáhnout je skryto</string>
<string name="revanced_hide_download_button_summary_off">Tlačítko Stáhnout je zobrazeno</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Skrýt Hype</string>
<string name="revanced_hide_hype_button_summary_on">Tlačítko Hype je skryto</string>
<string name="revanced_hide_hype_button_summary_off">Tlačítko Hype je zobrazeno</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Skrýt propagaci</string>
<string name="revanced_hide_promote_button_summary_on">Tlačítko Propagovat je skryto</string>
<string name="revanced_hide_promote_button_summary_off">Tlačítko Propagovat je zobrazeno</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Skrýt Poděkování</string>
<string name="revanced_hide_thanks_button_summary_on">Tlačítko Poděkování je skryto</string>
<string name="revanced_hide_thanks_button_summary_off">Tlačítko Poděkování je zobrazeno</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Skrýt Zeptat se</string>
<string name="revanced_hide_ask_button_summary_on">Tlačítko Zeptat se je skryté</string>
<string name="revanced_hide_ask_button_summary_off">Tlačítko Zeptat se je zobrazeno</string>
@@ -693,6 +707,9 @@ Chcete-li zobrazit nabídku zvukové stopy, změňte možnost „Zfalšovat stre
<string name="revanced_hide_player_flyout_watch_in_vr_title">Skrýt Sledovat ve VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Menu Sledovat ve VR je skryto</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Menu Sledovat ve VR je zobrazeno</string>
<string name="revanced_hide_player_flyout_video_quality_title">Skrýt nabídku kvality videa</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Nabídka kvality videa je skryta</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Nabídka kvality videa je zobrazena</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Skrýt zápatí menu kvality videa</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Zápatí menu kvality videa je skryto</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Zápatí menu kvality videa je zobrazeno</string>
@@ -1465,7 +1482,7 @@ Povolením této funkce lze odemknout vyšší kvality videa"</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Tlačítko je zobrazeno. Klepnutím a podržením obnovíte výchozí rychlost přehrávání</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Tlačítko se nezobrazuje</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Zobrazit tlačítko kvality videa</string>
<string name="revanced_video_quality_dialog_button_summary_on">Tlačítko je zobrazeno. Klepnutím a podržením obnovíte kvalitu na výchozí</string>
<string name="revanced_video_quality_dialog_button_summary_off">Tlačítko není zobrazeno.</string>

View File

@@ -452,6 +452,11 @@ Denne funktion er kun tilgængelig for ældre enheder"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Dialog vil blive vist</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Dette går ikke uden om aldersbegrænsningen. Det accepterer bare det automatisk.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Deaktiver log ind på TV-pop op</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Log ind på TV-pop op er deaktiveret</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Log ind på TV-pop op er aktiveret</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Deaktiver dobbeltklik kapitelspring</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Dobbeltklik kan aldrig udløse et spring til næste/forrige kapitel</string>
@@ -563,7 +568,7 @@ Juster lydstyrken ved at swipe lodret i højre side af skærmen"</string>
<string name="revanced_hide_stop_ads_button_summary_on">Knappen \"Stop annoncer\" er skjult</string>
<string name="revanced_hide_stop_ads_button_summary_off">Knappen \"Stop annoncer\" vises</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Skjul Rapport</string>
<string name="revanced_hide_report_button_summary_on">Rapport-knappen er skjult</string>
<string name="revanced_hide_report_button_summary_off">Rapport-knappen er vist</string>
@@ -575,12 +580,21 @@ Juster lydstyrken ved at swipe lodret i højre side af skærmen"</string>
<string name="revanced_hide_download_button_title">Skjul Download</string>
<string name="revanced_hide_download_button_summary_on">Download-knappen er skjult</string>
<string name="revanced_hide_download_button_summary_off">Download-knappen vises</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Skjul Hype</string>
<string name="revanced_hide_hype_button_summary_on">Hype-knappen er skjult</string>
<string name="revanced_hide_hype_button_summary_off">Hype-knappen vises</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Skjul fremhævelse</string>
<string name="revanced_hide_promote_button_summary_on">Promoveringsknappen er skjult</string>
<string name="revanced_hide_promote_button_summary_off">Promoveringsknappen vises</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Skjul Tak</string>
<string name="revanced_hide_thanks_button_summary_on">Tak knappen er skjult</string>
<string name="revanced_hide_thanks_button_summary_off">Tak knappen er vist</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Skjul Spørg</string>
<string name="revanced_hide_ask_button_summary_on">Spørg-knappen er skjult</string>
<string name="revanced_hide_ask_button_summary_off">Spørg-knappen vises</string>
@@ -693,6 +707,9 @@ For at vise lydspormenuen skal du ændre \"Spoof videostream\" til iOS TV"</stri
<string name="revanced_hide_player_flyout_watch_in_vr_title">Skjul vagt i VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Se i VR-menuen er skjult</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Se i VR-menuen vises</string>
<string name="revanced_hide_player_flyout_video_quality_title">Skjul menu for videokvalitet</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Videokvalitetsmenuen er skjult</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Videokvalitetsmenuen vises</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Skjul sidefod til videokvalitet</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Videokvalitetsmenuens sidefod er skjult</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Videokvalitet menu footer er vist</string>
@@ -1467,7 +1484,7 @@ Aktivering af dette kan låse op for højere videokvalitet"</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Knappen vises. Tryk og hold for at nulstille afspilningshastigheden til standard.</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Knap vises ikke</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Vis videokvalitetsknap</string>
<string name="revanced_video_quality_dialog_button_summary_on">Knap vises. Tryk og hold nede for at nulstille kvaliteten til standard</string>
<string name="revanced_video_quality_dialog_button_summary_off">Knappen vises ikke</string>

View File

@@ -150,9 +150,9 @@ Sie werden nicht über unerwartete Ereignisse informiert."</string>
<string name="revanced_hide_chips_shelf_title">Chips ausblenden</string>
<string name="revanced_hide_chips_shelf_summary_on">Chips sind ausgeblendet</string>
<string name="revanced_hide_chips_shelf_summary_off">Chips werden angezeigt</string>
<string name="revanced_hide_community_posts_title">Community-Beiträge ausblenden</string>
<string name="revanced_hide_community_posts_summary_on">Community-Beiträge sind ausgeblendet</string>
<string name="revanced_hide_community_posts_summary_off">Gemeinschaftsbeiträge werden angezeigt</string>
<string name="revanced_hide_community_posts_title">Communitybeiträge ausblenden</string>
<string name="revanced_hide_community_posts_summary_on">Communitybeiträge sind ausgeblendet</string>
<string name="revanced_hide_community_posts_summary_off">Communitybeiträge werden angezeigt</string>
<string name="revanced_hide_compact_banner_title">Kompakte Banner ausblenden</string>
<string name="revanced_hide_compact_banner_summary_on">Kompakte Banner sind ausgeblendet</string>
<string name="revanced_hide_compact_banner_summary_off">Kompakte Banner werden angezeigt</string>
@@ -218,7 +218,7 @@ Wenn ein Doodle zurzeit in Ihrer Region angezeigt wird und diese Einstellung zum
<string name="revanced_hide_channel_bar_title">Senderleiste ausblenden</string>
<string name="revanced_hide_channel_bar_summary_on">Kanalleiste ist ausgeblendet</string>
<string name="revanced_hide_channel_bar_summary_off">Kanalleiste wird angezeigt</string>
<string name="revanced_hide_channel_watermark_title">Wasserzeichen ausblenden</string>
<string name="revanced_hide_channel_watermark_title">Kanal-Wasserzeichen ausblenden</string>
<string name="revanced_hide_channel_watermark_summary_on">Wasserzeichen ist ausgeblendet</string>
<string name="revanced_hide_channel_watermark_summary_off">Wasserzeichen wird angezeigt</string>
<string name="revanced_hide_emergency_box_title">Notfall-Boxen ausblenden</string>
@@ -303,9 +303,9 @@ Wenn ein Doodle zurzeit in Ihrer Region angezeigt wird und diese Einstellung zum
<string name="revanced_hide_members_shelf_summary_on">Mitglieder-Regal ist ausgeblendet</string>
<string name="revanced_hide_members_shelf_summary_off">Mitglieder-Regal wird angezeigt</string>
<!-- 'Visit Community' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_community_button_title">Schaltfläche \'Community besuchen\' ausblenden</string>
<string name="revanced_hide_visit_community_button_summary_on">Schaltfläche \'Community besuchen\' ist ausgeblendet</string>
<string name="revanced_hide_visit_community_button_summary_off">Schaltfläche \"Community besuchen\" ist angezeigt</string>
<string name="revanced_hide_visit_community_button_title">Schaltfläche \'Zur Community\' ausblenden</string>
<string name="revanced_hide_visit_community_button_summary_on">Schaltfläche \'Zur Community\' ist ausgeblendet</string>
<string name="revanced_hide_visit_community_button_summary_off">Schaltfläch \"Zur Community\" wird angezeigt</string>
<!-- 'Visit store' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_visit_store_button_title">Den \'Store besuchen\'-Button auf Kanalseiten ausblenden</string>
<string name="revanced_hide_visit_store_button_summary_on">Schaltfläche \"Shop besuchen\" ist ausgeblendet</string>
@@ -449,6 +449,11 @@ Diese Funktion ist nur für ältere Geräte verfügbar"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Dialog wird angezeigt</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Dies umgeht nicht die Altersbeschränkung, sondern akzeptiert sie nur automatisch.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Pop-up \"Bei TV anmelden\" deaktivieren</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Pop-up \"Bei TV anmelden\" ist deaktiviert</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Pop-up \"Bei TV anmelden\" ist aktiviert</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Doppeltippen zum Kapitelüberspringen deaktivieren</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Doppeltippen kann niemals ein Überspringen zum nächsten/vorherigen Kapitel auslösen</string>
@@ -558,7 +563,7 @@ Passen Sie die Helligkeit an, indem Sie auf der linken Seite des Bildschirms ver
<string name="revanced_hide_stop_ads_button_summary_on">Schaltfläche \"Werbung stoppen\" ist ausgeblendet</string>
<string name="revanced_hide_stop_ads_button_summary_off">Schaltfläche \"Werbung stoppen\" ist sichtbar</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Bericht ausblenden</string>
<string name="revanced_hide_report_button_summary_on">Bericht-Button ist ausgeblendet</string>
<string name="revanced_hide_report_button_summary_off">Bericht-Button wird angezeigt</string>
@@ -570,12 +575,21 @@ Passen Sie die Helligkeit an, indem Sie auf der linken Seite des Bildschirms ver
<string name="revanced_hide_download_button_title">Download ausblenden</string>
<string name="revanced_hide_download_button_summary_on">Download-Button ist ausgeblendet</string>
<string name="revanced_hide_download_button_summary_off">Download-Button wird angezeigt</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Hypen ausblenden</string>
<string name="revanced_hide_hype_button_summary_on">Hypen-Button ist ausgeblendet</string>
<string name="revanced_hide_hype_button_summary_off">Hypen-Button wird angezeigt</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Werbung ausblenden</string>
<string name="revanced_hide_promote_button_summary_on">Schaltfläche \"Promoten\" ist ausgeblendet</string>
<string name="revanced_hide_promote_button_summary_off">Schaltfläche \"Promoten\" ist sichtbar</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Dank ausblenden</string>
<string name="revanced_hide_thanks_button_summary_on">Dankeschön-Taste ist ausgeblendet</string>
<string name="revanced_hide_thanks_button_summary_off">Dankeschön Button wird angezeigt</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Ask ausblenden</string>
<string name="revanced_hide_ask_button_summary_on">Ask-Button ist ausgeblendet</string>
<string name="revanced_hide_ask_button_summary_off">Ask-Button wird angezeigt</string>
@@ -688,6 +702,9 @@ Um das Audiotrack-Menü anzuzeigen, ändere \"Video-Streams fälschen\" zu iOS T
<string name="revanced_hide_player_flyout_watch_in_vr_title">Überwachung in VR ausblenden</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Im VR-Menü beobachten ist ausgeblendet</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Im VR-Menü beobachten wird angezeigt</string>
<string name="revanced_hide_player_flyout_video_quality_title">Videoqualitätsmenü ausblenden</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Videomenü ist ausgeblendet</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Videomenü ist sichtbar</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Videoqualitätsmenüfußzeile ausblenden</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Video-Qualität Menü-Fußzeile ist ausgeblendet</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Video-Qualität Menü-Fußzeile wird angezeigt</string>
@@ -1460,7 +1477,7 @@ Durch Aktivieren dieser Option können höhere Videoqualitäten freigeschaltet w
<string name="revanced_playback_speed_dialog_button_summary_on">Die Schaltfläche wird angezeigt. Tippen und halten, um die Wiedergabegeschwindigkeit auf die Standardeinstellung zurückzusetzen.</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Button wird nicht angezeigt</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Videoqualität-Schaltfläche anzeigen</string>
<string name="revanced_video_quality_dialog_button_summary_on">Schaltfläche wird angezeigt. Tippen und halten, um die Qualität auf Standard zurückzusetzen</string>
<string name="revanced_video_quality_dialog_button_summary_off">Schaltfläche wird nicht angezeigt</string>

View File

@@ -454,6 +454,11 @@ Second \"item\" text"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Εμφανίζεται</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Αυτό δεν παρακάμπτει τον ηλικιακό περιορισμό. Απλώς τον αποδέχεται αυτόματα.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Απενεργοποίηση αναδυόμενου παραθύρου σύνδεσης στην τηλεόραση</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Το αναδυόμενο παράθυρο σύνδεσης στην τηλεόραση είναι απενεργοποιημένο</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Το αναδυόμενο παράθυρο σύνδεσης στην τηλεόραση είναι ενεργοποιημένο</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Απενεργοποίηση παράλειψης κεφαλαίου με διπλό πάτημα</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Το διπλό πάτημα δεν παράλειπει στο επόμενο/προηγούμενο κεφάλαιο</string>
@@ -565,7 +570,7 @@ Second \"item\" text"</string>
<string name="revanced_hide_stop_ads_button_summary_on">Κρυμμένο</string>
<string name="revanced_hide_stop_ads_button_summary_off">Εμφανίζεται</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Μενού «Αναφορά»</string>
<string name="revanced_hide_report_button_summary_on">Κρυμμένο</string>
<string name="revanced_hide_report_button_summary_off">Εμφανίζεται</string>
@@ -577,12 +582,21 @@ Second \"item\" text"</string>
<string name="revanced_hide_download_button_title">Κουμπί «Λήψη»</string>
<string name="revanced_hide_download_button_summary_on">Κρυμμένο</string>
<string name="revanced_hide_download_button_summary_off">Εμφανίζεται</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Κουμπί «Hype»</string>
<string name="revanced_hide_hype_button_summary_on">Κρυμμένο</string>
<string name="revanced_hide_hype_button_summary_off">Εμφανίζεται</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Κουμπί «Προώθηση»</string>
<string name="revanced_hide_promote_button_summary_on">Κρυμμένο</string>
<string name="revanced_hide_promote_button_summary_off">Εμφανίζεται</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Κουμπί «Σας ευχαριστούμε»</string>
<string name="revanced_hide_thanks_button_summary_on">Κρυμμένο</string>
<string name="revanced_hide_thanks_button_summary_off">Εμφανίζεται</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Κουμπί «Ερώτηση»</string>
<string name="revanced_hide_ask_button_summary_on">Κρυμμένο</string>
<string name="revanced_hide_ask_button_summary_off">Εμφανίζεται</string>
@@ -695,6 +709,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_watch_in_vr_title">Μενού «Προβολή σε VR»</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Κρυμμένο</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_player_flyout_video_quality_title">Μενού «Ποιότητα»</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Κρυμμένο</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Εμφανίζεται</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Οδηγίες του μενού ποιότητας βίντεο</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Κρυμμένες</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Εμφανίζονται</string>
@@ -904,7 +921,7 @@ Second \"item\" text"</string>
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
<string name="revanced_ryd_failure_connection_timeout">Dislike προσωρινά μη διαθέσιμα (καθυστέρηση API)</string>
<string name="revanced_ryd_failure_connection_status_code">Δεδομένα dislike μη διαθέσιμα (κατάσταση %d)</string>
<string name="revanced_ryd_failure_client_rate_limit_requested">Τα dislikes δεν είναι διαθέσιμα (όριο API πελάτη)</string>
<string name="revanced_ryd_failure_client_rate_limit_requested">Δεδομένα dislike μη διαθέσιμα (όριο API πελάτη)</string>
<string name="revanced_ryd_failure_generic">Δεδομένα dislike μη διαθέσιμα (%s)</string>
<!-- Toast shown if the user enables RYD while a video is opened, and then tries to vote for the video. -->
<string name="revanced_ryd_failure_ryd_enabled_while_playing_video_then_user_voted">Επαναφορτώστε το βίντεο για να ψηφίσετε χρησιμοποιώντας το Return YouTube Dislike</string>
@@ -1149,7 +1166,7 @@ Second \"item\" text"</string>
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">Δόθηκε μη έγκυρος χρόνος</string>
<string name="revanced_sb_stats_title">Στατιστικά</string>
<!-- Shown in the settings preferences, and translations can be any text length. -->
<string name="revanced_sb_stats_connection_failure">Τα στατιστικά είναι προσωρινά μη διαθέσιμα (το API είναι εκτός λειτουργίας)</string>
<string name="revanced_sb_stats_connection_failure">Στατιστικά προσωρινά μη διαθέσιμα (API εκτός λειτουργίας)</string>
<string name="revanced_sb_stats_loading">Φόρτωση...</string>
<string name="revanced_sb_stats_sb_disabled">Το SponsorBlock είναι απενεργοποιημένο</string>
<string name="revanced_sb_stats_username">Το όνομα χρήστη σας: &lt;b&gt;%s&lt;/b&gt;</string>
@@ -1362,8 +1379,8 @@ Second \"item\" text"</string>
<string name="revanced_alt_thumbnail_stills_time_entry_2">Μέση του βίντεο</string>
<string name="revanced_alt_thumbnail_stills_time_entry_3">Τέλος του βίντεο</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_alt_thumbnail_dearrow_error">Το DeArrow είναι προσωρινά μη διαθέσιμο. (κωδικός κατάστασης: %s)</string>
<string name="revanced_alt_thumbnail_dearrow_error_generic">Το DeArrow είναι προσωρινά μη διαθέσιμο</string>
<string name="revanced_alt_thumbnail_dearrow_error">DeArrow προσωρινά μη διαθέσιμο (κωδικός: %s)</string>
<string name="revanced_alt_thumbnail_dearrow_error_generic">DeArrow προσωρινά μη διαθέσιμο</string>
</patch>
<patch id="misc.announcements.announcementsPatch">
<string name="revanced_announcements_title">Εμφάνιση ανακοινώσεων ReVanced</string>
@@ -1464,7 +1481,7 @@ Second \"item\" text"</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Το κουμπί εμφανίζεται. Πατήστε παρατεταμένα για επαναφορά της ταχύτητας αναπαραγωγής στην προεπιλογή</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Το κουμπί δεν εμφανίζεται</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Εμφάνιση κουμπιού αλλαγής ποιότητας βίντεο</string>
<string name="revanced_video_quality_dialog_button_summary_on">Το κουμπί εμφανίζεται. Πατήστε παρατεταμένα για επαναφορά της ποιότητας στην προεπιλογή</string>
<string name="revanced_video_quality_dialog_button_summary_off">Το κουμπί δεν εμφανίζεται</string>

View File

@@ -90,7 +90,7 @@ Toca el botón continuar y permite los cambios de optimización."</string>
<string name="revanced_settings_screen_00_about_title">Acerca de</string>
<string name="revanced_settings_screen_01_ads_title">Anuncios</string>
<string name="revanced_settings_screen_02_alt_thumbnails_title">Miniaturas alternativas</string>
<string name="revanced_settings_screen_03_feed_title">Fuente</string>
<string name="revanced_settings_screen_03_feed_title">Feed</string>
<string name="revanced_settings_screen_04_general_title">General</string>
<string name="revanced_settings_screen_05_player_title">Reproductor</string>
<string name="revanced_settings_screen_07_seekbar_title">Barra de progreso</string>
@@ -126,9 +126,9 @@ Sin embargo, si activas esto, también se registrarán algunos datos del usuario
<string name="revanced_debug_stacktrace_title">Registrar stack traces</string>
<string name="revanced_debug_stacktrace_summary_on">Los registros de depuración incluyen stack trace</string>
<string name="revanced_debug_stacktrace_summary_off">Los registros de depuración no incluyen stack trace</string>
<string name="revanced_debug_toast_on_error_title">Mostrar mensaje de error en ReVanced</string>
<string name="revanced_debug_toast_on_error_summary_on">Se muestra un mensaje si se produce un error</string>
<string name="revanced_debug_toast_on_error_summary_off">No se muestra un mensaje si se produce un error</string>
<string name="revanced_debug_toast_on_error_title">Mostrar aviso de error en ReVanced</string>
<string name="revanced_debug_toast_on_error_summary_on">Se mostra un aviso si se produce un error</string>
<string name="revanced_debug_toast_on_error_summary_off">No se mostra un aviso si se produce un error</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"Desactivar los avisos de error oculta todas las notificaciones de error de ReVanced.
No se le notificará de ningún evento inesperado."</string>
@@ -336,9 +336,9 @@ Si un doodle se está mostrando actualmente en tu región y este ajuste de ocult
<string name="revanced_hide_comments_create_a_short_button_title">Ocultar botón \'Crear un Short\'</string>
<string name="revanced_hide_comments_create_a_short_button_summary_on">El botón Crear un Short está oculto</string>
<string name="revanced_hide_comments_create_a_short_button_summary_off">Se muestra el botón Crear un Short</string>
<string name="revanced_hide_comments_preview_comment_title">Ocultar comentario de vista previa</string>
<string name="revanced_hide_comments_preview_comment_summary_on">El comentario de la vista previa está oculto</string>
<string name="revanced_hide_comments_preview_comment_summary_off">Vista previa del comentario se muestra</string>
<string name="revanced_hide_comments_preview_comment_title">Ocultar vista previa de comentarios</string>
<string name="revanced_hide_comments_preview_comment_summary_on">La vista previa de comentarios está oculta</string>
<string name="revanced_hide_comments_preview_comment_summary_off">La vista previa de comentarios es visible</string>
<string name="revanced_hide_comments_thanks_button_title">Ocultar botón Gracias</string>
<string name="revanced_hide_comments_thanks_button_summary_on">El botón de gracias está oculto</string>
<string name="revanced_hide_comments_thanks_button_summary_off">Se muestra el botón de gracias</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 de inicio son filtrados por palabras clave</string>
<string name="revanced_hide_keyword_content_home_summary_off">Los videos en la pestaña de inicio no son filtrados 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_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 de suscripciones son filtrados por palabras clave</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_off">Los videos en la pestaña de suscripciones no son filtrados 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_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. -->
@@ -388,7 +388,7 @@ Limitaciones
<string name="revanced_hide_keyword_toast_invalid_common_whole_word_required">Añadir comillas para usar palabra clave: %s</string>
<string name="revanced_hide_keyword_toast_invalid_conflicting">La palabra clave tiene declaraciones conflictivas: %s</string>
<string name="revanced_hide_keyword_toast_invalid_length">La palabra clave es demasiado corta y requiere comillas: %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">Palabra clave ocultará todos los vídeos: %s</string>
<string name="revanced_hide_keyword_toast_invalid_broad">La palabra clave ocultará todos los vídeos: %s</string>
</patch>
<patch id="ad.general.hideAdsResourcePatch">
<string name="revanced_hide_creator_store_shelf_title">Ocultar estantería de la tienda del creador</string>
@@ -403,7 +403,7 @@ Limitaciones
Esta función solo está disponible para dispositivos antiguos"</string>
<string name="revanced_hide_fullscreen_ads_summary_off">Se muestran anuncios a pantalla completa</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 anuncio solo con dispositivos viejos</string>
<string name="revanced_hide_fullscreen_ads_feature_not_available_toast">Ocultar anuncios a pantalla completa solo funciona con dispositivos antiguos</string>
<string name="revanced_hide_general_ads_title">Ocultar anuncios generales</string>
<string name="revanced_hide_general_ads_summary_on">Los anuncios generales están ocultos</string>
<string name="revanced_hide_general_ads_summary_off">Se muestran anuncios generales</string>
@@ -447,10 +447,15 @@ Esta función solo está disponible para dispositivos antiguos"</string>
<string name="revanced_copy_video_url_timestamp_summary_off">El botón no se muestra</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
<string name="revanced_remove_viewer_discretion_dialog_title">Eliminar diálogo de discreción del visor</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_on">Se eliminará el diálogo</string>
<string name="revanced_remove_viewer_discretion_dialog_title">Eliminar diálogo de discreción del espectador</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_on">Se quitará el diálogo</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Se mostrará el diálogo</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Esto no pasa por alto la restricción de edad, sino que simplemente la acepta automáticamente.</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Esto no evita la restricción de edad. Solo la acepta automáticamente.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Desactivar la ventana emergente de Iniciar sesión en TV</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">La ventana emergente de Iniciar sesión en TV está desactivada</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">La ventana emergente de Iniciar sesión en TV está activada</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Deshabilitar el salto de capítulo con doble toque</string>
@@ -516,7 +521,7 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"</s
<string name="revanced_swipe_overlay_timeout_summary">La cantidad de milisegundos que la superposición es visible</string>
<string name="revanced_swipe_overlay_background_opacity_title">Opacidad del fondo de la superposición de deslizamiento</string>
<string name="revanced_swipe_overlay_background_opacity_summary">Valor de opacidad entre 0-100</string>
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">La opacidad de la superposición de deslizamiento debe estar entre 0 y 100</string>
<string name="revanced_swipe_overlay_background_opacity_invalid_toast">La opacidad de superposición de deslizamiento debe ser de entre 0-100</string>
<string name="revanced_swipe_overlay_progress_brightness_color_title">Color del brillo de la superposición de deslizamiento</string>
<string name="revanced_swipe_overlay_progress_brightness_color_summary">El color de la barra de progreso para los controles de brillo</string>
<string name="revanced_swipe_overlay_progress_volume_color_title">Color del volumen de la superposición de deslizamiento</string>
@@ -563,7 +568,7 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"</s
<string name="revanced_hide_stop_ads_button_summary_on">El botón de detener anuncios está oculto</string>
<string name="revanced_hide_stop_ads_button_summary_off">El botón de detener anuncios está mostrado</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Ocultar informe</string>
<string name="revanced_hide_report_button_summary_on">El botón Reportar está oculto</string>
<string name="revanced_hide_report_button_summary_off">Se muestra el botón Reportar</string>
@@ -575,12 +580,21 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"</s
<string name="revanced_hide_download_button_title">Ocultar descarga</string>
<string name="revanced_hide_download_button_summary_on">El botón de descarga está oculto</string>
<string name="revanced_hide_download_button_summary_off">Se muestra el botón de descarga</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
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 está 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 está 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>
<string name="revanced_hide_thanks_button_summary_off">Se muestra el botón de gracias</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Ocultar pregunta</string>
<string name="revanced_hide_ask_button_summary_on">El botón \"Preguntar\" está oculto</string>
<string name="revanced_hide_ask_button_summary_off">Se muestra el botón \"Preguntar\"</string>
@@ -597,11 +611,11 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"</s
<string name="revanced_navigation_buttons_screen_title">Botones de navegación</string>
<string name="revanced_navigation_buttons_screen_summary">Ocultar o cambiar botones en la barra de navegación</string>
<!-- 'Home' should be translated using the same localized wording YouTube displays for the tab. -->
<string name="revanced_hide_home_button_title">Ocultar Principal</string>
<string name="revanced_hide_home_button_title">Ocultar pestaña \'Inicio\'</string>
<string name="revanced_hide_home_button_summary_on">El botón de inicio está oculto</string>
<string name="revanced_hide_home_button_summary_off">El botón de inicio es visible</string>
<!-- 'Shorts' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_hide_shorts_button_title">Ocultar Shorts</string>
<string name="revanced_hide_shorts_button_title">Ocultar pestaña \'Shorts\'</string>
<string name="revanced_hide_shorts_button_summary_on">El botón de Shorts está oculto</string>
<string name="revanced_hide_shorts_button_summary_off">El botón de Shorts es visible</string>
<!-- 'Create' has no display name. Translate normally. -->
@@ -609,34 +623,34 @@ Ajusta el volumen deslizando verticalmente en el lado derecho de la pantalla"</s
<string name="revanced_hide_create_button_summary_on">El botón Crear está oculto</string>
<string name="revanced_hide_create_button_summary_off">Se muestra el botón Crear</string>
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_hide_subscriptions_button_title">Ocultar Suscripciones</string>
<string name="revanced_hide_subscriptions_button_title">Ocultar pestaña \'Suscripciones\'</string>
<string name="revanced_hide_subscriptions_button_summary_on">El botón Suscripciones está oculto</string>
<string name="revanced_hide_subscriptions_button_summary_off">Se muestra el botón Suscripciones</string>
<string name="revanced_hide_notifications_button_title">Ocultar notificaciones</string>
<string name="revanced_hide_notifications_button_summary_on">El botón de notificaciones está oculto</string>
<string name="revanced_hide_notifications_button_summary_off">Se muestra el botón de notificaciones</string>
<string name="revanced_hide_notifications_button_title">Ocultar Notificaciones</string>
<string name="revanced_hide_notifications_button_summary_on">El botón de Notificaciones está oculto</string>
<string name="revanced_hide_notifications_button_summary_off">Se muestra el botón de Notificaciones</string>
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_switch_create_with_notifications_button_title">Cambiar Crear con Notificaciones</string>
<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 oculta a la fuerza los anuncios de vídeo"</string>
Nota: Habilitar esto también ocultará forzosamente los anuncios de video"</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 botón de navegación</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 se muestran</string>
<string name="revanced_hide_navigation_button_labels_summary_off">Las etiquetas están 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>
<string name="revanced_disable_translucent_status_bar_user_dialog_message">En algunos dispositivos, habilitar esta función puede cambiar la barra de navegación del sistema a transparente.</string>
<string name="revanced_disable_translucent_navigation_bar_light_title">Desactivar la barra translúcida clara</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_on">La barra de navegación en modo claro es opaca</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">La barra de navegación del modo claro es opaca o translúcida</string>
<string name="revanced_disable_translucent_navigation_bar_light_summary_off">La barra de navegación en modo claro es opaca o translúcida</string>
<string name="revanced_disable_translucent_navigation_bar_dark_title">Desactivar la barra translúcida oscura</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_on">La barra de navegación en modo oscuro es opaca</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">La barra de navegación del modo oscuro es opaca o translúcida</string>
<string name="revanced_disable_translucent_navigation_bar_dark_summary_off">La barra de navegación en modo oscuro es opaca o translúcida</string>
</patch>
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
<string name="revanced_hide_player_flyout_title">Menú desplegable</string>
@@ -661,8 +675,8 @@ Si cambiar este ajuste no tiene efecto, intenta cambiar al modo incógnito."</st
<string name="revanced_hide_player_flyout_ambient_mode_title">Ocultar Modo ambiente</string>
<string name="revanced_hide_player_flyout_ambient_mode_summary_on">Menú de Modo ambiente oculto</string>
<string name="revanced_hide_player_flyout_ambient_mode_summary_off">Se muestra el menú de Modo ambiente</string>
<string name="revanced_hide_player_flyout_stable_volume_title">Ocultar volumen estable</string>
<string name="revanced_hide_player_flyout_stable_volume_summary_off">Se muestra el menú de volumen estable</string>
<string name="revanced_hide_player_flyout_stable_volume_title">Ocultar \'Volumen estable\'</string>
<string name="revanced_hide_player_flyout_stable_volume_summary_off">El menú de volumen estable es visible</string>
<string name="revanced_hide_player_flyout_stable_volume_summary_on">El menú de volumen estable está oculto</string>
<!-- 'Help & feedback' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_help_title">Ocultar Ayuda &amp; comentarios</string>
@@ -693,6 +707,9 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de
<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 está 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>
@@ -748,14 +765,14 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de
<string name="revanced_shorts_player_screen_title">Reproductor de Shorts</string>
<string name="revanced_shorts_player_screen_summary">Ocultar o mostrar componentes del reproductor de Shorts</string>
<!-- 'Home' should be translated using the same localized wording YouTube displays for the Home tab. -->
<string name="revanced_hide_shorts_home_title">Ocultar Shorts en la página principal</string>
<string name="revanced_hide_shorts_home_title">Ocultar Shorts en la pestaña de Inicio</string>
<string name="revanced_hide_shorts_home_summary_on">Oculto en la página principal y vídeos relacionados</string>
<string name="revanced_hide_shorts_home_summary_off">Visible en la página principal y vídeos relacionados</string>
<string name="revanced_hide_shorts_search_title">Ocultar Shorts en los resultados de búsqueda</string>
<string name="revanced_hide_shorts_search_summary_on">Ocultos en los resultados de búsqueda</string>
<string name="revanced_hide_shorts_search_summary_off">Mostrar en los resultados de búsqueda</string>
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays for the Subscriptions tab. -->
<string name="revanced_hide_shorts_subscriptions_title">Ocultar Shorts en el feed de Suscripciones</string>
<string name="revanced_hide_shorts_subscriptions_title">Ocultar Shorts en la pestaña de Suscripciones</string>
<string name="revanced_hide_shorts_subscriptions_summary_on">Oculto en el feed de Suscripciones</string>
<string name="revanced_hide_shorts_subscriptions_summary_off">Visible en el feed de Suscripciones</string>
<string name="revanced_hide_shorts_history_title">Ocultar Shorts en el historial de visualización</string>
@@ -786,9 +803,9 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de
<string name="revanced_hide_shorts_paused_overlay_buttons_title">Ocultar botones de superposición en pausa</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">Los botones de superposición pausados están ocultos</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">Se muestran los botones de superposición pausados</string>
<string name="revanced_hide_shorts_preview_comment_title">Ocultar comentario de vista previa</string>
<string name="revanced_hide_shorts_preview_comment_summary_on">El comentario de vista previa está oculto</string>
<string name="revanced_hide_shorts_preview_comment_summary_off">Se muestra la vista previa del comentario</string>
<string name="revanced_hide_shorts_preview_comment_title">Ocultar vista previa de comentarios</string>
<string name="revanced_hide_shorts_preview_comment_summary_on">La vista previa de comentarios está oculta</string>
<string name="revanced_hide_shorts_preview_comment_summary_off">La vista previa de comentarios es visible</string>
<string name="revanced_hide_shorts_save_sound_button_title">Ocultar el botón Guardar música</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">El botón Guardar música está oculto</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">Mostrar el botón de guardar música</string>
@@ -855,8 +872,8 @@ Para mostrar el menú de la pista de audio, cambia \"Suplantar transmisiones de
<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">Barra de navegación oculta</string>
<string name="revanced_hide_shorts_navigation_bar_summary_off">Se muestra la 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 está 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>
@@ -1057,7 +1074,7 @@ Tu ID de usuario es como una contraseña y nunca debe compartirse."</string>
<string name="revanced_sb_segments_intro_sum">Un intervalo sin contenido real. Podría ser una pausa, marco estático o animación de repetición. No incluye transiciones que contengan información</string>
<string name="revanced_sb_segments_outro">Tarjetas finales / Créditos</string>
<string name="revanced_sb_segments_outro_sum">Créditos o cuando aparecen las tarjetas finales de YouTube. No para conclusiones con información</string>
<string name="revanced_sb_segments_preview">Vista previa/Recapitular/Juego</string>
<string name="revanced_sb_segments_preview">Vista previa/Resumen/Enganche</string>
<string name="revanced_sb_segments_preview_sum">Colección de clips que muestran lo que viene o lo que pasó en el vídeo o en otros videos de una serie, donde toda la información se repite en otro lugar</string>
<string name="revanced_sb_segments_filler">Bromas de relleno</string>
<string name="revanced_sb_segments_filler_sum">Escenas tangenciales añadidas sólo para relleno o humor que no están obligadas a entender el contenido principal del vídeo. No incluye segmentos proporcionando detalles de contexto o fondo</string>
@@ -1165,11 +1182,11 @@ Ya existe"</string>
<string name="revanced_sb_about_api_summary">Los datos son proporcionados por la API de SponsorBlock. Pulsa aquí para aprender más y ver las descargas para otras plataformas</string>
</patch>
<patch id="layout.formfactor.changeFormFactorPatch">
<string name="revanced_change_form_factor_title">Diseño del diseño factor</string>
<string name="revanced_change_form_factor_entry_1">Defecto</string>
<string name="revanced_change_form_factor_title">Factor de forma del diseño</string>
<string name="revanced_change_form_factor_entry_1">Predeterminado</string>
<string name="revanced_change_form_factor_entry_2">Teléfono</string>
<string name="revanced_change_form_factor_entry_3">Tableta</string>
<string name="revanced_change_form_factor_entry_4">Automotriz</string>
<string name="revanced_change_form_factor_entry_4">Automóvil</string>
<string name="revanced_change_form_factor_user_dialog_message">"Los cambios incluyen:
Diseño para tablets
@@ -1291,8 +1308,8 @@ El minireproductor se puede arrastrar fuera de la pantalla hacia la izquierda o
<string name="revanced_miniplayer_opacity_invalid_toast"> Opacidad de reproductor debe estar en 0 -100</string>
</patch>
<patch id="layout.theme.themePatch">
<string name="revanced_gradient_loading_screen_title">Activar la pantalla de carga del degradado</string>
<string name="revanced_gradient_loading_screen_summary_on">La pantalla de carga tendrá un fondo de degradado</string>
<string name="revanced_gradient_loading_screen_title">Activar la pantalla de carga gradiente</string>
<string name="revanced_gradient_loading_screen_summary_on">La pantalla de carga tendrá un fondo gradiente</string>
<string name="revanced_gradient_loading_screen_summary_off">La pantalla de carga tendrá un fondo sólido</string>
<string name="revanced_splash_screen_animation_style_title">Estilo de la pantalla de presentación</string>
<string name="revanced_splash_screen_animation_style_entry_1">Color</string>
@@ -1323,9 +1340,9 @@ Habilitar esto puede solucionar las imágenes que faltan que están bloqueadas e
</patch>
<patch id="layout.thumbnails.alternativeThumbnailsPatch">
<!-- 'Home' should be translated using the same localized wording YouTube displays for the Home tab. -->
<string name="revanced_alt_thumbnail_home_title">Pestaña</string>
<string name="revanced_alt_thumbnail_home_title">Pestaña de Inicio</string>
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays for the Subscriptions tab. -->
<string name="revanced_alt_thumbnail_subscription_title">Pestaña Suscripciones</string>
<string name="revanced_alt_thumbnail_subscription_title">Pestaña de Suscripciones</string>
<!-- 'You' should be translated using the same localized wording YouTube displays for the You (Library) tab. -->
<string name="revanced_alt_thumbnail_library_title">Pestaña</string>
<string name="revanced_alt_thumbnail_player_title">Listas de reproducción del reproductor &amp; recomendaciones</string>
@@ -1456,7 +1473,7 @@ Habilitar esto puede desbloquear calidades de vídeo más altas"</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Se muestra el botón. Mantén pulsado para restablecer la velocidad de reproducción predeterminada</string>
<string name="revanced_playback_speed_dialog_button_summary_off">El botón no se muestra</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<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_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>

View File

@@ -452,6 +452,11 @@ See funktsioon on saadaval ainult vanemates seadmetes"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Dialoog kuvatakse</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">See ei mööda vanusepiirangust. See lihtsalt aktsepteerib seda automaatselt.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Keela telerisse sisselogimise hüpikaken</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Telerisse sisselogimise hüpikaken on keelatud</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Telerisse sisselogimise hüpikaken on lubatud</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Keela topeltpuudutusega peatüki vahelejätmine</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Topeltpuudutus ei saa kunagi käivitada järgmise/eelmise peatüki vahelejätmist</string>
@@ -563,7 +568,7 @@ Helitugevuse reguleerimiseks pühkige ekraani paremal küljel vertikaalselt"</st
<string name="revanced_hide_stop_ads_button_summary_on">Peata reklaamide nupp on peidetud</string>
<string name="revanced_hide_stop_ads_button_summary_off">Peata reklaamide nupp on nähtav</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Peida Teata</string>
<string name="revanced_hide_report_button_summary_on">Teata nupp on peidetud</string>
<string name="revanced_hide_report_button_summary_off">Teata nupp on nähtav</string>
@@ -575,12 +580,21 @@ Helitugevuse reguleerimiseks pühkige ekraani paremal küljel vertikaalselt"</st
<string name="revanced_hide_download_button_title">Peida Laadi alla</string>
<string name="revanced_hide_download_button_summary_on">Laadi alla nupp on peidetud</string>
<string name="revanced_hide_download_button_summary_off">Laadi alla nupp on nähtav</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Peida Hype</string>
<string name="revanced_hide_hype_button_summary_on">Hype nupp on peidetud</string>
<string name="revanced_hide_hype_button_summary_off">Hype\'i nupp on nähtav</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Peida reklaam</string>
<string name="revanced_hide_promote_button_summary_on">Reklaami nupp on peidetud</string>
<string name="revanced_hide_promote_button_summary_off">Reklaami nupp on nähtav</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Peida Tänan</string>
<string name="revanced_hide_thanks_button_summary_on">Tänan nupp on peidetud</string>
<string name="revanced_hide_thanks_button_summary_off">Tänan nupp on nähtav</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Peida küsi</string>
<string name="revanced_hide_ask_button_summary_on">Küsi nupp on peidetud</string>
<string name="revanced_hide_ask_button_summary_off">Küsi nupp on nähtav</string>
@@ -693,6 +707,9 @@ Heliriba menüü kuvamiseks muutke valikut „Võltsitud videovoogedastus“ vä
<string name="revanced_hide_player_flyout_watch_in_vr_title">Peida Vaata VR-is</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Vaata VR-is menüü on peidetud</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Vaata VR-is menüü on nähtav</string>
<string name="revanced_hide_player_flyout_video_quality_title">Peida videokvaliteedi menüü</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Videokvaliteedi menüü on peidetud</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Videokvaliteedi menüü on nähtav</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Peida video kvaliteedi menüü jalg</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Video kvaliteedi menüü jalg on peidetud</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Video kvaliteedi menüü jalg on nähtav</string>
@@ -1465,7 +1482,7 @@ Selle lubamine võib avada kõrgema video kvaliteedi"</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Nupp on nähtaval. Puudutage ja hoidke all, et taastada taasesituse kiirus vaikeväärtusele</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Nuppi ei kuvata</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Näita video kvaliteedi nuppu</string>
<string name="revanced_video_quality_dialog_button_summary_on">Nupp on nähtaval. Kvaliteedi lähtestamiseks vaikeseadeteks puudutage ja hoidke</string>
<string name="revanced_video_quality_dialog_button_summary_off">Nuppu ei kuvata</string>

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -222,7 +227,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -114,6 +114,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -131,12 +133,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -272,7 +277,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -452,6 +452,8 @@ Tämä ominaisuus on käytettävissä vain vanhemmilla laitteilla"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Valintaikkuna näytetään</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Tämä ei ohita ikärajoitusta. Se vain hyväksyy sen automaattisesti.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Poista videon osan ohittaminen kaksoisnapauttamalla käytöstä</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Kaksoisnapautus ei voi koskaan aiheuttaa siirtymistä videon seuraavaan/edelliseen osaan</string>
@@ -563,7 +565,7 @@ Säädä äänenvoimakkuutta pyyhkäisemällä pystysuoraan näytön oikealta pu
<string name="revanced_hide_stop_ads_button_summary_on">Estä mainokset -painike on piilotettu</string>
<string name="revanced_hide_stop_ads_button_summary_off">Estä mainokset -painike näytetään</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Piilota Tee ilmoitus</string>
<string name="revanced_hide_report_button_summary_on">Tee ilmoitus -painike on piilotettu</string>
<string name="revanced_hide_report_button_summary_off">Tee ilmoitus -painike näytetään</string>
@@ -575,12 +577,21 @@ Säädä äänenvoimakkuutta pyyhkäisemällä pystysuoraan näytön oikealta pu
<string name="revanced_hide_download_button_title">Piilota Lataa</string>
<string name="revanced_hide_download_button_summary_on">Lataa-painike on piilotettu</string>
<string name="revanced_hide_download_button_summary_off">Lataa-painike näytetään</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Piilota Hypetä</string>
<string name="revanced_hide_hype_button_summary_on">Hypetä-painike on piilotettu</string>
<string name="revanced_hide_hype_button_summary_off">Hypetä-painike näytetään</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Piilota Mainosta</string>
<string name="revanced_hide_promote_button_summary_on">Mainosta-painike on piilotettu</string>
<string name="revanced_hide_promote_button_summary_off">Mainosta-painike näytetään</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Piilota Kiitos</string>
<string name="revanced_hide_thanks_button_summary_on">Kiitos-painike on piilotettu</string>
<string name="revanced_hide_thanks_button_summary_off">Kiitos-painike näytetään</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Piilota Ask</string>
<string name="revanced_hide_ask_button_summary_on">Ask-painike on piilotettu</string>
<string name="revanced_hide_ask_button_summary_off">Ask-painike näytetään</string>
@@ -670,8 +681,8 @@ Jos tämän asetuksen muuttaminen ei tule voimaan, kokeile vaihtaa Incognito-til
<string name="revanced_hide_player_flyout_help_summary_off">Ohjeet ja palaute -valinta näytetään</string>
<!-- 'Playback speed' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_speed_title">Piilota Toistonopeus</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Toistonopeus-valikko on piilotettu</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Toistonopeus-valikko näytetään</string>
<string name="revanced_hide_player_flyout_speed_summary_on">Toistonopeusvalikko on piilotettu</string>
<string name="revanced_hide_player_flyout_speed_summary_off">Toistonopeusvalikko näytetään</string>
<!-- 'More info' should be translated using the same localized wording YouTube displays for the menu item.
This menu only appears for some videos. Translate the name normally if the menu cannot be found. -->
<string name="revanced_hide_player_flyout_more_info_title">Piilota Lisätietoja</string>
@@ -693,6 +704,9 @@ Jos haluat nähdä sen, aseta \"Naamioi videovirrat\" iOS TV:ksi"</string>
<string name="revanced_hide_player_flyout_watch_in_vr_title">Piilota Katso VR-tilassa</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Katso VR-tilassa -valinta on piilotettu</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Katso VR-tilassa -valinta näytetään</string>
<string name="revanced_hide_player_flyout_video_quality_title">Piilota videolaatuvalikko</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Videolaatuvalikko on piilotettu</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Videolaatuvalikko näytetään</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Piilota videolaatuvalikon alatunniste</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Videolaatuvalikon alatunniste on piilotettu</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Videolaatuvalikon alatunniste näytetään</string>
@@ -1465,7 +1479,7 @@ Tämä voi avata korkealaatuisemmat videot"</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Painike näytetään. Napauta ja pidä pohjassa palauttaaksesi soiton nopeuden oletukseksi</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Painiketta ei näytetä</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Näytä videolaatupainike</string>
<string name="revanced_video_quality_dialog_button_summary_on">Painike näkyy. Paina pitkään palauttaaksesi laadun oletukseksi</string>
<string name="revanced_video_quality_dialog_button_summary_off">Painiketta ei näytetä</string>

View File

@@ -452,6 +452,11 @@ Ang tampok na ito ay magagamit lamang para sa mga mas lumang device"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Ipapakita ang dialog</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Hindi nito nilalampasan ang paghihigpit sa edad. Awtomatiko lang itong tinatanggap.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Huwag paganahin ang popup ng Pag-sign in sa TV</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Hindi pinagana ang popup ng Pag-sign in sa TV</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Pinagana ang popup ng Pag-sign in sa TV</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Huwag paganahin ang paglaktaw ng kabanata sa doble tap</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Ang doble tap ay hindi kailanman maaaring mag-trigger ng paglaktaw sa susunod/nakaraang kabanata</string>
@@ -563,7 +568,7 @@ Ayusin ang volume sa pamamagitan ng pag-swipe nang patayo sa kanang bahagi ng sc
<string name="revanced_hide_stop_ads_button_summary_on">Nakatago ang button ng pagtigil sa mga ad</string>
<string name="revanced_hide_stop_ads_button_summary_off">Napakita ang button ng pagtigil sa mga ad</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Itago ang Ulat</string>
<string name="revanced_hide_report_button_summary_on">Nakatago ang button ng ulat</string>
<string name="revanced_hide_report_button_summary_off">Ang pindutan ng ulat ay ipinapakita</string>
@@ -575,12 +580,21 @@ Ayusin ang volume sa pamamagitan ng pag-swipe nang patayo sa kanang bahagi ng sc
<string name="revanced_hide_download_button_title">Itago ang Download</string>
<string name="revanced_hide_download_button_summary_on">Nakatago ang button sa pag-download</string>
<string name="revanced_hide_download_button_summary_off">Ang pindutan ng pag-download ay ipinapakita</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Itago ang Ingay</string>
<string name="revanced_hide_hype_button_summary_on">Nakatago ang hype button</string>
<string name="revanced_hide_hype_button_summary_off">Ipinapakita ang Hype button</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Itago ang I-promote</string>
<string name="revanced_hide_promote_button_summary_on">Nakatago ang button na Promote</string>
<string name="revanced_hide_promote_button_summary_off">Nakikita ang button na Promote</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Itago Salamat</string>
<string name="revanced_hide_thanks_button_summary_on">Nakatago ang buton ng salamat</string>
<string name="revanced_hide_thanks_button_summary_off">Ang pindutan ng salamat ay ipinapakita</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Itago ang Tanong</string>
<string name="revanced_hide_ask_button_summary_on">Nakatago ang button na Tanong</string>
<string name="revanced_hide_ask_button_summary_off">Ipinapakita ang button na Tanong</string>
@@ -691,6 +705,9 @@ Upang ipakita ang menu ng Audio track, baguhin ang 'Spoof video streams' sa iOS
<string name="revanced_hide_player_flyout_watch_in_vr_title">Itago ang Panoorin sa VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Nakatago ang panonood sa VR menu</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Ang panonood sa VR menu ay ipinapakita</string>
<string name="revanced_hide_player_flyout_video_quality_title">Itago ang menu ng kalidad ng video</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Nakatago ang menu ng kalidad ng video</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Ipinapakita ang menu ng kalidad ng video</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Itago ang footer ng menu ng kalidad ng video</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Nakatago ang footer ng menu ng kalidad ng video</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Ang footer ng menu ng kalidad ng video ay ipinapakita</string>
@@ -1463,7 +1480,7 @@ Ang pagpapagana nito ay maaaring magbukas ng mas mataas na kalidad ng video"</st
<string name="revanced_playback_speed_dialog_button_summary_on">Ipinapakita ang button. I-tap at i-hold para i-reset ang bilis ng pag-playback sa default</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Hindi ipinapakita ang button</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Ipakita ang button ng kalidad ng video</string>
<string name="revanced_video_quality_dialog_button_summary_on">Nakalabas ang button. Pindutin nang matagal para ibalik sa default ang kalidad</string>
<string name="revanced_video_quality_dialog_button_summary_off">Hindi ipinapakita ang buton</string>

View File

@@ -452,6 +452,11 @@ Cette fonctionnalité est disponible uniquement pour les appareils anciens"</str
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Le message sera affiché</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Cette option ne contourne pas la vérification de l\'âge. Elle est juste confirmée automatiquement.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Désactiver le pop-up \"Connectez-vous à la TV\"</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Le pop-up \"Connectez-vous à la TV\" est désactivé</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Le pop-up \"Connectez-vous à la TV\" est activé</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Désactiver le double appui pour passer à un chapitre</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Le double appui ne peut jamais déclencher de saut vers le chapitre suivant/précédent</string>
@@ -563,7 +568,7 @@ Réglez le volume en balayant verticalement sur le côté droit de l'écran"</st
<string name="revanced_hide_stop_ads_button_summary_on">Le bouton Zéro annonce est masqué</string>
<string name="revanced_hide_stop_ads_button_summary_off">Le bouton Zéro annonce est affiché</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Masquer \"Signaler\"</string>
<string name="revanced_hide_report_button_summary_on">Le bouton Signaler est masqué</string>
<string name="revanced_hide_report_button_summary_off">Le bouton Signaler est affiché</string>
@@ -575,12 +580,21 @@ Réglez le volume en balayant verticalement sur le côté droit de l'écran"</st
<string name="revanced_hide_download_button_title">Masquer \"Télécharger\"</string>
<string name="revanced_hide_download_button_summary_on">Le bouton Télécharger est masqué</string>
<string name="revanced_hide_download_button_summary_off">Le bouton Télécharger est affiché</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Masquer \"Booster\"</string>
<string name="revanced_hide_hype_button_summary_on">Le bouton Booster est masqué</string>
<string name="revanced_hide_hype_button_summary_off">Le bouton Booster est affiché</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Masquer \"Promouvoir\"</string>
<string name="revanced_hide_promote_button_summary_on">Le bouton Promouvoir est masqué</string>
<string name="revanced_hide_promote_button_summary_off">Le bouton Promouvoir est affiché</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Masquer \"Merci\"</string>
<string name="revanced_hide_thanks_button_summary_on">Le bouton Merci est masqué</string>
<string name="revanced_hide_thanks_button_summary_off">Le bouton Merci est affiché</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Masquer \"Demander\"</string>
<string name="revanced_hide_ask_button_summary_on">Le bouton Demander est masqué</string>
<string name="revanced_hide_ask_button_summary_off">Le bouton Demander est affiché</string>
@@ -693,6 +707,9 @@ Pour afficher le menu Piste audio, définissez \"Falsifier les flux vidéo\" sur
<string name="revanced_hide_player_flyout_watch_in_vr_title">Masquer \"Regarder en RV\"</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Le menu Regarder en RV est masqué</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Le menu Regarder en RV est affiché</string>
<string name="revanced_hide_player_flyout_video_quality_title">Masquer le menu de qualité vidéo</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Le menu de qualité vidéo est masqué</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Le menu de qualité vidéo est affiché</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Masquer le pied de page du menu de qualité vidéo</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Le pied de page du menu de qualité vidéo est masqué</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Le pied de page du menu de qualité vidéo est affiché</string>
@@ -1466,7 +1483,7 @@ Activer cette option peut déverrouiller des qualités vidéo supérieures"</str
<string name="revanced_playback_speed_dialog_button_summary_on">Le bouton est affiché. Appuyez longuement dessus pour rétablir la vitesse de lecture par défaut.</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Le bouton n\'est pas affiché</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Afficher le bouton de qualité vidéo</string>
<string name="revanced_video_quality_dialog_button_summary_on">Le bouton est affiché. Appuyez longuement pour rétablir la qualité par défaut.</string>
<string name="revanced_video_quality_dialog_button_summary_off">Le bouton n\'est pas affiché</string>

View File

@@ -23,8 +23,8 @@ Second \"item\" text"</string>
<patch id="misc.checks.checkEnvironmentPatch">
<string name="revanced_check_environment_failed_title">Theip ar sheiceálacha</string>
<string name="revanced_check_environment_dialog_open_official_source_button">Oscailt láithreán gréasáin oifigiúil</string>
<string name="revanced_check_environment_dialog_ignore_button">Déan neamhaird de</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt;Is cosúil nach bhfuil an aip seo paiteanta agat.&lt;/h5&gt;&lt;br&gt;Seans nach bhfeidhmeoidh an aip seo i gceart, &lt;b&gt;d\'fhéadfadh sé a bheith díobhálach nó fiú contúirteach le húsáid&lt;/b&gt;&lt; br&gt;&lt;br&gt;Tugann na seiceálacha seo le tuiscint go bhfuil an aip seo réamhphatáilte nó faighte ó dhuine éigin eile:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt; &lt;b&gt;díshuiteáil an aip seo agus paiste tú féin&lt;/b&gt; chun a chinntiú go bhfuil tú ag úsáid aip atá bailíochtaithe agus slán.&lt;p&gt;&lt;br&gt;Má dhéantar neamhaird de, ní thaispeánfar an rabhadh seo ach faoi dhó.</string>
<string name="revanced_check_environment_dialog_ignore_button">Neamhaird</string>
<string name="revanced_check_environment_failed_message">&lt;h5&gt; cosúil gur tusa a rinne paiste ar an aip seo.&lt;/h5&gt;&lt;br&gt;Bfhéidir nach bhfeidhmeoidh an aip seo i gceart, &lt;b&gt;agus dfhéadfadh sé a bheith díobhálach nó fiú contúirteach le húsáid&lt;/b&gt;&lt; br&gt;&lt;br&gt;.Tugann na seiceálacha seo le fios go bhfuil an aip seo patáilte roimh ré nó gur thángthas uirthi ó dhuine eile:&lt;br&gt;&lt;br&gt;&lt;small&gt;%1$s&lt;/small&gt;&lt;br&gt; &lt;b&gt;Moltar go láidir duit an aip seo a dhíshuiteáil agus í a phaisteáil leat féin&lt;/b&gt; chun a chinntiú go bhfuil tú ag úsáid aip bailíochtaithe agus slán.&lt;p&gt;&lt;br&gt;Mura ndéanann tú aird ar an rabhadh seo, ní thaispeánfar é ach faoi dhó.</string>
<string name="revanced_check_environment_not_same_patching_device">Paisteáilte ar ghléas eile</string>
<string name="revanced_check_environment_manager_not_expected_installer">Gan a bheith suiteáilte ag ReVanced Manager</string>
<string name="revanced_check_environment_not_near_patch_time">Paisteáilte níos mó ná 10 nóiméad ó shin</string>
@@ -34,12 +34,12 @@ Second \"item\" text"</string>
<patch id="misc.settings.settingsResourcePatch">
<string name="revanced_settings_submenu_title">Socruithe</string>
<string name="revanced_settings_confirm_user_dialog_title">An bhfuil tú cinnte gur mhaith leat dul ar aghaidh?</string>
<string name="revanced_settings_reset">Athshocraigh</string>
<string name="revanced_settings_reset">Athshocrú</string>
<string name="revanced_settings_reset_color">Dath a athshocrú</string>
<string name="revanced_settings_color_invalid">Dath neamhbhailí</string>
<string name="revanced_settings_restart_title">Teastaíonn atosú</string>
<string name="revanced_settings_restart_title">Atosú ag teastáil</string>
<string name="revanced_settings_restart_dialog_message">Atosaigh an aip chun go mbeidh an t-athrú seo i bhfeidhm.</string>
<string name="revanced_settings_restart">Athosaigh</string>
<string name="revanced_settings_restart">Atosaigh</string>
<string name="revanced_settings_import">Iompórtáil</string>
<string name="revanced_settings_import_copy">Cóipeáil</string>
<string name="revanced_settings_import_reset">Athshocraigh socruithe ReVanced go réamhshocrú</string>
@@ -76,7 +76,7 @@ Chun teangacha nua a aistriú, tabhair cuairt ar translate.revanced.app"</string
Lean an treoir \"Ná maraigh mo aip\" do do ghuthán, agus cuir na treoracha i bhfeidhm ar do shuiteáil MicroG.
Is gá seo chun go n-oibreoidh an aip."</string>
<string name="gms_core_dialog_open_website_text">Suíomh Gréasáin oscailte</string>
<string name="gms_core_dialog_open_website_text">Oscail láithreán gréasáin</string>
<string name="gms_core_dialog_not_whitelisted_using_battery_optimizations_message">"Caithfidh tú optúimíochtaí ceallraí MicroG GmsCore a dhíchumasú chun fadhbanna a sheachaint.
Ní chuirfidh díghníomhachtú optúimíochtaí ceallraí do MicroG isteach ar úsáid ceallraí ar bhealach diúltach.
@@ -95,9 +95,9 @@ Brúigh an cnaipe leanúnaí agus ligean athruithe optúimíochta."</string>
<string name="revanced_settings_screen_05_player_title">Seinnteoir</string>
<string name="revanced_settings_screen_07_seekbar_title">Barra Cuardaigh</string>
<string name="revanced_settings_screen_08_swipe_controls_title">Rialuithe Svaidhpeála</string>
<string name="revanced_settings_screen_11_misc_title">Éagsúla</string>
<string name="revanced_settings_screen_11_misc_title">Ilchineálach</string>
<string name="revanced_settings_screen_12_video_title">Físeán</string>
<string name="revanced_restore_old_settings_menus_title">Athshocraigh roghanna seanghléasanna</string>
<string name="revanced_restore_old_settings_menus_title">Athchóirigh sean-roghchláir socruithe</string>
<string name="revanced_restore_old_settings_menus_summary_on">Taispeántar sean-roghchláir socruithe</string>
<string name="revanced_restore_old_settings_menus_summary_off">Ní thaispeántar sean-roghchláir socruithe</string>
<string name="revanced_settings_search_history_title">Taispeáin stair cuardaigh na socruithe</string>
@@ -106,13 +106,13 @@ Brúigh an cnaipe leanúnaí agus ligean athruithe optúimíochta."</string>
</patch>
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
<string name="revanced_shorts_disable_background_playback_title">Díchumasaigh seinnte Cúlra Shorts</string>
<string name="revanced_shorts_disable_background_playback_summary_on">Tá súgradh cúlra Shorts díchumasaithe</string>
<string name="revanced_shorts_disable_background_playback_summary_off">Tá súgradh cúlra Shorts cumasaithe</string>
<string name="revanced_shorts_disable_background_playback_summary_on">Tá seinm chúlra Shorts díchumasaithe</string>
<string name="revanced_shorts_disable_background_playback_summary_off">Tá seinm chúlra Shorts cumasaithe</string>
</patch>
<patch id="misc.debugging.enableDebuggingPatch">
<string name="revanced_debug_screen_title">Dífhabhtaithe</string>
<string name="revanced_debug_screen_summary">Cumasaigh nó díchumasaigh roghanna dífhabhtaithe</string>
<string name="revanced_debug_title">Logáil dífhabhtaithe</string>
<string name="revanced_debug_screen_title">Dífhabhtú</string>
<string name="revanced_debug_screen_summary">Cumasaigh nó díchumasaigh roghanna dífhabhtú</string>
<string name="revanced_debug_title">Dífhabhtú logáil</string>
<string name="revanced_debug_summary_on">Tá logaí dífhabhtaithe cumasaithe</string>
<string name="revanced_debug_summary_off">Tá logaí dífhabhtaithe díchumasaithe</string>
<string name="revanced_debug_protobuffer_title">Maolán prótacal logála</string>
@@ -127,15 +127,15 @@ Mar sin féin, logálfaidh sé seo roinnt sonraí úsáideora freisin, mar shamp
<string name="revanced_debug_stacktrace_summary_on">Cuimsíonn logaí dífhabhtaithe rian cruach</string>
<string name="revanced_debug_stacktrace_summary_off">Ní chuimsíonn logaí dífhabhtaithe rian cruach</string>
<string name="revanced_debug_toast_on_error_title">Taispeáin tósta ar earráid ReVanced</string>
<string name="revanced_debug_toast_on_error_summary_on">Taispeántar toast má tharlaíonn earráid</string>
<string name="revanced_debug_toast_on_error_summary_off">Ní thaispeántar toast má tharlaíonn earráid</string>
<string name="revanced_debug_toast_on_error_summary_on">Taispeántar tósta má tharlaíonn earráid</string>
<string name="revanced_debug_toast_on_error_summary_off">Ní thaispeántar tósta má tharlaíonn earráid</string>
<string name="revanced_debug_toast_on_error_user_dialog_message">"Má mhúchtar tóstaí earráide, folaítear gach fógra earráide ReVanced.
Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne."</string>
<string name="revanced_debug_export_logs_to_clipboard_title">Easpórtáil logaí dífhabhtaithe</string>
<string name="revanced_debug_export_logs_to_clipboard_summary">Cóipeálann sé logaí dífhabhtaithe ReVanced chuig an gearrthaisce</string>
<string name="revanced_debug_logs_disabled">Tá logáil dífhabhtaithe díchumasaithe</string>
<string name="revanced_debug_logs_none_found"> bhfuarthas aon loga</string>
<string name="revanced_debug_logs_none_found">or aimsíodh aon logaí</string>
<string name="revanced_debug_logs_copied_to_clipboard">Lógaí cóipeáilte</string>
<string name="revanced_debug_logs_failed_to_export">Theip ar logaí a easpórtáil: %s</string>
<string name="revanced_debug_logs_clear_buffer_title">Glan logaí dífhabhtaithe</string>
@@ -146,10 +146,10 @@ Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne."</string>
<string name="revanced_hide_album_cards_title">Folaigh cártaí albam</string>
<string name="revanced_hide_album_cards_summary_on">Tá cártaí albam i bhfolach</string>
<string name="revanced_hide_album_cards_summary_off">Taispeántar cártaí albam</string>
<string name="revanced_hide_artist_cards_title">Folaigh cártaí ealaíontóirí</string>
<string name="revanced_hide_artist_cards_title">Folaigh cártaí ealaíontóra</string>
<string name="revanced_hide_artist_cards_summary_on">Tá cártaí ealaíontóirí i bhfolach</string>
<string name="revanced_hide_artist_cards_summary_off">Taispeántar cártaí ealaíonta</string>
<string name="revanced_hide_chips_shelf_title">Folaigh an seilf scagairí </string>
<string name="revanced_hide_chips_shelf_title">Folaigh seilf sceallóga</string>
<string name="revanced_hide_chips_shelf_summary_on">Tá seilf scagairí i bhfolach</string>
<string name="revanced_hide_chips_shelf_summary_off">Taispeántar seilf scagairí</string>
<string name="revanced_hide_community_posts_title">Folaigh postálacha pobail</string>
@@ -161,13 +161,13 @@ Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne."</string>
<string name="revanced_hide_crowdfunding_box_title">Folaigh bosca slua-mhaoiniú</string>
<string name="revanced_hide_crowdfunding_box_summary_on">Tá bosca slua-mhaoiniú i bhfolach</string>
<string name="revanced_hide_crowdfunding_box_summary_off">Taispeántar bosca slua-mhaoiniú</string>
<string name="revanced_hide_expandable_card_title">Folaigh cárta insínte</string>
<string name="revanced_hide_expandable_card_title">Folaigh cárta inleathnaithe</string>
<string name="revanced_hide_expandable_card_summary_on">Tá cárta insínte faoi fhíseáin i bhfolach</string>
<string name="revanced_hide_expandable_card_summary_off">Tá cárta insínte faoi fhíseáin le feiceáil</string>
<string name="revanced_hide_expandable_card_summary_off">Taispeántar cárta inleathnaithe faoi fhíseáin</string>
<string name="revanced_hide_floating_microphone_button_title">Folaigh an cnaipe micreafón ar snámh</string>
<string name="revanced_hide_floating_microphone_button_summary_on">Cnaipe micreafóin ar snámh sa chuardach i bhfolach</string>
<string name="revanced_hide_floating_microphone_button_summary_off">Tá cnaipe micreafóin ar snámh sa chuardach ar taispeáint</string>
<string name="revanced_hide_horizontal_shelves_title">Folaigh seilfeanna cothromán</string>
<string name="revanced_hide_floating_microphone_button_summary_off">Taispeántar cnaipe micreafóin ar snámh sa chuardach</string>
<string name="revanced_hide_horizontal_shelves_title">Folaigh seilfeanna cothrománacha</string>
<string name="revanced_hide_horizontal_shelves_summary_on">"Tá seilfeanna cothrománacha i bhfolach, amhail:
• Nuacht is déanaí
• Lean ar aghaidh ag féachaint
@@ -175,11 +175,11 @@ Ní chuirfear ar an eolas thú faoi aon imeachtaí gan choinne."</string>
• Is ábhartha
• Siopadóireacht
• Féach arís air"</string>
<string name="revanced_hide_horizontal_shelves_summary_off">Seilfeanna cothrománacha taispeánta</string>
<string name="revanced_hide_horizontal_shelves_summary_off">Taispeántar seilfeanna cothrománacha</string>
<string name="revanced_hide_image_shelf_title">Folaigh seilf íomhá</string>
<string name="revanced_hide_image_shelf_summary_on">Tá seilf íomhá i dtorthaí cuardaigh i bhfolach</string>
<string name="revanced_hide_image_shelf_summary_off">Tá seilf íomhá i dtorthaí cuardaigh le feiceáil</string>
<string name="revanced_hide_latest_posts_title">Folaigh na postanna is déanaí</string>
<string name="revanced_hide_image_shelf_summary_off">Taispeántar seilf íomhánna i dtorthaí cuardaigh</string>
<string name="revanced_hide_latest_posts_title">Folaigh na poist is déanaí</string>
<string name="revanced_hide_latest_posts_summary_on">Tá postanna is déanaí i bhfolach</string>
<string name="revanced_hide_latest_posts_summary_off">Taispeántar na postálacha is déanaí</string>
<string name="revanced_hide_mix_playlists_title">Folaigh seinmliostaí meascán</string>
@@ -452,6 +452,11 @@ Níl an ghné seo ar fáil ach do ghléasanna níos sine"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Taispeánfar dialóg</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Ní sheachnaíonn sé seo an srian aoise. Ní ghlacann sé leis go huathoibríoch.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Díchumasaigh an Aníos Sínigh Isteach sa Teilifís</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Tá an Aníos Sínigh Isteach sa Teilifís díchumasaithe</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Tá an Aníos Sínigh Isteach sa Teilifís cumasaithe</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Díchumasaigh scipeáil caibidle le sconna dúbailte</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Ní féidir le sconna dúbailte scipeáil chuig an gcéad chaibidil eile/roimhe seo a spreagadh go deo</string>
@@ -563,7 +568,7 @@ Coigeartaigh an toirt trí haisceartán go hingearach ar thaobh deas an scáile
<string name="revanced_hide_stop_ads_button_summary_on">Tá cnaipe stad fógraí i bhfolach</string>
<string name="revanced_hide_stop_ads_button_summary_off">Tá cnaipe stad fógraí taispeánta</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Folaigh Tuairisc</string>
<string name="revanced_hide_report_button_summary_on">Tá an cnaipe tuairisce i bhfolach</string>
<string name="revanced_hide_report_button_summary_off">Taispeántar an cnaipe tuairisce</string>
@@ -575,12 +580,21 @@ Coigeartaigh an toirt trí haisceartán go hingearach ar thaobh deas an scáile
<string name="revanced_hide_download_button_title">Folaigh Íoslódáil</string>
<string name="revanced_hide_download_button_summary_on">Tá an cnaipe íosluchtaithe i bhfolach</string>
<string name="revanced_hide_download_button_summary_off">Taispeántar cnaipe íoslódáil</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Folaigh Borradh</string>
<string name="revanced_hide_hype_button_summary_on">Tá cnaipe an Hype i bhfolach</string>
<string name="revanced_hide_hype_button_summary_off">Tá an cnaipe Hype ar taispeáint</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Folaigh Cur Chun Cinn</string>
<string name="revanced_hide_promote_button_summary_on">Tá an cnaipe Cur Chun Cinn folaithe</string>
<string name="revanced_hide_promote_button_summary_off">Tá an cnaipe Cur Chun Cinn taispeánta</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Folaigh Go raibh maith agat</string>
<string name="revanced_hide_thanks_button_summary_on">Tá cnaipe buíochas i bhfolach</string>
<string name="revanced_hide_thanks_button_summary_off">Taispeántar cnaipe buíochas</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Folaigh Fiafraigh</string>
<string name="revanced_hide_ask_button_summary_on">Tá cnaipe Fiafraigh i bhfolach</string>
<string name="revanced_hide_ask_button_summary_off">Taispeántar cnaipe Fiafraigh</string>
@@ -693,6 +707,9 @@ Chun roghchlár na rian fuaime a thaispeáint, athraigh 'Srutháin físeáin bhr
<string name="revanced_hide_player_flyout_watch_in_vr_title">Folaigh Watch i VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Tá faire i roghchlár VR i bhfolach</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Taispeántar an faire sa roghchlár VR</string>
<string name="revanced_hide_player_flyout_video_quality_title">Folaigh roghchlár cáilíocht físe</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Tá roghchlár cháilíocht na físeáin i bhfolach</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Tá roghchlár cháilíocht na físeáin ar taispeáint</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Folaigh buntásc roghchlár cáilíochta físe</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Tá buntásc an roghchláir cáilíochta físeáin folaithe</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Taispeántar buntásc roghchlár cáilíochta físeáin</string>
@@ -1465,7 +1482,7 @@ Is féidir le seo caighdeáin físeáin níos airde a dhíghlasáil"</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Taispeántar an cnaipe. Tapáil agus coinnigh chun luas athsheinm a athshocrú go réamhshocrú</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Ní thaispeántar an cnaipe</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Taispeáin cnaipe cáilíochta físeáin</string>
<string name="revanced_video_quality_dialog_button_summary_on">Tá cnaipe le feiceáil. Tapáil agus coinnigh chun cáilíocht a athshocrú mar réamhshocrú</string>
<string name="revanced_video_quality_dialog_button_summary_off">Níl cnaipe le feiceáil</string>
@@ -1587,13 +1604,13 @@ Tá réiteach uasmhéideach 1080p ag AVC, níl códú fuaime Opus ar fáil, agus
<string name="revanced_ads_screen_summary">Socruithe Blocála Fógraí</string>
<string name="revanced_chat_screen_title">Comhrá</string>
<string name="revanced_chat_screen_summary">Socruithe comhrá</string>
<string name="revanced_misc_screen_title">Ilghnéitheach</string>
<string name="revanced_misc_screen_summary">Socruithe ilghnéitheacha</string>
<string name="revanced_misc_screen_title">Ilchineálach</string>
<string name="revanced_misc_screen_summary">Socruithe Ilchineálach</string>
<string name="revanced_general_category_title">Socruithe ginearálta</string>
<string name="revanced_other_category_title">Socruithe eile</string>
<string name="revanced_client_ads_category_title">Fógraí taobh an chliaint</string>
<string name="revanced_surestream_ads_category_title">Fógraí surestream ar thaobh an fhreastalaí</string>
<string name="revanced_twitch_debug_title">Logáil dífhabhtaithe</string>
<string name="revanced_twitch_debug_title">Tá logaí dífhabhtú cumasaithe</string>
<string name="revanced_twitch_debug_summary_on">Tá logaí dífhabhtaithe cumasaithe</string>
<string name="revanced_twitch_debug_summary_off">Tá logaí dífhabhtaithe díchumasaithe</string>
</patch>

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -222,7 +227,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -222,7 +227,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -222,7 +227,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -222,7 +227,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -452,6 +452,11 @@ Ez a funkció csak régebbi eszközökön érhető el"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">A párbeszédpanel megjelenik</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Ez nem kerüli meg a korhatárt, csak automatikusan elfogadja.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">TV-bejelentkezési előugró ablak letiltása</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">A TV-bejelentkezési előugró ablak le van tiltva</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">A TV-bejelentkezési előugró ablak engedélyezve van</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Dupla koppintásos fejezetátugrás letiltása</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">A dupla koppintás soha nem indíthatja el a következő/előző fejezetre való ugrást</string>
@@ -563,7 +568,7 @@ A hangerő a képernyő jobb oldalán függőlegesen húzva állítható be"</st
<string name="revanced_hide_stop_ads_button_summary_on">A hirdetésleállítás gomb rejtett</string>
<string name="revanced_hide_stop_ads_button_summary_off">A hirdetésleállítás gomb látható</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Bejelentés elrejtése</string>
<string name="revanced_hide_report_button_summary_on">A bejelentés gomb el van rejtve</string>
<string name="revanced_hide_report_button_summary_off">A bejelentés gomb látható</string>
@@ -575,12 +580,21 @@ A hangerő a képernyő jobb oldalán függőlegesen húzva állítható be"</st
<string name="revanced_hide_download_button_title">Letöltés elrejtése</string>
<string name="revanced_hide_download_button_summary_on">A letöltés gomb el van rejtve</string>
<string name="revanced_hide_download_button_summary_off">A letöltés gomb látható</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Aktivitás elrejtése</string>
<string name="revanced_hide_hype_button_summary_on">A Hype gomb rejtett</string>
<string name="revanced_hide_hype_button_summary_off">A hype gomb látható</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Promóció elrejtése</string>
<string name="revanced_hide_promote_button_summary_on">A promóció gomb el van rejtve</string>
<string name="revanced_hide_promote_button_summary_off">A promóció gomb látható</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Köszönet elrejtése</string>
<string name="revanced_hide_thanks_button_summary_on">A köszönet gomb el van rejtve</string>
<string name="revanced_hide_thanks_button_summary_off">A köszönet gomb látható</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Ask elrejtése</string>
<string name="revanced_hide_ask_button_summary_on">Az Ask gomb el van rejtve</string>
<string name="revanced_hide_ask_button_summary_off">Az Ask gomb látható</string>
@@ -693,6 +707,9 @@ Az audiosáv menü megjelenítéséhez módosítsa a \"Videófolyamok hamisítá
<string name="revanced_hide_player_flyout_watch_in_vr_title">\"Megtekintés VR-módban\" elrejtése</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">A megtekintés VR-módban menü el van rejtve</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">A „Megtekintés VR-módban” menü megjelenik</string>
<string name="revanced_hide_player_flyout_video_quality_title">Videóminőség menü elrejtése</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">A videóminőség menü elrejtve</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">A videóminőség menü megjelenítve</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">A videóminőség menü láblécének elrejtése</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">A videóminőség menü lábléce el van rejtve</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Megjelenik a videóminőség menü lábléce</string>
@@ -1462,7 +1479,7 @@ Ez a beállítás lehetővé teszi a magasabb videóminőségek feloldását"</s
<string name="revanced_playback_speed_dialog_button_summary_on">A gomb látható. Tartsa lenyomva a lejátszási sebesség alapértelmezettre állításához</string>
<string name="revanced_playback_speed_dialog_button_summary_off">A gomb nem látható</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Videóminőség gomb megjelenítése</string>
<string name="revanced_video_quality_dialog_button_summary_on">A gomb látható. Tartsa lenyomva a minőséget az alapértelmezettre visszaállításához</string>
<string name="revanced_video_quality_dialog_button_summary_off">A gomb nem látható</string>

View File

@@ -452,6 +452,11 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Զրույցը կցուցադրվի</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Սա չի խուսափում տարիքային սահմանափակումից։ Այն պարզապես ավտոմատ կերպով ընդունում է այն։</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Անջատել հեռուստացույց մուտքի պատուհանը</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Հեռուստացույց մուտքի պատուհանն անջատված է</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Հեռուստացույց մուտքի պատուհանը միացված է</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Անջատել կրկնակի հպումով գլուխը բաց թողնելը</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Կրկնակի հպումը երբեք չի կարող առաջացնել հաջորդ/նախորդ գլուխն անցնելը</string>
@@ -563,7 +568,7 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
<string name="revanced_hide_stop_ads_button_summary_on">Գովազդները դադարեցնելու կոճակը թաքցված է</string>
<string name="revanced_hide_stop_ads_button_summary_off">Գովազդները դադարեցնելու կոճակը ցուցադրված է</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Թաքցնել Report</string>
<string name="revanced_hide_report_button_summary_on">Report կոճակը թաքցված է</string>
<string name="revanced_hide_report_button_summary_off">Report կոճակը ցուցադրվում է</string>
@@ -575,12 +580,21 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
<string name="revanced_hide_download_button_title">Թաքցնել Download</string>
<string name="revanced_hide_download_button_summary_on">Download կոճակը թաքցված է</string>
<string name="revanced_hide_download_button_summary_off">Download կոճակը ցուցադրվում է</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Թաքցնել Հայփը</string>
<string name="revanced_hide_hype_button_summary_on">Հայփ կոճակը թաքնված է</string>
<string name="revanced_hide_hype_button_summary_off">Հայփ կոճակը ցուցադրվում է</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Թաքցնել Գովազդը</string>
<string name="revanced_hide_promote_button_summary_on">Խթանել կոճակը թաքնված է</string>
<string name="revanced_hide_promote_button_summary_off">Խթանել կոճակը ցուցադրված է</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Թաքցնել Thanks</string>
<string name="revanced_hide_thanks_button_summary_on">Thanks կոճակը թաքցված է</string>
<string name="revanced_hide_thanks_button_summary_off">Thanks կոճակը ցուցադրվում է</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Թաքցնել հարցումը</string>
<string name="revanced_hide_ask_button_summary_on">Հարցման կոճակը թաքցված է</string>
<string name="revanced_hide_ask_button_summary_off">Հարցման կոճակը երևում է</string>
@@ -693,6 +707,9 @@ MicroG-ի համար մարտկոցի օպտիմալացումը անջատել
<string name="revanced_hide_player_flyout_watch_in_vr_title">Դիտել VR-ով թաքցնել</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">VR-ով դիտել մենյուը թաքցված է</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">VR-ով դիտել մենյուը երևում է</string>
<string name="revanced_hide_player_flyout_video_quality_title">Թաքցնել տեսանյութի որակի ընտրացանկը</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Տեսանյութի որակի ընտրացանկը թաքնված է</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Տեսանյութի որակի ընտրացանկը ցուցադրված է</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Տեսանյութի որակի մենյուի ստորագրությունը թաքցնել</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Տեսանյութի որակի մենյուի ստորագրությունը թաքցված է</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Տեսանյութի որակի մենյուի ստորագրությունը երևում է</string>
@@ -1466,7 +1483,7 @@ Mini-player-ը կարող է գրավվել էկրանից դուրս՝ դեպի
<string name="revanced_playback_speed_dialog_button_summary_on">Կոճակը ցուցադրվում է: Հպեք և պահեք՝ նվագարկման արագությունը լռելյայնի վերականգնելու համար</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Կոճակը չի ցուցադրվում</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Ցուցադրել տեսանյութի որակի կոճակը</string>
<string name="revanced_video_quality_dialog_button_summary_on">Կոճակը ցուցադրված է։ Հպեք և պահեք՝ որակը լռելյայնին վերականգնելու համար</string>
<string name="revanced_video_quality_dialog_button_summary_off">Կոճակը ցուցադրված չէ։</string>

View File

@@ -452,6 +452,11 @@ Fitur ini hanya tersedia untuk perangkat yang lebih lama"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">Dialog akan ditampilkan</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Ini tidak mengabaikan batasan usia. Ini hanya menerimanya secara otomatis.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Nonaktifkan pop-up Masuk ke TV</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Pop-up Masuk ke TV dinonaktifkan</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Pop-up Masuk ke TV diaktifkan</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Nonaktifkan lewati bab dengan ketuk dua kali</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Ketuk dua kali tidak akan pernah memicu lewati ke bab berikutnya/sebelumnya</string>
@@ -563,7 +568,7 @@ Menyesuaikan volume dengan mengusap secara vertikal di sisi kanan layar"</string
<string name="revanced_hide_stop_ads_button_summary_on">Tombol hentikan iklan disembunyikan</string>
<string name="revanced_hide_stop_ads_button_summary_off">Tombol hentikan iklan ditampilkan</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Sembunyikan Laporkan</string>
<string name="revanced_hide_report_button_summary_on">Tombol laporkan disembunyikan</string>
<string name="revanced_hide_report_button_summary_off">Tombol laporkan ditampilkan</string>
@@ -575,12 +580,21 @@ Menyesuaikan volume dengan mengusap secara vertikal di sisi kanan layar"</string
<string name="revanced_hide_download_button_title">Sembunyikan Unduhan</string>
<string name="revanced_hide_download_button_summary_on">Tombol unduh disembunyikan</string>
<string name="revanced_hide_download_button_summary_off">Tombol unduh ditampilkan</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Sembunyikan Hype</string>
<string name="revanced_hide_hype_button_summary_on">Tombol Hype disembunyikan</string>
<string name="revanced_hide_hype_button_summary_off">Tombol Hype ditampilkan</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Sembunyikan Promosi</string>
<string name="revanced_hide_promote_button_summary_on">Tombol Promosi disembunyikan</string>
<string name="revanced_hide_promote_button_summary_off">Tombol Promosi ditampilkan</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Sembunyikan Terima kasih</string>
<string name="revanced_hide_thanks_button_summary_on">Tombol terima kasih disembunyikan</string>
<string name="revanced_hide_thanks_button_summary_off">Tombol terima kasih ditampilkan</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Sembunyikan Tanya</string>
<string name="revanced_hide_ask_button_summary_on">Tombol Tanya disembunyikan</string>
<string name="revanced_hide_ask_button_summary_off">Tombol Tanya ditampilkan</string>
@@ -693,6 +707,9 @@ Untuk menampilkan menu trek Audio, ubah 'Spoof aliran video' ke iOS TV"</string>
<string name="revanced_hide_player_flyout_watch_in_vr_title">Sembunyikan Tonton di VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Menu tonton di VR disembunyikan</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Menu tonton di VR ditampilkan</string>
<string name="revanced_hide_player_flyout_video_quality_title">Sembunyikan menu kualitas video</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Menu kualitas video disembunyikan</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Menu kualitas video ditampilkan</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Sembunyikan footer menu kualitas video</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Footer menu kualitas video disembunyikan</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Footer menu kualitas video ditampilkan</string>
@@ -1464,7 +1481,7 @@ Mengaktifkan ini dapat membuka kualitas video yang lebih tinggi"</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Tombol ditampilkan. Ketuk dan tahan untuk mengatur ulang kecepatan pemutaran ke bawaan</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Tombol tidak ditampilkan</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Tampilkan tombol kualitas video</string>
<string name="revanced_video_quality_dialog_button_summary_on">Tombol ditampilkan. Ketuk dan tahan untuk mengatur ulang kualitas ke bawaan</string>
<string name="revanced_video_quality_dialog_button_summary_off">Tombol tidak ditampilkan</string>

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -222,7 +227,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -452,6 +452,11 @@ Questa funzione è disponibile solo per i dispositivi più vecchi"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">La finestra di dialogo verrà mostrata </string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">Questo non aggira la restrizione di età. Lo accetta solo automaticamente.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">Disabilita il popup \"Accedi alla TV\"</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">Il popup \"Accedi alla TV\" è disabilitato</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">Il popup \"Accedi alla TV\" è abilitato</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">Disabilita salto capitolo con doppio tocco</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">Il doppio tocco non può mai attivare il salto al capitolo successivo/precedente</string>
@@ -563,7 +568,7 @@ Regola il volume scorrendo verticalmente sul lato destro dello schermo"</string>
<string name="revanced_hide_stop_ads_button_summary_on">Il pulsante per interrompere gli annunci è nascosto</string>
<string name="revanced_hide_stop_ads_button_summary_off">Il pulsante per interrompere gli annunci è mostrato</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">Nascondi Segnala</string>
<string name="revanced_hide_report_button_summary_on">Il pulsante Segnala è nascosto</string>
<string name="revanced_hide_report_button_summary_off">Il pulsante Segnala è visibile</string>
@@ -575,12 +580,21 @@ Regola il volume scorrendo verticalmente sul lato destro dello schermo"</string>
<string name="revanced_hide_download_button_title">Nascondi Scarica</string>
<string name="revanced_hide_download_button_summary_on">Il pulsante Scarica è nascosto</string>
<string name="revanced_hide_download_button_summary_off">Il pulsante Scarica è visibile</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Nascondi Hype</string>
<string name="revanced_hide_hype_button_summary_on">Il pulsante Hype è nascosto</string>
<string name="revanced_hide_hype_button_summary_off">Pulsante Hype è mostrato</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">Nascondi Promuovi</string>
<string name="revanced_hide_promote_button_summary_on">Il pulsante Promuovi è nascosto</string>
<string name="revanced_hide_promote_button_summary_off">Il pulsante Promuovi è mostrato</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Nascondi Grazie</string>
<string name="revanced_hide_thanks_button_summary_on">Grazie pulsante è nascosto</string>
<string name="revanced_hide_thanks_button_summary_off">Il pulsante Grazie è visibile</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">Nascondi richiesta</string>
<string name="revanced_hide_ask_button_summary_on">Il pulsante Richiedi è nascosto</string>
<string name="revanced_hide_ask_button_summary_off">Il pulsante Richiedi è visibile</string>
@@ -693,6 +707,9 @@ Per mostrare il menu della traccia audio, cambia \"Spoof video streams\" in iOS
<string name="revanced_hide_player_flyout_watch_in_vr_title">Nascondi Guarda in VR</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">Il menu Guarda in VR è nascosto</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">Il menu Guarda in VR è visibile</string>
<string name="revanced_hide_player_flyout_video_quality_title">Nascondi menu qualità video</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">Il menu della qualità video è nascosto</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">Il menu della qualità video è visualizzato</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">Nascondi piè di pagina del menu qualità video</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">Il piè di pagina del menu di qualità video è nascosto</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">Il piè di pagina del menu di qualità video è visibile</string>
@@ -1464,7 +1481,7 @@ Abilitare questa opzione può sbloccare qualità video più elevate"</string>
<string name="revanced_playback_speed_dialog_button_summary_on">Il pulsante è visualizzato. Tieni premuto per ripristinare la velocità di riproduzione predefinita</string>
<string name="revanced_playback_speed_dialog_button_summary_off">Il pulsante non è visibile</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">Mostra il pulsante qualità video</string>
<string name="revanced_video_quality_dialog_button_summary_on">Il pulsante è visualizzato. Tocca e tieni premuto per ripristinare la qualità predefinita</string>
<string name="revanced_video_quality_dialog_button_summary_off">Il pulsante non è visibile.</string>

View File

@@ -452,6 +452,11 @@ Second \"item\" text"</string>
<string name="revanced_remove_viewer_discretion_dialog_summary_off">דו-שיח יוצג</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">זה לא עוקף את מגבלת הגיל. זה רק מסכים לזה באופן אוטומטי.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">השבתת חלון קופץ של כניסה לטלוויזיה</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">חלון קופץ של כניסה לטלוויזיה מושבת</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">חלון קופץ של כניסה לטלוויזיה מופעל</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">ביטול דילוג פרקים בלחיצה כפולה</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">לחיצה כפולה לעולם לא תפעיל דילוג לפרק הבא/הקודם</string>
@@ -563,7 +568,7 @@ Second \"item\" text"</string>
<string name="revanced_hide_stop_ads_button_summary_on">כפתור עצירת הפרסומות מוסתר</string>
<string name="revanced_hide_stop_ads_button_summary_off">כפתור עצירת הפרסומות מוצג</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">הסתר דיווח</string>
<string name="revanced_hide_report_button_summary_on">לחצן דיווח מוסתר</string>
<string name="revanced_hide_report_button_summary_off">לחצן דיווח מוצג</string>
@@ -575,12 +580,21 @@ Second \"item\" text"</string>
<string name="revanced_hide_download_button_title">הסתר הורדה</string>
<string name="revanced_hide_download_button_summary_on">לחצן הורדה מוסתר</string>
<string name="revanced_hide_download_button_summary_off">לחצן הורדה מוצג</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">הסתר הייפ</string>
<string name="revanced_hide_hype_button_summary_on">כפתור הייפ מוסתר</string>
<string name="revanced_hide_hype_button_summary_off">כפתור ההייפ מוצג</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">הסתר קידום</string>
<string name="revanced_hide_promote_button_summary_on">כפתור קידום מוסתר</string>
<string name="revanced_hide_promote_button_summary_off">כפתור קידום מוצג</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">הסתר תודה</string>
<string name="revanced_hide_thanks_button_summary_on">לחצן תודה מוסתר</string>
<string name="revanced_hide_thanks_button_summary_off">לחצן תודה מוצג</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">הסתר Ask</string>
<string name="revanced_hide_ask_button_summary_on">לחצן Ask מוסתר</string>
<string name="revanced_hide_ask_button_summary_off">לחצן Ask מוצג</string>
@@ -693,6 +707,9 @@ Second \"item\" text"</string>
<string name="revanced_hide_player_flyout_watch_in_vr_title">הסתר \'צפה ב-VR\'</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">תפריט \'צפה ב-VR\' מוסתר</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">תפריט \'צפה ב-VR\' מוצג</string>
<string name="revanced_hide_player_flyout_video_quality_title">הסתר תפריט איכות וידאו</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">תפריט איכות הסרטון מוסתר</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">תפריט איכות הסרטון מוצג</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">הסתר כותרת תחתונה של תפריט איכות סרטון</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">כותרת תחתונה של תפריט איכות סרטון מוסתרת</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">כותרת תחתונה של תפריט איכות סרטון מוצגת</string>
@@ -1467,7 +1484,7 @@ Second \"item\" text"</string>
<string name="revanced_playback_speed_dialog_button_summary_on">הלחצן מוצג. יש להקיש ולהחזיק כדי לאפס את מהירות ההפעלה לברירת מחדל</string>
<string name="revanced_playback_speed_dialog_button_summary_off">הלחצן אינו מוצג</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">הצג כפתור איכות וידאו</string>
<string name="revanced_video_quality_dialog_button_summary_on">הלחצן מוצג. גע והחזק כדי לאפס את האיכות לברירת מחדל</string>
<string name="revanced_video_quality_dialog_button_summary_off">הלחצן אינו מוצג</string>

View File

@@ -107,8 +107,8 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
</patch>
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
<string name="revanced_shorts_disable_background_playback_title">ショートのバックグラウンド再生を無効化</string>
<string name="revanced_shorts_disable_background_playback_summary_on">ショートのバックグラウンド再生は無効です</string>
<string name="revanced_shorts_disable_background_playback_summary_off">ショートのバックグラウンド再生は有効です</string>
<string name="revanced_shorts_disable_background_playback_summary_on">ショート動画のバックグラウンド再生は無効です</string>
<string name="revanced_shorts_disable_background_playback_summary_off">ショート動画のバックグラウンド再生は有効です</string>
</patch>
<patch id="misc.debugging.enableDebuggingPatch">
<string name="revanced_debug_screen_title">デバッグ</string>
@@ -258,7 +258,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_ask_section_title">質問セクションを非表示</string>
<string name="revanced_hide_ask_section_summary_on">質問セクションは表示されません</string>
<string name="revanced_hide_ask_section_summary_off">質問セクションは表示されます</string>
<string name="revanced_hide_attributes_section_title">関連情報を非表示</string>
<string name="revanced_hide_attributes_section_title">付随情報を非表示</string>
<string name="revanced_hide_attributes_section_summary_on">注目の場所 / ゲーム / 音楽 / 言及されている人物セクションは表示されません</string>
<string name="revanced_hide_attributes_section_summary_off">注目の場所 / ゲーム / 音楽 / 言及されている人物セクションは表示されます</string>
<string name="revanced_hide_chapters_section_title">チャプター セクションを非表示</string>
@@ -270,9 +270,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_podcast_section_title">「ポッドキャストを検索」を非表示</string>
<string name="revanced_hide_podcast_section_summary_on">「ポッドキャストを検索」セクションは表示されません</string>
<string name="revanced_hide_podcast_section_summary_off">「ポッドキャストを検索」セクションは表示されます</string>
<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_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>
@@ -301,9 +301,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_for_you_shelf_title">「おすすめ」欄を非表示</string>
<string name="revanced_hide_for_you_shelf_summary_on">「おすすめ」欄は表示されません</string>
<string name="revanced_hide_for_you_shelf_summary_off">「おすすめ」欄は表示されます</string>
<string name="revanced_hide_links_preview_title">リンクのプレビューを非表示</string>
<string name="revanced_hide_links_preview_summary_on">リンクのプレビューは表示されません</string>
<string name="revanced_hide_links_preview_summary_off">リンクのプレビューは表示されます</string>
<string name="revanced_hide_links_preview_title">リンクのプレビューを非表示</string>
<string name="revanced_hide_links_preview_summary_on">リンクのプレビューは表示されません</string>
<string name="revanced_hide_links_preview_summary_off">リンクのプレビューは表示されます</string>
<string name="revanced_hide_members_shelf_title">メンバー欄を非表示</string>
<string name="revanced_hide_members_shelf_summary_on">メンバー欄は表示されません</string>
<string name="revanced_hide_members_shelf_summary_off">メンバー欄は表示されます</string>
@@ -316,7 +316,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_visit_store_button_summary_on">「ストアに移動」ボタンは表示されません</string>
<string name="revanced_hide_visit_store_button_summary_off">「ストアに移動」ボタンは表示されます</string>
<string name="revanced_comments_screen_title">コメント</string>
<string name="revanced_comments_screen_summary">コメント セクションの設定</string>
<string name="revanced_comments_screen_summary">コメント セクションのコンポーネントを表示または非表示にします</string>
<string name="revanced_hide_comments_ai_chat_summary_title">AI による「チャットの要約」を非表示</string>
<string name="revanced_hide_comments_ai_chat_summary_summary_on">AI による「チャットの要約」は表示されません</string>
<string name="revanced_hide_comments_ai_chat_summary_summary_off">AI による「チャットの要約」は表示されます</string>
@@ -347,30 +347,30 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_comments_timestamp_button_title">タイムスタンプ ボタンを非表示</string>
<string name="revanced_hide_comments_timestamp_button_summary_on">タイムスタンプ ボタンは表示されません</string>
<string name="revanced_hide_comments_timestamp_button_summary_off">タイムスタンプ ボタンは表示されます</string>
<string name="revanced_custom_filter_screen_title">カスタムフィルタ</string>
<string name="revanced_custom_filter_screen_summary">カスタムフィルタを使用してコンポーネントを非表示にします</string>
<string name="revanced_custom_filter_title">カスタムフィルタを有効化</string>
<string name="revanced_custom_filter_summary_on">カスタムフィルタは有効です</string>
<string name="revanced_custom_filter_summary_off">カスタムフィルタは無効です</string>
<string name="revanced_custom_filter_strings_title">カスタムフィルタ</string>
<string name="revanced_custom_filter_screen_title">カスタム フィルタ</string>
<string name="revanced_custom_filter_screen_summary">カスタム フィルタを使用してコンポーネントを非表示にします</string>
<string name="revanced_custom_filter_title">カスタム フィルタを有効化</string>
<string name="revanced_custom_filter_summary_on">カスタム フィルタは有効です</string>
<string name="revanced_custom_filter_summary_off">カスタム フィルタは無効です</string>
<string name="revanced_custom_filter_strings_title">カスタム フィルタ</string>
<!-- 'Component path builder strings' is the technical name for identifying the Litho UI layout items to hide. This is an advanced feature and most users will never use this. -->
<string name="revanced_custom_filter_strings_summary">非表示にしたい component の path builder string を改行区切りで入力します</string>
<string name="revanced_custom_filter_toast_invalid_syntax">無効なカスタムフィルタ: %s</string>
<string name="revanced_hide_keyword_content_screen_title">キーワード フィルタ</string>
<string name="revanced_hide_keyword_content_screen_summary">キーワードフィルタを使用してフィード、検索結果に表示される動画を非表示にします</string>
<string name="revanced_custom_filter_strings_summary">非表示にするコンポーネントの path builder string のリスト (改行区切り)</string>
<string name="revanced_custom_filter_toast_invalid_syntax">無効なカスタム フィルタ: %s</string>
<string name="revanced_hide_keyword_content_screen_title">キーワードでコンテンツを非表示</string>
<string name="revanced_hide_keyword_content_screen_summary">キーワード フィルタを使用してフィード、検索結果に表示される動画を非表示にします</string>
<string name="revanced_hide_keyword_content_home_title">ホームの動画をキーワードで非表示</string>
<string name="revanced_hide_keyword_content_home_summary_on">ホームタブの動画はキーワードでフィルタリングされます</string>
<string name="revanced_hide_keyword_content_home_summary_off">ホームタブの動画はキーワードでフィルタリングされません</string>
<string name="revanced_hide_keyword_content_home_summary_on">ホームタブの動画はキーワードでフィルタリングされます</string>
<string name="revanced_hide_keyword_content_home_summary_off">ホームタブの動画はキーワードでフィルタリングされません</string>
<string name="revanced_hide_keyword_content_search_title">検索結果をキーワードで非表示</string>
<string name="revanced_hide_keyword_content_search_summary_on">検索結果はキーワードでフィルタリングされます</string>
<string name="revanced_hide_keyword_content_search_summary_off">検索結果はキーワードでフィルタリングされません</string>
<string name="revanced_hide_keyword_content_search_summary_on">検索結果はキーワードでフィルタリングされます</string>
<string name="revanced_hide_keyword_content_search_summary_off">検索結果はキーワードでフィルタリングされません</string>
<string name="revanced_hide_keyword_content_subscriptions_title">登録チャンネルの動画をキーワードで非表示</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_on">登録チャンネルタブの動画はキーワードでフィルタリングされます</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_off">登録チャンネルタブの動画はキーワードでフィルタリングされません</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_on">登録チャンネルタブの動画はキーワードでフィルタリングされます</string>
<string name="revanced_hide_keyword_content_subscriptions_summary_off">登録チャンネルタブの動画はキーワードでフィルタリングされません</string>
<string name="revanced_hide_keyword_content_phrases_title">キーワード</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. -->
<string name="revanced_hide_keyword_content_phrases_summary">"キーワードとなる単語やフレーズを改行区切りで入力します
<string name="revanced_hide_keyword_content_phrases_summary">"キーワードとなる単語やフレーズのリスト (改行区切り)
動画のタイトルまたはチャンネル名にキーワードが含まれる動画が非表示の対象になります
@@ -379,7 +379,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_keyword_content_about_summary">"ホーム / 登録チャンネル / 検索結果でキーワードに合致する動画を非表示にします
制限事項
• ショート動画はチャンネル名で除外されない
• ショート動画はチャンネル名で非表示にできない
• 一部の UI コンポーネントが残ってしまう場合がある
• キーワードを検索したとき、結果が表示されない場合がある"</string>
<string name="revanced_hide_keyword_content_about_whole_words_title">単語全体で合致</string>
@@ -441,12 +441,12 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<patch id="interaction.copyvideourl.copyVideoUrlResourcePatch">
<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">ボタンオーバーレイに表示されます。タップすると動画の 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">ボタンオーバーレイに表示されます。タップするとタイムスタンプ付きの URL 、長押しするとタイムスタンプなしの URL それぞれコピーできます</string>
<string name="revanced_copy_video_url_timestamp_summary_off">ボタンはオーバーレイに表示されません</string>
<string name="revanced_copy_video_url_title">「動画の 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">ボタンがプレーヤー オーバーレイに表示されます。タップするとタイムスタンプ付きの URL 、長押しするとタイムスタンプなしの URL それぞれコピーされます</string>
<string name="revanced_copy_video_url_timestamp_summary_off">ボタンはプレーヤー オーバーレイに表示されません</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
<string name="revanced_remove_viewer_discretion_dialog_title">「ご自身の責任」ダイアログを削除</string>
@@ -454,6 +454,11 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_remove_viewer_discretion_dialog_summary_off">ダイアログは表示されます</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">この機能によって年齢制限が回避される訳ではありません。自動的に承認するだけです。</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">「テレビでログイン」ポップアップを無効化</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">「テレビでログイン」ポップアップは無効です</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">「テレビでログイン」ポップアップは有効です</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">ダブルタップ時のチャプター スキップを無効化</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">ダブルタップしたときに、次または前のチャプターへスキップしてしまうことはありません</string>
@@ -462,11 +467,11 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<patch id="interaction.downloads.downloadsResourcePatch">
<string name="revanced_external_downloader_screen_title">外部ダウンロード</string>
<string name="revanced_external_downloader_screen_summary">外部ダウンローダーの設定</string>
<string name="revanced_external_downloader_title">外部ダウンロード ボタンを表示する</string>
<string name="revanced_external_downloader_summary_on">外部ダウンロード ボタンオーバーレイに表示されます</string>
<string name="revanced_external_downloader_summary_off">外部ダウンロード ボタンはオーバーレイに表示されません</string>
<string name="revanced_external_downloader_title">外部ダウンロード ボタンを表示</string>
<string name="revanced_external_downloader_summary_on">外部ダウンロード ボタンがプレーヤー オーバーレイに表示されます</string>
<string name="revanced_external_downloader_summary_off">外部ダウンロード ボタンはプレーヤー オーバーレイに表示されません</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">オフライン ボタンの動作を上書きする</string>
<string name="revanced_external_downloader_action_button_title">オフライン ボタンの動作を上書き</string>
<string name="revanced_external_downloader_action_button_summary_on">オフライン ボタンは外部ダウンローダーを呼び出します</string>
<string name="revanced_external_downloader_action_button_summary_off">オフライン ボタンはアプリ内のダウンローダーを呼び出します</string>
<string name="revanced_external_downloader_name_title">外部ダウンローダーのパッケージ名</string>
@@ -544,13 +549,13 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
</patch>
<patch id="layout.autocaptions.autoCaptionsPatch">
<string name="revanced_disable_auto_captions_title">自動字幕表示を無効化</string>
<string name="revanced_disable_auto_captions_summary_on">動画を開いた際の自動字幕表示は無効です</string>
<string name="revanced_disable_auto_captions_summary_off">動画を開いた際の自動字幕表示は有効で</string>
<string name="revanced_disable_auto_captions_summary_on">自動字幕表示は無効です\n\n動画を開いた際にデフォルトで字幕は表示されません</string>
<string name="revanced_disable_auto_captions_summary_off">自動字幕表示は有効です\n\n動画を開いた際にデフォルトで字幕表示される場合がありま</string>
</patch>
<patch id="layout.buttons.action.hideButtonsPatch">
<string name="revanced_hide_buttons_screen_title">アクション ボタン</string>
<string name="revanced_hide_buttons_screen_summary">プレーヤー画面下のボタンの設定</string>
<string name="revanced_disable_like_subscribe_glow_title">高評価とチャンネル登録のエフェクトを無効にする</string>
<string name="revanced_hide_buttons_screen_summary">プレーヤー画面下のボタンを表示または非表示にします</string>
<string name="revanced_disable_like_subscribe_glow_title">高評価とチャンネル登録のエフェクトを無効</string>
<string name="revanced_disable_like_subscribe_glow_summary_on">高評価ボタンとチャンネル登録ボタンのエフェクトは無効です</string>
<string name="revanced_disable_like_subscribe_glow_summary_off">高評価ボタンとチャンネル登録ボタンのエフェクトは有効です</string>
<string name="revanced_hide_like_dislike_button_title">高評価ボタンと低評価ボタンを非表示</string>
@@ -565,7 +570,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_stop_ads_button_summary_on">「広告を停止」ボタンは表示されません</string>
<string name="revanced_hide_stop_ads_button_summary_off">「広告を停止」ボタンは表示されます</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">報告ボタンを非表示</string>
<string name="revanced_hide_report_button_summary_on">報告ボタンは表示されません</string>
<string name="revanced_hide_report_button_summary_off">報告ボタンは表示されます</string>
@@ -577,12 +582,21 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_download_button_title">オフライン ボタンを非表示</string>
<string name="revanced_hide_download_button_summary_on">オフライン ボタンは表示されません</string>
<string name="revanced_hide_download_button_summary_off">オフライン ボタンは表示されます</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">ハイプボタンを非表示</string>
<string name="revanced_hide_hype_button_summary_on">ハイプボタンは表示されません</string>
<string name="revanced_hide_hype_button_summary_off">ハイプボタンは表示されます</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">プロモート ボタンを非表示</string>
<string name="revanced_hide_promote_button_summary_on">プロモート ボタンは表示されません</string>
<string name="revanced_hide_promote_button_summary_off">プロモート ボタンは表示されます</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Thanks ボタンを非表示</string>
<string name="revanced_hide_thanks_button_summary_on">Thanks ボタンは表示されません</string>
<string name="revanced_hide_thanks_button_summary_off">Thanks ボタンは表示されます</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">質問ボタンを非表示</string>
<string name="revanced_hide_ask_button_summary_on">質問ボタンは表示されません</string>
<string name="revanced_hide_ask_button_summary_off">質問ボタンは表示されます</string>
@@ -619,17 +633,17 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_notifications_button_summary_off">通知ボタンは表示されます</string>
<!-- 'Notifications' should be translated using the same localized wording YouTube displays the tab. -->
<string name="revanced_switch_create_with_notifications_button_title">「作成」と「通知」を入れ替え</string>
<string name="revanced_switch_create_with_notifications_button_summary_on">"作成ボタンと通知ボタン入れ替ます
<string name="revanced_switch_create_with_notifications_button_summary_on">"作成ボタンと通知ボタン入れ替わります
注: これにより、動画広告も強制的に非表示になります"</string>
<string name="revanced_switch_create_with_notifications_button_summary_off">作成ボタンと通知ボタン入れ替えます\n\n注: これにより、動画広告も強制的に非表示になります</string>
<string name="revanced_switch_create_with_notifications_button_summary_off">作成ボタンと通知ボタン入れ替わりません</string>
<string name="revanced_switch_create_with_notifications_button_user_dialog_message">"この設定を無効にすると、ショート動画の広告ブロックも無効になります。
この設定を変更しても効果がない場合は、シークレット モードに切り替えてみてください。"</string>
<string name="revanced_hide_navigation_button_labels_title">ボタンをアイコンのみで表示</string>
<string name="revanced_hide_navigation_button_labels_summary_on">ナビゲーション ボタンはアイコンのみで表示されます</string>
<string name="revanced_hide_navigation_button_labels_summary_off">ナビゲーション ボタンはアイコンと文字で表示されます</string>
<string name="revanced_disable_translucent_status_bar_title">ステータスバーの半透明化を無効にする</string>
<string name="revanced_disable_translucent_status_bar_title">ステータスバーの半透明化を無効</string>
<string name="revanced_disable_translucent_status_bar_summary_on">ステータスバーは常に透けません</string>
<string name="revanced_disable_translucent_status_bar_summary_off">ステータスバーは状況に応じて透けます</string>
<string name="revanced_disable_translucent_status_bar_user_dialog_message">一部のデバイスでは、この機能を有効にすると、システムのナビゲーション バーが半透明になりアプリ内のコンポーネントに重なってしまう可能性があります。</string>
@@ -642,7 +656,7 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
</patch>
<patch id="layout.hide.player.flyoutmenupanel.hidePlayerFlyoutMenuPatch">
<string name="revanced_hide_player_flyout_title">フライアウト メニュー</string>
<string name="revanced_hide_player_flyout_summary">オーバーレイの歯車アイコンから表示されるメニューの設定</string>
<string name="revanced_hide_player_flyout_summary">プレーヤー オーバーレイの歯車ボタンから呼び出されるフライアウト メニューの項目を表示または非表示にします</string>
<!-- 'Captions' should be translated using the same localized wording YouTube displays for the menu item. -->
<string name="revanced_hide_player_flyout_captions_title">「字幕」を非表示</string>
<string name="revanced_hide_player_flyout_captions_summary_on">「字幕」は表示されません</string>
@@ -695,35 +709,38 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_player_flyout_watch_in_vr_title">「VR で見る」を非表示</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">「VR で見る」は表示されません</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">「VR で見る」は表示されます</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">画質設定メニューの脚注を非表示</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">画質設定メニューの脚注は表示されません</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">画質設定メニューの脚注は表示されます</string>
<string name="revanced_hide_player_flyout_video_quality_title">画質を非表示</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">画質は表示されません</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">画質は表示されます</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">画質メニューの脚注を非表示</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">画質メニューの脚注は表示されません</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">画質メニューの脚注は表示されます</string>
</patch>
<patch id="layout.buttons.overlay.hidePlayerOverlayButtonsPatch">
<string name="revanced_hide_autoplay_button_title">自動再生ボタンを非表示</string>
<string name="revanced_hide_autoplay_button_summary_on">自動再生ボタンはオーバーレイに表示されません</string>
<string name="revanced_hide_autoplay_button_summary_off">自動再生ボタンはオーバーレイに表示されます</string>
<string name="revanced_hide_autoplay_button_summary_on">プレーヤー オーバーレイの自動再生ボタンは表示されません</string>
<string name="revanced_hide_autoplay_button_summary_off">プレーヤー オーバーレイの自動再生ボタンは表示されます</string>
<!-- This button does not display any text, but 'Captions' should be translated using the same wording used as the translation of 'revanced_hide_player_flyout_captions_title'. -->
<string name="revanced_hide_captions_button_title">字幕ボタンを非表示</string>
<string name="revanced_hide_captions_button_summary_on">字幕ボタンはオーバーレイに表示されません</string>
<string name="revanced_hide_captions_button_summary_off">字幕ボタンはオーバーレイに表示されます</string>
<string name="revanced_hide_captions_button_summary_on">プレーヤー オーバーレイの字幕ボタンは表示されません</string>
<string name="revanced_hide_captions_button_summary_off">プレーヤー オーバーレイの字幕ボタンは表示されます</string>
<string name="revanced_hide_cast_button_title">キャストボタンを非表示</string>
<string name="revanced_hide_cast_button_summary_on">キャストボタンはオーバーレイに表示されません</string>
<string name="revanced_hide_cast_button_summary_off">キャストボタンはオーバーレイに表示されます</string>
<string name="revanced_hide_player_control_buttons_background_title">プレーヤーコントロールの背景を非表示</string>
<string name="revanced_hide_player_control_buttons_background_summary_on">プレーヤーコントロールの背景は表示されません</string>
<string name="revanced_hide_player_control_buttons_background_summary_off">プレーヤーコントロールの背景は表示されます</string>
<string name="revanced_hide_cast_button_summary_on">プレーヤー オーバーレイのキャストボタンは表示されません</string>
<string name="revanced_hide_cast_button_summary_off">プレーヤー オーバーレイのキャストボタンは表示されます</string>
<string name="revanced_hide_player_control_buttons_background_title">プレーヤー コントロールの背景を非表示</string>
<string name="revanced_hide_player_control_buttons_background_summary_on">プレーヤー コントロールの背景は表示されません</string>
<string name="revanced_hide_player_control_buttons_background_summary_off">プレーヤー コントロールの背景は表示されます</string>
<string name="revanced_hide_player_previous_next_buttons_title">前の動画ボタンと次の動画ボタンを非表示</string>
<string name="revanced_hide_player_previous_next_buttons_summary_on">前の動画ボタンと次の動画ボタンは表示されません</string>
<string name="revanced_hide_player_previous_next_buttons_summary_off">前の動画ボタンと次の動画ボタンは表示されます</string>
</patch>
<patch id="layout.hide.endscreencards.hideEndscreenCardsResourcePatch">
<string name="revanced_hide_endscreen_cards_title">動画の終了画面を非表示</string>
<string name="revanced_hide_endscreen_cards_summary_on">動画の終了画面は表示されません</string>
<string name="revanced_hide_endscreen_cards_summary_off">動画の終了画面は表示されます</string>
<string name="revanced_hide_endscreen_cards_title">終了画面カードを非表示</string>
<string name="revanced_hide_endscreen_cards_summary_on">終了画面カードは表示されません</string>
<string name="revanced_hide_endscreen_cards_summary_off">終了画面カードは表示されます</string>
</patch>
<patch id="layout.hide.fullscreenambientmode.disableFullscreenAmbientModePatch">
<string name="revanced_disable_fullscreen_ambient_mode_title">全画面表示中のアンビエント モードを無効にする</string>
<string name="revanced_disable_fullscreen_ambient_mode_title">全画面表示中のアンビエント モードを無効</string>
<string name="revanced_disable_fullscreen_ambient_mode_summary_on">全画面表示中のアンビエント モードは無効です</string>
<string name="revanced_disable_fullscreen_ambient_mode_summary_off">全画面表示中のアンビエント モードは有効です</string>
</patch>
@@ -733,9 +750,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_info_cards_summary_off">情報カードはプレーヤー画面に表示されます</string>
</patch>
<patch id="layout.hide.rollingnumber.disableRollingNumberAnimationPatch">
<string name="revanced_disable_rolling_number_animations_title">数字のアニメーションを無効にする</string>
<string name="revanced_disable_rolling_number_animations_summary_on">数字のアニメーションは無効です</string>
<string name="revanced_disable_rolling_number_animations_summary_off">数字のアニメーションは有効です</string>
<string name="revanced_disable_rolling_number_animations_title">数字の回転アニメーションを無効</string>
<string name="revanced_disable_rolling_number_animations_summary_on">数字の回転アニメーションは無効です</string>
<string name="revanced_disable_rolling_number_animations_summary_off">数字の回転アニメーションは有効です</string>
</patch>
<patch id="layout.hide.seekbar.hideSeekbarPatch">
<string name="revanced_hide_seekbar_title">動画プレーヤーのシークバーを非表示</string>
@@ -747,20 +764,20 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_seekbar_thumbnail_summary_off">フィードや再生履歴などの動画のサムネイルのシークバーは表示されます</string>
</patch>
<patch id="layout.hide.shorts.hideShortsComponentsResourcePatch">
<string name="revanced_shorts_player_screen_title">ショート動画プレーヤー</string>
<string name="revanced_shorts_player_screen_title">ショート プレーヤー</string>
<string name="revanced_shorts_player_screen_summary">ショート プレーヤーのコンポーネントを表示または非表示にします</string>
<!-- 'Home' should be translated using the same localized wording YouTube displays for the Home tab. -->
<string name="revanced_hide_shorts_home_title">ホームフィードでショートを非表示</string>
<string name="revanced_hide_shorts_home_summary_on">ホームフィードおよび関連動画にショートは表示されません</string>
<string name="revanced_hide_shorts_home_summary_off">ホームフィードおよび関連動画にショートが表示されます</string>
<string name="revanced_hide_shorts_search_title">検索結果でショート動画を非表示</string>
<string name="revanced_hide_shorts_home_summary_on">ホームフィードおよび関連動画にショート動画は表示されません</string>
<string name="revanced_hide_shorts_home_summary_off">ホームフィードおよび関連動画にショート動画が表示されます</string>
<string name="revanced_hide_shorts_search_title">検索結果でショートを非表示</string>
<string name="revanced_hide_shorts_search_summary_on">検索結果にショート動画は表示されません</string>
<string name="revanced_hide_shorts_search_summary_off">検索結果にショート動画が表示されます</string>
<!-- 'Subscriptions' should be translated using the same localized wording YouTube displays for the Subscriptions tab. -->
<string name="revanced_hide_shorts_subscriptions_title">登録チャンネル フィードでショートを非表示</string>
<string name="revanced_hide_shorts_subscriptions_summary_on">登録チャンネル フィードにショートは表示されません</string>
<string name="revanced_hide_shorts_subscriptions_summary_off">登録チャンネル フィードにショートが表示されます</string>
<string name="revanced_hide_shorts_history_title">再生履歴でショート動画を非表示</string>
<string name="revanced_hide_shorts_subscriptions_summary_on">登録チャンネル フィードにショート動画は表示されません</string>
<string name="revanced_hide_shorts_subscriptions_summary_off">登録チャンネル フィードにショート動画が表示されます</string>
<string name="revanced_hide_shorts_history_title">再生履歴でショートを非表示</string>
<string name="revanced_hide_shorts_history_summary_on">再生履歴にショート動画は表示されません</string>
<string name="revanced_hide_shorts_history_summary_off">再生履歴にショート動画が表示されます</string>
<string name="revanced_hide_shorts_super_thanks_button_title">「Super Thanks を購入する」ボタンを非表示</string>
@@ -769,9 +786,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_shorts_effect_button_title">効果ボタンを非表示</string>
<string name="revanced_hide_shorts_effect_button_summary_on">効果ボタンは表示されません</string>
<string name="revanced_hide_shorts_effect_button_summary_off">効果ボタンは表示されます</string>
<string name="revanced_hide_shorts_green_screen_button_title">グリーンスクリーン ボタンを非表示</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">グリーンスクリーン ボタンは表示されません</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">グリーンスクリーン ボタンは表示されます</string>
<string name="revanced_hide_shorts_green_screen_button_title">グリーン スクリーン ボタンを非表示</string>
<string name="revanced_hide_shorts_green_screen_button_summary_on">グリーン スクリーン ボタンは表示されません</string>
<string name="revanced_hide_shorts_green_screen_button_summary_off">グリーン スクリーン ボタンは表示されます</string>
<string name="revanced_hide_shorts_hashtag_button_title">ハッシュタグ ボタンを非表示</string>
<string name="revanced_hide_shorts_hashtag_button_summary_on">ハッシュタグ ボタンは表示されません</string>
<string name="revanced_hide_shorts_hashtag_button_summary_off">ハッシュタグ ボタンは表示されます</string>
@@ -785,18 +802,18 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_shorts_new_posts_button_title">「新しい投稿」ボタンを非表示</string>
<string name="revanced_hide_shorts_new_posts_button_summary_on">「新しい投稿」ボタンは表示されません</string>
<string name="revanced_hide_shorts_new_posts_button_summary_off">「新しい投稿」ボタンは表示されます</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_title">一時停止中のオーバーレイのボタンを非表示</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">一時停止中のオーバーレイのボタンは表示されません</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">一時停止中のオーバーレイのボタンは表示されます</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_title">一時停止オーバーレイのボタンを非表示</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_on">一時停止オーバーレイのボタンは表示されません</string>
<string name="revanced_hide_shorts_paused_overlay_buttons_summary_off">一時停止オーバーレイのボタンは表示されます</string>
<string name="revanced_hide_shorts_preview_comment_title">コメントのプレビューを非表示</string>
<string name="revanced_hide_shorts_preview_comment_summary_on">コメントのプレビューは表示されません</string>
<string name="revanced_hide_shorts_preview_comment_summary_off">コメントのプレビューは表示されます</string>
<string name="revanced_hide_shorts_save_sound_button_title">「音楽を保存」ボタンを非表示</string>
<string name="revanced_hide_shorts_save_sound_button_summary_on">「音楽を保存」ボタンは表示されません</string>
<string name="revanced_hide_shorts_save_sound_button_summary_off">「音楽を保存」ボタンは表示されます</string>
<string name="revanced_hide_shorts_search_suggestions_title">検索候補ボタンを非表示</string>
<string name="revanced_hide_shorts_search_suggestions_summary_on">検索候補ボタンは表示されません</string>
<string name="revanced_hide_shorts_search_suggestions_summary_off">検索候補ボタンは表示されます</string>
<string name="revanced_hide_shorts_search_suggestions_title">検索候補を非表示</string>
<string name="revanced_hide_shorts_search_suggestions_summary_on">検索候補は表示されません</string>
<string name="revanced_hide_shorts_search_suggestions_summary_off">検索候補は表示されます</string>
<string name="revanced_hide_shorts_shop_button_title">ショップ ボタンを非表示</string>
<string name="revanced_hide_shorts_shop_button_summary_on">ショップ ボタンは表示されません</string>
<string name="revanced_hide_shorts_shop_button_summary_off">ショップ ボタンは表示されます</string>
@@ -827,9 +844,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_shorts_dislike_button_title">低評価ボタンを非表示</string>
<string name="revanced_hide_shorts_dislike_button_summary_on">低評価ボタンは表示されません</string>
<string name="revanced_hide_shorts_dislike_button_summary_off">低評価ボタンは表示されます</string>
<string name="revanced_hide_shorts_comments_button_title">コメント ボタンを非表示</string>
<string name="revanced_hide_shorts_comments_button_summary_on">コメント ボタンは表示されません</string>
<string name="revanced_hide_shorts_comments_button_summary_off">コメント ボタンは表示されます</string>
<string name="revanced_hide_shorts_comments_button_title">コメントボタンを非表示</string>
<string name="revanced_hide_shorts_comments_button_summary_on">コメントボタンは表示されません</string>
<string name="revanced_hide_shorts_comments_button_summary_off">コメントボタンは表示されます</string>
<!-- 'Share' should be translated using the same localized wording YouTube displays for the button. -->
<string name="revanced_hide_shorts_share_button_title">共有ボタンを非表示</string>
<string name="revanced_hide_shorts_share_button_summary_on">共有ボタンは表示されません</string>
@@ -838,9 +855,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_shorts_remix_button_title">リミックス ボタンを非表示</string>
<string name="revanced_hide_shorts_remix_button_summary_on">リミックス ボタンは表示されません</string>
<string name="revanced_hide_shorts_remix_button_summary_off">リミックス ボタンは表示されます</string>
<string name="revanced_hide_shorts_sound_button_title">サウンド ボタンを非表示</string>
<string name="revanced_hide_shorts_sound_button_summary_on">サウンド ボタンは表示されません</string>
<string name="revanced_hide_shorts_sound_button_summary_off">サウンド ボタンは表示されます</string>
<string name="revanced_hide_shorts_sound_button_title">サウンドボタンを非表示</string>
<string name="revanced_hide_shorts_sound_button_summary_on">サウンドボタンは表示されません</string>
<string name="revanced_hide_shorts_sound_button_summary_off">サウンドボタンは表示されます</string>
<string name="revanced_hide_shorts_info_panel_title">情報パネルを非表示</string>
<string name="revanced_hide_shorts_info_panel_summary_on">情報パネルは表示されません</string>
<string name="revanced_hide_shorts_info_panel_summary_off">情報パネルは表示されます</string>
@@ -861,12 +878,12 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_hide_shorts_navigation_bar_summary_off">ナビゲーション バーは表示されます</string>
</patch>
<patch id="layout.hide.endscreensuggestion.hideEndScreenSuggestedVideoPatch">
<string name="revanced_end_screen_suggested_video_title">再生終了時の「関連動画」オーバーレイを非表示</string>
<string name="revanced_end_screen_suggested_video_summary_on">"再生終了に、「関連動画」オーバーレイはプレーヤー画面に表示されませんが、自動再生がオンの場合は次の動画が自動で再生されます
<string name="revanced_end_screen_suggested_video_title">再生終了時の「関連動画」を非表示</string>
<string name="revanced_end_screen_suggested_video_summary_on">"再生終了したときに、「関連動画」はプレーヤー画面に表示されませんが、自動再生がオンの場合は次の動画が自動で再生されます
自動再生の設定は YouTube の設定で変更できます:
設定 → 再生 → 次の動画を自動再生"</string>
<string name="revanced_end_screen_suggested_video_summary_off">再生終了時に、「関連動画」オーバーレイがプレーヤー画面に表示されます</string>
<string name="revanced_end_screen_suggested_video_summary_off">再生終了したときに「関連動画」がプレーヤー画面に表示されます</string>
</patch>
<patch id="layout.hide.relatedvideooverlay.hideRelatedVideoOverlayPatch">
<string name="revanced_hide_related_videos_overlay_title">関連動画オーバーレイを非表示</string>
@@ -880,11 +897,11 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
</patch>
<patch id="layout.panels.popup.playerPopupPanelsPatch">
<string name="revanced_hide_player_popup_panels_title">プレーヤー ポップアップ パネルを非表示</string>
<string name="revanced_hide_player_popup_panels_summary_on">動画を開いた際のプレイリストやチャット欄などのプレーヤー ポップアップ パネルは表示されません</string>
<string name="revanced_hide_player_popup_panels_summary_off">動画を開いた際のプレイリストやチャット欄などのプレーヤー ポップアップ パネルは表示されます</string>
<string name="revanced_hide_player_popup_panels_summary_on">プレーヤー ポップアップ パネルは表示されません\n\nプレイリストやチャット欄などを閉じた状態で動画を開きます</string>
<string name="revanced_hide_player_popup_panels_summary_off">プレーヤー ポップアップ パネルは表示されます\n\nプレイリストやチャット欄などを展開した状態で動画を開きます</string>
</patch>
<patch id="layout.player.fullscreen.exitFullscreenPatch">
<string name="revanced_exit_fullscreen_title">再生終了時に全画面表示を解除する</string>
<string name="revanced_exit_fullscreen_title">再生終了時に全画面表示を解除</string>
<string name="revanced_exit_fullscreen_entry_1">無効</string>
<string name="revanced_exit_fullscreen_entry_2">縦画面</string>
<string name="revanced_exit_fullscreen_entry_3">横画面</string>
@@ -896,9 +913,9 @@ GmsCore の電池の最適化を無効にしても、バッテリーの使用に
<string name="revanced_open_videos_fullscreen_portrait_summary_off">通常表示で動画を開きます</string>
</patch>
<patch id="layout.player.overlay.customPlayerOverlayOpacityResourcePatch">
<string name="revanced_player_overlay_opacity_title">オーバーレイの透明度</string>
<string name="revanced_player_overlay_opacity_title">プレーヤー オーバーレイの透明度</string>
<string name="revanced_player_overlay_opacity_summary">透明度の範囲は 0-100 で、0 が透明です</string>
<string name="revanced_player_overlay_opacity_invalid_toast">動画プレーヤー: 透明度の範囲は 0-100 です</string>
<string name="revanced_player_overlay_opacity_invalid_toast">プレーヤー: 透明度の範囲は 0-100 です</string>
</patch>
<patch id="layout.returnyoutubedislike.returnYouTubeDislikePatch">
<!-- Toast shown if network connection times out. Translations of this should not be longer than the original English or the text can be clipped and not entirely shown. -->
@@ -1190,15 +1207,15 @@ Automotive レイアウト
• フィードがトピックやチャンネルごとに分類された形で表示される"</string>
</patch>
<patch id="layout.spoofappversion.spoofAppVersionPatch">
<string name="revanced_spoof_app_version_title">アプリのバージョンを偽装する</string>
<string name="revanced_spoof_app_version_title">アプリのバージョンを偽装</string>
<string name="revanced_spoof_app_version_summary_on">アプリのバージョンは偽装されています</string>
<string name="revanced_spoof_app_version_summary_off">アプリのバージョンは偽装されていません</string>
<string name="revanced_spoof_app_version_user_dialog_message">"アプリのバージョンを YouTube の古いバージョンに偽装します。
アプリの外観と機能が変化しますが、予期せぬ副作用が発生する可能性があります。
再び無効にする場合は、UI のバグを防ぐためにアプリデータを消去することをお勧めします。"</string>
<string name="revanced_spoof_app_version_target_title">アプリバージョン</string>
再び偽装を無効にする場合は、UI のバグを防ぐためにアプリデータを消去することをお勧めします。"</string>
<string name="revanced_spoof_app_version_target_title">アプリバージョンの偽装先</string>
<string name="revanced_spoof_app_version_target_entry_1">19.35.36 - 古いショート プレーヤーのアイコンを復元</string>
<string name="revanced_spoof_app_version_target_entry_2">19.01.34 - 古いナビゲーション アイコンを復元</string>
</patch>
@@ -1229,29 +1246,29 @@ Automotive レイアウト
<string name="revanced_change_start_page_entry_watch_later">後で見る</string>
<string name="revanced_change_start_page_entry_your_clips">自分のクリップ</string>
<string name="revanced_change_start_page_always_title">スタート画面の変更を常時適用</string>
<string name="revanced_change_start_page_always_summary_on">"スタート画面の変更は常時適用されます
<string name="revanced_change_start_page_always_summary_on">"スタート画面の変更は常時適用されます
制限事項: ツールバーの [戻る] ボタンが機能しない可能性があります"</string>
<string name="revanced_change_start_page_always_summary_off">スタート画面の変更はアプリ起動時にのみ適用されます</string>
<string name="revanced_change_start_page_always_summary_off">スタート画面の変更はアプリ起動時にのみ適用されます</string>
</patch>
<patch id="layout.startupshortsreset.disableResumingShortsOnStartupPatch">
<string name="revanced_disable_resuming_shorts_player_title">ショート動画プレーヤーの再開を無効にする</string>
<string name="revanced_disable_resuming_shorts_player_summary_on">ショート動画プレーヤーは、アプリ起動時に再開されま</string>
<string name="revanced_disable_resuming_shorts_player_summary_off">ショート動画プレーヤーは、アプリの起動時に再開されません</string>
<string name="revanced_disable_resuming_shorts_player_title">ショート プレーヤーの再開を無効</string>
<string name="revanced_disable_resuming_shorts_player_summary_on">アプリ起動時にショート プレーヤーは再開されません</string>
<string name="revanced_disable_resuming_shorts_player_summary_off">アプリ起動時にショート プレーヤー再開されま</string>
</patch>
<patch id="layout.shortsplayer.shortsPlayerTypePatch">
<string name="revanced_shorts_player_type_title">ショート動画を開くプレーヤー</string>
<string name="revanced_shorts_player_type_shorts">ショート動画プレーヤー</string>
<string name="revanced_shorts_player_type_regular_player">通常の動画プレーヤー</string>
<string name="revanced_shorts_player_type_regular_player_fullscreen">通常の動画プレーヤー (全画面)</string>
<string name="revanced_shorts_player_type_shorts">ショート プレーヤー</string>
<string name="revanced_shorts_player_type_regular_player">通常のプレーヤー</string>
<string name="revanced_shorts_player_type_regular_player_fullscreen">通常のプレーヤー (全画面)</string>
</patch>
<patch id="layout.shortsautoplay.shortsAutoplayPatch">
<string name="revanced_shorts_autoplay_title">ショート動画の自動再生</string>
<string name="revanced_shorts_autoplay_summary_on">ショート動画は自動再生されます</string>
<string name="revanced_shorts_autoplay_summary_off">ショート動画はループ再生されます</string>
<string name="revanced_shorts_autoplay_background_title">ショート動画の自動再生(バックグラウンド)</string>
<string name="revanced_shorts_autoplay_background_summary_on">ショート動画はバックグラウンド自動再生されます</string>
<string name="revanced_shorts_autoplay_background_summary_off">ショート動画はバックグラウンドループ再生されます</string>
<string name="revanced_shorts_autoplay_background_summary_on">バックグラウンドのショート動画は自動再生されます</string>
<string name="revanced_shorts_autoplay_background_summary_off">バックグラウンドのショート動画はループ再生されます</string>
</patch>
<patch id="layout.miniplayer.miniplayerPatch">
<string name="revanced_miniplayer_screen_title">ミニプレーヤー</string>
@@ -1265,24 +1282,24 @@ Automotive レイアウト
<string name="revanced_miniplayer_type_entry_5">モダン 2</string>
<string name="revanced_miniplayer_type_entry_6">モダン 3</string>
<string name="revanced_miniplayer_type_entry_7">モダン 4</string>
<string name="revanced_miniplayer_rounded_corners_title">角を丸くする</string>
<string name="revanced_miniplayer_rounded_corners_title">角を有効化</string>
<string name="revanced_miniplayer_rounded_corners_summary_on">ミニプレーヤーの角は丸角です</string>
<string name="revanced_miniplayer_rounded_corners_summary_off">ミニプレーヤーの角は直角です</string>
<string name="revanced_miniplayer_double_tap_action_title">「ダブルタップとピンチでサイズ変更」を有効にする</string>
<string name="revanced_miniplayer_double_tap_action_title">「ダブルタップとピンチでサイズ変更」を有効</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">"「ダブルタップとピンチでサイズ変更」は有効です
• ダブルタップすると、ミニプレーヤーのサイズが大きくなる
• もう一度ダブルタップすると、元のサイズに戻る"</string>
<string name="revanced_miniplayer_double_tap_action_summary_off">「 ダブルタップとピンチでサイズ変更」は無効です</string>
<string name="revanced_miniplayer_drag_and_drop_title">ドラッグ&ドロップを有効にする</string>
<string name="revanced_miniplayer_drag_and_drop_title">ドラッグ&ドロップを有効</string>
<string name="revanced_miniplayer_drag_and_drop_summary_on">"ドラッグ&ドロップは有効です
ミニプレーヤーを画面の四隅に移動できます"</string>
<string name="revanced_miniplayer_drag_and_drop_summary_off">ドラッグ&ドロップは無効です</string>
<string name="revanced_miniplayer_horizontal_drag_title">横方向ドラッグ ジェスチャーを有効にする</string>
<string name="revanced_miniplayer_horizontal_drag_title">横方向ドラッグ ジェスチャーを有効</string>
<string name="revanced_miniplayer_horizontal_drag_summary_on">"横方向ドラッグ ジェスチャーは有効です
ミニプレーヤーを画面の左端または右端までドラッグすると最小化できます"</string>
ミニプレーヤーを画面の左端または右端までドラッグすると最小化されます"</string>
<string name="revanced_miniplayer_horizontal_drag_summary_off">横方向ドラッグ ジェスチャーは無効です</string>
<string name="revanced_miniplayer_hide_overlay_buttons_title">オーバーレイ ボタンを非表示</string>
<string name="revanced_miniplayer_hide_overlay_buttons_summary_on">オーバーレイ ボタンは表示されません</string>
@@ -1301,7 +1318,7 @@ Automotive レイアウト
<string name="revanced_miniplayer_opacity_invalid_toast">ミニプレーヤー: 透明度の範囲は 0-100 です</string>
</patch>
<patch id="layout.theme.themePatch">
<string name="revanced_gradient_loading_screen_title">グラデーションの読み込み画面を使用する</string>
<string name="revanced_gradient_loading_screen_title">グラデーションの読み込み画面を有効化</string>
<string name="revanced_gradient_loading_screen_summary_on">画面読み込み時にグラデーションの背景が表示されます</string>
<string name="revanced_gradient_loading_screen_summary_off">画面読み込み時に通常の背景が表示されます</string>
<string name="revanced_splash_screen_animation_style_title">スプラッシュ画面のスタイル</string>
@@ -1462,13 +1479,13 @@ Automotive レイアウト
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
<string name="revanced_playback_speed_dialog_button_title">再生速度設定ボタンを表示</string>
<string name="revanced_playback_speed_dialog_button_summary_on">ボタンがオーバーレイに表示されます。長押しすると、再生速度がデフォルトの値にリセットされます</string>
<string name="revanced_playback_speed_dialog_button_summary_off">ボタンはオーバーレイに表示されません</string>
<string name="revanced_playback_speed_dialog_button_summary_on">ボタンがプレーヤー オーバーレイに表示されます。長押しすると、再生速度がデフォルトの値にリセットされます</string>
<string name="revanced_playback_speed_dialog_button_summary_off">ボタンはプレーヤー オーバーレイに表示されません</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">画質設定ボタンを表示</string>
<string name="revanced_video_quality_dialog_button_summary_on">ボタンがオーバーレイに表示されます。長押しすると、画質がデフォルトの値にリセットされます</string>
<string name="revanced_video_quality_dialog_button_summary_off">ボタンはオーバーレイに表示されません</string>
<string name="revanced_video_quality_dialog_button_summary_on">ボタンがプレーヤー オーバーレイに表示されます。長押しすると、画質がデフォルトの値にリセットされます</string>
<string name="revanced_video_quality_dialog_button_summary_off">ボタンはプレーヤー オーバーレイに表示されません</string>
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
<string name="revanced_custom_speed_menu_title">カスタム再生速度メニュー</string>
@@ -1502,7 +1519,7 @@ Automotive レイアウト
</patch>
<patch id="video.quality.advancedVideoQualityMenuPatch">
<string name="revanced_advanced_video_quality_menu_title">画質の詳細設定メニューを表示</string>
<string name="revanced_advanced_video_quality_menu_summary_on">画質メニューとして詳細設定メニューが表示されます</string>
<string name="revanced_advanced_video_quality_menu_summary_on">詳細設定メニューが画質メニューとして表示されます</string>
<string name="revanced_advanced_video_quality_menu_summary_off">通常の画質メニューが表示されます</string>
</patch>
<patch id="interaction.seekbar.enableSlideToSeekPatch">

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -222,7 +227,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -222,7 +227,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -67,6 +67,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -84,12 +86,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -222,7 +227,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -82,6 +82,8 @@ Second \"item\" text"</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
@@ -99,12 +101,15 @@ Second \"item\" text"</string>
<!-- 'Share' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Stop ads' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<!-- 'Remix' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Download' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<!-- 'Clip' should be translated with the same localized wording that YouTube displays. -->
<!-- 'Save' should be translated with the same localized wording that YouTube displays. -->
</patch>
@@ -237,7 +242,7 @@ Second \"item\" text"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
</patch>

View File

@@ -81,7 +81,7 @@ Second \"item\" text"</string>
MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배터리 사용량에 부정적인 영향을 미치지 않습니다.
앱 배터리 최적화를 비활성화(제한 없음)하려면 '계속하기' 버튼을 누르세요."</string>
앱 배터리 최적화를 비활성화(제한 없음)하려면 '계속하기' 버튼을 탭하세요."</string>
<string name="gms_core_dialog_continue_text">계속하기</string>
</patch>
</app>
@@ -105,9 +105,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_settings_search_history_summary_off">설정 검색 기록을 표시하지 않습니다</string>
</patch>
<patch id="misc.backgroundplayback.backgroundPlaybackPatch">
<string name="revanced_shorts_disable_background_playback_title">Shorts PIP 모드 비활성화하기</string>
<string name="revanced_shorts_disable_background_playback_summary_on">Shorts PIP 모드를 비활성화합니다</string>
<string name="revanced_shorts_disable_background_playback_summary_off">Shorts PIP 모드를 활성화합니다</string>
<string name="revanced_shorts_disable_background_playback_title">Shorts 백그라운드 재생 비활성화하기</string>
<string name="revanced_shorts_disable_background_playback_summary_on">Shorts 백그라운드 재생을 비활성화합니다</string>
<string name="revanced_shorts_disable_background_playback_summary_off">Shorts 백그라운드 재생을 활성화합니다\n\n알림: Shorts 백그라운드 재생은 PIP 모드를 통해서만 사용할 수 있습니다</string>
</patch>
<patch id="misc.debugging.enableDebuggingPatch">
<string name="revanced_debug_screen_title">디버깅</string>
@@ -442,10 +442,10 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<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\n• 버튼을 눌러서 동영상 URL을 복사할 수 있습니다\n• 길게 누르면 타임스탬스가 표기된 동영상 URL이 복사됩니다</string>
<string name="revanced_copy_video_url_summary_on">버튼을 표시합니다\n\n• 버튼을 탭하여 동영상 URL을 복사할 수 있습니다\n• 길게 탭하면 타임스탬스가 표기된 동영상 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\n• 버튼을 눌러서 타임스탬프가 표기된 동영상 URL을 복사할 수 있습니다\n• 길게 누르면 타임스탬프가 표기되지 않은 동영상 URL이 복사됩니다</string>
<string name="revanced_copy_video_url_timestamp_summary_on">버튼을 표시합니다\n\n• 버튼을 탭하여 타임스탬프가 표기된 동영상 URL을 복사할 수 있습니다\n• 길게 탭하면 타임스탬프가 표기되지 않은 동영상 URL이 복사됩니다</string>
<string name="revanced_copy_video_url_timestamp_summary_off">버튼을 표시하지 않습니다</string>
</patch>
<patch id="interaction.dialog.removeViewerDiscretionDialogPatch">
@@ -454,10 +454,15 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_remove_viewer_discretion_dialog_summary_off">다음 동영상을 시청하기 전에 표시되는 시청 경고 다이얼로그를 삭제하지 않습니다:\n• 연령 제한 동영상\n• 자살 또는 자해와 관련된 동영상, etc.</string>
<string name="revanced_remove_viewer_discretion_dialog_user_dialog_message">이 설정은 다이얼로그를 자동으로 허용하기만 하며 연령 제한(성인인증 절차)을 우회할 수 없습니다.</string>
</patch>
<patch id="layout.hide.signintotv.disableSignInToTvPopupPatch">
<string name="revanced_disable_signin_to_tv_popup_title">\'TV에 로그인\' 팝업 비활성화하기</string>
<string name="revanced_disable_signin_to_tv_popup_summary_on">\'TV에 로그인\' 팝업을 비활성화합니다</string>
<string name="revanced_disable_signin_to_tv_popup_summary_off">\'TV에 로그인\' 팝업을 활성화합니다</string>
</patch>
<patch id="interaction.doubletap.disableDoubleTapActionsPatch">
<string name="revanced_disable_chapter_skip_double_tap_title">두 번 눌러서 챕터 건너뛰기 비활성화하기</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">두 번 눌러서 다음/이전 챕터로 건너뛰기가 절대 트리거될 수 없습니다</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_off">두 번 눌러서 다음/이전 챕터로 건너뛰기가 가끔 트리거될 수 있습니다</string>
<string name="revanced_disable_chapter_skip_double_tap_title">두 번 탭하여 챕터 건너뛰기 비활성화하기</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_on">두 번 탭하여 다음/이전 챕터로 건너뛰기가 절대 트리거될 수 없습니다</string>
<string name="revanced_disable_chapter_skip_double_tap_summary_off">두 번 탭하여 다음/이전 챕터로 건너뛰기가 가끔 트리거될 수 있습니다</string>
</patch>
<patch id="interaction.downloads.downloadsResourcePatch">
<string name="revanced_external_downloader_screen_title">외부 다운로드</string>
@@ -497,9 +502,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_swipe_volume_title">스와이프 제스처로 볼륨 조절 활성화하기</string>
<string name="revanced_swipe_volume_summary_on">"전체 화면 오른쪽에서 위로/아래로 스와이프하여 볼륨 조절합니다"</string>
<string name="revanced_swipe_volume_summary_off">전체 화면 오른쪽에서 위로/아래로 스와이프하여 볼륨 조절하지 않습니다</string>
<string name="revanced_swipe_press_to_engage_title">길게 눌러서 스와이프 제스처 사용하기</string>
<string name="revanced_swipe_press_to_engage_summary_on">화면을 길게 눌러서 스와이프 제스처를 사용합니다</string>
<string name="revanced_swipe_press_to_engage_summary_off">화면을 짧게 눌러서 스와이프 제스처를 사용합니다</string>
<string name="revanced_swipe_press_to_engage_title">길게 탭하여 스와이프 제스처 사용하기</string>
<string name="revanced_swipe_press_to_engage_summary_on">화면을 길게 탭하여 스와이프 제스처를 사용합니다</string>
<string name="revanced_swipe_press_to_engage_summary_off">화면을 짧게 탭하여 스와이프 제스처를 사용합니다</string>
<string name="revanced_swipe_haptic_feedback_title">진동 피드백 활성화하기</string>
<string name="revanced_swipe_haptic_feedback_summary_on">진동 피드백을 활성화합니다</string>
<string name="revanced_swipe_haptic_feedback_summary_off">진동 피드백을 비활성화합니다</string>
@@ -561,7 +566,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_hide_stop_ads_button_summary_on">광고 중지 버튼이 숨겨집니다</string>
<string name="revanced_hide_stop_ads_button_summary_off">광고 중지 버튼이 표시됩니다</string>
<!-- 'Report' should be translated with the same localized wording that YouTube displays.
This button usually appears only on live streams. -->
This button usually only shows on live streams. -->
<string name="revanced_hide_report_button_title">신고 버튼 숨기기</string>
<string name="revanced_hide_report_button_summary_on">신고 버튼이 숨겨집니다</string>
<string name="revanced_hide_report_button_summary_off">신고 버튼이 표시됩니다</string>
@@ -573,12 +578,21 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_hide_download_button_title">오프라인 저장 버튼 숨기기</string>
<string name="revanced_hide_download_button_summary_on">오프라인 저장 버튼이 숨겨집니다</string>
<string name="revanced_hide_download_button_summary_off">오프라인 저장 버튼이 표시됩니다</string>
<!-- 'Hype' should be translated with the same localized wording that YouTube displays.
This button only shows on videos uploaded by the logged in user. -->
<string name="revanced_hide_hype_button_title">Hype 버튼 숨기기</string>
<string name="revanced_hide_hype_button_summary_on">Hype 버튼이 숨겨집니다</string>
<string name="revanced_hide_hype_button_summary_off">Hype 버튼이 표시됩니다</string>
<!-- 'Promote' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_promote_button_title">프로모션 버튼 숨기기</string>
<string name="revanced_hide_promote_button_summary_on">프로모션 버튼이 숨겨집니다</string>
<string name="revanced_hide_promote_button_summary_off">프로모션 버튼이 표시됩니다</string>
<!-- 'Thanks' should be translated with the same localized wording that YouTube displays. -->
<string name="revanced_hide_thanks_button_title">Thanks 버튼 숨기기</string>
<string name="revanced_hide_thanks_button_summary_on">Thanks 버튼이 숨겨집니다</string>
<string name="revanced_hide_thanks_button_summary_off">Thanks 버튼이 표시됩니다</string>
<!-- 'Ask' should be translated with the same localized wording that YouTube displays.
This button only shows up if the user ip is from specific region such as the USA or EU. -->
This button only shows if the user ip is from specific region such as the USA or EU. -->
<string name="revanced_hide_ask_button_title">\'질문하기\' 버튼 숨기기</string>
<string name="revanced_hide_ask_button_summary_on">\'질문하기\' 버튼이 숨겨집니다</string>
<string name="revanced_hide_ask_button_summary_off">\'질문하기\' 버튼이 표시됩니다</string>
@@ -692,6 +706,9 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_hide_player_flyout_watch_in_vr_title">VR로 보기 메뉴 숨기기</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_on">VR로 보기 메뉴가 숨겨집니다</string>
<string name="revanced_hide_player_flyout_watch_in_vr_summary_off">VR로 보기 메뉴가 표시됩니다</string>
<string name="revanced_hide_player_flyout_video_quality_title">동영상 화질 메뉴 숨기기</string>
<string name="revanced_hide_player_flyout_video_quality_summary_on">동영상 화질 메뉴가 숨겨집니다</string>
<string name="revanced_hide_player_flyout_video_quality_summary_off">동영상 화질 메뉴가 표시됩니다</string>
<string name="revanced_hide_player_flyout_video_quality_footer_title">화질 설정 메뉴에서 하단 설명 숨기기</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_on">화질 설정 메뉴에서 하단 설명이 숨겨집니다</string>
<string name="revanced_hide_player_flyout_video_quality_footer_summary_off">화질 설정 메뉴에서 하단 설명이 표시됩니다</string>
@@ -928,7 +945,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_ryd_toast_on_connection_error_title">API 사용 불가 메시지 표시하기</string>
<string name="revanced_ryd_toast_on_connection_error_summary_on">ReturnYouTubeDislike를 사용할 수 없을 경우에 팝업 메시지를 표시합니다</string>
<string name="revanced_ryd_toast_on_connection_error_summary_off">ReturnYouTubeDislike를 사용할 수 없을 경우에 팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_ryd_attribution_summary">싫어요 수의 데이터는 Return YouTube Dislike API에 의해 제공됩니다. 자세한 내용을 보려면 여기를 누르세요</string>
<string name="revanced_ryd_attribution_summary">싫어요 수의 데이터는 Return YouTube Dislike API에 의해 제공됩니다. 자세한 내용을 보려면 여기를 탭하세요</string>
<!-- Statistic strings are shown in the settings only when ReVanced debug mode is enabled. Typical users will never see these. -->
<string name="revanced_ryd_statistics_category_title">이 기기의 ReturnYouTubeDislike API 사용 통계</string>
<string name="revanced_ryd_statistics_getFetchCallResponseTimeAverage_title">평균 API 응답 시간</string>
@@ -987,7 +1004,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_sb_auto_hide_skip_button_duration">건너뛰기 버튼 표시 시간</string>
<string name="revanced_sb_auto_hide_skip_button_duration_sum">건너뛰기 및 하이라이트로 건너뛰기 버튼이 자동으로 숨겨지기 전까지 표시되는 시간을 설정할 수 있습니다</string>
<string name="revanced_sb_general_skiptoast">건너뛰기 취소 메시지 표시하기</string>
<string name="revanced_sb_general_skiptoast_sum_on">구간을 자동으로 건너뛰는 경우에 팝업 메시지를 표시합니다\n\n팝업 메시지를 눌러서 건너뛰기를 취소할 수 있습니다</string>
<string name="revanced_sb_general_skiptoast_sum_on">구간을 자동으로 건너뛰는 경우에 팝업 메시지를 표시합니다\n\n팝업 메시지를 탭하여 건너뛰기를 취소할 수 있습니다</string>
<string name="revanced_sb_general_skiptoast_sum_off">팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_sb_toast_on_skip_duration">건너뛰기 취소 메시지 표시 시간</string>
<string name="revanced_sb_toast_on_skip_duration_sum">건너뛰기 취소 팝업 메시지가 표시되는 시간을 설정할 수 있습니다</string>
@@ -1009,7 +1026,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_sb_enable_create_segment_sum_on">플레이어에서 구간 추가 버튼을 표시합니다</string>
<string name="revanced_sb_enable_create_segment_sum_off">플레이어에서 구간 추가 버튼을 표시하지 않습니다</string>
<string name="revanced_sb_general_adjusting">구간 추가 시 최소 슬라이더 단위 설정</string>
<string name="revanced_sb_general_adjusting_sum">새로운 구간 추가 시에 시간 앞으로 버튼 또는 뒤로 버튼을 눌렀을 때 이동하는 최소 시간으로, 단위는 밀리초입니다</string>
<string name="revanced_sb_general_adjusting_sum">새로운 구간 추가 시에 시간 앞으로 버튼 또는 뒤로 버튼을 탭하였을 때 이동하는 최소 시간으로, 단위는 밀리초입니다</string>
<string name="revanced_sb_general_adjusting_invalid">값은 양수여야 합니다</string>
<string name="revanced_sb_guidelines_preference_title">가이드라인 보기</string>
<string name="revanced_sb_guidelines_preference_sum">구간 제출 시의 주의사항에 대한 내용을 포함하고 있습니다</string>
@@ -1143,7 +1160,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
이렇게 제출하시겠습니까?"</string>
<string name="revanced_sb_new_segment_start_is_before_end">구간의 시작 또는 끝을 잘못 설정하였습니다</string>
<string name="revanced_sb_new_segment_mark_locations_first">먼저 재생바에서 시작 지점과 끝 지점을 표시하세요</string>
<string name="revanced_sb_new_segment_preview_segment_first">구간 미리 보기 버튼을 눌러서 설정한 구간이 정상적으로 건너뛰기가 되는지 확인하세요</string>
<string name="revanced_sb_new_segment_preview_segment_first">구간 미리 보기 버튼을 탭하여 설정한 구간이 정상적으로 건너뛰기가 되는지 확인하세요</string>
<string name="revanced_sb_new_segment_edit_by_hand_title">직접 시간 구간 편집하기</string>
<string name="revanced_sb_new_segment_edit_by_hand_content">구간의 시작이나 끝을 편집하시겠습니까?</string>
<string name="revanced_sb_new_segment_edit_by_hand_parse_error">잘못된 시간 형식입니다</string>
@@ -1153,16 +1170,16 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_sb_stats_loading">불러오는 중 ...</string>
<string name="revanced_sb_stats_sb_disabled">SponsorBlock을 비활성화하였습니다</string>
<string name="revanced_sb_stats_username">사용자 이름: &lt;b&gt;%s&lt;/b&gt;</string>
<string name="revanced_sb_stats_username_change">사용자 이름을 변경하려면 여기를 누르세요</string>
<string name="revanced_sb_stats_username_change">사용자 이름을 변경하려면 여기를 탭하세요</string>
<string name="revanced_sb_stats_username_change_unknown_error">사용자 이름을 변경할 수 없습니다. 상태 코드: %1$d %2$s</string>
<string name="revanced_sb_stats_username_changed">사용자 이름을 성공적으로 변경하였습니다</string>
<string name="revanced_sb_stats_reputation">사용자의 평판: &lt;b&gt;%.2f&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions">제출 횟수: &lt;b&gt;%s&lt;/b&gt;</string>
<string name="revanced_sb_stats_submissions_sum">구간을 보려면 여기를 누르세요</string>
<string name="revanced_sb_stats_submissions_sum">구간을 보려면 여기를 탭하세요</string>
<string name="revanced_sb_stats_saved_zero">SponsorBlock 리더보드</string>
<string name="revanced_sb_stats_saved">다른 분들이 &lt;b&gt;%s&lt;/b&gt;개의 구간을 건너뛸 수 있게 해주셨습니다</string>
<string name="revanced_sb_stats_saved_sum_zero">글로벌 기록 또는 상위 기여자를 확인하려면 여기를 누르세요</string>
<string name="revanced_sb_stats_saved_sum">이는 &lt;b&gt;%s&lt;/b&gt;에 해당됩니다.&lt;br&gt;리더보드를 보려면 여기를 누르세요</string>
<string name="revanced_sb_stats_saved_sum_zero">글로벌 기록 또는 상위 기여자를 확인하려면 여기를 탭하세요</string>
<string name="revanced_sb_stats_saved_sum">이는 &lt;b&gt;%s&lt;/b&gt;에 해당됩니다.&lt;br&gt;리더보드를 보려면 여기를 탭하세요</string>
<string name="revanced_sb_stats_self_saved">구간 &lt;b&gt;%s&lt;/b&gt;개를 건너뛰었습니다</string>
<string name="revanced_sb_stats_self_saved_sum">이는 &lt;b&gt;%s&lt;/b&gt;에 해당됩니다</string>
<string name="revanced_sb_stats_self_saved_reset_title">건너뛴 횟수 기록을 초기화하시겠습니까?</string>
@@ -1172,11 +1189,11 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_sb_color_opacity_label">불투명도:</string>
<string name="revanced_sb_color_dot_label">색상:</string>
<string name="revanced_sb_about_title">정보</string>
<string name="revanced_sb_about_api_summary">건너뛸 구간의 데이터는 SponsorBlock API에 의해 제공됩니다. 자세한 내용을 보려면 여기를 누르세요</string>
<string name="revanced_sb_about_api_summary">건너뛸 구간의 데이터는 SponsorBlock API에 의해 제공됩니다. 자세한 내용을 보려면 여기를 탭하세요</string>
</patch>
<patch id="layout.formfactor.changeFormFactorPatch">
<string name="revanced_change_form_factor_title">레이아웃 폼 팩터 변경하기</string>
<string name="revanced_change_form_factor_entry_1">기 기본값 사용</string>
<string name="revanced_change_form_factor_entry_1">본값</string>
<string name="revanced_change_form_factor_entry_2"></string>
<string name="revanced_change_form_factor_entry_3">태블릿</string>
<string name="revanced_change_form_factor_entry_4">오토모티브</string>
@@ -1195,7 +1212,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_spoof_app_version_summary_off">앱 버전을 변경하지 않습니다</string>
<string name="revanced_spoof_app_version_user_dialog_message">"앱 버전을 YouTube 이전 앱 버전으로 변경합니다.
이 경우 앱 레이아웃과 기능이 변경되지만 알려지지 않은 문제점이 발생할 수 있습니다.
이 경우 앱 레이아웃과 기능이 변경되지만 알려지지 않은 부작용이 발생할 수 있습니다.
나중에 이 설정을 비활성화하면 앱 레이아웃 버그를 방지하기 위해 앱 데이터를 지우는 것이 좋습니다."</string>
<string name="revanced_spoof_app_version_target_title">변경할 앱 버전</string>
@@ -1204,7 +1221,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
</patch>
<patch id="layout.startpage.changeStartPagePatch">
<string name="revanced_change_start_page_title">앱 시작 페이지 변경하기</string>
<string name="revanced_change_start_page_entry_default">홈 (기본값)</string>
<string name="revanced_change_start_page_entry_default">기본값</string>
<string name="revanced_change_start_page_entry_all_subscriptions">모든 구독 채널</string>
<string name="revanced_change_start_page_entry_browse">채널 둘러보기</string>
<string name="revanced_change_start_page_entry_courses">학습 프로그램</string>
@@ -1250,16 +1267,16 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_shorts_autoplay_title">Shorts 자동재생</string>
<string name="revanced_shorts_autoplay_summary_on">Shorts가 자동넘김됩니다</string>
<string name="revanced_shorts_autoplay_summary_off">Shorts가 반복재생됩니다</string>
<string name="revanced_shorts_autoplay_background_title">Shorts PIP 모드 자동넘김</string>
<string name="revanced_shorts_autoplay_background_summary_on">PIP 모드에서 Shorts가 자동넘김됩니다</string>
<string name="revanced_shorts_autoplay_background_summary_off">PIP 모드에서 Shorts가 반복재생됩니다</string>
<string name="revanced_shorts_autoplay_background_title">Shorts 백그라운드 재생 자동넘김</string>
<string name="revanced_shorts_autoplay_background_summary_on">Shorts 백그라운드 재생이 자동넘김됩니다</string>
<string name="revanced_shorts_autoplay_background_summary_off">Shorts 백그라운드 재생이 반복재생됩니다</string>
</patch>
<patch id="layout.miniplayer.miniplayerPatch">
<string name="revanced_miniplayer_screen_title">미니 플레이어</string>
<string name="revanced_miniplayer_screen_summary">앱 내에서 최소화된 플레이어의 스타일을 변경할 수 있습니다</string>
<string name="revanced_miniplayer_type_title">미니 플레이어 유형</string>
<string name="revanced_miniplayer_type_entry_0">사용 안함</string>
<string name="revanced_miniplayer_type_entry_1">기 기본값 사용</string>
<string name="revanced_miniplayer_type_entry_1">본값</string>
<string name="revanced_miniplayer_type_entry_2">최소화</string>
<string name="revanced_miniplayer_type_entry_3">태블릿</string>
<string name="revanced_miniplayer_type_entry_4">모던 스타일 1</string>
@@ -1269,12 +1286,12 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
<string name="revanced_miniplayer_rounded_corners_title">둥근 모서리 활성화하기</string>
<string name="revanced_miniplayer_rounded_corners_summary_on">모서리를 둥글게 활성화합니다</string>
<string name="revanced_miniplayer_rounded_corners_summary_off">모서리를 각지게 활성화합니다</string>
<string name="revanced_miniplayer_double_tap_action_title">\'두 번 누르기\' 및 \'핀치하여 크기 조정\' 활성화하기</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">"'두 번 누르기 동작' 및 '핀치하여 크기 조정'을 활성화합니다
<string name="revanced_miniplayer_double_tap_action_title">\'두 번 탭하기\' 및 \'핀치하여 크기 조정\' 활성화하기</string>
<string name="revanced_miniplayer_double_tap_action_summary_on">"'두 번 탭하기 동작' 및 '핀치하여 크기 조정'을 활성화합니다
• 두 번 눌러서 미니 플레이어 크기를 늘릴 수 있습니다
• 다시 두 번 누르면 원래 크기로 복원됩니다"</string>
<string name="revanced_miniplayer_double_tap_action_summary_off">\'두 번 누르기 동작\' 및 \'핀치하여 크기 조정\'을 비활성화합니다</string>
• 두 번 탭하여 미니 플레이어 크기를 늘릴 수 있습니다
• 다시 두 번 탭하면 원래 크기로 복원됩니다"</string>
<string name="revanced_miniplayer_double_tap_action_summary_off">\'두 번 탭하기 동작\' 및 \'핀치하여 크기 조정\'을 비활성화합니다</string>
<string name="revanced_miniplayer_drag_and_drop_title">드래그 &amp; 드롭 활성화하기</string>
<string name="revanced_miniplayer_drag_and_drop_summary_on">"드래그 &amp; 드롭을 활성화합니다
@@ -1354,7 +1371,7 @@ MicroG 앱 배터리 최적화를 비활성화(제한 없음)하더라도, 배
이 설정을 활성화하면 동영상 URL이 API 서버로 전송되며, 다른 데이터는 전송되지 않습니다. 동영상에 DeArrow 썸네일이 없는 경우에는 원본 썸네일 또는 스틸 컷 썸네일이 표시됩니다
DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
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>
@@ -1395,11 +1412,11 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
<string name="revanced_spoof_device_dimensions_title">기기 크기 정보 변경하기</string>
<string name="revanced_spoof_device_dimensions_summary_on">"기기 크기 정보를 변경합니다
이 설정을 활성화하면 더 높은 화질 동영상 값을 잠금 해제할 수 있지만, 동영상 재생이 끊기거나 배터리 수명이 단축될 수 있으며, 알려지지 않은 문제점도 발생할 수 있습니다"</string>
이 설정을 활성화하면 더 높은 화질 동영상 값을 잠금 해제할 수 있지만, 동영상 재생이 끊기거나 배터리 수명이 단축될 수 있으며, 알려지지 않은 부작용도 발생할 수 있습니다"</string>
<string name="revanced_spoof_device_dimensions_summary_off">"기기 크기 정보를 변경하지 않습니다
이 설정을 활성화하면 더 높은 화질 동영상 값을 잠금 해제할 수 있습니다"</string>
<string name="revanced_spoof_device_dimensions_user_dialog_message">이 설정을 활성화하면 동영상 재생이 끊기거나 배터리 수명이 단축되고 알려지지 않은 문제점이 발생할 수 있습니다.</string>
<string name="revanced_spoof_device_dimensions_user_dialog_message">이 설정을 활성화하면 동영상 재생이 끊기거나 배터리 수명이 단축되고 알려지지 않은 부작용이 발생할 수 있습니다.</string>
</patch>
<patch id="misc.gms.gmsCoreSupportResourcePatch">
<string name="microg_settings_title">GmsCore 설정</string>
@@ -1450,16 +1467,16 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
<!-- Translations should use the same text as 'revanced_custom_playback_speeds_auto'. -->
<string name="revanced_video_quality_default_entry_1">자동</string>
<string name="revanced_remember_video_quality_last_selected_title">동영상 화질 저장 활성화하기</string>
<string name="revanced_remember_video_quality_last_selected_summary_on">동영상 화질 값 변경 때마다 기본 동영상 화질으로 저장합니다</string>
<string name="revanced_remember_video_quality_last_selected_summary_off">동영상 화질 값 변경 때마다 기본 동영상 화질으로 저장하지 않습니다</string>
<string name="revanced_remember_video_quality_last_selected_summary_on">동영상 화질 값 변경 때마다 기본 동영상 화질으로 저장합니다</string>
<string name="revanced_remember_video_quality_last_selected_summary_off">동영상 화질 값 변경 때마다 기본 동영상 화질으로 저장하지 않습니다</string>
<string name="revanced_remember_video_quality_last_selected_toast_title">동영상 화질 변경 메시지 표시하기</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">기본 동영상 화질 값 변경 때마다 팝업 메시지를 표시합니다</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">기본 동영상 화질 값 변경 때마다 팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_on">기본 동영상 화질 값 변경 때마다 팝업 메시지를 표시합니다</string>
<string name="revanced_remember_video_quality_last_selected_toast_summary_off">기본 동영상 화질 값 변경 때마다 팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_video_quality_default_wifi_title">Wi-Fi 이용 시 기본 동영상 화질</string>
<string name="revanced_video_quality_default_mobile_title">모바일 네트워크 이용 시 기본 동영상 화질</string>
<string name="revanced_remember_shorts_quality_last_selected_title">Shorts 화질 저장 활성화하기</string>
<string name="revanced_remember_shorts_quality_last_selected_summary_on">Shorts 화질 값 변경 때마다 기본 Shorts 화질으로 저장합니다</string>
<string name="revanced_remember_shorts_quality_last_selected_summary_off">Shorts 화질 값 변경 때마다 기본 Shorts 화질으로 저장하지 않습니다</string>
<string name="revanced_remember_shorts_quality_last_selected_summary_on">Shorts 화질 값 변경 때마다 기본 Shorts 화질으로 저장합니다</string>
<string name="revanced_remember_shorts_quality_last_selected_summary_off">Shorts 화질 값 변경 때마다 기본 Shorts 화질으로 저장하지 않습니다</string>
<string name="revanced_shorts_quality_default_wifi_title">Wi-Fi 이용 시 기본 Shorts 화질</string>
<string name="revanced_shorts_quality_default_mobile_title">모바일 네트워크 이용 시 기본 Shorts 화질</string>
<string name="revanced_remember_video_quality_mobile">모바일 네트워크</string>
@@ -1469,12 +1486,12 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
</patch>
<patch id="video.speed.button.playbackSpeedButtonPatch">
<string name="revanced_playback_speed_dialog_button_title">동영상 재생 속도 다이얼로그 버튼 표시하기</string>
<string name="revanced_playback_speed_dialog_button_summary_on">버튼을 표시합니다\n\n• 버튼을 길게 누르면 동영상 재생 속도가 기본값으로 초기화됩니다</string>
<string name="revanced_playback_speed_dialog_button_summary_on">버튼을 표시합니다\n\n• 버튼을 길게 탭하면 동영상 재생 속도가 기본값으로 초기화됩니다</string>
<string name="revanced_playback_speed_dialog_button_summary_off">버튼을 표시하지 않습니다</string>
</patch>
<patch id="video.quality.button.videoQualityButtonPatch">
<patch id="video.quality.button.videoQualityDialogButtonPatch">
<string name="revanced_video_quality_dialog_button_title">동영상 화질 버튼 표시하기</string>
<string name="revanced_video_quality_dialog_button_summary_on">버튼을 표시합니다\n\n• 버튼을 길게 누르면 화질이 기본값으로 초기화됩니다</string>
<string name="revanced_video_quality_dialog_button_summary_on">버튼을 표시합니다\n\n• 버튼을 길게 탭하면 화질이 기본값으로 초기화됩니다</string>
<string name="revanced_video_quality_dialog_button_summary_off">버튼을 표시하지 않습니다</string>
</patch>
<patch id="video.speed.custom.customPlaybackSpeedPatch">
@@ -1489,16 +1506,16 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
<string name="revanced_custom_playback_speeds_invalid">재생 속도 값은 %s배속보다 작아야 합니다</string>
<string name="revanced_custom_playback_speeds_parse_exception">잘못된 사용자 정의 재생 속도 값입니다</string>
<string name="revanced_custom_playback_speeds_auto">자동</string>
<string name="revanced_speed_tap_and_hold_title">사용자 정의 길게 눌러서 동영상 재생 속도</string>
<string name="revanced_speed_tap_and_hold_summary">화면을 길게 누르는 동안에 변경되는 동영상 재생 속도를 0-8 사이에서 지정할 수 있습니다</string>
<string name="revanced_speed_tap_and_hold_title">사용자 정의 길게 탭하여 동영상 재생 속도</string>
<string name="revanced_speed_tap_and_hold_summary">화면을 길게 탭하는 동안에 변경되는 동영상 재생 속도를 0-8 사이에서 지정할 수 있습니다</string>
</patch>
<patch id="video.speed.remember.rememberPlaybackSpeedPatch">
<string name="revanced_remember_playback_speed_last_selected_title">동영상 재생 속도 저장 활성화하기</string>
<string name="revanced_remember_playback_speed_last_selected_summary_on">동영상 재생 속도 값 변경 때마다 기본 동영상 재생 속도로 저장합니다</string>
<string name="revanced_remember_playback_speed_last_selected_summary_off">동영상 재생 속도 값 변경 때마다 기본 동영상 재생 속도로 저장하지 않습니다</string>
<string name="revanced_remember_playback_speed_last_selected_summary_on">동영상 재생 속도 값 변경 때마다 기본 동영상 재생 속도로 저장합니다</string>
<string name="revanced_remember_playback_speed_last_selected_summary_off">동영상 재생 속도 값 변경 때마다 기본 동영상 재생 속도로 저장하지 않습니다</string>
<string name="revanced_remember_playback_speed_last_selected_toast_title">동영상 재생 속도 변경 메시지 표시하기</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_on">기본 동영상 재생 속도 값 변경 때마다 팝업 메시지를 표시합니다</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">기본 동영상 재생 속도 값 변경 때마다 팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_on">기본 동영상 재생 속도 값 변경 때마다 팝업 메시지를 표시합니다</string>
<string name="revanced_remember_playback_speed_last_selected_toast_summary_off">기본 동영상 재생 속도 값 변경 때마다 팝업 메시지를 표시하지 않습니다</string>
<string name="revanced_playback_speed_default_title">기본 동영상 재생 속도</string>
<string name="revanced_remember_playback_speed_toast">기본 동영상 재생 속도 값을 %s 로 변경하였습니다</string>
</patch>
@@ -1532,11 +1549,11 @@ DeArrow에 대해 자세히 알아보려면 여기를 누르세요"</string>
<string name="revanced_spoof_video_streams_ios_force_avc_user_dialog_message">"이 설정를 활성화하면 배터리 수명이 향상되고, 동영상 재생 끊김 문제가 해결될 수 있습니다.
AVC의 최대 화질 값은 1080p이고, OPUS 코덱을 사용불가 및 HDR 동영상을 재생할 수 없으며, 동영상을 재생했을 경우에는 VP9 또는 AV1보다 더 많은 모바일 데이터를 사용되오니 주의하세요."</string>
<string name="revanced_spoof_video_streams_about_ios_tv_title">iOS 변경에 대한 알려진 문제점</string>
<string name="revanced_spoof_video_streams_about_ios_tv_title">iOS 변경에 따른 부작용</string>
<string name="revanced_spoof_video_streams_about_ios_tv_summary">"• 영화 또는 유료 동영상이 재생되지 않을 수 있습니다
• 안정적인 볼륨을 사용할 수 없습니다
• 동영상이 1초 일찍 종료될 수 있습니다"</string>
<string name="revanced_spoof_video_streams_about_android_title">Android 변경에 대한 알려진 문제점</string>
<string name="revanced_spoof_video_streams_about_android_title">Android 변경에 따른 부작용</string>
<string name="revanced_spoof_video_streams_about_android_summary">"• 오디오 트랙 메뉴가 표시되지 않습니다
• 안정적인 볼륨을 사용할 수 없습니다
• 원본 오디오 트랙를 강제로 활성화할 수 없습니다"</string>

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