Compare commits

..

42 commits

Author SHA1 Message Date
GitHub Actions
bb71f4bfd6 updated submodules 2024-10-09 00:51:11 +00:00
GitHub Actions
130ee40335 updated submodules 2024-10-08 00:51:33 +00:00
GitHub Actions
791376c8f8 updated submodules 2024-10-07 00:53:22 +00:00
GitHub Actions
96f960132a updated submodules 2024-10-06 00:55:49 +00:00
GitHub Actions
32b0961b74 updated submodules 2024-10-05 00:51:08 +00:00
GitHub Actions
227714a4f7 updated submodules 2024-10-04 00:51:41 +00:00
GitHub Actions
13a4642894 updated submodules 2024-10-03 00:51:35 +00:00
GitHub Actions
3afdd8a16e updated submodules 2024-10-02 00:51:28 +00:00
GitHub Actions
aa8c4018f7 updated submodules 2024-10-01 00:56:52 +00:00
GitHub Actions
ed2efc7876 updated submodules 2024-09-30 00:53:43 +00:00
GitHub Actions
dd8495b40e updated submodules 2024-09-28 00:50:55 +00:00
GitHub Actions
98058daa0f updated submodules 2024-09-27 00:51:50 +00:00
GitHub Actions
e4082c491e updated submodules 2024-09-26 00:50:55 +00:00
GitHub Actions
03c5b12a3b updated submodules 2024-09-25 00:52:17 +00:00
GitHub Actions
5fbb9ebada updated submodules 2024-09-24 00:51:32 +00:00
Balackburn
df888c2b55
Update README.md 2024-09-23 14:01:52 +02:00
GitHub Actions
23fe341199 updated submodules 2024-09-23 00:51:46 +00:00
GitHub Actions
111ee9fb75 updated submodules 2024-09-22 00:54:58 +00:00
GitHub Actions
04b91e6502 updated submodules 2024-09-21 00:48:32 +00:00
GitHub Actions
39807ec54d updated submodules 2024-09-20 00:50:24 +00:00
GitHub Actions
730140360b updated submodules 2024-09-19 00:49:42 +00:00
GitHub Actions
6696128300 updated submodules 2024-09-18 00:48:45 +00:00
Sunwoo Jung
1c23b5cb0e
Add Korean localization (#435) 2024-09-17 16:05:38 +02:00
GitHub Actions
8b1eb37b13 updated submodules 2024-09-17 00:40:04 +00:00
GitHub Actions
8135fc4e0f updated submodules 2024-09-16 00:52:36 +00:00
GitHub Actions
abe20ade53 updated submodules 2024-09-15 00:55:06 +00:00
arichornlover
1d7c7c9b22
Update .gitignore 2024-09-14 01:46:41 -05:00
GitHub Actions
3e5f3bbe85 updated submodules 2024-09-14 00:47:36 +00:00
GitHub Actions
d52a485d61 updated submodules 2024-09-13 00:48:21 +00:00
arichornlover
3d54ed60ef
LowContrastMode v1.6.0 2024-09-11 19:57:54 -05:00
GitHub Actions
83f5cfdc01 updated submodules 2024-09-12 00:48:42 +00:00
GitHub Actions
268d31de36 updated submodules 2024-09-11 00:48:07 +00:00
Cregin
6a50764aa9
Update Localizable.strings (#422) 2024-09-10 17:41:52 +02:00
GitHub Actions
9f80f6d386 updated submodules 2024-09-10 00:48:40 +00:00
Cregin
192010ed09
Create Localizable.strings (#420)
Added Simplified Chinese support
2024-09-09 11:43:43 +02:00
GitHub Actions
7f254511c9 updated submodules 2024-09-09 00:51:05 +00:00
GitHub Actions
e1d0560cf2 updated submodules 2024-09-08 00:52:57 +00:00
arichornlover
5eb16b09b2
Remove Code related to disabling YTLite Popup
I am removing it to respect the developer’s choice, no one should hate me for doing this decision of but I really don’t want to disrespect the creator of YTLite.
I’m one of the “YTLitePlus Devs” and I am not the one who wanted the Popup to be hidden. It was a bad idea from the start and I should’ve removed this sooner when I saw it. Anyways have a good day everyone.

- arichornlover
2024-09-07 15:12:26 -05:00
gototheskinny
376191c3a4
tr loc update (#413) 2024-09-07 14:04:15 +02:00
GitHub Actions
361e62aad3 updated submodules 2024-09-07 00:46:55 +00:00
GitHub Actions
c2f2a1f9eb updated submodules 2024-09-06 00:47:28 +00:00
GitHub Actions
3939a29d0b updated submodules 2024-09-05 00:47:45 +00:00
28 changed files with 504 additions and 200 deletions

6
.gitignore vendored
View file

@ -2,6 +2,6 @@
.theos/
packages/
tmp/
Tweaks/Cercube/*
!Tweaks/Cercube/.gitkeep
Resources/
Tweaks/YTLite/*
!Tweaks/YTLite/.gitkeep
Resources/

View file

@ -9,9 +9,8 @@
![GitHub issues](https://img.shields.io/github/issues-raw/Balackburn/YTLitePlus?style=flat&labelColor=%23000000&color=%23000000)
[![Platform](https://img.shields.io/badge/Platform-iOS%20%7C%20iPadOS%2014.0%2B-black?labelColor=black&style=flat)](https://developer.apple.com/iphone/index.action)
![Release](https://img.shields.io/github/downloads/Balackburn/YTLitePlus/total?color=black&labelColor=black&style=flat)
<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>
<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>
# Table of Contents
<a href="#credits"><img src="https://raw.githubusercontent.com/YTLitePlus/Assets/main/Github/Buttons/TableOfContents/Credits.png" width="170"></a>

View file

@ -13,7 +13,7 @@ static BOOL customContrastMode() {
UIColor *lcmHexColor;
%group gLowContrastMode // Low Contrast Mode v1.4.3 (Compatible with only YouTube v16.46.5-v17.38.10)
%group gLowContrastMode // Low Contrast Mode v1.6.0 (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,32 +39,53 @@ 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 {

View file

@ -395,8 +395,6 @@ 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 2aa3086244d296cfb3c8e782ef09c76316452a9d
Subproject commit 15b061bf414cf29fd0d4e0e124e9e2ccb99326b0

@ -1 +1 @@
Subproject commit 92365118eddecd4b4fecf26aca0c1faa5395d322
Subproject commit 6cae20899a26a0f007d19aadf386a8bae9861aeb

@ -1 +1 @@
Subproject commit 8c163a80a47aa265df3ee2cd55066979617c97e0
Subproject commit 95fdebbb772c8cbcab2093afe10136d9890524ae

@ -1 +1 @@
Subproject commit 436024cb4921775b32d514b8c58d8dbcec2bc066
Subproject commit 794171d7785bc7f974e278b39ce6e82eb5693273

@ -1 +1 @@
Subproject commit 5c0dcc3df0eba9f1f9028e1183f41e5b6e9a6434
Subproject commit b4e1bc798149d68029c89510948600be2986968b

@ -1 +1 @@
Subproject commit bd1887e436d2c6cc35db1eede8ebbe1bee1fb78f
Subproject commit 6690ab42d855ea19d9a24cd99b0375910ea772ca

View file

@ -49,7 +49,6 @@
#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"
@ -166,7 +165,7 @@ typedef NS_ENUM(NSUInteger, GestureSection) {
@end
@interface YTFineScrubberFilmstripCollectionView : UICollectionView
@end
@interface YTPlayerViewController (YTLitePlusGestures) <UIGestureRecognizerDelegate>
@interface YTPlayerViewController (YTLitePlus) <UIGestureRecognizerDelegate>
@property (nonatomic, retain) UIPanGestureRecognizer *YTLitePlusPanGesture;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer;
@end
@ -175,24 +174,19 @@ typedef NS_ENUM(NSUInteger, GestureSection) {
@interface MPVolumeController : NSObject
@property (nonatomic, assign, readwrite) float volumeValue;
@end
@interface YTPlayerBarController (YTLitePlusGestures)
@interface YTPlayerBarController (YTLitePlus)
- (void)didScrub:(UIPanGestureRecognizer *)gestureRecognizer;
- (void)startScrubbing;
- (void)didScrubToPoint:(CGPoint)point;
- (void)endScrubbingForSeekSource:(int)seekSource;
@end
@interface YTMainAppVideoPlayerOverlayViewController (YTLitePlusGestures)
@interface YTMainAppVideoPlayerOverlayViewController (YTLitePlus)
@property (nonatomic, strong, readwrite) YTPlayerBarController *playerBarController;
@property YTMainAppVideoPlayerOverlayView *videoPlayerOverlayView;
@end
@interface YTMainAppVideoPlayerOverlayView (YTLitePlusGestures)
@property YTMainAppControlsOverlayView *controlsOverlayView;
@end
@interface YTInlinePlayerBarContainerView (YTLitePlusGestures)
@interface YTInlinePlayerBarContainerView (YTLitePlus)
@property UIPanGestureRecognizer *scrubGestureRecognizer;
@property (nonatomic, strong, readwrite) YTFineScrubberFilmstripView *fineScrubberFilmstrip;
- (CGFloat)scrubXForScrubRange:(CGFloat)scrubRange;
- (CGFloat)scrubRangeForScrubX:(CGFloat)scrubX;
@end
// Hide Collapse Button - @arichornlover

View file

@ -170,82 +170,6 @@ 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
@ -712,12 +636,7 @@ BOOL isTabSelected = NO;
playerViewController.YTLitePlusPanGesture = [[UIPanGestureRecognizer alloc] initWithTarget:playerViewController
action:@selector(YTLitePlusHandlePanGesture:)];
playerViewController.YTLitePlusPanGesture.delegate = playerViewController;
// 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];
[playerViewController.playerView addGestureRecognizer:playerViewController.YTLitePlusPanGesture];
}
}
%orig;
@ -754,8 +673,10 @@ BOOL isTabSelected = NO;
static CGFloat deadzoneStartingXTranslation;
// Variable to track the X translation of the pan gesture after exiting the deadzone
static CGFloat adjustedTranslationX;
// Variable to cancel gesture if deadzone is not exited after a certain time
static NSDate *gestureStartTime;
// 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;
// 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
@ -766,7 +687,6 @@ 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]]) {
@ -774,7 +694,6 @@ BOOL isTabSelected = NO;
break;
}
}
// Initialize the haptic feedback generator
feedbackGenerator = [[UIImpactFeedbackGenerator alloc] initWithStyle:UIImpactFeedbackStyleMedium];
});
// Get objects used to seek nicely in the video player
@ -796,11 +715,9 @@ 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 a certain distance of the current volume,
// but also allow it to change to 100% or to 0% when close to the edges
// Improve smoothness - ignore if the volume is within 0.01 of the current volume
CGFloat currentVolume = [[AVAudioSession sharedInstance] outputVolume];
CGFloat changeThresh = 0.02;
if ((fabs(newVolume - currentVolume) < changeThresh) && (currentVolume > changeThresh) && (currentVolume < (1-changeThresh))) {
if (fabs(newVolume - currentVolume) < 0.01 && currentVolume > 0.01 && currentVolume < 0.99) {
return;
}
// https://stackoverflow.com/questions/50737943/how-to-change-volume-programmatically-on-ios-11-4
@ -819,23 +736,18 @@ 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;
// 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];
}
// 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) {
@ -855,9 +767,14 @@ BOOL isTabSelected = NO;
[playerBarController startScrubbing];
break;
case GestureModeDisabled:
// Fall through
// Do nothing if the gesture is disabled
break;
default:
// Do nothing
// 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];
break;
}
};
@ -878,10 +795,14 @@ BOOL isTabSelected = NO;
adjustSeek(adjustedTranslationX, initialTime);
break;
case GestureModeDisabled:
// Fall through
// Do nothing if the gesture is disabled
break;
default:
// Do nothing
// 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];
break;
}
};
@ -900,9 +821,13 @@ BOOL isTabSelected = NO;
[playerBarController endScrubbingForSeekSource:0];
break;
case GestureModeDisabled:
// Fall through
break;
default:
// Do nothing
// 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];
break;
}
};
@ -910,7 +835,6 @@ 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;
@ -933,32 +857,25 @@ BOOL isTabSelected = NO;
}
// Deactive the activity flag
isValidHorizontalPan = NO;
// Store current time for gesture timeout
gestureStartTime = [NSDate date];
// 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;
}
});
}
// 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;
}
@ -966,6 +883,7 @@ BOOL isTabSelected = NO;
isValidHorizontalPan = YES;
deadzoneStartingXTranslation = translation.x;
adjustedTranslationX = 0;
smoothedTranslationX = 0;
// Run the setup for the selected gesture mode
switch (gestureSection) {
case GestureSectionTop:
@ -996,7 +914,6 @@ 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
@ -1044,6 +961,25 @@ 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

View file

@ -33,8 +33,6 @@
"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" = "خيارات تراكب ضوابط الفيديو";

View file

@ -33,8 +33,6 @@
"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" = "Опции за контрол на видеото";

View file

@ -33,8 +33,6 @@
"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";

View file

@ -33,8 +33,6 @@
"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";

View file

@ -33,8 +33,6 @@
"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";

View file

@ -33,8 +33,6 @@
"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";

View file

@ -33,8 +33,6 @@
"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" = "動画コントロールオーバーレイの設定";

View file

@ -0,0 +1,190 @@
// 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" = "앱 아이콘 변경";

View file

@ -33,8 +33,6 @@
"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";

View file

@ -33,8 +33,6 @@
"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";

View file

@ -33,8 +33,6 @@
"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";

View file

@ -48,8 +48,6 @@ 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";

View file

@ -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" = "Apply settings from clipboard?";
"PASTE_SETTINGS_ALERT" = "Panodan ayarları uygulamak istiyor musun?";
"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,27 +14,25 @@
"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 Player (Beta)";
"VIDEO_PLAYER_DESC" = "Open a downloaded video in the Apple player";
"VIDEO_PLAYER" = "Video Oynatıcı (Beta)";
"VIDEO_PLAYER_DESC" = "İndirilen bir videoyu Apple oynatıcısında aç";
// Player Gestures
"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";
"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";
// Video controls overlay options
"VIDEO_CONTROLS_OVERLAY_OPTIONS" = "Video Kontrol Seç.";
@ -167,8 +165,8 @@
"HIDE_CAST_BUTTON" = "Yayınla düğmesini gizle";
"HIDE_CAST_BUTTON_DESC" = "Yeniden başlatılmalı.";
"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";
"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";
"HIDE_SPONSORBLOCK_BUTTON" = "Gezinme çubuğunda iSponsorBlock düğmesini gizle";
"HIDE_SPONSORBLOCK_BUTTON_DESC" = "";

View file

@ -33,8 +33,6 @@
"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";

View file

@ -0,0 +1,194 @@
// 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" = "更改应用程序图标";

View file

@ -34,8 +34,6 @@
"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" = "影片區覆蓋按鈕設定";