Compare commits
4 commits
main
...
gesture-up
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dc9ede68eb | ||
|
|
0d3dfbe2c7 | ||
|
|
b9edf2bccd | ||
|
|
bbee22218a |
28 changed files with 200 additions and 504 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -2,6 +2,6 @@
|
|||
.theos/
|
||||
packages/
|
||||
tmp/
|
||||
Tweaks/YTLite/*
|
||||
!Tweaks/YTLite/.gitkeep
|
||||
Resources/
|
||||
Tweaks/Cercube/*
|
||||
!Tweaks/Cercube/.gitkeep
|
||||
Resources/
|
||||
|
|
@ -9,8 +9,9 @@
|
|||
|
||||

|
||||
[](https://developer.apple.com/iphone/index.action)
|
||||
<a href="https://github.com/YTLitePlus/YTLitePlus/commit"><img src="https://custom-icon-badges.demolab.com/github/last-commit/Balackburn/YTLitePlus?style=flat&color=black&labelColor=black&logo=history&logoColor=white&label=Last commit" alt="Badge"></img></a>
|
||||
<a href="https://github.com/YTLitePlus/YTLitePlus/releases/latest"><img src="https://custom-icon-badges.demolab.com/github/v/release/Balackburn/YTLitePlus?labelColor=black&style=flat&color=black&label=Latest%20release" alt="Badge"></img></a>
|
||||

|
||||
<a href="https://github.com/Balackburn/YTLitePlus/commit"><img src="https://custom-icon-badges.demolab.com/github/last-commit/Balackburn/YTLitePlus?style=flat&color=black&labelColor=black&logo=history&logoColor=white&label=Last commit" alt="Badge"></img></a>
|
||||
<a href="https://github.com/Balackburn/YTLitePlus/releases/latest"><img src="https://custom-icon-badges.demolab.com/github/v/release/Balackburn/YTLitePlus?labelColor=black&style=flat&color=black&label=Latest%20release" alt="Badge"></img></a>
|
||||
|
||||
# Table of Contents
|
||||
<a href="#credits"><img src="https://raw.githubusercontent.com/YTLitePlus/Assets/main/Github/Buttons/TableOfContents/Credits.png" width="170"></a>
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ static BOOL customContrastMode() {
|
|||
|
||||
UIColor *lcmHexColor;
|
||||
|
||||
%group gLowContrastMode // Low Contrast Mode v1.6.0 (Compatible with only YouTube v16.46.5-v17.38.10)
|
||||
%group gLowContrastMode // Low Contrast Mode v1.4.3 (Compatible with only YouTube v16.46.5-v17.38.10)
|
||||
%hook UIColor
|
||||
+ (UIColor *)whiteColor { // Dark Theme Color
|
||||
return [UIColor colorWithRed: 0.56 green: 0.56 blue: 0.56 alpha: 1.00];
|
||||
|
|
@ -39,53 +39,32 @@ UIColor *lcmHexColor;
|
|||
%end
|
||||
%hook YTCommonColorPalette
|
||||
- (UIColor *)textPrimary {
|
||||
NSLog(@"LowContrastMode: textPrimary called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)textSecondary {
|
||||
NSLog(@"LowContrastMode: textSecondary called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayTextPrimary {
|
||||
NSLog(@"LowContrastMode: overlayTextPrimary called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayTextSecondary {
|
||||
NSLog(@"LowContrastMode: overlayTextSecondary called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)iconActive {
|
||||
NSLog(@"LowContrastMode: iconActive called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)iconActiveOther {
|
||||
NSLog(@"LowContrastMode: iconActiveOther called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)brandIconActive {
|
||||
NSLog(@"LowContrastMode: brandIconActive called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)staticBrandWhite {
|
||||
NSLog(@"LowContrastMode: staticBrandWhite called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconActiveOther {
|
||||
NSLog(@"LowContrastMode: overlayIconActiveOther called");
|
||||
return self.pageStyle == 1 ? [UIColor whiteColor] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconInactive {
|
||||
NSLog(@"LowContrastMode: overlayIconInactive called");
|
||||
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.7] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayIconDisabled {
|
||||
NSLog(@"LowContrastMode: overlayIconDisabled called");
|
||||
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.3] : %orig;
|
||||
}
|
||||
- (UIColor *)overlayFilledButtonActive {
|
||||
NSLog(@"LowContrastMode: overlayFilledButtonActive called");
|
||||
return self.pageStyle == 1 ? [[UIColor whiteColor] colorWithAlphaComponent:0.2] : %orig;
|
||||
}
|
||||
%end
|
||||
%hook YTColor
|
||||
+ (UIColor *)white2 {
|
||||
|
|
|
|||
|
|
@ -395,6 +395,8 @@ static const NSInteger YTLiteSection = 789;
|
|||
sensitivityPicker,
|
||||
// Toggle for haptic feedback
|
||||
BASIC_SWITCH(LOC(@"PLAYER_GESTURES_HAPTIC_FEEDBACK"), nil, @"playerGesturesHapticFeedback_enabled"),
|
||||
// Toggle for alternate seek method
|
||||
BASIC_SWITCH(LOC(@"PLAYER_GESTURES_SEEK_ALTERNATE"), LOC(@"PLAYER_GESTURES_SEEK_ALTERNATE_DESC"), @"gestureSeekAlternate_enabled"),
|
||||
];
|
||||
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"PLAYER_GESTURES_TITLE") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
||||
[settingsViewController pushViewController:picker];
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 15b061bf414cf29fd0d4e0e124e9e2ccb99326b0
|
||||
Subproject commit 2aa3086244d296cfb3c8e782ef09c76316452a9d
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 6cae20899a26a0f007d19aadf386a8bae9861aeb
|
||||
Subproject commit 92365118eddecd4b4fecf26aca0c1faa5395d322
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 95fdebbb772c8cbcab2093afe10136d9890524ae
|
||||
Subproject commit 8c163a80a47aa265df3ee2cd55066979617c97e0
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 794171d7785bc7f974e278b39ce6e82eb5693273
|
||||
Subproject commit 436024cb4921775b32d514b8c58d8dbcec2bc066
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit b4e1bc798149d68029c89510948600be2986968b
|
||||
Subproject commit 5c0dcc3df0eba9f1f9028e1183f41e5b6e9a6434
|
||||
|
|
@ -1 +1 @@
|
|||
Subproject commit 6690ab42d855ea19d9a24cd99b0375910ea772ca
|
||||
Subproject commit bd1887e436d2c6cc35db1eede8ebbe1bee1fb78f
|
||||
14
YTLitePlus.h
14
YTLitePlus.h
|
|
@ -49,6 +49,7 @@
|
|||
#import "Tweaks/YouTubeHeader/YTPageStyleController.h"
|
||||
#import "Tweaks/YouTubeHeader/YTRightNavigationButtons.h"
|
||||
#import "Tweaks/YouTubeHeader/YTInlinePlayerBarView.h"
|
||||
#import "Tweaks/YouTubeHeader/YTMainAppVideoPlayerOverlayView.h"
|
||||
|
||||
#define LOC(x) [tweakBundle localizedStringForKey:x value:nil table:nil]
|
||||
#define YT_BUNDLE_ID @"com.google.ios.youtube"
|
||||
|
|
@ -165,7 +166,7 @@ typedef NS_ENUM(NSUInteger, GestureSection) {
|
|||
@end
|
||||
@interface YTFineScrubberFilmstripCollectionView : UICollectionView
|
||||
@end
|
||||
@interface YTPlayerViewController (YTLitePlus) <UIGestureRecognizerDelegate>
|
||||
@interface YTPlayerViewController (YTLitePlusGestures) <UIGestureRecognizerDelegate>
|
||||
@property (nonatomic, retain) UIPanGestureRecognizer *YTLitePlusPanGesture;
|
||||
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
|
||||
@end
|
||||
|
|
@ -174,19 +175,24 @@ typedef NS_ENUM(NSUInteger, GestureSection) {
|
|||
@interface MPVolumeController : NSObject
|
||||
@property (nonatomic, assign, readwrite) float volumeValue;
|
||||
@end
|
||||
@interface YTPlayerBarController (YTLitePlus)
|
||||
@interface YTPlayerBarController (YTLitePlusGestures)
|
||||
- (void)didScrub:(UIPanGestureRecognizer *)gestureRecognizer;
|
||||
- (void)startScrubbing;
|
||||
- (void)didScrubToPoint:(CGPoint)point;
|
||||
- (void)endScrubbingForSeekSource:(int)seekSource;
|
||||
@end
|
||||
@interface YTMainAppVideoPlayerOverlayViewController (YTLitePlus)
|
||||
@interface YTMainAppVideoPlayerOverlayViewController (YTLitePlusGestures)
|
||||
@property (nonatomic, strong, readwrite) YTPlayerBarController *playerBarController;
|
||||
@property YTMainAppVideoPlayerOverlayView *videoPlayerOverlayView;
|
||||
@end
|
||||
@interface YTInlinePlayerBarContainerView (YTLitePlus)
|
||||
@interface YTMainAppVideoPlayerOverlayView (YTLitePlusGestures)
|
||||
@property YTMainAppControlsOverlayView *controlsOverlayView;
|
||||
@end
|
||||
@interface YTInlinePlayerBarContainerView (YTLitePlusGestures)
|
||||
@property UIPanGestureRecognizer *scrubGestureRecognizer;
|
||||
@property (nonatomic, strong, readwrite) YTFineScrubberFilmstripView *fineScrubberFilmstrip;
|
||||
- (CGFloat)scrubXForScrubRange:(CGFloat)scrubRange;
|
||||
- (CGFloat)scrubRangeForScrubX:(CGFloat)scrubX;
|
||||
@end
|
||||
|
||||
// Hide Collapse Button - @arichornlover
|
||||
|
|
|
|||
190
YTLitePlus.xm
190
YTLitePlus.xm
|
|
@ -170,6 +170,82 @@ BOOL isSelf() {
|
|||
%end
|
||||
%end
|
||||
|
||||
// Disable YouTube Plus incompatibility warning popup - @bhackel
|
||||
%hook UIViewController
|
||||
|
||||
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {
|
||||
if ([NSStringFromClass([viewControllerToPresent class]) isEqualToString:@"HelperVC"]) {
|
||||
// show a toast
|
||||
[[%c(GOOHUDManagerInternal) sharedInstance] showMessageMainThread:[%c(YTHUDMessage) messageWithText:@"Bypassing Popup"]];
|
||||
// look for UIWindows of the sus type and hide them
|
||||
NSArray<UIWindow *> *windows = [UIApplication sharedApplication].windows;
|
||||
for (UIWindow *window in windows) {
|
||||
// Check the class name of the window
|
||||
if ([NSStringFromClass([window class]) isEqualToString:@"YTMainWindow"]) {
|
||||
NSLog(@"bhackel Skipping UIWindow with class YTMainWindow: %@", window);
|
||||
window.userInteractionEnabled = YES;
|
||||
continue;
|
||||
}
|
||||
NSLog(@"bhackel Yeeting UIWindow %@", window);
|
||||
window.hidden = YES;
|
||||
window.userInteractionEnabled = NO;
|
||||
}
|
||||
}
|
||||
|
||||
%orig(viewControllerToPresent, flag, completion);
|
||||
}
|
||||
|
||||
%end
|
||||
|
||||
|
||||
%hook UIView
|
||||
- (void)willMoveToWindow:(UIWindow *)newWindow {
|
||||
// yeet yeet
|
||||
UIResponder *responder = self;
|
||||
while (responder) {
|
||||
responder = [responder nextResponder];
|
||||
if ([responder isKindOfClass:NSClassFromString(@"HelperVC")]) {
|
||||
// View belongs to HelperVC, now proceed with getting the UIButton
|
||||
NSLog(@"bhackel Found HelperVC (1/5): %@", responder);
|
||||
|
||||
if ([self.subviews count] > 4 && [[self.subviews objectAtIndex:4] isKindOfClass:[UIButton class]]) {
|
||||
NSLog(@"bhackel Found UIButton (2/5): %@", [self.subviews objectAtIndex:4]);
|
||||
UIButton *button = [self.subviews objectAtIndex:4];
|
||||
|
||||
// Access the _targetActions ivar using KVC (Key-Value Coding)
|
||||
NSArray *targetActions = [button valueForKey:@"_targetActions"];
|
||||
|
||||
if ([targetActions count] > 0) {
|
||||
NSLog(@"bhackel Found targetActions (3/5): %@", targetActions);
|
||||
id controlTargetAction = [targetActions objectAtIndex:0];
|
||||
|
||||
// Use KVC to get the _actionHandler (which is of type UIAction)
|
||||
UIAction *actionHandler = [controlTargetAction valueForKey:@"_actionHandler"];
|
||||
|
||||
if (actionHandler && [actionHandler isKindOfClass:[UIAction class]]) {
|
||||
NSLog(@"bhackel Found actionHandler (4/5): %@", actionHandler);
|
||||
// Access the handler property of UIAction
|
||||
void (^handlerBlock)(void) = [actionHandler valueForKey:@"handler"];
|
||||
|
||||
// Invoke the handler block
|
||||
if (handlerBlock) {
|
||||
NSLog(@"bhackel Found handlerBlock (5/5): %@", handlerBlock);
|
||||
handlerBlock(); // Call the block
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Prevent the view from being added to the window
|
||||
[self removeFromSuperview];
|
||||
return; // Exit early to prevent further processing
|
||||
}
|
||||
}
|
||||
|
||||
%orig(newWindow); // Call the original method if the view doesn't belong to HelperVC
|
||||
}
|
||||
%end
|
||||
|
||||
// A/B flags
|
||||
%hook YTColdConfig
|
||||
- (BOOL)respectDeviceCaptionSetting { return NO; } // YouRememberCaption: https://poomsmart.github.io/repo/depictions/youremembercaption.html
|
||||
|
|
@ -636,7 +712,12 @@ BOOL isTabSelected = NO;
|
|||
playerViewController.YTLitePlusPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:playerViewController
|
||||
action:@selector(YTLitePlusHandlePanGesture:)];
|
||||
playerViewController.YTLitePlusPanGesture.delegate = playerViewController;
|
||||
[playerViewController.playerView addGestureRecognizer:playerViewController.YTLitePlusPanGesture];
|
||||
// Place the gesture on the Main App Controls Overlay View, which scales with the video player
|
||||
// when, for instance, opening the Live Chat side panel in fullscreen
|
||||
YTMainAppVideoPlayerOverlayViewController *mainVideoPlayerController = (YTMainAppVideoPlayerOverlayViewController *)playerViewController.childViewControllers.firstObject;
|
||||
YTMainAppVideoPlayerOverlayView *mainVideoPlayerView = mainVideoPlayerController.videoPlayerOverlayView;
|
||||
YTMainAppControlsOverlayView *controlsOverlayView = mainVideoPlayerView.controlsOverlayView;
|
||||
[controlsOverlayView addGestureRecognizer:playerViewController.YTLitePlusPanGesture];
|
||||
}
|
||||
}
|
||||
%orig;
|
||||
|
|
@ -673,10 +754,8 @@ BOOL isTabSelected = NO;
|
|||
static CGFloat deadzoneStartingXTranslation;
|
||||
// Variable to track the X translation of the pan gesture after exiting the deadzone
|
||||
static CGFloat adjustedTranslationX;
|
||||
// Variable used to smooth out the X translation
|
||||
static CGFloat smoothedTranslationX = 0;
|
||||
// Constant for the filter constant to change responsiveness
|
||||
// static const CGFloat filterConstant = 0.1;
|
||||
// Variable to cancel gesture if deadzone is not exited after a certain time
|
||||
static NSDate *gestureStartTime;
|
||||
// Constant for the deadzone radius that can be changed in the settings
|
||||
static CGFloat deadzoneRadius = (CGFloat)GetFloat(@"playerGesturesDeadzone");
|
||||
// Constant for the sensitivity factor that can be changed in the settings
|
||||
|
|
@ -687,6 +766,7 @@ BOOL isTabSelected = NO;
|
|||
// Get objects that should only be initialized once
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
// Get objects for adjusting Volume
|
||||
volumeView = [[MPVolumeView alloc] init];
|
||||
for (UIView *view in volumeView.subviews) {
|
||||
if ([view isKindOfClass:[UISlider class]]) {
|
||||
|
|
@ -694,6 +774,7 @@ BOOL isTabSelected = NO;
|
|||
break;
|
||||
}
|
||||
}
|
||||
// Initialize the haptic feedback generator
|
||||
feedbackGenerator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleMedium];
|
||||
});
|
||||
// Get objects used to seek nicely in the video player
|
||||
|
|
@ -715,9 +796,11 @@ BOOL isTabSelected = NO;
|
|||
float volumeSensitivityFactor = 3.0;
|
||||
float newVolume = initialVolume + ((translationX / 1000.0) * sensitivityFactor * volumeSensitivityFactor);
|
||||
newVolume = fmaxf(fminf(newVolume, 1.0), 0.0);
|
||||
// Improve smoothness - ignore if the volume is within 0.01 of the current volume
|
||||
// Improve smoothness - ignore if the volume is within a certain distance of the current volume,
|
||||
// but also allow it to change to 100% or to 0% when close to the edges
|
||||
CGFloat currentVolume = [[AVAudioSession sharedInstance] outputVolume];
|
||||
if (fabs(newVolume - currentVolume) < 0.01 && currentVolume > 0.01 && currentVolume < 0.99) {
|
||||
CGFloat changeThresh = 0.02;
|
||||
if ((fabs(newVolume - currentVolume) < changeThresh) && (currentVolume > changeThresh) && (currentVolume < (1-changeThresh))) {
|
||||
return;
|
||||
}
|
||||
// https://stackoverflow.com/questions/50737943/how-to-change-volume-programmatically-on-ios-11-4
|
||||
|
|
@ -736,18 +819,23 @@ BOOL isTabSelected = NO;
|
|||
// Calculate the new seek X position
|
||||
CGFloat sensitivityFactor = 1; // Adjust this value to make seeking more/less sensitive
|
||||
CGFloat newSeekXPosition = initialTimeXPosition + translationX * sensitivityFactor;
|
||||
// Create a CGPoint using this new X position
|
||||
CGPoint newSeekPoint = CGPointMake(newSeekXPosition, 0);
|
||||
// Send this to a seek method in the player bar controller
|
||||
[playerBarController didScrubToPoint:newSeekPoint];
|
||||
// Decide between seek methods
|
||||
if (IS_ENABLED(@"gestureSeekAlternate_enabled")) {
|
||||
// Alternate seek method used by uYou
|
||||
// Convert the new X position back to a fraction of the total time
|
||||
CGFloat newVideoFraction = [playerBar scrubRangeForScrubX:newSeekXPosition];
|
||||
// Calculate the new video time based on this fraction
|
||||
CGFloat newVideoTime = newVideoFraction * totalTime;
|
||||
[self seekToTime:newVideoTime];
|
||||
} else {
|
||||
// Vanilla YouTube seek method used when dragging the seek bar
|
||||
// Create a CGPoint using this new X position
|
||||
CGPoint newSeekPoint = CGPointMake(newSeekXPosition, 0);
|
||||
// Send this to a seek method in the player bar controller
|
||||
[playerBarController didScrubToPoint:newSeekPoint];
|
||||
}
|
||||
};
|
||||
|
||||
// Helper function to smooth out the X translation
|
||||
// CGFloat (^applyLowPassFilter)(CGFloat) = ^(CGFloat newTranslation) {
|
||||
// smoothedTranslationX = filterConstant * newTranslation + (1 - filterConstant) * smoothedTranslationX;
|
||||
// return smoothedTranslationX;
|
||||
// };
|
||||
|
||||
/***** Helper functions for running the selected gesture *****/
|
||||
// Helper function to run any setup for the selected gesture mode
|
||||
void (^runSelectedGestureSetup)(NSString*) = ^(NSString *sectionKey) {
|
||||
|
|
@ -767,14 +855,9 @@ BOOL isTabSelected = NO;
|
|||
[playerBarController startScrubbing];
|
||||
break;
|
||||
case GestureModeDisabled:
|
||||
// Do nothing if the gesture is disabled
|
||||
break;
|
||||
// Fall through
|
||||
default:
|
||||
// Show an alert if the gesture mode is invalid
|
||||
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Invalid Gesture Mode" message:@"Please report this bug." preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
|
||||
[alertController addAction:okAction];
|
||||
[self presentViewController:alertController animated:YES completion:nil];
|
||||
// Do nothing
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
|
@ -795,14 +878,10 @@ BOOL isTabSelected = NO;
|
|||
adjustSeek(adjustedTranslationX, initialTime);
|
||||
break;
|
||||
case GestureModeDisabled:
|
||||
// Do nothing if the gesture is disabled
|
||||
// Fall through
|
||||
break;
|
||||
default:
|
||||
// Show an alert if the gesture mode is invalid
|
||||
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Invalid Gesture Mode" message:@"Please report this bug." preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
|
||||
[alertController addAction:okAction];
|
||||
[self presentViewController:alertController animated:YES completion:nil];
|
||||
// Do nothing
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
|
@ -821,13 +900,9 @@ BOOL isTabSelected = NO;
|
|||
[playerBarController endScrubbingForSeekSource:0];
|
||||
break;
|
||||
case GestureModeDisabled:
|
||||
break;
|
||||
// Fall through
|
||||
default:
|
||||
// Show an alert if the gesture mode is invalid
|
||||
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Invalid Gesture Mode" message:@"Please report this bug." preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil];
|
||||
[alertController addAction:okAction];
|
||||
[self presentViewController:alertController animated:YES completion:nil];
|
||||
// Do nothing
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
|
@ -835,6 +910,7 @@ BOOL isTabSelected = NO;
|
|||
|
||||
// Handle gesture based on current gesture state
|
||||
if (panGestureRecognizer.state == UIGestureRecognizerStateBegan) {
|
||||
NSLog(@"bhackel - Gesture began");
|
||||
// Get the gesture's start position
|
||||
startLocation = [panGestureRecognizer locationInView:self.view];
|
||||
CGFloat viewHeight = self.view.bounds.size.height;
|
||||
|
|
@ -857,25 +933,32 @@ BOOL isTabSelected = NO;
|
|||
}
|
||||
// Deactive the activity flag
|
||||
isValidHorizontalPan = NO;
|
||||
// Cancel this gesture if it has not activated after 1 second
|
||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||
if (!isValidHorizontalPan && panGestureRecognizer.state != UIGestureRecognizerStateEnded) {
|
||||
// Cancel the gesture by setting its state to UIGestureRecognizerStateCancelled
|
||||
panGestureRecognizer.state = UIGestureRecognizerStateCancelled;
|
||||
}
|
||||
});
|
||||
// Store current time for gesture timeout
|
||||
gestureStartTime = [NSDate date];
|
||||
}
|
||||
|
||||
// Handle changed gesture state by activating the gesture once it has exited the deadzone,
|
||||
// and then adjusting the player based on the selected gesture mode
|
||||
if (panGestureRecognizer.state == UIGestureRecognizerStateChanged) {
|
||||
NSLog(@"bhackel - Gesture changed");
|
||||
// Determine if the gesture is predominantly horizontal
|
||||
CGPoint translation = [panGestureRecognizer translationInView:self.view];
|
||||
if (!isValidHorizontalPan) {
|
||||
NSLog(@"bhackel - Gesture not yet valid");
|
||||
// Timeout
|
||||
// Check how much time has passed since the gesture started
|
||||
NSTimeInterval timeElapsed = [[NSDate date] timeIntervalSinceDate:gestureStartTime];
|
||||
// If more than 1 second has passed and the gesture hasn't activated, cancel the gesture
|
||||
if (timeElapsed >= 1.0 && !isValidHorizontalPan) {
|
||||
panGestureRecognizer.state = UIGestureRecognizerStateCancelled;
|
||||
}
|
||||
|
||||
// Horizontal and deadzone check
|
||||
if (fabs(translation.x) > fabs(translation.y)) {
|
||||
// Check if the touch has moved outside the deadzone
|
||||
CGFloat distanceFromStart = hypot(translation.x, translation.y);
|
||||
if (distanceFromStart < deadzoneRadius) {
|
||||
NSLog(@"bhackel - Gesture within deadzone");
|
||||
// If within the deadzone, don't activate the pan gesture
|
||||
return;
|
||||
}
|
||||
|
|
@ -883,7 +966,6 @@ BOOL isTabSelected = NO;
|
|||
isValidHorizontalPan = YES;
|
||||
deadzoneStartingXTranslation = translation.x;
|
||||
adjustedTranslationX = 0;
|
||||
smoothedTranslationX = 0;
|
||||
// Run the setup for the selected gesture mode
|
||||
switch (gestureSection) {
|
||||
case GestureSectionTop:
|
||||
|
|
@ -914,6 +996,7 @@ BOOL isTabSelected = NO;
|
|||
|
||||
// Handle the gesture based on the identified section
|
||||
if (isValidHorizontalPan) {
|
||||
NSLog(@"bhackel - Gesture valid");
|
||||
// Adjust the X translation based on the value hit after exiting the deadzone
|
||||
adjustedTranslationX = translation.x - deadzoneStartingXTranslation;
|
||||
// Smooth the translation value
|
||||
|
|
@ -961,25 +1044,6 @@ BOOL isTabSelected = NO;
|
|||
// allow the pan gesture to be recognized simultaneously with other gestures
|
||||
%new
|
||||
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
|
||||
if ([gestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]] && [otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]]) {
|
||||
// Do not allow this gesture to activate with the normal seek bar gesture
|
||||
YTMainAppVideoPlayerOverlayViewController *mainVideoPlayerController = (YTMainAppVideoPlayerOverlayViewController *)self.childViewControllers.firstObject;
|
||||
YTPlayerBarController *playerBarController = mainVideoPlayerController.playerBarController;
|
||||
YTInlinePlayerBarContainerView *playerBar = playerBarController.playerBar;
|
||||
if (otherGestureRecognizer == playerBar.scrubGestureRecognizer) {
|
||||
return NO;
|
||||
}
|
||||
// Do not allow this gesture to activate with the fine scrubber gesture
|
||||
YTFineScrubberFilmstripView *fineScrubberFilmstrip = playerBar.fineScrubberFilmstrip;
|
||||
if (!fineScrubberFilmstrip) {
|
||||
return YES;
|
||||
}
|
||||
YTFineScrubberFilmstripCollectionView *filmstripCollectionView = [fineScrubberFilmstrip valueForKey:@"_filmstripCollectionView"];
|
||||
if (filmstripCollectionView && otherGestureRecognizer == filmstripCollectionView.panGestureRecognizer) {
|
||||
return NO;
|
||||
}
|
||||
|
||||
}
|
||||
return YES;
|
||||
}
|
||||
%end
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@
|
|||
"MIDDLE_SECTION" = "Middle Section";
|
||||
"BOTTOM_SECTION" = "Bottom Section";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Enable Haptic Feedback";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "خيارات تراكب ضوابط الفيديو";
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@
|
|||
"MIDDLE_SECTION" = "Middle Section";
|
||||
"BOTTOM_SECTION" = "Bottom Section";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Enable Haptic Feedback";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Опции за контрол на видеото";
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@
|
|||
"MIDDLE_SECTION" = "Middle Section";
|
||||
"BOTTOM_SECTION" = "Bottom Section";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Enable Haptic Feedback";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Overlay-Optionen für Videosteuerungen";
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@
|
|||
"MIDDLE_SECTION" = "Middle Section";
|
||||
"BOTTOM_SECTION" = "Bottom Section";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Enable Haptic Feedback";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Video Controls Overlay Options";
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@
|
|||
"MIDDLE_SECTION" = "Sección Media";
|
||||
"BOTTOM_SECTION" = "Sección Inferior";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Habilitar Retroalimentación Háptica";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Opciones de superposición de controles de vídeo";
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@
|
|||
"MIDDLE_SECTION" = "Middle Section";
|
||||
"BOTTOM_SECTION" = "Bottom Section";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Enable Haptic Feedback";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Options de l'overlay des contrôles vidéo";
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@
|
|||
"MIDDLE_SECTION" = "Middle Section";
|
||||
"BOTTOM_SECTION" = "Bottom Section";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Enable Haptic Feedback";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "動画コントロールオーバーレイの設定";
|
||||
|
|
|
|||
|
|
@ -1,190 +0,0 @@
|
|||
// Settings
|
||||
"VERSION" = "YTLitePlus 버전: %@";
|
||||
"VERSION_CHECK" = "업데이트를 확인하려면 탭하세요!";
|
||||
|
||||
"COPY_SETTINGS" = "설정 복사";
|
||||
"COPY_SETTINGS_DESC" = "현재 설정을 모두 클립보드에 복사합니다";
|
||||
"PASTE_SETTINGS" = "설정 붙여넣기";
|
||||
"PASTE_SETTINGS_DESC" = "클립보드에서 설정을 붙여넣고 적용합니다";
|
||||
"PASTE_SETTINGS_ALERT" = "클립보드에서 설정을 적용할까요?";
|
||||
"EXPORT_SETTINGS" = "설정 내보내기";
|
||||
"EXPORT_SETTINGS_DESC" = "현재 설정을 .txt 파일로 내보냅니다";
|
||||
"IMPORT_SETTINGS" = "설정 가져오기";
|
||||
"IMPORT_SETTINGS_DESC" = "설정(.txt)을 가져오려면 누르세요";
|
||||
"REPLACE_COPY_AND_PASTE_BUTTONS" = "'설정 복사' & '설정 붙여넣기' 버튼 교체";
|
||||
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "버튼을 '설정 내보내기'와 '설정 가져오기'로 교체합니다";
|
||||
|
||||
"VIDEO_PLAYER" = "동영상 플레이어 (베타)";
|
||||
"VIDEO_PLAYER_DESC" = "다운로드한 동영상을 Apple 기본 플레이어에서 재생하기";
|
||||
|
||||
// Player Gestures
|
||||
"PLAYER_GESTURES_TOGGLE" = "플레이어 제스처 활성화";
|
||||
"VOLUME" = "음량";
|
||||
"BRIGHTNESS" = "밝기";
|
||||
"SEEK" = "탐색";
|
||||
"DISABLED" = "비활성화됨";
|
||||
"DEADZONE" = "데드존";
|
||||
"DEADZONE_DESC" = "제스처 인식을 위한 최소 이동 거리";
|
||||
"SENSITIVITY" = "민감도";
|
||||
"SENSITIVITY_DESC" = "음량 및 밝기 제스처의 민감도 조정";
|
||||
"PLAYER_GESTURES_TITLE" = "플레이어 제스처";
|
||||
"PLAYER_GESTURES_DESC" = "플레이어 좌우 스와이프 제스처 설정";
|
||||
"TOP_SECTION" = "상단";
|
||||
"MIDDLE_SECTION" = "중앙";
|
||||
"BOTTOM_SECTION" = "하단";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "햅틱 피드백 활성화";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "동영상 컨트롤 오버레이";
|
||||
|
||||
"ENABLE_SHARE_BUTTON" = "공유 버튼 활성화";
|
||||
"ENABLE_SHARE_BUTTON_DESC" = "동영상 컨트롤 오버레이에 공유 버튼 활성화";
|
||||
|
||||
"ENABLE_SAVE_TO_PLAYLIST_BUTTON" = "'저장' 버튼 활성화";
|
||||
"ENABLE_SAVE_TO_PLAYLIST_BUTTON_DESC" = "동영상 컨트롤 오버레이에 '저장' 버튼 활성화";
|
||||
|
||||
"HIDE_SHADOW_OVERLAY_BUTTONS" = "그림자 오버레이 버튼 숨기기";
|
||||
"HIDE_SHADOW_OVERLAY_BUTTONS_DESC" = "재생/일시정지, 이전, 다음, 앞으로/뒤로 버튼의 그림자 오버레이를 숨깁니다.";
|
||||
|
||||
"HIDE_RIGHT_PANEL" = "전체화면 모드에서 오른쪽 패널 숨기기";
|
||||
"HIDE_RIGHT_PANEL_DESC" = "앱 재시작이 필요합니다.";
|
||||
|
||||
"HIDE_HEATWAVES" = "히트 웨이브 숨기기";
|
||||
"HIDE_HEATWAVES_DESC" = "동영상 플레이어에서 히트 웨이브를 숨깁니다. 앱 재시작이 필요합니다.";
|
||||
|
||||
"DISABLE_AMBIENT_PORTRAIT" = "앰비언트 모드 비활성화 (세로)";
|
||||
"DISABLE_AMBIENT_PORTRAIT_DESC" = "동영상 제목 주변의 조명 효과를 비활성화합니다.";
|
||||
|
||||
"DISABLE_AMBIENT_FULLSCREEN" = "앰비언트 모드 비활성화 (전체화면)";
|
||||
"DISABLE_AMBIENT_FULLSCREEN_DESC" = "동영상 주변의 조명 효과를 비활성화합니다.";
|
||||
|
||||
"FULLSCREEN_TO_THE_RIGHT" = "오른쪽으로 전체화면 전환";
|
||||
"FULLSCREEN_TO_THE_RIGHT_DESC" = "항상 기기 하단이 오른쪽에 있는 전체화면으로 전환합니다.";
|
||||
|
||||
"SEEK_ANYWHERE" = "아무 곳에서나 밀어서 탐색";
|
||||
"SEEK_ANYWHERE_DESC" = "동영상에서 드래그하여 탐색합니다. You must disable YTLite - Hold to speed";
|
||||
|
||||
"ENABLE_TAP_TO_SEEK" = "탭해서 탐색 활성화";
|
||||
"ENABLE_TAP_TO_SEEK_DESC" = "재생 바에서 한 번만 탭해서 원하는 위치로 이동합니다.";
|
||||
|
||||
"DISABLE_PULL_TO_FULLSCREEN_GESTURE" = "확대하여 전체화면 비활성화";
|
||||
"DISABLE_PULL_TO_FULLSCREEN_GESTURE_DESC" = "확대하여 세로 전체화면으로 전환하는 제스처를 비활성화합니다. 가로 동영상에만 적용됩니다.";
|
||||
|
||||
"ALWAYS_USE_REMAINING_TIME" = "항상 남은 시간 표시";
|
||||
"ALWAYS_USE_REMAINING_TIME_DESC" = "재생 바에서 남은 시간을 기본 설정으로 표시하도록 변경합니다.";
|
||||
|
||||
"DISABLE_TOGGLE_TIME_REMAINING" = "남은 시간 토글 비활성화";
|
||||
"DISABLE_TOGGLE_TIME_REMAINING_DESC" = "경과 시간과 남은 시간을 변경하는 기능을 비활성화합니다. 항상 남은 시간을 표시하는 다른 설정과 함께 사용하세요.";
|
||||
|
||||
"DISABLE_ENGAGEMENT_OVERLAY" = "전체화면 오버레이 비활성화";
|
||||
"DISABLE_ENGAGEMENT_OVERLAY_DESC" = "전체화면에서 위로 스와이프 제스처와 추천 동영상 목록을 비활성화합니다.";
|
||||
|
||||
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER" = "플레이어 하단 댓글 미리보기 숨기기";
|
||||
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER_DESC" = "댓글 구역에서 댓글 미리보기를 숨깁니다.";
|
||||
|
||||
"HIDE_AUTOPLAY_MINI_PREVIEW" = "자동 재생 미리보기 숨기기";
|
||||
"HIDE_AUTOPLAY_MINI_PREVIEW_DESC" = "전체화면에서 제목 근처의 추천 동영상 상자를 숨깁니다.";
|
||||
|
||||
"HIDE_HUD_MESSAGES" = "HUD 메세지 숨기기";
|
||||
"HIDE_HUD_MESSAGES_DESC" = "특정 동작 시 표시되는 메시지를 숨깁니다. (예: 자막 켜짐/꺼짐)";
|
||||
|
||||
"HIDE_COLLAPSE_BUTTON" = "축소 버튼 숨기기";
|
||||
"HIDE_COLLAPSE_BUTTON_DESC" = "동영상 플레이어 왼쪽 상단에 표시된 화살표 축소 버튼을 숨깁니다.";
|
||||
|
||||
"HIDE_SPEED_TOAST" = "재생 속도 팝업 숨기기";
|
||||
"HIDE_SPEED_TOAST_DESC" = "플레이어를 홀드할 때 나타나는 2배속 팝업을 숨깁니다.";
|
||||
|
||||
// App settings overlay options
|
||||
"APP_SETTINGS_OVERLAY_OPTIONS" = "설정 오버레이";
|
||||
|
||||
"HIDE_ACCOUNT_SECTION" = "\"계정 전환\" 숨기기";
|
||||
"HIDE_AUTOPLAY_SECTION" = "\"자동 재생\" 숨기기";
|
||||
"HIDE_TRYNEWFEATURES_SECTION" = "\"새 실험 기능 사용해보기\" 숨기기";
|
||||
"HIDE_VIDEOQUALITYPREFERENCES_SECTION" = "\"동영상 화질 환경설정\" 숨기기";
|
||||
"HIDE_NOTIFICATIONS_SECTION" = "\"알림\" 숨기기";
|
||||
"HIDE_MANAGEALLHISTORY_SECTION" = "\"전체 기록 관리\" 숨기기";
|
||||
"HIDE_YOURDATAINYOUTUBE_SECTION" = "\"YouTube의 내 데이터\" 숨기기";
|
||||
"HIDE_PRIVACY_SECTION" = "\"공개 설정\" 숨기기";
|
||||
"HIDE_LIVECHAT_SECTION" = "\"실시간 채팅\" 숨기기";
|
||||
|
||||
// Theme
|
||||
"THEME_OPTIONS" = "어두운 테마 설정";
|
||||
|
||||
"OLED_DARK_THEME" = "OLED 다크 테마";
|
||||
"OLED_DARK_THEME_2" = "OLED 다크 테마";
|
||||
"OLED_DARK_THEME_DESC" = "진정한 다크 테마입니다. 일부 상황에서는 올바르게 작동하지 않을 수 있습니다. 이 옵션을 켜거나 끈 후에는 앱을 재시작해야 합니다.";
|
||||
|
||||
"OLD_DARK_THEME" = "구형 어두운 테마";
|
||||
"OLD_DARK_THEME_DESC" = "예전 유튜브의 어두운 테마(회색 테마). 앱 재시작이 필요합니다.";
|
||||
|
||||
"DEFAULT_THEME" = "기본";
|
||||
"DEFAULT_THEME_DESC" = "유튜브의 기본 어두운 테마입니다. 앱 재시작이 필요합니다.";
|
||||
|
||||
"OLED_KEYBOARD" = "OLED 키보드";
|
||||
"OLED_KEYBOARD_DESC" = "일부 상황에서 올바르게 작동하지 않을 수 있습니다. 앱 재시작이 필요합니다.";
|
||||
|
||||
"LOW_CONTRAST_MODE" = "저대비 모드";
|
||||
"LOW_CONTRAST_MODE_DESC" = "텍스트와 버튼의 대비를 낮춥니다. 예전 유튜브 인터페이스처럼 보일 수 있습니다. 앱 재시작이 필요합니다.";
|
||||
"LCM_SELECTOR" = "저대비 모드 선택";
|
||||
"DEFAULT_LOWCONTRASTMODE" = "(기본) 저대비 모드";
|
||||
"CUSTOM_LOWCONTRASTMODE" = "(사용자 지정 색상) 저대비 모드";
|
||||
|
||||
// Miscellaneous
|
||||
"MISCELLANEOUS" = "기타";
|
||||
|
||||
"PLAYBACK_IN_FEEDS" = "피드에서 재생";
|
||||
"PLAYBACK_IN_FEEDS_ALWAYS_ON" = "항상 사용";
|
||||
"PLAYBACK_IN_FEEDS_WIFI_ONLY" = "Wi-Fi 전용";
|
||||
"PLAYBACK_IN_FEEDS_OFF" = "사용 안함";
|
||||
|
||||
"NEW_SETTINGS_UI" = "새로운 설정 UI";
|
||||
"NEW_SETTINGS_UI_DESC" = "새로운 그룹화된 설정 UI를 사용합니다. 일부 설정이 숨겨질 수 있습니다.";
|
||||
|
||||
"ENABLE_YT_STARTUP_ANIMATION" = "유튜브 시작 애니메이션 활성화";
|
||||
"ENABLE_YT_STARTUP_ANIMATION_DESC" = "";
|
||||
|
||||
"HIDE_MODERN_INTERFACE" = "새로운 인터페이스 비활성화 (YTNoModernUI)";
|
||||
"HIDE_MODERN_INTERFACE_DESC" = "17.38.10 이전의 전통적인 디자인으로 되돌립니다. 일부 둥근 요소, 앰비언트 모드 및 새로운 기능도 제거됩니다. 앱 재시작이 필요합니다.";
|
||||
|
||||
"IPAD_LAYOUT" = "iPad 레이아웃";
|
||||
"IPAD_LAYOUT_DESC" = "iPhone/iPod에서 iPad 레이아웃을 사용하려면 이 옵션을 켜세요. 앱 재시작이 필요합니다.";
|
||||
|
||||
"IPHONE_LAYOUT" = "iPhone 레이아웃";
|
||||
"IPHONE_LAYOUT_DESC" = "iPad에서 iPhone 레이아웃을 사용하려면 이 옵션을 켜세요. 앱 재시작이 필요합니다.";
|
||||
|
||||
"CAST_CONFIRM" = "TV로 시청하기 전 확인 (YTCastConfirm)";
|
||||
"CAST_CONFIRM_DESC" = "실수로 TV에 영상을 띄우지 않도록 시청 전에 확인 메세지를 표시합니다.";
|
||||
"CASTING" = "TV로 시청하기";
|
||||
"MSG_ARE_YOU_SURE" = "TV로 시청하시겠습니까?";
|
||||
"MSG_YES" = "확인";
|
||||
"MSG_CANCEL" = "취소";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "새로운 미니 플레이어 스타일 (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "앱 재시작이 필요합니다.";
|
||||
|
||||
"HIDE_CAST_BUTTON" = "TV로 시청하기 버튼 숨기기";
|
||||
"HIDE_CAST_BUTTON_DESC" = "앱 재시작이 필요합니다.";
|
||||
|
||||
"VIDEO_PLAYER_BUTTON" = "동영상 플레이어 버튼";
|
||||
"VIDEO_PLAYER_BUTTON_DESC" = "다운로드한 동영상를 Apple 기본 플레이어에서 열 수 있는 버튼을 네비게이션 바에 표시합니다.";
|
||||
|
||||
"HIDE_SPONSORBLOCK_BUTTON" = "네비게이션 바에서 iSponsorBlock 버튼 숨기기";
|
||||
"HIDE_SPONSORBLOCK_BUTTON_DESC" = "";
|
||||
|
||||
"HIDE_HOME_TAB" = "홈 탭 숨기기";
|
||||
"HIDE_HOME_TAB_DESC" = "모든 탭을 숨길 때는 주의하세요";
|
||||
|
||||
"FIX_CASTING" = "TV로 시청하기 수정";
|
||||
"FIX_CASTING_DESC" = "일부 AB 플래그를 변경하여 TV로 시청하기 문제를 해결합니다.";
|
||||
|
||||
"ENABLE_FLEX" = "FLEX 활성화";
|
||||
"ENABLE_FLEX_DESC" = "디버깅을 위해 FLEX를 활성화합니다(권장하지 않음). 이 동작에 대해 잘 아는 경우에만 사용하세요.";
|
||||
|
||||
// Version Spoofer
|
||||
"APP_VERSION_SPOOFER_LITE" = "앱 버전 변조 활성화 (Lite)";
|
||||
"APP_VERSION_SPOOFER_LITE_DESC" = "버전 변조(Lite)를 사용하려면 이 옵션을 켜고 아래에서 원하는 버전을 선택하세요. 앱 재시작이 필요합니다.";
|
||||
"VERSION_SPOOFER_TITLE" = "버전 변조 선택";
|
||||
|
||||
// Other Localization
|
||||
"APP_RESTART_DESC" = "앱 재시작이 필요합니다.";
|
||||
"CHANGE_APP_ICON" = "앱 아이콘 변경";
|
||||
|
|
@ -33,6 +33,8 @@
|
|||
"MIDDLE_SECTION" = "Seção do Meio";
|
||||
"BOTTOM_SECTION" = "Seção Inferior";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Habilitar Feedback Tátil";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Opções de Sobreposição de Controles de Vídeo";
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@
|
|||
"MIDDLE_SECTION" = "Middle Section";
|
||||
"BOTTOM_SECTION" = "Bottom Section";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Enable Haptic Feedback";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Opțiuni Overlay Controale Video";
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@
|
|||
"MIDDLE_SECTION" = "Middle Section";
|
||||
"BOTTOM_SECTION" = "Bottom Section";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Enable Haptic Feedback";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Video Controls Overlay Options";
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ https://github.com/PoomSmart/Return-YouTube-Dislikes/tree/main/layout/Library/Ap
|
|||
"MIDDLE_SECTION" = "Middle Section";
|
||||
"BOTTOM_SECTION" = "Bottom Section";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Enable Haptic Feedback";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Video Controls Overlay Options";
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@
|
|||
"COPY_SETTINGS_DESC" = "Tüm mevcut ayarları panoya kopyala";
|
||||
"PASTE_SETTINGS" = "Ayarları Yapıştır";
|
||||
"PASTE_SETTINGS_DESC" = "Panodaki ayarları yapıştır ve uygula";
|
||||
"PASTE_SETTINGS_ALERT" = "Panodan ayarları uygulamak istiyor musun?";
|
||||
"PASTE_SETTINGS_ALERT" = "Apply settings from clipboard?";
|
||||
"EXPORT_SETTINGS" = "Ayarları Dışa Aktar";
|
||||
"EXPORT_SETTINGS_DESC" = "Tüm mevcut ayarları bir .txt dosyasına dışa aktarır";
|
||||
"IMPORT_SETTINGS" = "Ayarları İçe Aktar";
|
||||
|
|
@ -14,25 +14,27 @@
|
|||
"REPLACE_COPY_AND_PASTE_BUTTONS" = "'Ayarları Kopyala' ve 'Ayarları Yapıştır' Düğmelerini Değiştir";
|
||||
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "Düğmeleri 'Ayarları Dışa Aktar' ve 'Ayarları İçe Aktar' ile değiştirir";
|
||||
|
||||
"VIDEO_PLAYER" = "Video Oynatıcı (Beta)";
|
||||
"VIDEO_PLAYER_DESC" = "İndirilen bir videoyu Apple oynatıcısında aç";
|
||||
"VIDEO_PLAYER" = "Video Player (Beta)";
|
||||
"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
|
||||
|
||||
// Player Gestures
|
||||
"PLAYER_GESTURES_TOGGLE" = "Oynatıcı Hareketlerini Etkinleştir";
|
||||
"VOLUME" = "Ses";
|
||||
"BRIGHTNESS" = "Parlaklık";
|
||||
"SEEK" = "Arama";
|
||||
"DISABLED" = "Devre Dışı";
|
||||
"DEADZONE" = "Ölü Bölge";
|
||||
"DEADZONE_DESC" = "Bir hareketin tanınması için minimum mesafe";
|
||||
"SENSITIVITY" = "Hassasiyet";
|
||||
"SENSITIVITY_DESC" = "Ses ve parlaklık hareketleri için çarpan";
|
||||
"PLAYER_GESTURES_TITLE" = "Oynatıcı Hareketleri";
|
||||
"PLAYER_GESTURES_DESC" = "Oynatıcı için yatay kaydırma hareketlerini yapılandır";
|
||||
"TOP_SECTION" = "Üst Bölüm";
|
||||
"MIDDLE_SECTION" = "Orta Bölüm";
|
||||
"BOTTOM_SECTION" = "Alt Bölüm";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Haptik(titreşim) Geri Bildirimi Etkinleştir";
|
||||
"PLAYER_GESTURES_TOGGLE" = "Enable Player Gestures";
|
||||
"VOLUME" = "Volume";
|
||||
"BRIGHTNESS" = "Brightness";
|
||||
"SEEK" = "Seek";
|
||||
"DISABLED" = "Disabled";
|
||||
"DEADZONE" = "Deadzone";
|
||||
"DEADZONE_DESC" = "Minimum distance to move before a gesture is recognized";
|
||||
"SENSITIVITY" = "Sensitivity";
|
||||
"SENSITIVITY_DESC" = "Multiplier on volume and brightness gestures";
|
||||
"PLAYER_GESTURES_TITLE" = "Player Gestures";
|
||||
"PLAYER_GESTURES_DESC" = "Configure horizontal pan gestures for the player";
|
||||
"TOP_SECTION" = "Top Section";
|
||||
"MIDDLE_SECTION" = "Middle Section";
|
||||
"BOTTOM_SECTION" = "Bottom Section";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Enable Haptic Feedback";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Video Kontrol Seç.";
|
||||
|
|
@ -165,8 +167,8 @@
|
|||
"HIDE_CAST_BUTTON" = "Yayınla düğmesini gizle";
|
||||
"HIDE_CAST_BUTTON_DESC" = "Yeniden başlatılmalı.";
|
||||
|
||||
"VIDEO_PLAYER_BUTTON" = "Video Oynatıcı Butonu";
|
||||
"VIDEO_PLAYER_BUTTON_DESC" = "İndirilen videoları Apple oynatıcısında açmak için gezinme çubuğunda bir buton göster";
|
||||
"VIDEO_PLAYER_BUTTON" = "Video Player Button";
|
||||
"VIDEO_PLAYER_BUTTON_DESC" = "Show a button in the navigation bar to open downloaded videos in the Apple player";
|
||||
|
||||
"HIDE_SPONSORBLOCK_BUTTON" = "Gezinme çubuğunda iSponsorBlock düğmesini gizle";
|
||||
"HIDE_SPONSORBLOCK_BUTTON_DESC" = "";
|
||||
|
|
|
|||
|
|
@ -33,6 +33,8 @@
|
|||
"MIDDLE_SECTION" = "Phần giữa";
|
||||
"BOTTOM_SECTION" = "Phần dưới";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Bật phản hồi xúc giác";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Lớp phủ video";
|
||||
|
|
|
|||
|
|
@ -1,194 +0,0 @@
|
|||
// Settings
|
||||
"VERSION" = "YTLitePlus版本: %@";
|
||||
"VERSION_CHECK" = "点击检查更新!";
|
||||
|
||||
"COPY_SETTINGS" = "复制设置";
|
||||
"COPY_SETTINGS_DESC" = "将当前所有设置复制到剪贴板";
|
||||
"PASTE_SETTINGS" = "粘贴设置";
|
||||
"PASTE_SETTINGS_DESC" = "从剪贴板粘贴设置并应用";
|
||||
"PASTE_SETTINGS_ALERT" = "应用剪贴板中的设置?";
|
||||
"EXPORT_SETTINGS" = "导出设置";
|
||||
"EXPORT_SETTINGS_DESC" = "将当前所有设置导出为txt文件";
|
||||
"IMPORT_SETTINGS" = "导入设置";
|
||||
"IMPORT_SETTINGS_DESC" = "从txt文件导入设置";
|
||||
"REPLACE_COPY_AND_PASTE_BUTTONS" = "替换「复制设置」和「粘贴设置」按钮";
|
||||
"REPLACE_COPY_AND_PASTE_BUTTONS_DESC" = "将按钮替换为「导出设置」和「导入设置」";
|
||||
|
||||
"VIDEO_PLAYER" = "视频播放器(测试版)";
|
||||
"VIDEO_PLAYER_DESC" = "使用系统自带播放器打开下载的视频";
|
||||
|
||||
// Player Gestures
|
||||
"PLAYER_GESTURES_TOGGLE" = "启用播放器手势";
|
||||
"VOLUME" = "音量";
|
||||
"BRIGHTNESS" = "亮度";
|
||||
"SEEK" = "快进";
|
||||
"DISABLED" = "禁用";
|
||||
"DEADZONE" = "盲区";
|
||||
"DEADZONE_DESC" = "识别手势前需要移动的最小距离";
|
||||
"SENSITIVITY" = "灵敏度";
|
||||
"SENSITIVITY_DESC" = "对音量和亮度手势的倍数";
|
||||
"PLAYER_GESTURES_TITLE" = "播放器手势";
|
||||
"PLAYER_GESTURES_DESC" = "配置播放器的水平滑动手势";
|
||||
"TOP_SECTION" = "顶部区域";
|
||||
"MIDDLE_SECTION" = "中间区域";
|
||||
"BOTTOM_SECTION" = "底部区域";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "启用触觉反馈";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "视频控件覆盖选项";
|
||||
|
||||
"ENABLE_SHARE_BUTTON" = "启用分享按钮";
|
||||
"ENABLE_SHARE_BUTTON_DESC" = "在播放器覆盖按钮区域中启用分享按钮";
|
||||
|
||||
"ENABLE_SAVE_TO_PLAYLIST_BUTTON" = "启用「保存到播放列表」按钮";
|
||||
"ENABLE_SAVE_TO_PLAYLIST_BUTTON_DESC" = "在播放器覆盖按钮区域中启用「保存到播放列表」按钮";
|
||||
|
||||
"HIDE_SHADOW_OVERLAY_BUTTONS" = "隐藏按钮阴影效果";
|
||||
"HIDE_SHADOW_OVERLAY_BUTTONS_DESC" = "隐藏播放/暂停、上一个、下一个、前进和后退按钮上的阴影效果";
|
||||
|
||||
"HIDE_RIGHT_PANEL" = "隐藏全屏模式中的右侧面板";
|
||||
"HIDE_RIGHT_PANEL_DESC" = "需要重启应用";
|
||||
|
||||
"HIDE_HEATWAVES" = "隐藏Heatwaves";
|
||||
"HIDE_HEATWAVES_DESC" = "隐藏视频播放器中的Heatwaves,需要重启应用";
|
||||
|
||||
"DISABLE_AMBIENT_PORTRAIT" = "禁用环境模式(纵向)";
|
||||
"DISABLE_AMBIENT_PORTRAIT_DESC" = "禁用视频标题周围的光效";
|
||||
|
||||
"DISABLE_AMBIENT_FULLSCREEN" = "禁用环境模式(全屏)";
|
||||
"DISABLE_AMBIENT_FULLSCREEN_DESC" = "禁用视频播放器周围的光效";
|
||||
|
||||
"FULLSCREEN_TO_THE_RIGHT" = "全屏向右";
|
||||
"FULLSCREEN_TO_THE_RIGHT_DESC" = "进入全屏时始终使主页按钮在右侧";
|
||||
|
||||
"SEEK_ANYWHERE" = "任意位置快进手势";
|
||||
"SEEK_ANYWHERE_DESC" = "按住并拖动视频播放器以快进,您必须禁用YTLite的「Hold to speed(按住加速)」功能";
|
||||
|
||||
"ENABLE_TAP_TO_SEEK" = "启用点击快进";
|
||||
"ENABLE_TAP_TO_SEEK_DESC" = "通过单击进度条跳转到视频的任意位置";
|
||||
|
||||
"DISABLE_PULL_TO_FULLSCREEN_GESTURE" = "禁用拉动全屏手势";
|
||||
"DISABLE_PULL_TO_FULLSCREEN_GESTURE_DESC" = "禁用拖动手势进入垂直全屏,仅适用于横向视频";
|
||||
|
||||
"ALWAYS_USE_REMAINING_TIME" = "始终使用剩余时间";
|
||||
"ALWAYS_USE_REMAINING_TIME_DESC" = "将默认设置为在播放器栏中显示剩余时间";
|
||||
|
||||
"DISABLE_TOGGLE_TIME_REMAINING" = "禁用切换剩余时间";
|
||||
"DISABLE_TOGGLE_TIME_REMAINING_DESC" = "禁用将已用时间更改为剩余时间,与其他设置一起使用以始终显示剩余时间";
|
||||
|
||||
"DISABLE_ENGAGEMENT_OVERLAY" = "禁用全屏参与覆盖";
|
||||
"DISABLE_ENGAGEMENT_OVERLAY_DESC" = "禁用上滑手势和全屏模式中的建议视频列表";
|
||||
|
||||
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER" = "隐藏播放器下方的评论预览";
|
||||
"HIDE_COMMENT_PREVIEWS_UNDER_PLAYER_DESC" = "隐藏评论按钮中的评论预览";
|
||||
|
||||
"HIDE_AUTOPLAY_MINI_PREVIEW" = "隐藏自动播放迷你预览";
|
||||
"HIDE_AUTOPLAY_MINI_PREVIEW_DESC" = "隐藏全屏模式下标题附近的小型建议视频框";
|
||||
|
||||
"HIDE_HUD_MESSAGES" = "隐藏HUD消息";
|
||||
"HIDE_HUD_MESSAGES_DESC" = "隐藏某些操作(如开启/关闭字幕)时显示的通知";
|
||||
|
||||
"HIDE_COLLAPSE_BUTTON" = "隐藏折叠按钮";
|
||||
"HIDE_COLLAPSE_BUTTON_DESC" = "隐藏显示在视频播放器左上角的箭头折叠按钮";
|
||||
|
||||
"HIDE_SPEED_TOAST" = "隐藏速度提示";
|
||||
"HIDE_SPEED_TOAST_DESC" = "隐藏按住播放器时显示的2X速度弹窗";
|
||||
|
||||
// App settings overlay options
|
||||
"APP_SETTINGS_OVERLAY_OPTIONS" = "隐藏设置中的选项";
|
||||
|
||||
"HIDE_ACCOUNT_SECTION" = "隐藏「帐户」";
|
||||
"HIDE_AUTOPLAY_SECTION" = "隐藏「自动播放」";
|
||||
"HIDE_TRYNEWFEATURES_SECTION" = "隐藏「试用新功能」";
|
||||
"HIDE_VIDEOQUALITYPREFERENCES_SECTION" = "隐藏「视频画质偏好」";
|
||||
"HIDE_NOTIFICATIONS_SECTION" = "隐藏「通知」";
|
||||
"HIDE_MANAGEALLHISTORY_SECTION" = "隐藏「管理所有历史记录」";
|
||||
"HIDE_YOURDATAINYOUTUBE_SECTION" = "隐藏「YouTube个人数据管理」";
|
||||
"HIDE_PRIVACY_SECTION" = "隐藏「隐私设置」";
|
||||
"HIDE_LIVECHAT_SECTION" = "隐藏「实时聊天」";
|
||||
|
||||
// Theme
|
||||
"THEME_OPTIONS" = "主题选项";
|
||||
|
||||
"OLED_DARK_THEME" = "OLED暗色主题";
|
||||
"OLED_DARK_THEME_2" = "OLED暗色主题";
|
||||
"OLED_DARK_THEME_DESC" = "真正的暗色主题,在某些情况下可能无法正常工作,启用/禁用此选项后需要重启应用";
|
||||
|
||||
"OLD_DARK_THEME" = "旧暗色主题";
|
||||
"OLD_DARK_THEME_DESC" = "旧版YouTube的暗色主题(灰色主题),启用后需要重启应用";
|
||||
|
||||
"DEFAULT_THEME" = "默认";
|
||||
"DEFAULT_THEME_DESC" = "YouTube的默认深色主题,启用后需要重启应用";
|
||||
|
||||
"OLED_KEYBOARD" = "OLED键盘";
|
||||
"OLED_KEYBOARD_DESC" = "在某些情况下可能无法正常工作,启用后需要重启应用";
|
||||
|
||||
"LOW_CONTRAST_MODE" = "低对比度模式";
|
||||
"LOW_CONTRAST_MODE_DESC" = "此选项将降低文本和按钮的对比度,就像旧的YouTube界面一样,启用后需要重启应用";
|
||||
"LCM_SELECTOR" = "低对比度模式选择";
|
||||
"DEFAULT_LOWCONTRASTMODE" = "(默认) 低对比度模式";
|
||||
"CUSTOM_LOWCONTRASTMODE" = "(自定义颜色) 低对比度模式";
|
||||
|
||||
// Miscellaneous
|
||||
"MISCELLANEOUS" = "其它";
|
||||
|
||||
"PLAYBACK_IN_FEEDS" = "Feeds后台播放";
|
||||
"PLAYBACK_IN_FEEDS_ALWAYS_ON" = "始终开启";
|
||||
"PLAYBACK_IN_FEEDS_WIFI_ONLY" = "仅限Wi-Fi";
|
||||
"PLAYBACK_IN_FEEDS_OFF" = "关闭";
|
||||
|
||||
"NEW_SETTINGS_UI" = "新的设置界面";
|
||||
"NEW_SETTINGS_UI_DESC" = "使用新的分组设置界面,可能会隐藏某些设置";
|
||||
|
||||
"ENABLE_YT_STARTUP_ANIMATION" = "启用YouTube启动动画";
|
||||
"ENABLE_YT_STARTUP_ANIMATION_DESC" = "";
|
||||
|
||||
"HIDE_MODERN_INTERFACE" = "禁用现代YouTube界面(YTNoModernUI)";
|
||||
"HIDE_MODERN_INTERFACE_DESC" = "这会将YouTube应用恢复到v17.38.10之前的传统设计,此操作还会移除某些圆角元素、环境模式和其他现代功能,启用后需要重启应用";
|
||||
|
||||
"IPAD_LAYOUT" = "iPad 布局";
|
||||
"IPAD_LAYOUT_DESC" = "仅当您希望在当前的 iPhone/iPod 上使用 iPad 布局时使用,需要重新启动应用程序";
|
||||
|
||||
"IPHONE_LAYOUT" = "iPhone 布局";
|
||||
"IPHONE_LAYOUT_DESC" = "仅当您希望在当前的 iPad 上使用 iPhone 布局时使用,需要重新启动应用程序";
|
||||
|
||||
"CAST_CONFIRM" = "投屏前确认警告 (YTCastConfirm)";
|
||||
"CAST_CONFIRM_DESC" = "投屏前显示确认警告,以防止意外劫持电视";
|
||||
"CASTING" = "投屏";
|
||||
"MSG_ARE_YOU_SURE" = "您确定要开始投屏吗?";
|
||||
"MSG_YES" = "确定";
|
||||
"MSG_CANCEL" = "取消";
|
||||
|
||||
"NEW_MINIPLAYER_STYLE" = "新的迷你播放器样式 (BigYTMiniPlayer)";
|
||||
"NEW_MINIPLAYER_STYLE_DESC" = "需要重新启动应用程序";
|
||||
|
||||
"HIDE_CAST_BUTTON" = "隐藏投屏按钮";
|
||||
"HIDE_CAST_BUTTON_DESC" = "需要重新启动应用程序";
|
||||
|
||||
"VIDEO_PLAYER_BUTTON" = "视频播放器按钮";
|
||||
"VIDEO_PLAYER_BUTTON_DESC" = "在导航栏中显示按钮,以便在系统自带播放器中打开已下载的视频";
|
||||
|
||||
"HIDE_SPONSORBLOCK_BUTTON" = "隐藏导航栏中的 iSponsorBlock 按钮";
|
||||
"HIDE_SPONSORBLOCK_BUTTON_DESC" = "";
|
||||
|
||||
"HIDE_HOME_TAB" = "隐藏首页标签栏";
|
||||
"HIDE_HOME_TAB_DESC" = "隐藏所有标签栏时请小心";
|
||||
|
||||
"FIX_CASTING" = "修复投屏";
|
||||
"FIX_CASTING_DESC" = "更改一些 AB 标志以修复投屏功能";
|
||||
|
||||
"ENABLE_FLEX" = "启用 FLEX";
|
||||
"ENABLE_FLEX_DESC" = "启用 FLEX 进行调试(不推荐),除非您了解操作,否则请保持关闭状态";
|
||||
|
||||
// Version Spoofer
|
||||
"APP_VERSION_SPOOFER_LITE" = "修改应用程序版本";
|
||||
"APP_VERSION_SPOOFER_LITE_DESC" = "要修改YouTube版本,请在下方选择您偏好的版本号,重新启动应用程序生效";
|
||||
"VERSION_SPOOFER_TITLE" = "版本选择器";
|
||||
|
||||
// Other Localization
|
||||
"APP_RESTART_DESC" = "需要重新启动应用程序";
|
||||
"CHANGE_APP_ICON" = "更改应用程序图标";
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -34,6 +34,8 @@
|
|||
"MIDDLE_SECTION" = "Middle Section";
|
||||
"BOTTOM_SECTION" = "Bottom Section";
|
||||
"PLAYER_GESTURES_HAPTIC_FEEDBACK" = "Enable Haptic Feedback";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE" = "Alternate seek method";
|
||||
"PLAYER_GESTURES_SEEK_ALTERNATE_DESC" = "Use a different method that increases content visibility";
|
||||
|
||||
// Video controls overlay options
|
||||
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "影片區覆蓋按鈕設定";
|
||||
|
|
|
|||
Loading…
Reference in a new issue