3.0
This commit is contained in:
@@ -5,7 +5,7 @@ endif
|
|||||||
DEBUG=0
|
DEBUG=0
|
||||||
FINALPACKAGE=1
|
FINALPACKAGE=1
|
||||||
ARCHS = arm64
|
ARCHS = arm64
|
||||||
PACKAGE_VERSION = 2.7
|
PACKAGE_VERSION = 3.0
|
||||||
TARGET := iphone:clang:latest:13.0
|
TARGET := iphone:clang:latest:13.0
|
||||||
|
|
||||||
include $(THEOS)/makefiles/common.mk
|
include $(THEOS)/makefiles/common.mk
|
||||||
@@ -13,6 +13,6 @@ include $(THEOS)/makefiles/common.mk
|
|||||||
TWEAK_NAME = YTLite
|
TWEAK_NAME = YTLite
|
||||||
$(TWEAK_NAME)_FRAMEWORKS = UIKit Foundation SystemConfiguration
|
$(TWEAK_NAME)_FRAMEWORKS = UIKit Foundation SystemConfiguration
|
||||||
$(TWEAK_NAME)_CFLAGS = -fobjc-arc -DTWEAK_VERSION=$(PACKAGE_VERSION)
|
$(TWEAK_NAME)_CFLAGS = -fobjc-arc -DTWEAK_VERSION=$(PACKAGE_VERSION)
|
||||||
$(TWEAK_NAME)_FILES = $(wildcard *.x *.m)
|
$(TWEAK_NAME)_FILES = $(wildcard *.x Utils/*.m)
|
||||||
|
|
||||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||||
|
|||||||
+385
-328
@@ -58,62 +58,54 @@ static NSString *GetCacheSize() {
|
|||||||
|
|
||||||
%hook YTSettingsSectionItemManager
|
%hook YTSettingsSectionItemManager
|
||||||
%new
|
%new
|
||||||
- (void)updatePrefsForKey:(NSString *)key enabled:(BOOL)enabled {
|
- (YTSettingsSectionItem *)switchWithTitle:(NSString *)title key:(NSString *)key {
|
||||||
NSString *prefsPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"YTLite.plist"];
|
Class YTSettingsSectionItemClass = %c(YTSettingsSectionItem);
|
||||||
NSMutableDictionary *prefs = [NSMutableDictionary dictionaryWithContentsOfFile:prefsPath];
|
Class YTAlertViewClass = %c(YTAlertView);
|
||||||
|
NSString *titleDesc = [NSString stringWithFormat:@"%@Desc", title];
|
||||||
|
|
||||||
if (!prefs) prefs = [NSMutableDictionary dictionary];
|
YTSettingsSectionItem *item = [YTSettingsSectionItemClass switchItemWithTitle:LOC(title)
|
||||||
|
titleDescription:LOC(titleDesc)
|
||||||
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
|
switchOn:ytlBool(key)
|
||||||
|
switchBlock:^BOOL(YTSettingsCell *cell, BOOL enabled) {
|
||||||
|
if ([key isEqualToString:@"shortsOnlyMode"]) {
|
||||||
|
YTAlertView *alertView = [YTAlertViewClass confirmationDialogWithAction:^{
|
||||||
|
ytlSetBool(enabled, @"shortsOnlyMode");
|
||||||
|
}
|
||||||
|
actionTitle:LOC(@"Yes")
|
||||||
|
cancelAction:^{
|
||||||
|
[cell setSwitchOn:!enabled animated:YES];
|
||||||
|
}
|
||||||
|
cancelTitle:LOC(@"No")];
|
||||||
|
alertView.title = LOC(@"Warning");
|
||||||
|
alertView.subtitle = LOC(@"ShortsOnlyWarning");
|
||||||
|
[alertView show];
|
||||||
|
}
|
||||||
|
|
||||||
[prefs setObject:@(enabled) forKey:key];
|
else {
|
||||||
[prefs writeToFile:prefsPath atomically:NO];
|
ytlSetBool(enabled, key);
|
||||||
|
|
||||||
CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("com.dvntm.ytlite.prefschanged"), NULL, NULL, YES);
|
if (ytlBool(@"removeLabels") || ytlBool(@"reExplore") || ytlBool(@"addExplore") || ytlBool(@"removeShorts") || ytlBool(@"removeSubscriptions") || ytlBool(@"removeUploads") || ytlBool(@"removeLibrary")) {
|
||||||
|
[[[%c(YTHeaderContentComboViewController) alloc] init] refreshPivotBar];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
settingItemId:0];
|
||||||
|
|
||||||
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
%new
|
%new
|
||||||
- (void)updateIntegerPrefsForKey:(NSString *)key intValue:(NSInteger)intValue {
|
- (YTSettingsSectionItem *)linkWithTitle:(NSString *)title description:(NSString *)description link:(NSString *)link {
|
||||||
NSString *prefsPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"YTLite.plist"];
|
return [%c(YTSettingsSectionItem) itemWithTitle:title
|
||||||
NSMutableDictionary *prefs = [NSMutableDictionary dictionaryWithContentsOfFile:prefsPath];
|
titleDescription:description
|
||||||
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
if (!prefs) prefs = [NSMutableDictionary dictionary];
|
detailTextBlock:nil
|
||||||
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
[prefs setObject:@(intValue) forKey:key];
|
return [%c(YTUIUtils) openURL:[NSURL URLWithString:link]];
|
||||||
[prefs writeToFile:prefsPath atomically:NO];
|
}];
|
||||||
|
|
||||||
CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("com.dvntm.ytlite.prefschanged"), NULL, NULL, YES);
|
|
||||||
}
|
|
||||||
|
|
||||||
static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *key, BOOL *value, id selfObject) {
|
|
||||||
Class YTSettingsSectionItemClass = %c(YTSettingsSectionItem);
|
|
||||||
Class YTAlertViewClass = %c(YTAlertView);
|
|
||||||
|
|
||||||
YTSettingsSectionItem *item = [YTSettingsSectionItemClass switchItemWithTitle:LOC(title)
|
|
||||||
titleDescription:LOC([NSString stringWithFormat:@"%@Desc", title])
|
|
||||||
accessibilityIdentifier:@"YTLiteSectionItem"
|
|
||||||
switchOn:*value
|
|
||||||
switchBlock:^BOOL(YTSettingsCell *cell, BOOL enabled) {
|
|
||||||
if ([key isEqualToString:@"shortsOnlyMode"]) {
|
|
||||||
YTAlertView *alertView = [YTAlertViewClass confirmationDialogWithAction:^{
|
|
||||||
[selfObject updatePrefsForKey:@"shortsOnlyMode" enabled:enabled];
|
|
||||||
}
|
|
||||||
actionTitle:LOC(@"Yes")
|
|
||||||
cancelAction:^{
|
|
||||||
[cell setSwitchOn:!enabled animated:YES];
|
|
||||||
}
|
|
||||||
cancelTitle:LOC(@"No")];
|
|
||||||
alertView.title = LOC(@"Warning");
|
|
||||||
alertView.subtitle = LOC(@"ShortsOnlyWarning");
|
|
||||||
[alertView show];
|
|
||||||
}
|
|
||||||
|
|
||||||
else {
|
|
||||||
[selfObject updatePrefsForKey:key enabled:enabled];
|
|
||||||
}
|
|
||||||
|
|
||||||
return YES;
|
|
||||||
}
|
|
||||||
settingItemId:0];
|
|
||||||
return item;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
%new(v@:@)
|
%new(v@:@)
|
||||||
@@ -121,7 +113,6 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *key, B
|
|||||||
NSMutableArray *sectionItems = [NSMutableArray array];
|
NSMutableArray *sectionItems = [NSMutableArray array];
|
||||||
Class YTSettingsSectionItemClass = %c(YTSettingsSectionItem);
|
Class YTSettingsSectionItemClass = %c(YTSettingsSectionItem);
|
||||||
YTSettingsViewController *settingsViewController = [self valueForKey:@"_settingsViewControllerDelegate"];
|
YTSettingsViewController *settingsViewController = [self valueForKey:@"_settingsViewControllerDelegate"];
|
||||||
id selfObject = self;
|
|
||||||
|
|
||||||
YTSettingsSectionItem *space = [%c(YTSettingsSectionItem) itemWithTitle:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:nil];
|
YTSettingsSectionItem *space = [%c(YTSettingsSectionItem) itemWithTitle:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:nil];
|
||||||
|
|
||||||
@@ -132,370 +123,372 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *key, B
|
|||||||
}
|
}
|
||||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
NSArray <YTSettingsSectionItem *> *rows = @[
|
NSArray <YTSettingsSectionItem *> *rows = @[
|
||||||
createSwitchItem(@"RemoveAds", @"noAds", &kNoAds, selfObject),
|
[self switchWithTitle:@"RemoveAds" key:@"noAds"],
|
||||||
createSwitchItem(@"BackgroundPlayback", @"backgroundPlayback", &kBackgroundPlayback, selfObject)
|
[self switchWithTitle:@"BackgroundPlayback" key:@"backgroundPlayback"]
|
||||||
];
|
];
|
||||||
|
|
||||||
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"General") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"General") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
||||||
[settingsViewController pushViewController:picker];
|
[settingsViewController pushViewController:picker];
|
||||||
return YES;
|
return YES;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[sectionItems addObject:general];
|
[sectionItems addObject:general];
|
||||||
|
|
||||||
YTSettingsSectionItem *navbar = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Navbar")
|
YTSettingsSectionItem *navbar = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Navbar")
|
||||||
accessibilityIdentifier:@"YTLiteSectionItem"
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
detailTextBlock:^NSString *() {
|
detailTextBlock:^NSString *() {
|
||||||
return @"‣";
|
return @"‣";
|
||||||
}
|
}
|
||||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
NSArray <YTSettingsSectionItem *> *rows = @[
|
NSArray <YTSettingsSectionItem *> *rows = @[
|
||||||
createSwitchItem(@"RemoveCast", @"noCast", &kNoCast, selfObject),
|
[self switchWithTitle:@"RemoveCast" key:@"noCast"],
|
||||||
createSwitchItem(@"RemoveNotifications", @"removeNotifsButton", &kNoNotifsButton, selfObject),
|
[self switchWithTitle:@"RemoveNotifications" key:@"noNotifsButton"],
|
||||||
createSwitchItem(@"RemoveSearch", @"removeSearchButton", &kNoSearchButton, selfObject),
|
[self switchWithTitle:@"RemoveSearch" key:@"noSearchButton"],
|
||||||
createSwitchItem(@"RemoveVoiceSearch", @"removeVoiceSearchButton", &kNoVoiceSearchButton, selfObject)
|
[self switchWithTitle:@"RemoveVoiceSearch" key:@"noVoiceSearchButton"]
|
||||||
];
|
];
|
||||||
|
|
||||||
if (kAdvancedMode) {
|
if (ytlBool(@"advancedMode")) {
|
||||||
YTSettingsSectionItem *addStickyNavbar = createSwitchItem(@"StickyNavbar", @"stickyNavbar", &kStickyNavbar, selfObject);
|
rows = [rows arrayByAddingObjectsFromArray:@[
|
||||||
rows = [rows arrayByAddingObject:addStickyNavbar];
|
[self switchWithTitle:@"StickyNavbar" key:@"stickyNavbar"],
|
||||||
|
[self switchWithTitle:@"NoSubbar" key:@"noSubbar"],
|
||||||
YTSettingsSectionItem *addNoSubbar = createSwitchItem(@"NoSubbar", @"noSubbar", &kNoSubbar, selfObject);
|
[self switchWithTitle:@"NoYTLogo" key:@"noYTLogo"],
|
||||||
rows = [rows arrayByAddingObject:addNoSubbar];
|
[self switchWithTitle:@"PremiumYTLogo" key:@"premiumYTLogo"]
|
||||||
|
]];
|
||||||
YTSettingsSectionItem *addNoYTLogo = createSwitchItem(@"NoYTLogo", @"noYTLogo", &kNoYTLogo, selfObject);
|
|
||||||
rows = [rows arrayByAddingObject:addNoYTLogo];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Navbar") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Navbar") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
||||||
[settingsViewController pushViewController:picker];
|
[settingsViewController pushViewController:picker];
|
||||||
return YES;
|
return YES;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[sectionItems addObject:navbar];
|
[sectionItems addObject:navbar];
|
||||||
|
|
||||||
if (kAdvancedMode) {
|
if (ytlBool(@"advancedMode")) {
|
||||||
YTSettingsSectionItem *overlay = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Overlay")
|
YTSettingsSectionItem *overlay = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Overlay")
|
||||||
accessibilityIdentifier:@"YTLiteSectionItem"
|
|
||||||
detailTextBlock:^NSString *() {
|
|
||||||
return @"‣";
|
|
||||||
}
|
|
||||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
|
||||||
NSArray <YTSettingsSectionItem *> *rows = @[
|
|
||||||
createSwitchItem(@"HideAutoplay", @"hideAutoplay", &kHideAutoplay, selfObject),
|
|
||||||
createSwitchItem(@"HideSubs", @"hideSubs", &kHideSubs, selfObject),
|
|
||||||
createSwitchItem(@"NoHUDMsgs", @"noHUDMsgs", &kNoHUDMsgs, selfObject),
|
|
||||||
createSwitchItem(@"HidePrevNext", @"hidePrevNext", &kHidePrevNext, selfObject),
|
|
||||||
createSwitchItem(@"ReplacePrevNext", @"replacePrevNext", &kReplacePrevNext, selfObject),
|
|
||||||
createSwitchItem(@"NoDarkBg", @"noDarkBg", &kNoDarkBg, selfObject),
|
|
||||||
createSwitchItem(@"NoEndScreenCards", @"endScreenCards", &kEndScreenCards, selfObject),
|
|
||||||
createSwitchItem(@"NoFullscreenActions", @"noFullscreenActions", &kNoFullscreenActions, selfObject),
|
|
||||||
createSwitchItem(@"PersistentProgressBar", @"persistentProgressBar", &kPersistentProgressBar, selfObject),
|
|
||||||
createSwitchItem(@"NoRelatedVids", @"noRelatedVids", &kNoRelatedVids, selfObject),
|
|
||||||
createSwitchItem(@"NoPromotionCards", @"noPromotionCards", &kNoPromotionCards, selfObject),
|
|
||||||
createSwitchItem(@"NoWatermarks", @"noWatermarks", &kNoWatermarks, selfObject)
|
|
||||||
];
|
|
||||||
|
|
||||||
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Overlay") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
|
||||||
[settingsViewController pushViewController:picker];
|
|
||||||
return YES;
|
|
||||||
}];
|
|
||||||
[sectionItems addObject:overlay];
|
|
||||||
|
|
||||||
YTSettingsSectionItem *player = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Player")
|
|
||||||
accessibilityIdentifier:@"YTLiteSectionItem"
|
|
||||||
detailTextBlock:^NSString *() {
|
|
||||||
return @"‣";
|
|
||||||
}
|
|
||||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
|
||||||
NSArray <YTSettingsSectionItem *> *rows = @[
|
|
||||||
createSwitchItem(@"Miniplayer", @"miniplayer", &kMiniplayer, selfObject),
|
|
||||||
createSwitchItem(@"PortraitFullscreen", @"portraitFullscreen", &kPortraitFullscreen, selfObject),
|
|
||||||
createSwitchItem(@"CopyWithTimestamp", @"copyWithTimestamp", &kCopyWithTimestamp, selfObject),
|
|
||||||
createSwitchItem(@"DisableAutoplay", @"disableAutoplay", &kDisableAutoplay, selfObject),
|
|
||||||
createSwitchItem(@"DisableAutoCaptions", @"disableAutoCaptions", &kDisableAutoCaptions, selfObject),
|
|
||||||
createSwitchItem(@"NoContentWarning", @"noContentWarning", &kNoContentWarning, selfObject),
|
|
||||||
createSwitchItem(@"ClassicQuality", @"classicQuality", &kClassicQuality, selfObject),
|
|
||||||
createSwitchItem(@"ExtraSpeedOptions", @"extraSpeedOptions", &kExtraSpeedOptions, selfObject),
|
|
||||||
createSwitchItem(@"DontSnap2Chapter", @"dontSnapToChapter", &kDontSnapToChapter, selfObject),
|
|
||||||
createSwitchItem(@"RedProgressBar", @"redProgressBar", &kRedProgressBar, selfObject),
|
|
||||||
createSwitchItem(@"NoPlayerRemixButton", @"noPlayerRemixButton", &kNoPlayerRemixButton, selfObject),
|
|
||||||
createSwitchItem(@"NoPlayerClipButton", @"noPlayerClipButton", &kNoPlayerClipButton, selfObject),
|
|
||||||
createSwitchItem(@"NoPlayerDownloadButton", @"noPlayerDownloadButton", &kNoPlayerDownloadButton, selfObject),
|
|
||||||
createSwitchItem(@"NoHints", @"noHints", &kNoHints, selfObject),
|
|
||||||
createSwitchItem(@"NoFreeZoom", @"noFreeZoom", &kNoFreeZoom, selfObject),
|
|
||||||
createSwitchItem(@"AutoFullscreen", @"autoFullscreen", &kAutoFullscreen, selfObject),
|
|
||||||
createSwitchItem(@"ExitFullscreen", @"exitFullscreen", &kExitFullscreen, selfObject),
|
|
||||||
createSwitchItem(@"NoDoubleTap2Seek", @"noDoubleTapToSeek", &kNoDoubleTapToSeek, selfObject)
|
|
||||||
];
|
|
||||||
|
|
||||||
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Player") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
|
||||||
[settingsViewController pushViewController:picker];
|
|
||||||
return YES;
|
|
||||||
}];
|
|
||||||
[sectionItems addObject:player];
|
|
||||||
|
|
||||||
YTSettingsSectionItem *shorts = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Shorts")
|
|
||||||
accessibilityIdentifier:@"YTLiteSectionItem"
|
|
||||||
detailTextBlock:^NSString *() {
|
|
||||||
return @"‣";
|
|
||||||
}
|
|
||||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
|
||||||
NSArray <YTSettingsSectionItem *> *rows = @[
|
|
||||||
createSwitchItem(@"ShortsOnlyMode", @"shortsOnlyMode", &kShortsOnlyMode, selfObject),
|
|
||||||
createSwitchItem(@"HideShorts", @"hideShorts", &kHideShorts, selfObject),
|
|
||||||
createSwitchItem(@"ShortsProgress", @"shortsProgress", &kShortsProgress, selfObject),
|
|
||||||
createSwitchItem(@"PinchToFullscreenShorts", @"pinchToFullscreenShorts", &kPinchToFullscreenShorts, selfObject),
|
|
||||||
createSwitchItem(@"ShortsToRegular", @"shortsToRegular", &kShortsToRegular, selfObject),
|
|
||||||
createSwitchItem(@"ResumeShorts", @"resumeShorts", &kResumeShorts, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsLogo", @"hideShortsLogo", &kHideShortsLogo, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsSearch", @"hideShortsSearch", &kHideShortsSearch, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsCamera", @"hideShortsCamera", &kHideShortsCamera, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsMore", @"hideShortsMore", &kHideShortsMore, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsSubscriptions", @"hideShortsSubscriptions", &kHideShortsSubscriptions, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsLike", @"hideShortsLike", &kHideShortsLike, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsDislike", @"hideShortsDislike", &kHideShortsDislike, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsComments", @"hideShortsComments", &kHideShortsComments, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsRemix", @"hideShortsRemix", &kHideShortsRemix, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsShare", @"hideShortsShare", &kHideShortsShare, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsAvatars", @"hideShortsAvatars", &kHideShortsAvatars, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsThanks", @"hideShortsThanks", &kHideShortsThanks, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsSource", @"hideShortsSource", &kHideShortsSource, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsChannelName", @"hideShortsChannelName", &kHideShortsChannelName, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsDescription", @"hideShortsDescription", &kHideShortsDescription, selfObject),
|
|
||||||
createSwitchItem(@"HideShortsAudioTrack", @"hideShortsAudioTrack", &kHideShortsAudioTrack, selfObject),
|
|
||||||
createSwitchItem(@"NoPromotionCards", @"hideShortsPromoCards", &kHideShortsPromoCards, selfObject)
|
|
||||||
];
|
|
||||||
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Shorts") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
|
||||||
[settingsViewController pushViewController:picker];
|
|
||||||
return YES;
|
|
||||||
}];
|
|
||||||
[sectionItems addObject:shorts];
|
|
||||||
}
|
|
||||||
|
|
||||||
YTSettingsSectionItem *tabbar = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Tabbar")
|
|
||||||
accessibilityIdentifier:@"YTLiteSectionItem"
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
detailTextBlock:^NSString *() {
|
detailTextBlock:^NSString *() {
|
||||||
return @"‣";
|
return @"‣";
|
||||||
}
|
}
|
||||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
NSArray <YTSettingsSectionItem *> *rows = @[
|
NSArray <YTSettingsSectionItem *> *rows = @[
|
||||||
createSwitchItem(@"RemoveLabels", @"removeLabels", &kRemoveLabels, selfObject),
|
[self switchWithTitle:@"HideAutoplay" key:@"hideAutoplay"],
|
||||||
createSwitchItem(@"RemoveIndicators", @"removeIndicators", &kRemoveIndicators, selfObject),
|
[self switchWithTitle:@"HideSubs" key:@"hideSubs"],
|
||||||
createSwitchItem(@"ReExplore", @"reExplore", &kReExplore, selfObject),
|
[self switchWithTitle:@"NoHUDMsgs" key:@"noHUDMsgs"],
|
||||||
createSwitchItem(@"AddExplore", @"addExplore", &kAddExplore, selfObject),
|
[self switchWithTitle:@"HidePrevNext" key:@"hidePrevNext"],
|
||||||
createSwitchItem(@"HideShortsTab", @"removeShorts", &kRemoveShorts, selfObject),
|
[self switchWithTitle:@"ReplacePrevNext" key:@"replacePrevNext"],
|
||||||
createSwitchItem(@"HideSubscriptionsTab", @"removeSubscriptions", &kRemoveSubscriptions, selfObject),
|
[self switchWithTitle:@"NoDarkBg" key:@"noDarkBg"],
|
||||||
createSwitchItem(@"HideUploadButton", @"removeUploads", &kRemoveUploads, selfObject),
|
[self switchWithTitle:@"NoEndScreenCards" key:@"endScreenCards"],
|
||||||
createSwitchItem(@"HideLibraryTab", @"removeLibrary", &kRemoveLibrary, selfObject)
|
[self switchWithTitle:@"NoFullscreenActions" key:@"noFullscreenActions"],
|
||||||
|
[self switchWithTitle:@"PersistentProgressBar" key:@"persistentProgressBar"],
|
||||||
|
[self switchWithTitle:@"StockVolumeHUD" key:@"stockVolumeHUD"],
|
||||||
|
[self switchWithTitle:@"NoRelatedVids" key:@"noRelatedVids"],
|
||||||
|
[self switchWithTitle:@"NoPromotionCards" key:@"noPromotionCards"],
|
||||||
|
[self switchWithTitle:@"NoWatermarks" key:@"noWatermarks"],
|
||||||
|
[self switchWithTitle:@"VideoEndTime" key:@"videoEndTime"],
|
||||||
|
[self switchWithTitle:@"24hrFormat" key:@"24hrFormat"]
|
||||||
|
];
|
||||||
|
|
||||||
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Overlay") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
||||||
|
[settingsViewController pushViewController:picker];
|
||||||
|
return YES;
|
||||||
|
}];
|
||||||
|
|
||||||
|
[sectionItems addObject:overlay];
|
||||||
|
|
||||||
|
YTSettingsSectionItem *player = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Player")
|
||||||
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
|
detailTextBlock:^NSString *() {
|
||||||
|
return @"‣";
|
||||||
|
}
|
||||||
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
|
NSArray <YTSettingsSectionItem *> *rows = @[
|
||||||
|
[self switchWithTitle:@"Miniplayer" key:@"miniplayer"],
|
||||||
|
[self switchWithTitle:@"PortraitFullscreen" key:@"portraitFullscreen"],
|
||||||
|
[self switchWithTitle:@"CopyWithTimestamp" key:@"copyWithTimestamp"],
|
||||||
|
[self switchWithTitle:@"DisableAutoplay" key:@"disableAutoplay"],
|
||||||
|
[self switchWithTitle:@"DisableAutoCaptions" key:@"disableAutoCaptions"],
|
||||||
|
[self switchWithTitle:@"NoContentWarning" key:@"noContentWarning"],
|
||||||
|
[self switchWithTitle:@"ClassicQuality" key:@"classicQuality"],
|
||||||
|
[self switchWithTitle:@"ExtraSpeedOptions" key:@"extraSpeedOptions"],
|
||||||
|
[self switchWithTitle:@"DontSnap2Chapter" key:@"dontSnapToChapter"],
|
||||||
|
[self switchWithTitle:@"NoTwoFingerSnapToChapter" key:@"noTwoFingerSnapToChapter"],
|
||||||
|
[self switchWithTitle:@"PauseOnOverlay" key:@"pauseOnOverlay"],
|
||||||
|
[self switchWithTitle:@"RedProgressBar" key:@"redProgressBar"],
|
||||||
|
[self switchWithTitle:@"NoPlayerRemixButton" key:@"noPlayerRemixButton"],
|
||||||
|
[self switchWithTitle:@"NoPlayerClipButton" key:@"noPlayerClipButton"],
|
||||||
|
[self switchWithTitle:@"NoPlayerDownloadButton" key:@"noPlayerDownloadButton"],
|
||||||
|
[self switchWithTitle:@"NoHints" key:@"noHints"],
|
||||||
|
[self switchWithTitle:@"NoFreeZoom" key:@"noFreeZoom"],
|
||||||
|
[self switchWithTitle:@"AutoFullscreen" key:@"autoFullscreen"],
|
||||||
|
[self switchWithTitle:@"ExitFullscreen" key:@"exitFullscreen"],
|
||||||
|
[self switchWithTitle:@"NoDoubleTap2Seek" key:@"noDoubleTapToSeek"]
|
||||||
|
];
|
||||||
|
|
||||||
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Player") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
||||||
|
[settingsViewController pushViewController:picker];
|
||||||
|
return YES;
|
||||||
|
}];
|
||||||
|
|
||||||
|
[sectionItems addObject:player];
|
||||||
|
|
||||||
|
YTSettingsSectionItem *shorts = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Shorts")
|
||||||
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
|
detailTextBlock:^NSString *() {
|
||||||
|
return @"‣";
|
||||||
|
}
|
||||||
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
|
NSArray <YTSettingsSectionItem *> *rows = @[
|
||||||
|
[self switchWithTitle:@"ShortsOnlyMode" key:@"shortsOnlyMode"],
|
||||||
|
[self switchWithTitle:@"AutoSkipShorts" key:@"autoSkipShorts"],
|
||||||
|
[self switchWithTitle:@"HideShorts" key:@"hideShorts"],
|
||||||
|
[self switchWithTitle:@"ShortsProgress" key:@"shortsProgress"],
|
||||||
|
[self switchWithTitle:@"PinchToFullscreenShorts" key:@"pinchToFullscreenShorts"],
|
||||||
|
[self switchWithTitle:@"ShortsToRegular" key:@"shortsToRegular"],
|
||||||
|
[self switchWithTitle:@"ResumeShorts" key:@"resumeShorts"],
|
||||||
|
[self switchWithTitle:@"HideShortsLogo" key:@"hideShortsLogo"],
|
||||||
|
[self switchWithTitle:@"HideShortsSearch" key:@"hideShortsSearch"],
|
||||||
|
[self switchWithTitle:@"HideShortsCamera" key:@"hideShortsCamera"],
|
||||||
|
[self switchWithTitle:@"HideShortsMore" key:@"hideShortsMore"],
|
||||||
|
[self switchWithTitle:@"HideShortsSubscriptions" key:@"hideShortsSubscriptions"],
|
||||||
|
[self switchWithTitle:@"HideShortsLike" key:@"hideShortsLike"],
|
||||||
|
[self switchWithTitle:@"HideShortsDislike" key:@"hideShortsDislike"],
|
||||||
|
[self switchWithTitle:@"HideShortsComments" key:@"hideShortsComments"],
|
||||||
|
[self switchWithTitle:@"HideShortsRemix" key:@"hideShortsRemix"],
|
||||||
|
[self switchWithTitle:@"HideShortsShare" key:@"hideShortsShare"],
|
||||||
|
[self switchWithTitle:@"HideShortsAvatars" key:@"hideShortsAvatars"],
|
||||||
|
[self switchWithTitle:@"HideShortsThanks" key:@"hideShortsThanks"],
|
||||||
|
[self switchWithTitle:@"HideShortsSource" key:@"hideShortsSource"],
|
||||||
|
[self switchWithTitle:@"HideShortsChannelName" key:@"hideShortsChannelName"],
|
||||||
|
[self switchWithTitle:@"HideShortsDescription" key:@"hideShortsDescription"],
|
||||||
|
[self switchWithTitle:@"HideShortsAudioTrack" key:@"hideShortsAudioTrack"],
|
||||||
|
[self switchWithTitle:@"NoPromotionCards" key:@"hideShortsPromoCards"]
|
||||||
|
];
|
||||||
|
|
||||||
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Shorts") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
||||||
|
[settingsViewController pushViewController:picker];
|
||||||
|
return YES;
|
||||||
|
}];
|
||||||
|
|
||||||
|
[sectionItems addObject:shorts];
|
||||||
|
}
|
||||||
|
|
||||||
|
YTSettingsSectionItem *tabbar = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Tabbar")
|
||||||
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
|
detailTextBlock:^NSString *() {
|
||||||
|
return @"‣";
|
||||||
|
}
|
||||||
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
|
NSArray <YTSettingsSectionItem *> *rows = @[
|
||||||
|
[self switchWithTitle:@"RemoveLabels" key:@"removeLabels"],
|
||||||
|
[self switchWithTitle:@"RemoveIndicators" key:@"removeIndicators"],
|
||||||
|
[self switchWithTitle:@"ReExplore" key:@"reExplore"],
|
||||||
|
[self switchWithTitle:@"AddExplore" key:@"addExplore"],
|
||||||
|
[self switchWithTitle:@"HideShortsTab" key:@"removeShorts"],
|
||||||
|
[self switchWithTitle:@"HideSubscriptionsTab" key:@"removeSubscriptions"],
|
||||||
|
[self switchWithTitle:@"HideUploadButton" key:@"removeUploads"],
|
||||||
|
[self switchWithTitle:@"HideLibraryTab" key:@"removeLibrary"]
|
||||||
];
|
];
|
||||||
|
|
||||||
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Tabbar") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Tabbar") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
||||||
[settingsViewController pushViewController:picker];
|
[settingsViewController pushViewController:picker];
|
||||||
return YES;
|
return YES;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[sectionItems addObject:tabbar];
|
[sectionItems addObject:tabbar];
|
||||||
|
|
||||||
if (kAdvancedMode) {
|
if (ytlBool(@"advancedMode")) {
|
||||||
YTSettingsSectionItem *other = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Other")
|
YTSettingsSectionItem *other = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Other")
|
||||||
accessibilityIdentifier:@"YTLiteSectionItem"
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
detailTextBlock:^NSString *() {
|
detailTextBlock:^NSString *() {
|
||||||
return @"‣";
|
return @"‣";
|
||||||
}
|
}
|
||||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
NSArray <YTSettingsSectionItem *> *rows = @[
|
NSArray <YTSettingsSectionItem *> *rows = @[
|
||||||
createSwitchItem(@"CopyVideoInfo", @"copyVideoInfo", &kCopyVideoInfo, selfObject),
|
[self switchWithTitle:@"CopyVideoInfo" key:@"copyVideoInfo"],
|
||||||
createSwitchItem(@"PostManager", @"postManager", &kPostManager, selfObject),
|
[self switchWithTitle:@"PostManager" key:@"postManager"],
|
||||||
createSwitchItem(@"SaveProfilePhoto", @"saveProfilePhoto", &kSaveProfilePhoto, selfObject),
|
[self switchWithTitle:@"SaveProfilePhoto" key:@"saveProfilePhoto"],
|
||||||
createSwitchItem(@"CommentManager", @"commentManager", &kCommentManager, selfObject),
|
[self switchWithTitle:@"CommentManager" key:@"commentManager"],
|
||||||
createSwitchItem(@"FixAlbums", @"fixAlbums", &kFixAlbums, selfObject),
|
[self switchWithTitle:@"FixAlbums" key:@"fixAlbums"],
|
||||||
createSwitchItem(@"RemovePlayNext", @"removePlayNext", &kRemovePlayNext, selfObject),
|
[self switchWithTitle:@"NativeShare" key:@"nativeShare"],
|
||||||
createSwitchItem(@"RemoveDownloadMenu", @"removeDownloadMenu", &kRemoveDownloadMenu, selfObject),
|
[self switchWithTitle:@"RemovePlayNext" key:@"removePlayNext"],
|
||||||
createSwitchItem(@"RemoveWatchLaterMenu", @"removeWatchLaterMenu", &kRemoveWatchLaterMenu, selfObject),
|
[self switchWithTitle:@"RemoveDownloadMenu" key:@"removeDownloadMenu"],
|
||||||
createSwitchItem(@"RemoveSaveToPlaylistMenu", @"removeSaveToPlaylistMenu", &kRemoveSaveToPlaylistMenu, selfObject),
|
[self switchWithTitle:@"RemoveWatchLaterMenu" key:@"removeWatchLaterMenu"],
|
||||||
createSwitchItem(@"RemoveShareMenu", @"removeShareMenu", &kRemoveShareMenu, selfObject),
|
[self switchWithTitle:@"RemoveSaveToPlaylistMenu" key:@"removeSaveToPlaylistMenu"],
|
||||||
createSwitchItem(@"RemoveNotInterestedMenu", @"removeNotInterestedMenu", &kRemoveNotInterestedMenu, selfObject),
|
[self switchWithTitle:@"RemoveShareMenu" key:@"removeShareMenu"],
|
||||||
createSwitchItem(@"RemoveDontRecommendMenu", @"removeDontRecommendMenu", &kRemoveDontRecommendMenu, selfObject),
|
[self switchWithTitle:@"RemoveNotInterestedMenu" key:@"removeNotInterestedMenu"],
|
||||||
createSwitchItem(@"RemoveReportMenu", @"removeReportMenu", &kRemoveReportMenu, selfObject),
|
[self switchWithTitle:@"RemoveDontRecommendMenu" key:@"removeDontRecommendMenu"],
|
||||||
createSwitchItem(@"NoContinueWatching", @"noContinueWatching", &kNoContinueWatching, selfObject),
|
[self switchWithTitle:@"RemoveReportMenu" key:@"removeReportMenu"],
|
||||||
createSwitchItem(@"NoSearchHistory", @"noSearchHistory", &kNoSearchHistory, selfObject),
|
[self switchWithTitle:@"NoContinueWatching" key:@"noContinueWatching"],
|
||||||
createSwitchItem(@"NoRelatedWatchNexts", @"noRelatedWatchNexts", &kNoRelatedWatchNexts, selfObject),
|
[self switchWithTitle:@"NoSearchHistory" key:@"noSearchHistory"],
|
||||||
createSwitchItem(@"StickSortComments", @"stickSortComments", &kStickSortComments, selfObject),
|
[self switchWithTitle:@"NoRelatedWatchNexts" key:@"noRelatedWatchNexts"],
|
||||||
createSwitchItem(@"HideSortComments", @"hideSortComments", &kHideSortComments, selfObject),
|
[self switchWithTitle:@"StickSortComments" key:@"stickSortComments"],
|
||||||
createSwitchItem(@"PlaylistOldMinibar", @"playlistOldMinibar", &kPlaylistOldMinibar, selfObject),
|
[self switchWithTitle:@"HideSortComments" key:@"hideSortComments"],
|
||||||
createSwitchItem(@"DisableRTL", @"disableRTL", &kDisableRTL, selfObject)
|
[self switchWithTitle:@"PlaylistOldMinibar" key:@"playlistOldMinibar"],
|
||||||
|
[self switchWithTitle:@"DisableRTL" key:@"disableRTL"]
|
||||||
];
|
];
|
||||||
|
|
||||||
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Other") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Other") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
||||||
[settingsViewController pushViewController:picker];
|
[settingsViewController pushViewController:picker];
|
||||||
return YES;
|
return YES;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[sectionItems addObject:other];
|
[sectionItems addObject:other];
|
||||||
|
|
||||||
[sectionItems addObject:space];
|
[sectionItems addObject:space];
|
||||||
|
|
||||||
YTSettingsSectionItem *wifiQuality = [YTSettingsSectionItemClass itemWithTitle:LOC(@"PlaybackQualityOnWiFi")
|
YTSettingsSectionItem *speed = [YTSettingsSectionItemClass itemWithTitle:LOC(@"HoldToSpeed")
|
||||||
accessibilityIdentifier:@"YTLiteSectionItem"
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
detailTextBlock:^NSString *() {
|
detailTextBlock:^NSString *() {
|
||||||
NSString *qualityLabel = kWiFiQualityIndex == 1 ? LOC(@"Best") :
|
NSArray *speedLabels = @[LOC(@"Disabled"), LOC(@"Default"), @"0.25×", @"0.5×", @"0.75×", @"1.0×", @"1.25×", @"1.5×", @"1.75×", @"2.0×", @"3.0×", @"4.0×", @"5.0×"];
|
||||||
kWiFiQualityIndex == 2 ? @"2160p60" :
|
return speedLabels[ytlInt(@"speedIndex")];
|
||||||
kWiFiQualityIndex == 3 ? @"2160p" :
|
|
||||||
kWiFiQualityIndex == 4 ? @"1440p60" :
|
|
||||||
kWiFiQualityIndex == 5 ? @"1440p" :
|
|
||||||
kWiFiQualityIndex == 6 ? @"1080p60" :
|
|
||||||
kWiFiQualityIndex == 7 ? @"1080p" :
|
|
||||||
kWiFiQualityIndex == 8 ? @"720p60" :
|
|
||||||
kWiFiQualityIndex == 9 ? @"720p" :
|
|
||||||
kWiFiQualityIndex == 10 ? @"480p" :
|
|
||||||
kWiFiQualityIndex == 11 ? @"360p" :
|
|
||||||
LOC(@"Default");
|
|
||||||
|
|
||||||
return qualityLabel;
|
|
||||||
}
|
}
|
||||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
NSMutableArray <YTSettingsSectionItem *> *rows = [NSMutableArray array];
|
NSMutableArray <YTSettingsSectionItem *> *rows = [NSMutableArray array];
|
||||||
NSArray *qualityTitles = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"];
|
NSArray *speedLabels = @[LOC(@"Disable"), LOC(@"Default"), @"0.25×", @"0.5×", @"0.75×", @"1.0×", @"1.25×", @"1.5×", @"1.75×", @"2.0×", @"3.0×", @"4.0×", @"5.0×"];
|
||||||
|
|
||||||
for (NSUInteger i = 0; i < qualityTitles.count; i++) {
|
for (NSUInteger i = 0; i < speedLabels.count; i++) {
|
||||||
NSString *title = qualityTitles[i];
|
NSString *title = speedLabels[i];
|
||||||
YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
kWiFiQualityIndex = (int)arg1;
|
|
||||||
[settingsViewController reloadData];
|
[settingsViewController reloadData];
|
||||||
[self updateIntegerPrefsForKey:@"wifiQualityIndex" intValue:kWiFiQualityIndex];
|
ytlSetInt((int)arg1, @"speedIndex");
|
||||||
|
return YES;
|
||||||
|
}];
|
||||||
|
|
||||||
|
[rows addObject:item];
|
||||||
|
}
|
||||||
|
|
||||||
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"HoldToSpeed") pickerSectionTitle:nil rows:rows selectedItemIndex:ytlInt(@"speedIndex") parentResponder:[self parentResponder]];
|
||||||
|
[settingsViewController pushViewController:picker];
|
||||||
|
return YES;
|
||||||
|
}];
|
||||||
|
|
||||||
|
[sectionItems addObject:speed];
|
||||||
|
|
||||||
|
YTSettingsSectionItem *autoSpeed = [YTSettingsSectionItemClass itemWithTitle:LOC(@"DefaultPlaybackRate")
|
||||||
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
|
detailTextBlock:^NSString *() {
|
||||||
|
NSArray *speedLabels = @[@"0.25×", @"0.5×", @"0.75×", @"1.0×", @"1.25×", @"1.5×", @"1.75×", @"2.0×", @"3.0×", @"4.0×", @"5.0×"];
|
||||||
|
return speedLabels[ytlInt(@"autoSpeedIndex")];
|
||||||
|
}
|
||||||
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
|
NSMutableArray <YTSettingsSectionItem *> *rows = [NSMutableArray array];
|
||||||
|
NSArray *speedLabels = @[@"0.25×", @"0.5×", @"0.75×", @"1.0×", @"1.25×", @"1.5×", @"1.75×", @"2.0×", @"3.0×", @"4.0×", @"5.0×"];
|
||||||
|
|
||||||
|
for (NSUInteger i = 0; i < speedLabels.count; i++) {
|
||||||
|
NSString *title = speedLabels[i];
|
||||||
|
YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
|
[settingsViewController reloadData];
|
||||||
|
ytlSetInt((int)arg1, @"autoSpeedIndex");
|
||||||
return YES;
|
return YES;
|
||||||
}];
|
}];
|
||||||
[rows addObject:item];
|
[rows addObject:item];
|
||||||
}
|
}
|
||||||
|
|
||||||
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"SelectQuality") pickerSectionTitle:nil rows:rows selectedItemIndex:kWiFiQualityIndex parentResponder:[self parentResponder]];
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"DefaultPlaybackRate") pickerSectionTitle:nil rows:rows selectedItemIndex:ytlInt(@"autoSpeedIndex") parentResponder:[self parentResponder]];
|
||||||
[settingsViewController pushViewController:picker];
|
[settingsViewController pushViewController:picker];
|
||||||
return YES;
|
return YES;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
[sectionItems addObject:autoSpeed];
|
||||||
|
|
||||||
|
YTSettingsSectionItem *wifiQuality = [YTSettingsSectionItemClass itemWithTitle:LOC(@"PlaybackQualityOnWiFi")
|
||||||
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
|
detailTextBlock:^NSString *() {
|
||||||
|
NSArray *qualityLabels = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"];
|
||||||
|
return qualityLabels[ytlInt(@"wiFiQualityIndex")];
|
||||||
|
}
|
||||||
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
|
NSMutableArray <YTSettingsSectionItem *> *rows = [NSMutableArray array];
|
||||||
|
NSArray *qualityLabels = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"];
|
||||||
|
|
||||||
|
for (NSUInteger i = 0; i < qualityLabels.count; i++) {
|
||||||
|
NSString *title = qualityLabels[i];
|
||||||
|
YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
|
[settingsViewController reloadData];
|
||||||
|
ytlSetInt((int)arg1, @"wiFiQualityIndex");
|
||||||
|
return YES;
|
||||||
|
}];
|
||||||
|
|
||||||
|
[rows addObject:item];
|
||||||
|
}
|
||||||
|
|
||||||
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"SelectQuality") pickerSectionTitle:nil rows:rows selectedItemIndex:ytlInt(@"wiFiQualityIndex") parentResponder:[self parentResponder]];
|
||||||
|
[settingsViewController pushViewController:picker];
|
||||||
|
return YES;
|
||||||
|
}];
|
||||||
|
|
||||||
[sectionItems addObject:wifiQuality];
|
[sectionItems addObject:wifiQuality];
|
||||||
|
|
||||||
YTSettingsSectionItem *cellQuality = [YTSettingsSectionItemClass itemWithTitle:LOC(@"PlaybackQualityOnCellular")
|
YTSettingsSectionItem *cellQuality = [YTSettingsSectionItemClass itemWithTitle:LOC(@"PlaybackQualityOnCellular")
|
||||||
accessibilityIdentifier:@"YTLiteSectionItem"
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
detailTextBlock:^NSString *() {
|
detailTextBlock:^NSString *() {
|
||||||
NSString *qualityLabel = kCellQualityIndex == 1 ? LOC(@"Best") :
|
NSArray *qualityLabels = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"];
|
||||||
kCellQualityIndex == 2 ? @"2160p60" :
|
return qualityLabels[ytlInt(@"cellQualityIndex")];
|
||||||
kCellQualityIndex == 3 ? @"2160p" :
|
|
||||||
kCellQualityIndex == 4 ? @"1440p60" :
|
|
||||||
kCellQualityIndex == 5 ? @"1440p" :
|
|
||||||
kCellQualityIndex == 6 ? @"1080p60" :
|
|
||||||
kCellQualityIndex == 7 ? @"1080p" :
|
|
||||||
kCellQualityIndex == 8 ? @"720p60" :
|
|
||||||
kCellQualityIndex == 9 ? @"720p" :
|
|
||||||
kCellQualityIndex == 10 ? @"480p" :
|
|
||||||
kCellQualityIndex == 11 ? @"360p" :
|
|
||||||
LOC(@"Default");
|
|
||||||
|
|
||||||
return qualityLabel;
|
|
||||||
}
|
}
|
||||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
NSMutableArray <YTSettingsSectionItem *> *rows = [NSMutableArray array];
|
NSMutableArray <YTSettingsSectionItem *> *rows = [NSMutableArray array];
|
||||||
NSArray *qualityTitles = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"];
|
NSArray *qualityLabels = @[LOC(@"Default"), LOC(@"Best"), @"2160p60", @"2160p", @"1440p60", @"1440p", @"1080p60", @"1080p", @"720p60", @"720p", @"480p", @"360p"];
|
||||||
|
|
||||||
for (NSUInteger i = 0; i < qualityTitles.count; i++) {
|
for (NSUInteger i = 0; i < qualityLabels.count; i++) {
|
||||||
NSString *title = qualityTitles[i];
|
NSString *title = qualityLabels[i];
|
||||||
YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
kCellQualityIndex = (int)arg1;
|
|
||||||
[settingsViewController reloadData];
|
[settingsViewController reloadData];
|
||||||
[self updateIntegerPrefsForKey:@"cellQualityIndex" intValue:kCellQualityIndex];
|
ytlSetInt((int)arg1, @"cellQualityIndex");
|
||||||
return YES;
|
return YES;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[rows addObject:item];
|
[rows addObject:item];
|
||||||
}
|
}
|
||||||
|
|
||||||
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"SelectQuality") pickerSectionTitle:nil rows:rows selectedItemIndex:kCellQualityIndex parentResponder:[self parentResponder]];
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"SelectQuality") pickerSectionTitle:nil rows:rows selectedItemIndex:ytlInt(@"cellQualityIndex") parentResponder:[self parentResponder]];
|
||||||
[settingsViewController pushViewController:picker];
|
[settingsViewController pushViewController:picker];
|
||||||
return YES;
|
return YES;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[sectionItems addObject:cellQuality];
|
[sectionItems addObject:cellQuality];
|
||||||
|
|
||||||
YTSettingsSectionItem *startup = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Startup")
|
YTSettingsSectionItem *startup = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Startup")
|
||||||
accessibilityIdentifier:@"YTLiteSectionItem"
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
detailTextBlock:^NSString *() {
|
detailTextBlock:^NSString *() {
|
||||||
NSString *tabLabel = kPivotIndex == 1 ? LOC(@"Explore") :
|
NSArray *tabLabels = @[LOC(@"Home"), LOC(@"Explore"), LOC(@"ShortsTab"), LOC(@"Subscriptions"), LOC(@"Library")];
|
||||||
kPivotIndex == 2 ? LOC(@"ShortsTab") :
|
return tabLabels[ytlInt(@"pivotIndex")];
|
||||||
kPivotIndex == 3 ? LOC(@"Subscriptions") :
|
|
||||||
kPivotIndex == 4 ? LOC(@"Library") :
|
|
||||||
LOC(@"Home");
|
|
||||||
|
|
||||||
return tabLabel;
|
|
||||||
}
|
}
|
||||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
NSMutableArray <YTSettingsSectionItem *> *rows = [NSMutableArray array];
|
NSMutableArray <YTSettingsSectionItem *> *rows = [NSMutableArray array];
|
||||||
NSArray *tabTitles = @[LOC(@"Home"), LOC(@"Explore"), LOC(@"ShortsTab"), LOC(@"Subscriptions"), LOC(@"Library")];
|
NSArray *tabLabels = @[LOC(@"Home"), LOC(@"Explore"), LOC(@"ShortsTab"), LOC(@"Subscriptions"), LOC(@"Library")];
|
||||||
|
|
||||||
for (NSUInteger i = 0; i < tabTitles.count; i++) {
|
for (NSUInteger i = 0; i < tabLabels.count; i++) {
|
||||||
NSString *title = tabTitles[i];
|
NSString *title = tabLabels[i];
|
||||||
YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
YTSettingsSectionItem *item = [YTSettingsSectionItemClass checkmarkItemWithTitle:title titleDescription:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
if (([title isEqualToString:LOC(@"Explore")] && !kReExplore && !kAddExplore) ||
|
if (([title isEqualToString:LOC(@"Explore")] && !ytlBool(@"reExplore") && !ytlBool(@"addExplore")) ||
|
||||||
([title isEqualToString:LOC(@"ShortsTab")] && kRemoveShorts) ||
|
([title isEqualToString:LOC(@"ShortsTab")] && ytlBool(@"removeShorts")) ||
|
||||||
([title isEqualToString:LOC(@"Subscriptions")] && kRemoveSubscriptions) ||
|
([title isEqualToString:LOC(@"Subscriptions")] && ytlBool(@"removeSubscriptions")) ||
|
||||||
([title isEqualToString:LOC(@"Library")] && kRemoveLibrary)) {
|
([title isEqualToString:LOC(@"Library")] && ytlBool(@"removeLibrary"))) {
|
||||||
YTAlertView *alertView = [%c(YTAlertView) infoDialog];
|
YTAlertView *alertView = [%c(YTAlertView) infoDialog];
|
||||||
alertView.title = LOC(@"Warning");
|
alertView.title = LOC(@"Warning");
|
||||||
alertView.subtitle = LOC(@"TabIsHidden");
|
alertView.subtitle = LOC(@"TabIsHidden");
|
||||||
[alertView show];
|
[alertView show];
|
||||||
return NO;
|
return NO;
|
||||||
} else {
|
} else {
|
||||||
kPivotIndex = (int)arg1;
|
|
||||||
[settingsViewController reloadData];
|
[settingsViewController reloadData];
|
||||||
[self updateIntegerPrefsForKey:@"pivotIndex" intValue:kPivotIndex];
|
ytlSetInt((int)arg1, @"pivotIndex");
|
||||||
return YES;
|
return YES;
|
||||||
}
|
}
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[rows addObject:item];
|
[rows addObject:item];
|
||||||
}
|
}
|
||||||
|
|
||||||
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Startup") pickerSectionTitle:nil rows:rows selectedItemIndex:kPivotIndex parentResponder:[self parentResponder]];
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"Startup") pickerSectionTitle:nil rows:rows selectedItemIndex:ytlInt(@"pivotIndex") parentResponder:[self parentResponder]];
|
||||||
[settingsViewController pushViewController:picker];
|
[settingsViewController pushViewController:picker];
|
||||||
return YES;
|
return YES;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
[sectionItems addObject:startup];
|
[sectionItems addObject:startup];
|
||||||
}
|
}
|
||||||
|
|
||||||
[sectionItems addObject:space];
|
[sectionItems addObject:space];
|
||||||
|
|
||||||
YTSettingsSectionItem *ps = [%c(YTSettingsSectionItem) itemWithTitle:@"PoomSmart" titleDescription:@"YouTube-X, YTNoPremium, YTClassicVideoQuality, YTShortsProgress, YTReExplore, SkipContentWarning, YTAutoFullscreen, YouTubeHeaders" accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
|
||||||
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/PoomSmart/"]];
|
|
||||||
}];
|
|
||||||
|
|
||||||
YTSettingsSectionItem *miro = [%c(YTSettingsSectionItem) itemWithTitle:@"MiRO92" titleDescription:@"YTNoShorts" accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
|
||||||
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/MiRO92/"]];
|
|
||||||
}];
|
|
||||||
|
|
||||||
YTSettingsSectionItem *tonymillion = [%c(YTSettingsSectionItem) itemWithTitle:@"Tony Million" titleDescription:@"Reachability" accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
|
||||||
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/tonymillion/Reachability"]];
|
|
||||||
}];
|
|
||||||
|
|
||||||
YTSettingsSectionItem *stalker = [%c(YTSettingsSectionItem) itemWithTitle:@"Stalker" titleDescription:LOC(@"ChineseSimplified") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
|
||||||
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/xiangfeidexiaohuo"]];
|
|
||||||
}];
|
|
||||||
|
|
||||||
YTSettingsSectionItem *clement = [%c(YTSettingsSectionItem) itemWithTitle:@"Clement" titleDescription:LOC(@"ChineseTraditional") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
|
||||||
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://twitter.com/a100900900"]];
|
|
||||||
}];
|
|
||||||
|
|
||||||
YTSettingsSectionItem *balackburn = [%c(YTSettingsSectionItem) itemWithTitle:@"Balackburn" titleDescription:LOC(@"French") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
|
||||||
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/Balackburn"]];
|
|
||||||
}];
|
|
||||||
|
|
||||||
YTSettingsSectionItem *decibelios = [%c(YTSettingsSectionItem) itemWithTitle:@"DeciBelioS" titleDescription:LOC(@"Spanish") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
|
||||||
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/Deci8BelioS"]];
|
|
||||||
}];
|
|
||||||
|
|
||||||
YTSettingsSectionItem *skeids = [%c(YTSettingsSectionItem) itemWithTitle:@"SKEIDs" titleDescription:LOC(@"Japanese") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
|
||||||
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/SKEIDs"]];
|
|
||||||
}];
|
|
||||||
|
|
||||||
YTSettingsSectionItem *hiepvk = [%c(YTSettingsSectionItem) itemWithTitle:@"Hiepvk" titleDescription:LOC(@"Vietnamese") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
|
||||||
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/hiepvk"]];
|
|
||||||
}];
|
|
||||||
|
|
||||||
YTSettingsSectionItem *dayanch96 = [%c(YTSettingsSectionItem) itemWithTitle:@"Dayanch96" titleDescription:LOC(@"Developer") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
|
||||||
return [%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://github.com/Dayanch96/"]];
|
|
||||||
}];
|
|
||||||
|
|
||||||
YTSettingsSectionItem *support = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"SupportDevelopment") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return @"♡"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
YTSettingsSectionItem *support = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"SupportDevelopment") accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return @"♡"; } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
YTDefaultSheetController *sheetController = [%c(YTDefaultSheetController) sheetControllerWithMessage:LOC(@"SupportDevelopment") subMessage:LOC(@"SupportDevelopmentDesc") delegate:nil parentResponder:nil];
|
YTDefaultSheetController *sheetController = [%c(YTDefaultSheetController) sheetControllerWithMessage:LOC(@"SupportDevelopment") subMessage:LOC(@"SupportDevelopmentDesc") delegate:nil parentResponder:nil];
|
||||||
YTActionSheetHeaderView *headerView = [sheetController valueForKey:@"_headerView"];
|
YTActionSheetHeaderView *headerView = [sheetController valueForKey:@"_headerView"];
|
||||||
@@ -515,35 +508,63 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *key, B
|
|||||||
[%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://www.buymeacoffee.com/dayanch96"]];
|
[%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://www.buymeacoffee.com/dayanch96"]];
|
||||||
}]];
|
}]];
|
||||||
|
|
||||||
UIViewController *currentController = UIApplication.sharedApplication.windows.firstObject.rootViewController;
|
[sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:@"USDT (TRC20)" iconImage:[self resizedImageNamed:@"usdt"] secondaryIconImage:nil accessibilityIdentifier:nil handler:^ {
|
||||||
[sheetController presentFromViewController:currentController.presentedViewController animated:YES completion:nil];
|
[UIPasteboard generalPasteboard].string = @"TEdKJdKwc1Bbu8Py4um8qPQ6MbproEqNJw";
|
||||||
|
[[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:[self parentResponder]] send];
|
||||||
|
}]];
|
||||||
|
|
||||||
|
[sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:@"BNB Smart Chain (BEP20)" iconImage:[self resizedImageNamed:@"bnb"] secondaryIconImage:nil accessibilityIdentifier:nil handler:^ {
|
||||||
|
[UIPasteboard generalPasteboard].string = @"0xc6f9fddb30ce10d70e6497950f44c8e10b72bcd6";
|
||||||
|
[[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:[self parentResponder]] send];
|
||||||
|
}]];
|
||||||
|
|
||||||
|
[sheetController addAction:[%c(YTActionSheetAction) actionWithTitle:@"Boosty" iconImage:[self resizedImageNamed:@"boosty"] secondaryIconImage:nil accessibilityIdentifier:nil handler:^ {
|
||||||
|
[%c(YTUIUtils) openURL:[NSURL URLWithString:@"https://boosty.to/dayanch96"]];
|
||||||
|
}]];
|
||||||
|
|
||||||
|
[sheetController presentFromViewController:[%c(YTUIUtils) topViewControllerForPresenting] animated:YES completion:nil];
|
||||||
|
|
||||||
return YES;
|
return YES;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
YTSettingsSectionItem *cache = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"ClearCache") titleDescription:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return GetCacheSize(); } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
YTSettingsSectionItem *thanks = [YTSettingsSectionItemClass itemWithTitle:LOC(@"Contributors")
|
||||||
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
|
detailTextBlock:^NSString *() {
|
||||||
[[NSFileManager defaultManager] removeItemAtPath:cachePath error:nil];
|
return @"‣";
|
||||||
});
|
}
|
||||||
[[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Done") firstResponder:[self parentResponder]] send];
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
|
NSArray <YTSettingsSectionItem *> *rows = @[
|
||||||
|
[self linkWithTitle:@"Dayanch96" description:LOC(@"Developer") link:@"https://github.com/Dayanch96/"],
|
||||||
|
[self linkWithTitle:@"Dan Pashin" description:LOC(@"SpecialThanks") link:@"https://github.com/danpashin/"],
|
||||||
|
space,
|
||||||
|
[self linkWithTitle:@"Stalker" description:LOC(@"ChineseSimplified") link:@"https://github.com/xiangfeidexiaohuo"],
|
||||||
|
[self linkWithTitle:@"Clement" description:LOC(@"ChineseTraditional") link:@"https://twitter.com/a100900900"],
|
||||||
|
[self linkWithTitle:@"Balackburn" description:LOC(@"French") link:@"https://github.com/Balackburn"],
|
||||||
|
[self linkWithTitle:@"DeciBelioS" description:LOC(@"Spanish") link:@"https://github.com/Deci8BelioS"],
|
||||||
|
[self linkWithTitle:@"SKEIDs" description:LOC(@"Japanese") link:@"https://github.com/SKEIDs"],
|
||||||
|
[self linkWithTitle:@"Hiepvk" description:LOC(@"Vietnamese") link:@"https://github.com/hiepvk"]
|
||||||
|
];
|
||||||
|
|
||||||
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"About") pickerSectionTitle:LOC(@"Credits") rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
||||||
|
[settingsViewController pushViewController:picker];
|
||||||
return YES;
|
return YES;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
YTSettingsSectionItem *reset = [%c(YTSettingsSectionItem) itemWithTitle:LOC(@"ResetSettings") titleDescription:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
YTSettingsSectionItem *sources = [YTSettingsSectionItemClass itemWithTitle:LOC(@"OpenSourceLibs")
|
||||||
YTAlertView *alertView = [%c(YTAlertView) confirmationDialogWithAction:^{
|
accessibilityIdentifier:@"YTLiteSectionItem"
|
||||||
NSString *prefsPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"YTLite.plist"];
|
detailTextBlock:^NSString *() {
|
||||||
[[NSFileManager defaultManager] removeItemAtPath:prefsPath error:nil];
|
return @"‣";
|
||||||
|
}
|
||||||
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
|
NSArray <YTSettingsSectionItem *> *rows = @[
|
||||||
|
[self linkWithTitle:@"PoomSmart" description:@"YouTube-X, YTNoPremium, YTClassicVideoQuality, YTShortsProgress, YTReExplore, SkipContentWarning, YTAutoFullscreen, YouTubeHeaders" link:@"https://github.com/PoomSmart/"],
|
||||||
|
[self linkWithTitle:@"MiRO92" description:@"YTNoShorts" link:@"https://github.com/MiRO92/YTNoShorts"],
|
||||||
|
[self linkWithTitle:@"Tony Million" description:@"Reachability" link:@"https://github.com/tonymillion/Reachability"],
|
||||||
|
[self linkWithTitle:@"jkhsjdhjs" description:@"YouTube Native Share" link:@"https://github.com/jkhsjdhjs/youtube-native-share"]
|
||||||
|
];
|
||||||
|
|
||||||
[[UIApplication sharedApplication] performSelector:@selector(suspend)];
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"About") pickerSectionTitle:LOC(@"Credits") rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
||||||
[NSThread sleepForTimeInterval:1.0];
|
[settingsViewController pushViewController:picker];
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
actionTitle:LOC(@"Yes")
|
|
||||||
cancelTitle:LOC(@"No")];
|
|
||||||
alertView.title = LOC(@"Warning");
|
|
||||||
alertView.subtitle = LOC(@"ResetMessage");
|
|
||||||
[alertView show];
|
|
||||||
return YES;
|
return YES;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
@@ -553,13 +574,49 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *key, B
|
|||||||
return @(OS_STRINGIFY(TWEAK_VERSION));
|
return @(OS_STRINGIFY(TWEAK_VERSION));
|
||||||
}
|
}
|
||||||
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
NSArray <YTSettingsSectionItem *> *rows = @[ps, miro, tonymillion, dayanch96, stalker, clement, balackburn, decibelios, skeids, hiepvk, space, createSwitchItem(@"Advanced", @"advancedMode", &kAdvancedMode, selfObject), cache, reset];
|
NSArray <YTSettingsSectionItem *> *rows = @[
|
||||||
|
[self switchWithTitle:@"Advanced" key:@"advancedMode"],
|
||||||
|
|
||||||
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"About") pickerSectionTitle:LOC(@"Credits") rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
[%c(YTSettingsSectionItem) itemWithTitle:LOC(@"ClearCache") titleDescription:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:^NSString *() { return GetCacheSize(); } selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
|
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
|
||||||
|
NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
|
||||||
|
[[NSFileManager defaultManager] removeItemAtPath:cachePath error:nil];
|
||||||
|
});
|
||||||
|
|
||||||
|
[[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Done") firstResponder:[self parentResponder]] send];
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}],
|
||||||
|
|
||||||
|
[%c(YTSettingsSectionItem) itemWithTitle:LOC(@"ResetSettings") titleDescription:nil accessibilityIdentifier:@"YTLiteSectionItem" detailTextBlock:nil selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
|
||||||
|
YTAlertView *alertView = [%c(YTAlertView) confirmationDialogWithAction:^{
|
||||||
|
[YTLUserDefaults resetUserDefaults];
|
||||||
|
|
||||||
|
[[UIApplication sharedApplication] performSelector:@selector(suspend)];
|
||||||
|
[NSThread sleepForTimeInterval:1.0];
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
actionTitle:LOC(@"Yes")
|
||||||
|
cancelTitle:LOC(@"No")];
|
||||||
|
alertView.title = LOC(@"Warning");
|
||||||
|
alertView.subtitle = LOC(@"ResetMessage");
|
||||||
|
[alertView show];
|
||||||
|
|
||||||
|
return YES;
|
||||||
|
}]
|
||||||
|
];
|
||||||
|
|
||||||
|
YTSettingsPickerViewController *picker = [[%c(YTSettingsPickerViewController) alloc] initWithNavTitle:LOC(@"About") pickerSectionTitle:nil rows:rows selectedItemIndex:NSNotFound parentResponder:[self parentResponder]];
|
||||||
[settingsViewController pushViewController:picker];
|
[settingsViewController pushViewController:picker];
|
||||||
return YES;
|
return YES;
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
[sectionItems addObject:thanks];
|
||||||
|
|
||||||
|
[sectionItems addObject:sources];
|
||||||
|
|
||||||
[sectionItems addObject:support];
|
[sectionItems addObject:support];
|
||||||
|
|
||||||
[sectionItems addObject:version];
|
[sectionItems addObject:version];
|
||||||
|
|
||||||
BOOL isNew = [settingsViewController respondsToSelector:@selector(setSectionItems:forCategory:title:icon:titleDescription:headerHidden:)];
|
BOOL isNew = [settingsViewController respondsToSelector:@selector(setSectionItems:forCategory:title:icon:titleDescription:headerHidden:)];
|
||||||
@@ -581,7 +638,7 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *key, B
|
|||||||
UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:CGSizeMake(32, 32)];
|
UIGraphicsImageRenderer *renderer = [[UIGraphicsImageRenderer alloc] initWithSize:CGSizeMake(32, 32)];
|
||||||
UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) {
|
UIImage *image = [renderer imageWithActions:^(UIGraphicsImageRendererContext * _Nonnull rendererContext) {
|
||||||
UIView *imageView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)];
|
UIView *imageView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 32, 32)];
|
||||||
UIImageView *iconImageView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:[YTLiteBundle() pathForResource:iconName ofType:@"png"]]];
|
UIImageView *iconImageView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:[NSBundle.ytl_defaultBundle pathForResource:iconName ofType:@"png"]]];
|
||||||
iconImageView.contentMode = UIViewContentModeScaleAspectFit;
|
iconImageView.contentMode = UIViewContentModeScaleAspectFit;
|
||||||
iconImageView.clipsToBounds = YES;
|
iconImageView.clipsToBounds = YES;
|
||||||
iconImageView.frame = imageView.bounds;
|
iconImageView.frame = imageView.bounds;
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#import <rootless.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface NSBundle (YTLite)
|
||||||
|
|
||||||
|
// Returns YTLite default bundle. Supports rootless if defined in compilation parameters
|
||||||
|
@property (class, nonatomic, readonly) NSBundle *ytl_defaultBundle;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#import "NSBundle+YTLite.h"
|
||||||
|
|
||||||
|
@implementation NSBundle (YTLite)
|
||||||
|
|
||||||
|
+ (NSBundle *)ytl_defaultBundle {
|
||||||
|
static NSBundle *bundle = nil;
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
NSString *tweakBundlePath = [[NSBundle mainBundle] pathForResource:@"YTLite" ofType:@"bundle"];
|
||||||
|
NSString *rootlessBundlePath = ROOT_PATH_NS("/Library/Application Support/YTLite.bundle");
|
||||||
|
|
||||||
|
bundle = [NSBundle bundleWithPath:tweakBundlePath ?: rootlessBundlePath];
|
||||||
|
});
|
||||||
|
|
||||||
|
return bundle;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@interface YTLUserDefaults : NSUserDefaults
|
||||||
|
|
||||||
|
@property (class, readonly, strong) YTLUserDefaults *standardUserDefaults;
|
||||||
|
|
||||||
|
- (void)reset;
|
||||||
|
|
||||||
|
+ (void)resetUserDefaults;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
#import "YTLUserDefaults.h"
|
||||||
|
|
||||||
|
@implementation YTLUserDefaults
|
||||||
|
|
||||||
|
static NSString *const kDefaultsSuiteName = @"com.dvntm.ytlite";
|
||||||
|
|
||||||
|
+ (YTLUserDefaults *)standardUserDefaults {
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
static YTLUserDefaults *defaults = nil;
|
||||||
|
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
defaults = [[self alloc] initWithSuiteName:kDefaultsSuiteName];
|
||||||
|
[defaults registerDefaults];
|
||||||
|
});
|
||||||
|
|
||||||
|
return defaults;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)reset {
|
||||||
|
[self removePersistentDomainForName:kDefaultsSuiteName];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)registerDefaults {
|
||||||
|
[self registerDefaults:@{
|
||||||
|
@"noAds": @YES,
|
||||||
|
@"backgroundPlayback": @YES,
|
||||||
|
@"removeUploads": @YES,
|
||||||
|
@"speedIndex": @1,
|
||||||
|
@"autoSpeedIndex": @3,
|
||||||
|
@"wiFiQualityIndex": @0,
|
||||||
|
@"cellQualityIndex": @0,
|
||||||
|
@"pivotIndex": @0
|
||||||
|
}];
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (void)resetUserDefaults {
|
||||||
|
[[self standardUserDefaults] reset];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
@@ -1,124 +1,19 @@
|
|||||||
#import <UIKit/UIKit.h>
|
#import <UIKit/UIKit.h>
|
||||||
#import <Foundation/Foundation.h>
|
#import <Foundation/Foundation.h>
|
||||||
#import <rootless.h>
|
|
||||||
#import <Photos/Photos.h>
|
#import <Photos/Photos.h>
|
||||||
#import "Reachability.h"
|
#import <MobileCoreServices/MobileCoreServices.h>
|
||||||
|
#import "Utils/NSBundle+YTLite.h"
|
||||||
|
#import "Utils/YTLUserDefaults.h"
|
||||||
|
#import "Utils/Reachability.h"
|
||||||
#import "YouTubeHeaders.h"
|
#import "YouTubeHeaders.h"
|
||||||
|
|
||||||
static inline NSBundle *YTLiteBundle() {
|
#define LOC(key) [NSBundle.ytl_defaultBundle localizedStringForKey:key value:nil table:nil]
|
||||||
static NSBundle *bundle = nil;
|
|
||||||
static dispatch_once_t onceToken;
|
|
||||||
|
|
||||||
dispatch_once(&onceToken, ^{
|
#define ytlBool(key) [[YTLUserDefaults standardUserDefaults] boolForKey:key]
|
||||||
NSString *tweakBundlePath = [[NSBundle mainBundle] pathForResource:@"YTLite" ofType:@"bundle"];
|
#define ytlInt(key) [[YTLUserDefaults standardUserDefaults] integerForKey:key]
|
||||||
NSString *rootlessBundlePath = ROOT_PATH_NS("/Library/Application Support/YTLite.bundle");
|
|
||||||
|
|
||||||
bundle = [NSBundle bundleWithPath:tweakBundlePath ?: rootlessBundlePath];
|
#define ytlSetBool(value, key) [[YTLUserDefaults standardUserDefaults] setBool:(value) forKey:(key)]
|
||||||
});
|
#define ytlSetInt(value, key) [[YTLUserDefaults standardUserDefaults] setInteger:(value) forKey:(key)]
|
||||||
|
|
||||||
return bundle;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline NSString *LOC(NSString *key) {
|
|
||||||
return [YTLiteBundle() localizedStringForKey:key value:nil table:nil];
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOL kNoAds;
|
|
||||||
BOOL kBackgroundPlayback;
|
|
||||||
BOOL kNoCast;
|
|
||||||
BOOL kNoNotifsButton;
|
|
||||||
BOOL kNoSearchButton;
|
|
||||||
BOOL kNoVoiceSearchButton;
|
|
||||||
BOOL kStickyNavbar;
|
|
||||||
BOOL kNoSubbar;
|
|
||||||
BOOL kNoYTLogo;
|
|
||||||
BOOL kHideAutoplay;
|
|
||||||
BOOL kHideSubs;
|
|
||||||
BOOL kNoHUDMsgs;
|
|
||||||
BOOL kHidePrevNext;
|
|
||||||
BOOL kReplacePrevNext;
|
|
||||||
BOOL kNoDarkBg;
|
|
||||||
BOOL kEndScreenCards;
|
|
||||||
BOOL kNoFullscreenActions;
|
|
||||||
BOOL kPersistentProgressBar;
|
|
||||||
BOOL kNoRelatedVids;
|
|
||||||
BOOL kNoPromotionCards;
|
|
||||||
BOOL kNoWatermarks;
|
|
||||||
BOOL kMiniplayer;
|
|
||||||
BOOL kPortraitFullscreen;
|
|
||||||
BOOL kCopyWithTimestamp;
|
|
||||||
BOOL kDisableAutoplay;
|
|
||||||
BOOL kDisableAutoCaptions;
|
|
||||||
BOOL kNoContentWarning;
|
|
||||||
BOOL kClassicQuality;
|
|
||||||
BOOL kExtraSpeedOptions;
|
|
||||||
BOOL kDontSnapToChapter;
|
|
||||||
BOOL kRedProgressBar;
|
|
||||||
BOOL kNoPlayerRemixButton;
|
|
||||||
BOOL kNoPlayerClipButton;
|
|
||||||
BOOL kNoPlayerDownloadButton;
|
|
||||||
BOOL kNoHints;
|
|
||||||
BOOL kNoFreeZoom;
|
|
||||||
BOOL kAutoFullscreen;
|
|
||||||
BOOL kExitFullscreen;
|
|
||||||
BOOL kNoDoubleTapToSeek;
|
|
||||||
BOOL kShortsOnlyMode;
|
|
||||||
BOOL kHideShorts;
|
|
||||||
BOOL kShortsProgress;
|
|
||||||
BOOL kPinchToFullscreenShorts;
|
|
||||||
BOOL kShortsToRegular;
|
|
||||||
BOOL kResumeShorts;
|
|
||||||
BOOL kHideShortsLogo;
|
|
||||||
BOOL kHideShortsSearch;
|
|
||||||
BOOL kHideShortsCamera;
|
|
||||||
BOOL kHideShortsMore;
|
|
||||||
BOOL kHideShortsSubscriptions;
|
|
||||||
BOOL kHideShortsLike;
|
|
||||||
BOOL kHideShortsDislike;
|
|
||||||
BOOL kHideShortsComments;
|
|
||||||
BOOL kHideShortsRemix;
|
|
||||||
BOOL kHideShortsShare;
|
|
||||||
BOOL kHideShortsAvatars;
|
|
||||||
BOOL kHideShortsThanks;
|
|
||||||
BOOL kHideShortsSource;
|
|
||||||
BOOL kHideShortsChannelName;
|
|
||||||
BOOL kHideShortsDescription;
|
|
||||||
BOOL kHideShortsAudioTrack;
|
|
||||||
BOOL kHideShortsPromoCards;
|
|
||||||
BOOL kRemoveLabels;
|
|
||||||
BOOL kRemoveIndicators;
|
|
||||||
BOOL kReExplore;
|
|
||||||
BOOL kAddExplore;
|
|
||||||
BOOL kRemoveShorts;
|
|
||||||
BOOL kRemoveSubscriptions;
|
|
||||||
BOOL kRemoveUploads;
|
|
||||||
BOOL kRemoveLibrary;
|
|
||||||
BOOL kCopyVideoInfo;
|
|
||||||
BOOL kPostManager;
|
|
||||||
BOOL kSaveProfilePhoto;
|
|
||||||
BOOL kCommentManager;
|
|
||||||
BOOL kSavePost;
|
|
||||||
BOOL kFixAlbums;
|
|
||||||
BOOL kRemovePlayNext;
|
|
||||||
BOOL kRemoveDownloadMenu;
|
|
||||||
BOOL kRemoveWatchLaterMenu;
|
|
||||||
BOOL kRemoveSaveToPlaylistMenu;
|
|
||||||
BOOL kRemoveShareMenu;
|
|
||||||
BOOL kRemoveNotInterestedMenu;
|
|
||||||
BOOL kRemoveDontRecommendMenu;
|
|
||||||
BOOL kRemoveReportMenu;
|
|
||||||
BOOL kNoContinueWatching;
|
|
||||||
BOOL kNoSearchHistory;
|
|
||||||
BOOL kNoRelatedWatchNexts;
|
|
||||||
BOOL kStickSortComments;
|
|
||||||
BOOL kHideSortComments;
|
|
||||||
BOOL kPlaylistOldMinibar;
|
|
||||||
BOOL kDisableRTL;
|
|
||||||
BOOL kAdvancedMode;
|
|
||||||
BOOL kAdvancedModeReminder;
|
|
||||||
int kWiFiQualityIndex;
|
|
||||||
int kCellQualityIndex;
|
|
||||||
int kPivotIndex;
|
|
||||||
|
|
||||||
@interface YTTouchFeedbackController : YTCollectionViewCell
|
@interface YTTouchFeedbackController : YTCollectionViewCell
|
||||||
@property (nonatomic, strong, readwrite) UIColor *feedbackColor;
|
@property (nonatomic, strong, readwrite) UIColor *feedbackColor;
|
||||||
@@ -130,13 +25,12 @@ int kPivotIndex;
|
|||||||
|
|
||||||
@interface YTSettingsCell ()
|
@interface YTSettingsCell ()
|
||||||
- (void)setIndicatorIcon:(int)icon;
|
- (void)setIndicatorIcon:(int)icon;
|
||||||
|
- (void)setTitleDescription:(id)titleDescription;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface YTSettingsSectionItemManager (Custom)
|
@interface YTSettingsSectionItemManager (Custom)
|
||||||
@property (nonatomic, strong) NSMutableDictionary *prefs;
|
- (YTSettingsSectionItem *)switchWithTitle:(NSString *)title key:(NSString *)key;
|
||||||
@property (nonatomic, strong) NSString *prefsPath;
|
- (YTSettingsSectionItem *)linkWithTitle:(NSString *)title description:(NSString *)description link:(NSString *)link;
|
||||||
- (void)updatePrefsForKey:(NSString *)key enabled:(BOOL)enabled;
|
|
||||||
- (void)updateIntegerPrefsForKey:(NSString *)key intValue:(NSInteger)intValue;
|
|
||||||
- (UIImage *)resizedImageNamed:(NSString *)iconName;
|
- (UIImage *)resizedImageNamed:(NSString *)iconName;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@@ -147,6 +41,7 @@ int kPivotIndex;
|
|||||||
@interface YTQTMButton ()
|
@interface YTQTMButton ()
|
||||||
@property (nonatomic, strong, readwrite) YTIButtonRenderer *buttonRenderer;
|
@property (nonatomic, strong, readwrite) YTIButtonRenderer *buttonRenderer;
|
||||||
- (void)setSizeWithPaddingAndInsets:(BOOL)sizeWithPaddingAndInsets;
|
- (void)setSizeWithPaddingAndInsets:(BOOL)sizeWithPaddingAndInsets;
|
||||||
|
- (BOOL)yt_isVisible;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface YTRightNavigationButtons : UIView
|
@interface YTRightNavigationButtons : UIView
|
||||||
@@ -163,7 +58,15 @@ int kPivotIndex;
|
|||||||
@interface YTChipCloudCell : UICollectionViewCell
|
@interface YTChipCloudCell : UICollectionViewCell
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface YTHeaderContentComboViewController : UIViewController
|
||||||
|
- (void)refreshPivotBar;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTPivotBarViewController : UIViewController
|
||||||
|
@end
|
||||||
|
|
||||||
@interface YTAppViewController : UIViewController
|
@interface YTAppViewController : UIViewController
|
||||||
|
@property (nonatomic, assign, readonly) YTPivotBarViewController *pivotBarViewController;
|
||||||
- (void)hidePivotBar;
|
- (void)hidePivotBar;
|
||||||
- (void)showPivotBar;
|
- (void)showPivotBar;
|
||||||
@end
|
@end
|
||||||
@@ -172,8 +75,9 @@ int kPivotIndex;
|
|||||||
- (void)selectItemWithPivotIdentifier:(id)pivotIndentifier;
|
- (void)selectItemWithPivotIdentifier:(id)pivotIndentifier;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface YTPivotBarViewController : UIViewController
|
@interface YTPivotBarViewController ()
|
||||||
@property (nonatomic, weak, readwrite) YTAppViewController *parentViewController;
|
@property (nonatomic, weak, readwrite) YTAppViewController *parentViewController;
|
||||||
|
@property (nonatomic, copy, readwrite) NSString *selectedPivotIdentifier;
|
||||||
- (YTPivotBarView *)pivotBarView;
|
- (YTPivotBarView *)pivotBarView;
|
||||||
- (void)selectItemWithPivotIdentifier:(id)pivotIndentifier;
|
- (void)selectItemWithPivotIdentifier:(id)pivotIndentifier;
|
||||||
@end
|
@end
|
||||||
@@ -182,31 +86,17 @@ int kPivotIndex;
|
|||||||
@property (nonatomic, strong, readwrite) YTIPivotBarItemRenderer *renderer;
|
@property (nonatomic, strong, readwrite) YTIPivotBarItemRenderer *renderer;
|
||||||
@property (nonatomic, weak, readwrite) YTPivotBarViewController *delegate;
|
@property (nonatomic, weak, readwrite) YTPivotBarViewController *delegate;
|
||||||
@property (nonatomic, strong, readwrite) YTQTMButton *navigationButton;
|
@property (nonatomic, strong, readwrite) YTQTMButton *navigationButton;
|
||||||
|
- (void)manageTab:(UILongPressGestureRecognizer *)gesture;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface YTScrollableNavigationController : UINavigationController
|
@interface YTScrollableNavigationController : UINavigationController
|
||||||
@property (nonatomic, weak, readwrite) YTAppViewController *parentViewController;
|
@property (nonatomic, weak, readwrite) YTAppViewController *parentViewController;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface YTReelWatchRootViewController : UIViewController
|
|
||||||
@property (nonatomic, weak, readwrite) YTScrollableNavigationController *navigationController;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@interface YTTabsViewController : UIViewController
|
@interface YTTabsViewController : UIViewController
|
||||||
@property (nonatomic, weak, readwrite) YTScrollableNavigationController *navigationController;
|
@property (nonatomic, weak, readwrite) YTScrollableNavigationController *navigationController;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface YTReelWatchPlaybackOverlayView : UIView
|
|
||||||
@end
|
|
||||||
|
|
||||||
@interface YTReelContentView : UIView
|
|
||||||
@property (nonatomic, assign, readonly) YTReelWatchPlaybackOverlayView *playbackOverlay;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@interface YTShortsPlayerViewController : UIViewController
|
|
||||||
@property (nonatomic, weak, readwrite) YTScrollableNavigationController *navigationController;
|
|
||||||
@end
|
|
||||||
|
|
||||||
@interface YTIVideoDetails : NSObject
|
@interface YTIVideoDetails : NSObject
|
||||||
@property (nonatomic, copy, readwrite) NSString *title;
|
@property (nonatomic, copy, readwrite) NSString *title;
|
||||||
@property (nonatomic, copy, readwrite) NSString *shortDescription;
|
@property (nonatomic, copy, readwrite) NSString *shortDescription;
|
||||||
@@ -229,7 +119,13 @@ int kPivotIndex;
|
|||||||
@property (nonatomic, assign, readonly) int singleDimensionResolution;
|
@property (nonatomic, assign, readonly) int singleDimensionResolution;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface YTSingleVideoTime : NSObject
|
||||||
|
@property (nonatomic, assign, readonly) CGFloat time;
|
||||||
|
@end
|
||||||
|
|
||||||
@interface YTSingleVideoController : NSObject
|
@interface YTSingleVideoController : NSObject
|
||||||
|
@property (nonatomic, assign, readonly) float playbackRate;
|
||||||
|
@property (nonatomic, assign, readonly) CGFloat totalMediaTime;
|
||||||
@property (nonatomic, assign, readonly) NSArray *selectableVideoFormats;
|
@property (nonatomic, assign, readonly) NSArray *selectableVideoFormats;
|
||||||
- (void)setVideoFormatConstraint:(MLQuickMenuVideoQualitySettingFormatConstraint *)formatConstraint;
|
- (void)setVideoFormatConstraint:(MLQuickMenuVideoQualitySettingFormatConstraint *)formatConstraint;
|
||||||
@end
|
@end
|
||||||
@@ -237,20 +133,55 @@ int kPivotIndex;
|
|||||||
@interface YTPlayerViewController : UIViewController
|
@interface YTPlayerViewController : UIViewController
|
||||||
@property (nonatomic, assign, readonly) YTPlayerResponse *playerResponse;
|
@property (nonatomic, assign, readonly) YTPlayerResponse *playerResponse;
|
||||||
@property (nonatomic, assign, readonly) YTSingleVideoController *activeVideo;
|
@property (nonatomic, assign, readonly) YTSingleVideoController *activeVideo;
|
||||||
|
@property (nonatomic, weak, readwrite) UIViewController *activeVideoPlayerOverlay;
|
||||||
@property (nonatomic, weak, readwrite) UIViewController *parentViewController;
|
@property (nonatomic, weak, readwrite) UIViewController *parentViewController;
|
||||||
@property (readonly, nonatomic) NSString *contentVideoID;
|
@property (nonatomic, weak, readwrite) UIViewController *UIDelegate;
|
||||||
- (void)setActiveCaptionTrack:(id)arg1;
|
@property (nonatomic, readonly) NSString *contentVideoID;
|
||||||
|
- (void)setActiveCaptionTrack:(id)track;
|
||||||
|
- (void)setPlaybackRate:(CGFloat)rate;
|
||||||
- (void)shortsToRegular;
|
- (void)shortsToRegular;
|
||||||
- (void)autoFullscreen;
|
- (void)autoFullscreen;
|
||||||
- (void)turnOffCaptions;
|
- (void)turnOffCaptions;
|
||||||
|
- (void)setAutoSpeed;
|
||||||
- (void)autoQuality;
|
- (void)autoQuality;
|
||||||
|
- (void)play;
|
||||||
|
- (void)pause;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface YTPlayerView : UIView
|
@interface YTPlayerView : UIView
|
||||||
@property (nonatomic, weak, readwrite) YTPlayerViewController *playerViewDelegate;
|
@property (nonatomic, weak, readwrite) YTPlayerViewController *playerViewDelegate;
|
||||||
|
@property (nonatomic, strong, readwrite) UIView *overlayView;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTMainAppControlsOverlayView : UIView
|
||||||
|
@property (nonatomic, strong, readwrite) YTPlayerViewController *playerViewController;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTReelWatchRootViewController : UIViewController
|
||||||
|
@property (nonatomic, weak, readwrite) YTScrollableNavigationController *navigationController;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTReelWatchPlaybackOverlayView : UIView
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTReelContentView : UIView
|
||||||
|
@property (nonatomic, assign, readonly) YTReelWatchPlaybackOverlayView *playbackOverlay;
|
||||||
- (void)turnShortsOnlyModeOff:(UILongPressGestureRecognizer *)gesture;
|
- (void)turnShortsOnlyModeOff:(UILongPressGestureRecognizer *)gesture;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
@interface YTReelPlayerViewController : UIViewController
|
||||||
|
@property (nonatomic, strong, readwrite) YTPlayerViewController *player;
|
||||||
|
- (void)reelContentViewRequestsAdvanceToNextVideo:(id)video;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTShortsPlayerViewController : YTReelPlayerViewController
|
||||||
|
@property (nonatomic, weak, readwrite) YTScrollableNavigationController *navigationController;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTPivotBarViewController ()
|
||||||
|
@property (nonatomic, weak, readwrite) YTShortsPlayerViewController *scrubberDelegate;
|
||||||
|
@end
|
||||||
|
|
||||||
@interface YTEngagementPanelIdentifier : NSObject
|
@interface YTEngagementPanelIdentifier : NSObject
|
||||||
@property (nonatomic, copy, readonly) NSString *identifierString;
|
@property (nonatomic, copy, readonly) NSString *identifierString;
|
||||||
@end
|
@end
|
||||||
@@ -282,7 +213,8 @@ int kPivotIndex;
|
|||||||
- (void)didTapCopyInfoButton:(UIButton *)sender;
|
- (void)didTapCopyInfoButton:(UIButton *)sender;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface YTSegmentableInlinePlayerBarView
|
@interface YTSegmentableInlinePlayerBarView : UIView
|
||||||
|
@property (nonatomic, assign, readonly) CGFloat totalTime;
|
||||||
@property (nonatomic, assign, readwrite) BOOL enableSnapToChapter;
|
@property (nonatomic, assign, readwrite) BOOL enableSnapToChapter;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@@ -290,7 +222,7 @@ int kPivotIndex;
|
|||||||
- (void)confirmAlertDidPressConfirm;
|
- (void)confirmAlertDidPressConfirm;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface YTReelPlayerButton : UIButton
|
@interface YTReelPlayerButton : YTQTMButton
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface ELMCellNode
|
@interface ELMCellNode
|
||||||
@@ -304,12 +236,6 @@ int kPivotIndex;
|
|||||||
- (void)removeCellsAtIndexPath:(NSIndexPath *)indexPath;
|
- (void)removeCellsAtIndexPath:(NSIndexPath *)indexPath;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// @interface YTReelWatchPlaybackOverlayView : UIView
|
|
||||||
// @end
|
|
||||||
|
|
||||||
// @interface YTReelWatchHeaderView : UIView
|
|
||||||
// @end
|
|
||||||
|
|
||||||
@interface YTReelTransparentStackView : UIStackView
|
@interface YTReelTransparentStackView : UIStackView
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@@ -354,11 +280,6 @@ int kPivotIndex;
|
|||||||
- (void)commentManager:(UILongPressGestureRecognizer *)sender;
|
- (void)commentManager:(UILongPressGestureRecognizer *)sender;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// @interface MLHAMQueuePlayer : NSObject
|
|
||||||
// @property id playerEventCenter;
|
|
||||||
// -(void)setRate:(float)rate;
|
|
||||||
// @end
|
|
||||||
|
|
||||||
@interface YTVarispeedSwitchControllerOption : NSObject
|
@interface YTVarispeedSwitchControllerOption : NSObject
|
||||||
- (id)initWithTitle:(NSString *)title rate:(float)rate;
|
- (id)initWithTitle:(NSString *)title rate:(float)rate;
|
||||||
@end
|
@end
|
||||||
@@ -367,17 +288,42 @@ int kPivotIndex;
|
|||||||
- (void)addActionForOption:(YTVarispeedSwitchControllerOption *)option;
|
- (void)addActionForOption:(YTVarispeedSwitchControllerOption *)option;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface HAMPlayerInternal : NSObject
|
@interface YTLabel : UILabel
|
||||||
- (void)setRate:(float)rate;
|
- (void)setFontAttributes:(id)attributes text:(NSString *)text;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface MLPlayerEventCenter : NSObject
|
@interface YTInlinePlayerScrubUserEducationView : UIView
|
||||||
- (void)broadcastRateChange:(float)rate;
|
@property (nonatomic, assign, readwrite) NSUInteger labelType;
|
||||||
|
- (YTLabel *)userEducationLabel;
|
||||||
|
- (void)setVisible:(BOOL)visible;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface YTMainAppVideoPlayerOverlayViewController : UIViewController
|
@interface YTMainAppVideoPlayerOverlayViewController : UIViewController
|
||||||
|
@property (nonatomic, weak, readwrite) YTPlayerViewController *parentViewController;
|
||||||
|
- (CGFloat)currentPlaybackRate;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTInlinePlayerBarContainerView : UIView
|
||||||
|
@property (nonatomic, strong, readwrite) YTLabel *durationLabel;
|
||||||
|
@property (nonatomic, strong, readwrite) NSString *endTimeString;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTMainAppVideoPlayerOverlayView : UIView
|
||||||
|
@property (nonatomic, assign, readonly) YTInlinePlayerScrubUserEducationView *scrubUserEducationView;
|
||||||
|
@property (nonatomic, strong, readwrite) YTInlinePlayerBarContainerView *playerBar;
|
||||||
|
@property (nonatomic, weak, readwrite) YTMainAppVideoPlayerOverlayViewController *delegate;
|
||||||
|
- (void)speedmasterYtLite:(UILongPressGestureRecognizer *)sender;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTMainAppVideoPlayerOverlayViewController ()
|
||||||
|
@property (nonatomic, assign, readonly) YTMainAppVideoPlayerOverlayView * videoPlayerOverlayView;
|
||||||
@property (readonly, nonatomic) CGFloat mediaTime;
|
@property (readonly, nonatomic) CGFloat mediaTime;
|
||||||
@property (readonly, nonatomic) NSString *videoID;
|
@property (readonly, nonatomic) NSString *videoID;
|
||||||
|
- (void)setPlaybackRate:(CGFloat)rate;
|
||||||
|
- (CGFloat)currentPlaybackRate;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTSpeedmasterController : NSObject
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface YTFormattedStringLabel : UILabel
|
@interface YTFormattedStringLabel : UILabel
|
||||||
@@ -397,6 +343,7 @@ int kPivotIndex;
|
|||||||
- (void)addAction:(YTActionSheetAction *)action;
|
- (void)addAction:(YTActionSheetAction *)action;
|
||||||
- (void)presentFromView:(UIView *)view animated:(BOOL)animated completion:(void(^)(void))completion;
|
- (void)presentFromView:(UIView *)view animated:(BOOL)animated completion:(void(^)(void))completion;
|
||||||
- (void)presentFromViewController:(UIViewController *)vc animated:(BOOL)animated completion:(void(^)(void))completion;
|
- (void)presentFromViewController:(UIViewController *)vc animated:(BOOL)animated completion:(void(^)(void))completion;
|
||||||
|
- (void)dismissViewControllerAnimated:(BOOL)animated completion:(void(^)(void))completion;
|
||||||
|
|
||||||
+ (instancetype)sheetControllerWithParentResponder:(id)parentResponder;
|
+ (instancetype)sheetControllerWithParentResponder:(id)parentResponder;
|
||||||
+ (instancetype)sheetControllerWithParentResponder:(id)parentResponder forcedSheetStyle:(NSInteger)style;
|
+ (instancetype)sheetControllerWithParentResponder:(id)parentResponder forcedSheetStyle:(NSInteger)style;
|
||||||
|
|||||||
+126
@@ -0,0 +1,126 @@
|
|||||||
|
/* YouTube Native Share - An iOS Tweak to replace YouTube's share sheet and remove source identifiers.
|
||||||
|
* Copyright (C) 2024 YouTube Native Share Contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Source code can be found here: https://github.com/jkhsjdhjs/youtube-native-share (Thanks to @jkhsjdhjs)
|
||||||
|
|
||||||
|
#include <UIKit/UIActivityViewController.h>
|
||||||
|
|
||||||
|
#import "../YouTubeHeader/YTUIUtils.h"
|
||||||
|
|
||||||
|
#import "../protobuf/objectivec/GPBDescriptor.h"
|
||||||
|
#import "../protobuf/objectivec/GPBMessage.h"
|
||||||
|
#import "../protobuf/objectivec/GPBUnknownField.h"
|
||||||
|
#import "../protobuf/objectivec/GPBUnknownFieldSet.h"
|
||||||
|
|
||||||
|
#define ytlBool(key) [[[NSUserDefaults alloc] initWithSuiteName:@"com.dvntm.ytlite"] boolForKey:key]
|
||||||
|
|
||||||
|
@interface CustomGPBMessage : GPBMessage
|
||||||
|
+ (instancetype)deserializeFromString:(NSString *)string;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTICommand : GPBMessage
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface ELMPBCommand : GPBMessage
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface ELMPBShowActionSheetCommand : GPBMessage
|
||||||
|
@property (nonatomic, strong, readwrite) ELMPBCommand *onAppear;
|
||||||
|
@property (nonatomic, assign, readwrite) BOOL hasOnAppear;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTIUpdateShareSheetCommand
|
||||||
|
@property (nonatomic, assign, readwrite) BOOL hasSerializedShareEntity;
|
||||||
|
@property (nonatomic, copy, readwrite) NSString *serializedShareEntity;
|
||||||
|
+ (GPBExtensionDescriptor*)updateShareSheetCommand;
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface YTIInnertubeCommandExtensionRoot
|
||||||
|
+ (GPBExtensionDescriptor*)innertubeCommand;
|
||||||
|
@end
|
||||||
|
|
||||||
|
typedef NS_ENUM(NSInteger, ShareEntityType) {
|
||||||
|
ShareEntityFieldVideo = 1,
|
||||||
|
ShareEntityFieldPlaylist = 2,
|
||||||
|
ShareEntityFieldChannel = 3,
|
||||||
|
ShareEntityFieldClip = 8
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline NSString* extractIdWithFormat(GPBUnknownFieldSet *fields, NSInteger fieldNumber, NSString *format) {
|
||||||
|
if (![fields hasField:fieldNumber])
|
||||||
|
return nil;
|
||||||
|
GPBUnknownField *idField = [fields getField:fieldNumber];
|
||||||
|
if ([idField.lengthDelimitedList count] != 1)
|
||||||
|
return nil;
|
||||||
|
NSString *id = [[NSString alloc] initWithData:[idField.lengthDelimitedList firstObject] encoding:NSUTF8StringEncoding];
|
||||||
|
return [NSString stringWithFormat:format, id];
|
||||||
|
}
|
||||||
|
|
||||||
|
%hook ELMPBShowActionSheetCommand
|
||||||
|
- (void)executeWithCommandContext:(id)_context handler:(id)_handler {
|
||||||
|
if (!ytlBool(@"nativeShare"))
|
||||||
|
return %orig;
|
||||||
|
|
||||||
|
if (!self.hasOnAppear)
|
||||||
|
return %orig;
|
||||||
|
GPBExtensionDescriptor *innertubeCommandDescriptor = [%c(YTIInnertubeCommandExtensionRoot) innertubeCommand];
|
||||||
|
if (![self.onAppear hasExtension:innertubeCommandDescriptor])
|
||||||
|
return %orig;
|
||||||
|
YTICommand *innertubeCommand = [self.onAppear getExtension:innertubeCommandDescriptor];
|
||||||
|
GPBExtensionDescriptor *updateShareSheetCommandDescriptor = [%c(YTIUpdateShareSheetCommand) updateShareSheetCommand];
|
||||||
|
if(![innertubeCommand hasExtension:updateShareSheetCommandDescriptor])
|
||||||
|
return %orig;
|
||||||
|
YTIUpdateShareSheetCommand *updateShareSheetCommand = [innertubeCommand getExtension:updateShareSheetCommandDescriptor];
|
||||||
|
if (!updateShareSheetCommand.hasSerializedShareEntity)
|
||||||
|
return %orig;
|
||||||
|
|
||||||
|
GPBMessage *shareEntity = [%c(GPBMessage) deserializeFromString:updateShareSheetCommand.serializedShareEntity];
|
||||||
|
GPBUnknownFieldSet *fields = shareEntity.unknownFields;
|
||||||
|
NSString *shareUrl;
|
||||||
|
|
||||||
|
if ([fields hasField:ShareEntityFieldClip]) {
|
||||||
|
GPBUnknownField *shareEntityClip = [fields getField:ShareEntityFieldClip];
|
||||||
|
if ([shareEntityClip.lengthDelimitedList count] != 1)
|
||||||
|
return %orig;
|
||||||
|
GPBMessage *clipMessage = [%c(GPBMessage) parseFromData:[shareEntityClip.lengthDelimitedList firstObject] error:nil];
|
||||||
|
shareUrl = extractIdWithFormat(clipMessage.unknownFields, 1, @"https://youtube.com/clip/%@");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!shareUrl)
|
||||||
|
shareUrl = extractIdWithFormat(fields, ShareEntityFieldChannel, @"https://youtube.com/channel/%@");
|
||||||
|
|
||||||
|
if (!shareUrl) {
|
||||||
|
shareUrl = extractIdWithFormat(fields, ShareEntityFieldPlaylist, @"%@");
|
||||||
|
if (shareUrl) {
|
||||||
|
if (![shareUrl hasPrefix:@"PL"] && ![shareUrl hasPrefix:@"FL"])
|
||||||
|
shareUrl = [shareUrl stringByAppendingString:@"&playnext=1"];
|
||||||
|
shareUrl = [@"https://youtube.com/playlist?list=" stringByAppendingString:shareUrl];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!shareUrl)
|
||||||
|
shareUrl = extractIdWithFormat(fields, ShareEntityFieldVideo, @"https://youtube.com/watch?v=%@");
|
||||||
|
|
||||||
|
if (!shareUrl)
|
||||||
|
return %orig;
|
||||||
|
|
||||||
|
UIActivityViewController *activityViewController = [[UIActivityViewController alloc]initWithActivityItems:@[shareUrl] applicationActivities:nil];
|
||||||
|
[[%c(YTUIUtils) topViewControllerForPresenting] presentViewController:activityViewController animated:YES completion:^{}];
|
||||||
|
}
|
||||||
|
%end
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 6.7 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 8.2 KiB |
@@ -19,6 +19,8 @@
|
|||||||
"NoSubbarDesc" = "Hides Subbar (All, New to you, Live etc.) under the Navigation bar.";
|
"NoSubbarDesc" = "Hides Subbar (All, New to you, Live etc.) under the Navigation bar.";
|
||||||
"NoYTLogo" = "Remove YouTube logo";
|
"NoYTLogo" = "Remove YouTube logo";
|
||||||
"NoYTLogoDesc" = "Removes YouTube logo in the Navigation bar.";
|
"NoYTLogoDesc" = "Removes YouTube logo in the Navigation bar.";
|
||||||
|
"PremiumYTLogo" = "Set Premium YouTube logo";
|
||||||
|
"PremiumYTLogoDesc" = "Sets Premium YouTube logo in the Navigation bar.";
|
||||||
|
|
||||||
"Overlay" = "Overlay";
|
"Overlay" = "Overlay";
|
||||||
"HideAutoplay" = "Hide Autoplay switch";
|
"HideAutoplay" = "Hide Autoplay switch";
|
||||||
@@ -39,12 +41,18 @@
|
|||||||
"NoFullscreenActionsDesc" = "Disables actions panel in fullscreen mode.";
|
"NoFullscreenActionsDesc" = "Disables actions panel in fullscreen mode.";
|
||||||
"PersistentProgressBar" = "Persistent progress bar";
|
"PersistentProgressBar" = "Persistent progress bar";
|
||||||
"PersistentProgressBarDesc" = "Always shows progress bar in the player.";
|
"PersistentProgressBarDesc" = "Always shows progress bar in the player.";
|
||||||
|
"StockVolumeHUD" = "Stock volume HUD";
|
||||||
|
"StockVolumeHUDDesc" = "Displays system volume HUD in fullscreen.";
|
||||||
"NoRelatedVids" = "No related videos in overlay";
|
"NoRelatedVids" = "No related videos in overlay";
|
||||||
"NoRelatedVidsDesc" = "Removes related videos displayed in the overlay by swiping up.";
|
"NoRelatedVidsDesc" = "Removes related videos displayed in the overlay by swiping up.";
|
||||||
"NoPromotionCards" = "Hide Paid Promotion cards";
|
"NoPromotionCards" = "Hide Paid Promotion cards";
|
||||||
"NoPromotionCardsDesc" = "Hides \"Includes Paid Promotions\" card in promotions included videos.";
|
"NoPromotionCardsDesc" = "Hides \"Includes Paid Promotions\" card in promotions included videos.";
|
||||||
"NoWatermarks" = "Hide Watermarks";
|
"NoWatermarks" = "Hide Watermarks";
|
||||||
"NoWatermarksDesc" = "Hides channel watermarks from the player.";
|
"NoWatermarksDesc" = "Hides channel watermarks from the player.";
|
||||||
|
"VideoEndTime" = "Show playback end time";
|
||||||
|
"VideoEndTimeDesc" = "Adds video playback end time to the player bar.";
|
||||||
|
"24hrFormat" = "24-hour format";
|
||||||
|
"24hrFormatDesc" = "Shows end time in 24-hour format.";
|
||||||
|
|
||||||
"Player" = "Player";
|
"Player" = "Player";
|
||||||
"Miniplayer" = "Enable mini player";
|
"Miniplayer" = "Enable mini player";
|
||||||
@@ -53,7 +61,7 @@
|
|||||||
"PortraitFullscreenDesc" = "Enables portrait fullscreen mode support.";
|
"PortraitFullscreenDesc" = "Enables portrait fullscreen mode support.";
|
||||||
"CopyWithTimestamp" = "Copy timestamped links";
|
"CopyWithTimestamp" = "Copy timestamped links";
|
||||||
"CopyWithTimestampDesc" = "Allows to copy timestamped link to the clipboard by pressing pause button.";
|
"CopyWithTimestampDesc" = "Allows to copy timestamped link to the clipboard by pressing pause button.";
|
||||||
"DisableAutoplay" = "Disable Autoplay videos";
|
"DisableAutoplay" = "Disable autoplay videos";
|
||||||
"DisableAutoplayDesc" = "Prevents video playback after opening.";
|
"DisableAutoplayDesc" = "Prevents video playback after opening.";
|
||||||
"DisableAutoCaptions" = "Disable auto captions";
|
"DisableAutoCaptions" = "Disable auto captions";
|
||||||
"DisableAutoCaptionsDesc" = "Prevents automatic activation of captions.";
|
"DisableAutoCaptionsDesc" = "Prevents automatic activation of captions.";
|
||||||
@@ -65,6 +73,10 @@
|
|||||||
"ExtraSpeedOptionsDesc" = "Adds more video playback speed options to the player menu.";
|
"ExtraSpeedOptionsDesc" = "Adds more video playback speed options to the player menu.";
|
||||||
"DontSnap2Chapter" = "Disable snap to chapter";
|
"DontSnap2Chapter" = "Disable snap to chapter";
|
||||||
"DontSnap2ChapterDesc" = "Disables skipping to the next episode by double-tap gesture.";
|
"DontSnap2ChapterDesc" = "Disables skipping to the next episode by double-tap gesture.";
|
||||||
|
"NoTwoFingerSnapToChapter" = "Disable two finger double tap";
|
||||||
|
"NoTwoFingerSnapToChapterDesc" = "Disables two finger double tap snap to chapter gesture.";
|
||||||
|
"PauseOnOverlay" = "Pause on overlay";
|
||||||
|
"PauseOnOverlayDesc" = "Sets playback on pause if overlay appears.";
|
||||||
"RedProgressBar" = "Red progress bar";
|
"RedProgressBar" = "Red progress bar";
|
||||||
"RedProgressBarDesc" = "Brings back red progress bar.";
|
"RedProgressBarDesc" = "Brings back red progress bar.";
|
||||||
"NoPlayerRemixButton" = "Remove remix button";
|
"NoPlayerRemixButton" = "Remove remix button";
|
||||||
@@ -100,11 +112,13 @@
|
|||||||
"HideUploadButton" = "Hide Upload button";
|
"HideUploadButton" = "Hide Upload button";
|
||||||
"HideUploadButtonDesc" = "Hides Upload button from the Tab bar.";
|
"HideUploadButtonDesc" = "Hides Upload button from the Tab bar.";
|
||||||
"HideLibraryTab" = "Hide Library tab";
|
"HideLibraryTab" = "Hide Library tab";
|
||||||
"HideLibraryTabDesc" = "Hides Library tab from the Tab bar.";
|
"HideLibraryTabDesc" = "Hides Library tab from the Tab bar.\n\nThis tab can be restored by long pressing Home tab.";
|
||||||
|
|
||||||
"Shorts" = "Shorts";
|
"Shorts" = "Shorts";
|
||||||
"ShortsOnlyMode" = "Shorts Only Mode";
|
"ShortsOnlyMode" = "Shorts Only Mode";
|
||||||
"ShortsOnlyModeDesc" = "Limits YouTube functionality to viewing Shorts only.";
|
"ShortsOnlyModeDesc" = "Limits YouTube functionality to viewing Shorts only.";
|
||||||
|
"AutoSkipShorts" = "Auto-skip Shorts";
|
||||||
|
"AutoSkipShortsDesc" = "Moves to the next video when the current video playback finishes.";
|
||||||
"HideShorts" = "Hide Shorts videos";
|
"HideShorts" = "Hide Shorts videos";
|
||||||
"HideShortsDesc" = "Hides Shorts videos from Homepage, Recommended etc. (Not applied to Watch history)";
|
"HideShortsDesc" = "Hides Shorts videos from Homepage, Recommended etc. (Not applied to Watch history)";
|
||||||
"ShortsProgress" = "Enable progress bar";
|
"ShortsProgress" = "Enable progress bar";
|
||||||
@@ -159,6 +173,8 @@
|
|||||||
"CommentManagerDesc" = "Allows to copy comment text and save comment as image by long tap.";
|
"CommentManagerDesc" = "Allows to copy comment text and save comment as image by long tap.";
|
||||||
"FixAlbums" = "Fix covers";
|
"FixAlbums" = "Fix covers";
|
||||||
"FixAlbumsDesc" = "Fixes the display of covers for users from Russia.";
|
"FixAlbumsDesc" = "Fixes the display of covers for users from Russia.";
|
||||||
|
"NativeShare" = "Native share sheet";
|
||||||
|
"NativeShareDesc" = "Uses system share sheet to share media";
|
||||||
"RemovePlayNext" = "Remove \"Play next in queue\"";
|
"RemovePlayNext" = "Remove \"Play next in queue\"";
|
||||||
"RemovePlayNextDesc" = "Removes \"Play next in queue\" option from menu.";
|
"RemovePlayNextDesc" = "Removes \"Play next in queue\" option from menu.";
|
||||||
"RemoveDownloadMenu" = "Remove \"Download\"";
|
"RemoveDownloadMenu" = "Remove \"Download\"";
|
||||||
@@ -190,6 +206,13 @@
|
|||||||
"DisableRTL" = "Disable RTL formatting";
|
"DisableRTL" = "Disable RTL formatting";
|
||||||
"DisableRTLDesc" = "Forcefully displays text in left-to-right (LTR) format for languages that are initially displayed in right-to-left (RTL).";
|
"DisableRTLDesc" = "Forcefully displays text in left-to-right (LTR) format for languages that are initially displayed in right-to-left (RTL).";
|
||||||
|
|
||||||
|
"HoldToSpeed" = "Hold to speed";
|
||||||
|
"Disable" = "Disable";
|
||||||
|
"Disabled" = "Disabled";
|
||||||
|
"PlaybackSpeed" = "Playback Speed";
|
||||||
|
|
||||||
|
"DefaultPlaybackRate" = "Default playback rate";
|
||||||
|
|
||||||
"PlaybackQualityOnWiFi" = "Playback quality on WiFi";
|
"PlaybackQualityOnWiFi" = "Playback quality on WiFi";
|
||||||
"PlaybackQualityOnCellular" = "Playback quality on Cellular";
|
"PlaybackQualityOnCellular" = "Playback quality on Cellular";
|
||||||
"SelectQuality" = "Select Quality";
|
"SelectQuality" = "Select Quality";
|
||||||
@@ -207,10 +230,13 @@
|
|||||||
|
|
||||||
"SupportDevelopment" = "Support development";
|
"SupportDevelopment" = "Support development";
|
||||||
"SupportDevelopmentDesc" = "If you like YTLite and would like to support its development, you can do it using any of convenient ways below.\nThanks❤";
|
"SupportDevelopmentDesc" = "If you like YTLite and would like to support its development, you can do it using any of convenient ways below.\nThanks❤";
|
||||||
|
"Contributors" = "Contributors";
|
||||||
|
"OpenSourceLibs" = "Open Source Libraries";
|
||||||
"Version" = "Version";
|
"Version" = "Version";
|
||||||
"About" = "About";
|
"About" = "About";
|
||||||
"Credits" = "Credits";
|
"Credits" = "Credits";
|
||||||
"Developer" = "YTLite developer";
|
"Developer" = "YTLite developer";
|
||||||
|
"SpecialThanks" = "Special thanks";
|
||||||
"ChineseSimplified" = "Chinese (Simplified) localization";
|
"ChineseSimplified" = "Chinese (Simplified) localization";
|
||||||
"ChineseTraditional" = "Chinese (Traditional) localization";
|
"ChineseTraditional" = "Chinese (Traditional) localization";
|
||||||
"French" = "French localization";
|
"French" = "French localization";
|
||||||
@@ -225,6 +251,8 @@
|
|||||||
"ResetMessage" = "This option will reset YTLite settings to default and close YouTube.\n\nAre you sure you want to continue?";
|
"ResetMessage" = "This option will reset YTLite settings to default and close YouTube.\n\nAre you sure you want to continue?";
|
||||||
"ShortsOnlyWarning" = "Are you sure you want to activate this mode?\n\nIn this mode, you will only be able to watch Shorts videos and won't be able to do anything else.\n\nYou can disable Shorts Only Mode by long pressing with two fingers in the Shorts player.";
|
"ShortsOnlyWarning" = "Are you sure you want to activate this mode?\n\nIn this mode, you will only be able to watch Shorts videos and won't be able to do anything else.\n\nYou can disable Shorts Only Mode by long pressing with two fingers in the Shorts player.";
|
||||||
"ShortsModeTurnedOff" = "Shorts Only Mode has been turned off";
|
"ShortsModeTurnedOff" = "Shorts Only Mode has been turned off";
|
||||||
|
"LibraryAdded" = "The You/Library tab has been restored";
|
||||||
|
"LibraryRemoved" = "The You/Library tab has been removed";
|
||||||
"Yes" = "Yes";
|
"Yes" = "Yes";
|
||||||
"No" = "No";
|
"No" = "No";
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
"NoSubbarDesc" = "Oculta la subbarra (Todo, Novedades para ti, En directo, etc.) debajo de la barra de navegación.";
|
"NoSubbarDesc" = "Oculta la subbarra (Todo, Novedades para ti, En directo, etc.) debajo de la barra de navegación.";
|
||||||
"NoYTLogo" = "Eliminar el logo de YouTube";
|
"NoYTLogo" = "Eliminar el logo de YouTube";
|
||||||
"NoYTLogoDesc" = "Elimina el logo de YouTube de la barra de navegación.";
|
"NoYTLogoDesc" = "Elimina el logo de YouTube de la barra de navegación.";
|
||||||
|
"PremiumYTLogo" = "Set Premium YouTube logo";
|
||||||
|
"PremiumYTLogoDesc" = "Sets Premium YouTube logo in the Navigation bar.";
|
||||||
|
|
||||||
"Overlay" = "Superposición";
|
"Overlay" = "Superposición";
|
||||||
"HideAutoplay" = "Ocultar interruptor de reproducción automática";
|
"HideAutoplay" = "Ocultar interruptor de reproducción automática";
|
||||||
@@ -39,12 +41,18 @@
|
|||||||
"NoFullscreenActionsDesc" = "Desactiva el panel de acciones en el modo de pantalla completa.";
|
"NoFullscreenActionsDesc" = "Desactiva el panel de acciones en el modo de pantalla completa.";
|
||||||
"PersistentProgressBar" = "Barra de progreso persistente";
|
"PersistentProgressBar" = "Barra de progreso persistente";
|
||||||
"PersistentProgressBarDesc" = "Muestra siempre la barra de progreso en el reproductor.";
|
"PersistentProgressBarDesc" = "Muestra siempre la barra de progreso en el reproductor.";
|
||||||
|
"StockVolumeHUD" = "Stock volume HUD";
|
||||||
|
"StockVolumeHUDDesc" = "Displays system volume HUD in fullscreen.";
|
||||||
"NoRelatedVids" = "Sin vídeos relacionados en la superposición";
|
"NoRelatedVids" = "Sin vídeos relacionados en la superposición";
|
||||||
"NoRelatedVidsDesc" = "Elimina los vídeos relacionados que se muestran en la superposición al deslizar hacia arriba.";
|
"NoRelatedVidsDesc" = "Elimina los vídeos relacionados que se muestran en la superposición al deslizar hacia arriba.";
|
||||||
"NoPromotionCards" = "Ocultar tarjetas de promoción pagada";
|
"NoPromotionCards" = "Ocultar tarjetas de promoción pagada";
|
||||||
"NoPromotionCardsDesc" = "Oculta la tarjeta \"Incluye promociones pagadas\" en los vídeos que incluyen promociones pagadas.";
|
"NoPromotionCardsDesc" = "Oculta la tarjeta \"Incluye promociones pagadas\" en los vídeos que incluyen promociones pagadas.";
|
||||||
"NoWatermarks" = "Ocultar marcas de agua";
|
"NoWatermarks" = "Ocultar marcas de agua";
|
||||||
"NoWatermarksDesc" = "Oculta las marcas de agua del canal del reproductor.";
|
"NoWatermarksDesc" = "Oculta las marcas de agua del canal del reproductor.";
|
||||||
|
"VideoEndTime" = "Show playback end time";
|
||||||
|
"VideoEndTimeDesc" = "Adds video playback end time to the player bar.";
|
||||||
|
"24hrFormat" = "24-hour format";
|
||||||
|
"24hrFormatDesc" = "Shows end time in 24-hour format.";
|
||||||
|
|
||||||
"Player" = "Reproductor";
|
"Player" = "Reproductor";
|
||||||
"Miniplayer" = "Activar mini reproductor";
|
"Miniplayer" = "Activar mini reproductor";
|
||||||
@@ -65,14 +73,18 @@
|
|||||||
"ExtraSpeedOptionsDesc" = "Agrega más opciones de velocidad de reproducción de vídeo al menú del reproductor.";
|
"ExtraSpeedOptionsDesc" = "Agrega más opciones de velocidad de reproducción de vídeo al menú del reproductor.";
|
||||||
"DontSnap2Chapter" = "Desactivar saltar al siguiente capítulo";
|
"DontSnap2Chapter" = "Desactivar saltar al siguiente capítulo";
|
||||||
"DontSnap2ChapterDesc" = "Desactiva el salto al siguiente episodio mediante el gesto de doble toque.";
|
"DontSnap2ChapterDesc" = "Desactiva el salto al siguiente episodio mediante el gesto de doble toque.";
|
||||||
|
"NoTwoFingerSnapToChapter" = "Disable two finger double tap";
|
||||||
|
"NoTwoFingerSnapToChapterDesc" = "Disables two finger double tap snap to chapter gesture.";
|
||||||
|
"PauseOnOverlay" = "Pause on overlay";
|
||||||
|
"PauseOnOverlayDesc" = "Sets playback on pause if overlay appears.";
|
||||||
"RedProgressBar" = "Barra de progreso roja";
|
"RedProgressBar" = "Barra de progreso roja";
|
||||||
"RedProgressBarDesc" = "Devuelve la barra de progreso roja.";
|
"RedProgressBarDesc" = "Devuelve la barra de progreso roja.";
|
||||||
"NoPlayerRemixButton" = "Quitar botón Remix";
|
"NoPlayerRemixButton" = "Remove remix button";
|
||||||
"NoPlayerRemixButtonDesc" = "Elimina el botón Remix situado debajo del reproductor.";
|
"NoPlayerRemixButtonDesc" = "Removes remix button under the player.";
|
||||||
"NoPlayerClipButton" = "Elimina el botón de clip";
|
"NoPlayerClipButton" = "Remove clip button";
|
||||||
"NoPlayerClipButtonDesc" = "Elimina botón de clip debajo del reproductor";
|
"NoPlayerClipButtonDesc" = "Removes clip button under the player.";
|
||||||
"NoPlayerDownloadButton" = "Elimina el botón de descarga";
|
"NoPlayerDownloadButton" = "Remove download button";
|
||||||
"NoPlayerDownloadButtonDesc" = "Elimina el botón de descarga situado bajo el reproductor";
|
"NoPlayerDownloadButtonDesc" = "Removes download button under the player.";
|
||||||
"NoHints" = "Desactivar sugerencias";
|
"NoHints" = "Desactivar sugerencias";
|
||||||
"NoHintsDesc" = "Desactiva las sugerencias del autor que aparecen en la esquina superior derecha durante la reproducción.";
|
"NoHintsDesc" = "Desactiva las sugerencias del autor que aparecen en la esquina superior derecha durante la reproducción.";
|
||||||
"NoFreeZoom" = "Desactivar gesto de zoom libre";
|
"NoFreeZoom" = "Desactivar gesto de zoom libre";
|
||||||
@@ -105,6 +117,8 @@
|
|||||||
"Shorts" = "Shorts";
|
"Shorts" = "Shorts";
|
||||||
"ShortsOnlyMode" = "Modo sólo Shorts";
|
"ShortsOnlyMode" = "Modo sólo Shorts";
|
||||||
"ShortsOnlyModeDesc" = "Limita la funcionalidad de YouTube únicamente a la visualización de Shorts.";
|
"ShortsOnlyModeDesc" = "Limita la funcionalidad de YouTube únicamente a la visualización de Shorts.";
|
||||||
|
"AutoSkipShorts" = "Auto-skip Shorts";
|
||||||
|
"AutoSkipShortsDesc" = "Moves to the next video when the current video playback finishes.";
|
||||||
"HideShorts" = "Ocultar vídeos Shorts";
|
"HideShorts" = "Ocultar vídeos Shorts";
|
||||||
"HideShortsDesc" = "Oculta los vídeos Shorts de la página de inicio, Recomendados, etc. (No se aplica al historial de reproducciones)";
|
"HideShortsDesc" = "Oculta los vídeos Shorts de la página de inicio, Recomendados, etc. (No se aplica al historial de reproducciones)";
|
||||||
"ShortsProgress" = "Activar barra de progreso";
|
"ShortsProgress" = "Activar barra de progreso";
|
||||||
@@ -149,32 +163,34 @@
|
|||||||
"HideShortsAudioTrackDesc" = "Oculta la pista de audio debajo de la descripción de Shorts.";
|
"HideShortsAudioTrackDesc" = "Oculta la pista de audio debajo de la descripción de Shorts.";
|
||||||
|
|
||||||
"Other" = "Otro";
|
"Other" = "Otro";
|
||||||
"CopyVideoInfo" = "Copia la información del vídeo";
|
"CopyVideoInfo" = "Copy video information";
|
||||||
"CopyVideoInfoDesc" = "Añade un botón para copiar el título y la descripción del vídeo en el panel de descripción del vídeo.";
|
"CopyVideoInfoDesc" = "Adds button to copy video title and description into Video Description panel.";
|
||||||
"PostManager" = "Guardar información de post";
|
"PostManager" = "Save post information";
|
||||||
"PostManagerDesc" = "Permite copiar el texto de la entrada y guardarla como imagen pulsando prolongadamente";
|
"PostManagerDesc" = "Allows to copy post text and save post as image by long tap.";
|
||||||
"SaveProfilePhoto" = "Guardar foto de perfil";
|
"SaveProfilePhoto" = "Guardar foto de perfil";
|
||||||
"SaveProfilePhotoDesc" = "Guarda la imagen de perfil en la aplicación Fotos con un toque prolongado";
|
"SaveProfilePhotoDesc" = "Guarda la imagen de perfil en la aplicación Fotos con un toque prolongado";
|
||||||
"CommentManager" = "Guardar información de comentarios";
|
"CommentManager" = "Save comment information";
|
||||||
"CommentManagerDesc" = "Permite copiar texto de comentario y guardar comentario como imagen mediante pulsación larga".;
|
"CommentManagerDesc" = "Allows to copy comment text and save comment as image by long tap.";
|
||||||
"FixAlbums" = "Arreglar portadas";
|
"FixAlbums" = "Arreglar portadas";
|
||||||
"FixAlbumsDesc" = "Corrige la visualización de portadas para usuarios de Rusia";
|
"FixAlbumsDesc" = "Corrige la visualización de portadas para usuarios de Rusia";
|
||||||
|
"NativeShare" = "Native share sheet";
|
||||||
|
"NativeShareDesc" = "Uses system share sheet to share media";
|
||||||
"RemovePlayNext" = "Eliminar \"Reproducir siguiente en cola\"";
|
"RemovePlayNext" = "Eliminar \"Reproducir siguiente en cola\"";
|
||||||
"RemovePlayNextDesc" = "Elimina la opción \"Reproducir siguiente en cola\" del menú.";
|
"RemovePlayNextDesc" = "Elimina la opción \"Reproducir siguiente en cola\" del menú.";
|
||||||
"RemoveDownloadMenu" = "Quitar \"Descargar\"";
|
"RemoveDownloadMenu" = "Remove \"Download\"";
|
||||||
"RemoveDownloadMenuDesc" = "Elimina la opción \"Descargar\" del menú.";
|
"RemoveDownloadMenuDesc" = "Removes \"Download\" option from menu.";
|
||||||
"RemoveWatchLaterMenu" = "Eliminar \"Guardar para ver después\"";
|
"RemoveWatchLaterMenu" = "Remove \"Save to Watch Later\"";
|
||||||
"RemoveWatchLaterMenuDesc" = "Elimina del menú la opción \"Guardar para ver más tarde\"";
|
"RemoveWatchLaterMenuDesc" = "Removes \"Save to Watch Later\" option from menu.";
|
||||||
"RemoveSaveToPlaylistMenu" = "Quitar \"Guardar en lista de reproducción\"";
|
"RemoveSaveToPlaylistMenu" = "Remove \"Save to playlist\"";
|
||||||
"RemoveSaveToPlaylistMenuDesc" = "Elimina la opción \"Guardar en lista de reproducción\" del menú.";
|
"RemoveSaveToPlaylistMenuDesc" = "Removes \"Save to playlist\" option from menu.";
|
||||||
"RemoveShareMenu" = "Eliminar \"Compartir\"";
|
"RemoveShareMenu" = "Remove \"Share\"";
|
||||||
"RemoveShareMenuDesc" = "Elimina la opción \"Compartir\" del menú.";
|
"RemoveShareMenuDesc" = "Removes \"Share\" option from menu.";
|
||||||
"RemoveNotInterestedMenu" = "Eliminar \"No me interesa\"";
|
"RemoveNotInterestedMenu" = "Remove \"Not interested\"";
|
||||||
"RemoveNotInterestedMenuDesc" = "Elimina la opción \"No me interesa\" del menú.";
|
"RemoveNotInterestedMenuDesc" = "Removes \"Not interested\" option from menu.";
|
||||||
"RemoveDontRecommendMenu" = "Quitar \"No recomiendo canal\"";
|
"RemoveDontRecommendMenu" = "Remove \"Don't recommend channel\"";
|
||||||
"RemoveDontRecommendMenuDesc" = "Elimina del menú la opción \"No recomiendo canal\"";
|
"RemoveDontRecommendMenuDesc" = "Removes \"Don't recommend channel\" option from menu.";
|
||||||
"RemoveReportMenu" = "Eliminar \"Reportar\"";
|
"RemoveReportMenu" = "Remove \"Report\"";
|
||||||
"RemoveReportMenuDesc" = "Elimina la opción \"Reportar\" del menú.";
|
"RemoveReportMenuDesc" = "Removes \"Report\" option from menu.";
|
||||||
"NoContinueWatching" = "Eliminar \"Continuar viendo\"";
|
"NoContinueWatching" = "Eliminar \"Continuar viendo\"";
|
||||||
"NoContinueWatchingDesc" = "Elimina la sección \"Continuar viendo\" que contiene videos sin terminar de la página de inicio.";
|
"NoContinueWatchingDesc" = "Elimina la sección \"Continuar viendo\" que contiene videos sin terminar de la página de inicio.";
|
||||||
"NoSearchHistory" = "Ocultar el historial de búsqueda";
|
"NoSearchHistory" = "Ocultar el historial de búsqueda";
|
||||||
@@ -190,11 +206,18 @@
|
|||||||
"DisableRTL" = "Desactivar el formato RTL";
|
"DisableRTL" = "Desactivar el formato RTL";
|
||||||
"DisableRTLDesc" = "Muestra forzosamente el texto en formato de izquierda a derecha (LTR) para los idiomas que se muestran inicialmente en formato de derecha a izquierda (RTL).";
|
"DisableRTLDesc" = "Muestra forzosamente el texto en formato de izquierda a derecha (LTR) para los idiomas que se muestran inicialmente en formato de derecha a izquierda (RTL).";
|
||||||
|
|
||||||
"PlaybackQualityOnWiFi" = "Calidad de reproducción en WiFi";
|
"HoldToSpeed" = "Hold to speed";
|
||||||
"PlaybackQualityOnCellular" = "Calidad de reproducción en Cellular";
|
"Disable" = "Disable";
|
||||||
"SelectQuality" = "Seleccionar calidad";
|
"Disabled" = "Disabled";
|
||||||
"Default" = "Por defecto";
|
"PlaybackSpeed" = "Playback Speed";
|
||||||
"Best" = "Mejor";
|
|
||||||
|
"DefaultPlaybackRate" = "Default playback rate";
|
||||||
|
|
||||||
|
"PlaybackQualityOnWiFi" = "Playback quality on WiFi";
|
||||||
|
"PlaybackQualityOnCellular" = "Playback quality on Cellular";
|
||||||
|
"SelectQuality" = "Select Quality";
|
||||||
|
"Default" = "Default";
|
||||||
|
"Best" = "Best";
|
||||||
|
|
||||||
"Startup" = "Página de inicio";
|
"Startup" = "Página de inicio";
|
||||||
"Home" = "Inicio";
|
"Home" = "Inicio";
|
||||||
@@ -205,12 +228,15 @@
|
|||||||
"Warning" = "Advertencia";
|
"Warning" = "Advertencia";
|
||||||
"TabIsHidden" = "No se puede seleccionar una pestaña oculta como página de inicio";
|
"TabIsHidden" = "No se puede seleccionar una pestaña oculta como página de inicio";
|
||||||
|
|
||||||
"SupportDevelopment" = "Apoya el desarrollo";
|
"SupportDevelopment" = "Support development";
|
||||||
"SupportDevelopmentDesc" = "Si le gusta YTLite y quiere apoyar su desarrollo, puede hacerlo de cualquiera de las formas que se indican a continuación.\nGracias❤";
|
"SupportDevelopmentDesc" = "If you like YTLite and would like to support its development, you can do it using any of convenient ways below.\nThanks❤";
|
||||||
|
"Contributors" = "Contributors";
|
||||||
|
"OpenSourceLibs" = "Open Source Libraries";
|
||||||
"Version" = "Versión";
|
"Version" = "Versión";
|
||||||
"About" = "Acerca de";
|
"About" = "Acerca de";
|
||||||
"Credits" = "Créditos";
|
"Credits" = "Créditos";
|
||||||
"Developer" = "Desarrollador de YTLite";
|
"Developer" = "Desarrollador de YTLite";
|
||||||
|
"SpecialThanks" = "Special thanks";
|
||||||
"ChineseSimplified" = "Traducción: Chino (Simplificado)";
|
"ChineseSimplified" = "Traducción: Chino (Simplificado)";
|
||||||
"ChineseTraditional" = "Traducción: Chino (Tradicional)";
|
"ChineseTraditional" = "Traducción: Chino (Tradicional)";
|
||||||
"French" = "Traducción: Frances";
|
"French" = "Traducción: Frances";
|
||||||
@@ -225,24 +251,26 @@
|
|||||||
"ResetMessage" = "Esta opción restablecerá la configuración de YTLite a los valores predeterminados y cerrará YouTube.\n\n¿Estás seguro de que deseas continuar?";
|
"ResetMessage" = "Esta opción restablecerá la configuración de YTLite a los valores predeterminados y cerrará YouTube.\n\n¿Estás seguro de que deseas continuar?";
|
||||||
"ShortsOnlyWarning" = "¿Estás seguro de que quieres activar este modo?\n\nEn este modo, sólo podrás ver Shorts y no podrás hacer nada más.\n\nPuedes desactivar el modo sólo Shorts realizando una pulsación larga con dos dedos en el reproductor de Shorts.";
|
"ShortsOnlyWarning" = "¿Estás seguro de que quieres activar este modo?\n\nEn este modo, sólo podrás ver Shorts y no podrás hacer nada más.\n\nPuedes desactivar el modo sólo Shorts realizando una pulsación larga con dos dedos en el reproductor de Shorts.";
|
||||||
"ShortsModeTurnedOff" = "Se ha desactivado el modo de sólo Shorts";
|
"ShortsModeTurnedOff" = "Se ha desactivado el modo de sólo Shorts";
|
||||||
|
"LibraryAdded" = "The You/Library tab has been restored";
|
||||||
|
"LibraryRemoved" = "The You/Library tab has been removed";
|
||||||
"Yes" = "Sí";
|
"Yes" = "Sí";
|
||||||
"No" = "No";
|
"No" = "No";
|
||||||
|
|
||||||
"SelectAction" = "Seleccionar acción";
|
"SelectAction" = "Select action";
|
||||||
"CopyTitle" = "Copiar título";
|
"CopyTitle" = "Copy title";
|
||||||
"CopyDescription" = "Copiar descripción";
|
"CopyDescription" = "Copy description";
|
||||||
"CopyPostText" = "Copiar texto de post";
|
"CopyPostText" = "Copy post text";
|
||||||
"SaveCurrentImage" = "Guardar imagen actual";
|
"SaveCurrentImage" = "Save current image";
|
||||||
"CopyCurrentImage" = "Copiar imagen actual";
|
"CopyCurrentImage" = "Copy current image";
|
||||||
"SavePostAsImage" = "Guardar post como imagen";
|
"SavePostAsImage" = "Save post as image";
|
||||||
"CopyPostAsImage" = "Copiar post como imagen";
|
"CopyPostAsImage" = "Copy post as image";
|
||||||
"CopyCommentText" = "Copiar texto de comentario";
|
"CopyCommentText" = "Copy comment text";
|
||||||
"SaveCommentAsImage" = "Guardar comentario como imagen";
|
"SaveCommentAsImage" = "Save comment as image";
|
||||||
"CopyCommentAsImage" = "Copiar comentario como imagen";
|
"CopyCommentAsImage" = "Copy comment as image";
|
||||||
"SaveProfilePicture" = "Guardar imagen de perfil";
|
"SaveProfilePicture" = "Save profile picture";
|
||||||
"CopyProfilePicture" = "Copiar imagen de perfil";
|
"CopyProfilePicture" = "Copy profile picture";
|
||||||
"Cancel" = "Cancelar";
|
"Cancel" = "Cancel";
|
||||||
"Copied" = "Copiado al portapapeles";
|
"Copied" = "Copiado al portapapeles";
|
||||||
|
"Done" = "Done";
|
||||||
"Saved" = "Guardado en Fotos";
|
"Saved" = "Guardado en Fotos";
|
||||||
"Done" = "Hecho";
|
"Error" = "Error";
|
||||||
"Error" = "Error";
|
|
||||||
@@ -19,6 +19,8 @@
|
|||||||
"NoSubbarDesc" = "Masque la sous-barre (Tous, Nouveautés, En direct, etc.) sous la barre de navigation.";
|
"NoSubbarDesc" = "Masque la sous-barre (Tous, Nouveautés, En direct, etc.) sous la barre de navigation.";
|
||||||
"NoYTLogo" = "Supprimer le logo YouTube";
|
"NoYTLogo" = "Supprimer le logo YouTube";
|
||||||
"NoYTLogoDesc" = "Supprime le logo YouTube dans la barre de navigation.";
|
"NoYTLogoDesc" = "Supprime le logo YouTube dans la barre de navigation.";
|
||||||
|
"PremiumYTLogo" = "Set Premium YouTube logo";
|
||||||
|
"PremiumYTLogoDesc" = "Sets Premium YouTube logo in the Navigation bar.";
|
||||||
|
|
||||||
"Overlay" = "Overlay";
|
"Overlay" = "Overlay";
|
||||||
"HideAutoplay" = "Masquer le toggle de lecture automatique";
|
"HideAutoplay" = "Masquer le toggle de lecture automatique";
|
||||||
@@ -39,12 +41,18 @@
|
|||||||
"NoFullscreenActionsDesc" = "Désactive le panneau d'actions en mode plein écran.";
|
"NoFullscreenActionsDesc" = "Désactive le panneau d'actions en mode plein écran.";
|
||||||
"PersistentProgressBar" = "Barre de progression persistante";
|
"PersistentProgressBar" = "Barre de progression persistante";
|
||||||
"PersistentProgressBarDesc" = " Affiche toujours la barre de progression dans le lecteur ";
|
"PersistentProgressBarDesc" = " Affiche toujours la barre de progression dans le lecteur ";
|
||||||
|
"StockVolumeHUD" = "Stock volume HUD";
|
||||||
|
"StockVolumeHUDDesc" = "Displays system volume HUD in fullscreen.";
|
||||||
"NoRelatedVids" = "Pas de vidéos associées dans l'overlay";
|
"NoRelatedVids" = "Pas de vidéos associées dans l'overlay";
|
||||||
"NoRelatedVidsDesc" = "Supprime les vidéos associées affichées dans l'overlay en faisant glisser vers le haut.";
|
"NoRelatedVidsDesc" = "Supprime les vidéos associées affichées dans l'overlay en faisant glisser vers le haut.";
|
||||||
"NoPromotionCards" = "Masquer les cartes de promotion payante";
|
"NoPromotionCards" = "Masquer les cartes de promotion payante";
|
||||||
"NoPromotionCardsDesc" = "Masque la carte \"Comprend des promotions payantes\" dans les vidéos avec promotions incluses.";
|
"NoPromotionCardsDesc" = "Masque la carte \"Comprend des promotions payantes\" dans les vidéos avec promotions incluses.";
|
||||||
"NoWatermarks" = "Masquer les filigranes";
|
"NoWatermarks" = "Masquer les filigranes";
|
||||||
"NoWatermarksDesc" = "Masque les filigranes de chaîne dans le lecteur.";
|
"NoWatermarksDesc" = "Masque les filigranes de chaîne dans le lecteur.";
|
||||||
|
"VideoEndTime" = "Show playback end time";
|
||||||
|
"VideoEndTimeDesc" = "Adds video playback end time to the player bar.";
|
||||||
|
"24hrFormat" = "24-hour format";
|
||||||
|
"24hrFormatDesc" = "Shows end time in 24-hour format.";
|
||||||
|
|
||||||
"Player" = "Lecteur";
|
"Player" = "Lecteur";
|
||||||
"Miniplayer" = "Activer le mini-lecteur";
|
"Miniplayer" = "Activer le mini-lecteur";
|
||||||
@@ -65,14 +73,18 @@
|
|||||||
"ExtraSpeedOptionsDesc" = "Ajoute des options de vitesse de lecture supplémentaires au menu de vitesse.";
|
"ExtraSpeedOptionsDesc" = "Ajoute des options de vitesse de lecture supplémentaires au menu de vitesse.";
|
||||||
"DontSnap2Chapter" = "Désactiver la coupure au chapitre";
|
"DontSnap2Chapter" = "Désactiver la coupure au chapitre";
|
||||||
"DontSnap2ChapterDesc" = "Désactive le passage à l'épisode suivant en double tapant.";
|
"DontSnap2ChapterDesc" = "Désactive le passage à l'épisode suivant en double tapant.";
|
||||||
|
"NoTwoFingerSnapToChapter" = "Disable two finger double tap";
|
||||||
|
"NoTwoFingerSnapToChapterDesc" = "Disables two finger double tap snap to chapter gesture.";
|
||||||
|
"PauseOnOverlay" = "Pause on overlay";
|
||||||
|
"PauseOnOverlayDesc" = "Sets playback on pause if overlay appears.";
|
||||||
"RedProgressBar" = "Barre de progression rouge";
|
"RedProgressBar" = "Barre de progression rouge";
|
||||||
"RedProgressBarDesc" = "Ramène la barre de progression rouge.";
|
"RedProgressBarDesc" = "Ramène la barre de progression rouge.";
|
||||||
"NoPlayerRemixButton" = "Supprimer le bouton de remix";
|
"NoPlayerRemixButton" = "Remove remix button";
|
||||||
"NoPlayerRemixButtonDesc" = "Supprime le bouton de remix sous le lecteur.";
|
"NoPlayerRemixButtonDesc" = "Removes remix button under the player.";
|
||||||
"NoPlayerClipButton" = "Supprimer le bouton de clip";
|
"NoPlayerClipButton" = "Remove clip button";
|
||||||
"NoPlayerClipButtonDesc" = "Supprime le bouton de clip sous le lecteur.";
|
"NoPlayerClipButtonDesc" = "Removes clip button under the player.";
|
||||||
"NoPlayerDownloadButton" = "Supprimer le bouton de téléchargement";
|
"NoPlayerDownloadButton" = "Remove download button";
|
||||||
"NoPlayerDownloadButtonDesc" = "Supprime le bouton de téléchargement sous le lecteur.";
|
"NoPlayerDownloadButtonDesc" = "Removes download button under the player.";
|
||||||
"NoHints" = "Désactiver les indices";
|
"NoHints" = "Désactiver les indices";
|
||||||
"NoHintsDesc" = "Désactive les indices de l'auteur qui apparaissent dans le coin supérieur droit pendant la lecture.";
|
"NoHintsDesc" = "Désactive les indices de l'auteur qui apparaissent dans le coin supérieur droit pendant la lecture.";
|
||||||
"NoFreeZoom" = "Désactiver le geste de zoom libre";
|
"NoFreeZoom" = "Désactiver le geste de zoom libre";
|
||||||
@@ -105,6 +117,8 @@
|
|||||||
"Shorts" = "Shorts";
|
"Shorts" = "Shorts";
|
||||||
"ShortsOnlyMode" = "Mode Shorts uniquement";
|
"ShortsOnlyMode" = "Mode Shorts uniquement";
|
||||||
"ShortsOnlyModeDesc" = "Limite les fonctionnalités de YouTube à la visualisation des Shorts uniquement.";
|
"ShortsOnlyModeDesc" = "Limite les fonctionnalités de YouTube à la visualisation des Shorts uniquement.";
|
||||||
|
"AutoSkipShorts" = "Auto-skip Shorts";
|
||||||
|
"AutoSkipShortsDesc" = "Moves to the next video when the current video playback finishes.";
|
||||||
"HideShorts" = "Masquer les vidéos Shorts";
|
"HideShorts" = "Masquer les vidéos Shorts";
|
||||||
"HideShortsDesc" = "Masque les vidéos Shorts de la page d'accueil, des recommandations, etc. (Non appliqué à l'historique de visionnage)";
|
"HideShortsDesc" = "Masque les vidéos Shorts de la page d'accueil, des recommandations, etc. (Non appliqué à l'historique de visionnage)";
|
||||||
"ShortsProgress" = "Activer la barre de progression";
|
"ShortsProgress" = "Activer la barre de progression";
|
||||||
@@ -151,30 +165,32 @@
|
|||||||
"Other" = "Autre";
|
"Other" = "Autre";
|
||||||
"CopyVideoInfo" = "Copier les informations vidéo";
|
"CopyVideoInfo" = "Copier les informations vidéo";
|
||||||
"CopyVideoInfoDesc" = "Ajout d'un bouton permettant de copier le titre et la description de la vidéo dans le panneau Description de la vidéo.";
|
"CopyVideoInfoDesc" = "Ajout d'un bouton permettant de copier le titre et la description de la vidéo dans le panneau Description de la vidéo.";
|
||||||
"PostManager" = "Gérer les publications";
|
"PostManager" = "Save post information";
|
||||||
"PostManagerDesc" = "Permet de copier le texte de la publication et de sauvegarder la publication en tant qu'image en maintenant le toucher.";
|
"PostManagerDesc" = "Allows to copy post text and save post as image by long tap.";
|
||||||
"SaveProfilePhoto" = "Enregistrer la photo de profil";
|
"SaveProfilePhoto" = "Enregistrer la photo de profil";
|
||||||
"SaveProfilePhotoDesc" = "Enregistre la photo de profil dans l'application Photos en appuyant longuement.";
|
"SaveProfilePhotoDesc" = "Enregistre la photo de profil dans l'application Photos en appuyant longuement.";
|
||||||
"CommentManager" = "Gérer les commentaires";
|
"CommentManager" = "Save comment information";
|
||||||
"CommentManagerDesc" = "Permet de copier le texte des commentaires et de sauvegarder le commentaire en tant qu'image en maintenant une pression prolongée.";
|
"CommentManagerDesc" = "Allows to copy comment text and save comment as image by long tap.";
|
||||||
"FixAlbums" = "Réparer les vignettes";
|
"FixAlbums" = "Réparer les couvertures";
|
||||||
"FixAlbumsDesc" = "Répare l'affichage des vignettes pour les utilisateurs de Russie.";
|
"FixAlbumsDesc" = "Répare l'affichage des couvertures pour les utilisateurs de Russie.";
|
||||||
|
"NativeShare" = "Native share sheet";
|
||||||
|
"NativeShareDesc" = "Uses system share sheet to share media";
|
||||||
"RemovePlayNext" = "Supprimer \"Placer en première position dans la file d'attente\"";
|
"RemovePlayNext" = "Supprimer \"Placer en première position dans la file d'attente\"";
|
||||||
"RemovePlayNextDesc" = "Supprime l'option \"Placer en première position dans la file d'attente\" du menu.";
|
"RemovePlayNextDesc" = "Supprime l'option \"Placer en première position dans la file d'attente\" du menu.";
|
||||||
"RemoveDownloadMenu" = "Supprimer \"Télécharger\"";
|
"RemoveDownloadMenu" = "Remove \"Download\"";
|
||||||
"RemoveDownloadMenuDesc" = "Supprime l'option \"Télécharger\" du menu.";
|
"RemoveDownloadMenuDesc" = "Removes \"Download\" option from menu.";
|
||||||
"RemoveWatchLaterMenu" = "Supprimer \"Enregistrer pour plus tard\"";
|
"RemoveWatchLaterMenu" = "Remove \"Save to Watch Later\"";
|
||||||
"RemoveWatchLaterMenuDesc" = "Supprime l'option \"Enregistrer pour plus tard\" du menu.";
|
"RemoveWatchLaterMenuDesc" = "Removes \"Save to Watch Later\" option from menu.";
|
||||||
"RemoveSaveToPlaylistMenu" = "Supprimer \"Enregistrer dans une playlist\"";
|
"RemoveSaveToPlaylistMenu" = "Remove \"Save to playlist\"";
|
||||||
"RemoveSaveToPlaylistMenuDesc" = "Supprime l'option \"Enregistrer dans une playlist\" du menu.";
|
"RemoveSaveToPlaylistMenuDesc" = "Removes \"Save to playlist\" option from menu.";
|
||||||
"RemoveShareMenu" = "Supprimer \"Partager\"";
|
"RemoveShareMenu" = "Remove \"Share\"";
|
||||||
"RemoveShareMenuDesc" = "Supprime l'option \"Partager\" du menu.";
|
"RemoveShareMenuDesc" = "Removes \"Share\" option from menu.";
|
||||||
"RemoveNotInterestedMenu" = "Supprimer \"Pas intéressé\"";
|
"RemoveNotInterestedMenu" = "Remove \"Not interested\"";
|
||||||
"RemoveNotInterestedMenuDesc" = "Supprime l'option \"Pas intéressé\" du menu.";
|
"RemoveNotInterestedMenuDesc" = "Removes \"Not interested\" option from menu.";
|
||||||
"RemoveDontRecommendMenu" = "Supprimer \"Ne pas recommander la chaîne\"";
|
"RemoveDontRecommendMenu" = "Remove \"Don't recommend channel\"";
|
||||||
"RemoveDontRecommendMenuDesc" = "Supprime l'option \"Ne pas recommander la chaîne\" du menu.";
|
"RemoveDontRecommendMenuDesc" = "Removes \"Don't recommend channel\" option from menu.";
|
||||||
"RemoveReportMenu" = "Supprimer \"Signaler\"";
|
"RemoveReportMenu" = "Remove \"Report\"";
|
||||||
"RemoveReportMenuDesc" = "Supprime l'option \"Signaler\" du menu.";
|
"RemoveReportMenuDesc" = "Removes \"Report\" option from menu.";
|
||||||
"NoContinueWatching" = "Supprimer \"Continuer à regarder\"";
|
"NoContinueWatching" = "Supprimer \"Continuer à regarder\"";
|
||||||
"NoContinueWatchingDesc" = "Supprime la section \"Continuer à regarder\" contenant les vidéos inachevées de la page d'accueil.";
|
"NoContinueWatchingDesc" = "Supprime la section \"Continuer à regarder\" contenant les vidéos inachevées de la page d'accueil.";
|
||||||
"NoSearchHistory" = "Masquer l'historique de recherche";
|
"NoSearchHistory" = "Masquer l'historique de recherche";
|
||||||
@@ -190,11 +206,18 @@
|
|||||||
"DisableRTL" = "Désactiver le formatage de droite à gauche";
|
"DisableRTL" = "Désactiver le formatage de droite à gauche";
|
||||||
"DisableRTLDesc" = "Affiche le texte de force en format de gauche à droite (LTR) pour les langues qui sont initialement affichées de droite à gauche (RTL).";
|
"DisableRTLDesc" = "Affiche le texte de force en format de gauche à droite (LTR) pour les langues qui sont initialement affichées de droite à gauche (RTL).";
|
||||||
|
|
||||||
"PlaybackQualityOnWiFi" = "Qualité de lecture sur WiFi";
|
"HoldToSpeed" = "Hold to speed";
|
||||||
"PlaybackQualityOnCellular" = "Qualité de lecture sur réseau cellulaire";
|
"Disable" = "Disable";
|
||||||
"SelectQuality" = "Sélectionner la qualité";
|
"Disabled" = "Disabled";
|
||||||
"Default" = "Par défaut";
|
"PlaybackSpeed" = "Playback Speed";
|
||||||
"Best" = "Meilleure";
|
|
||||||
|
"DefaultPlaybackRate" = "Default playback rate";
|
||||||
|
|
||||||
|
"PlaybackQualityOnWiFi" = "Playback quality on WiFi";
|
||||||
|
"PlaybackQualityOnCellular" = "Playback quality on Cellular";
|
||||||
|
"SelectQuality" = "Select Quality";
|
||||||
|
"Default" = "Default";
|
||||||
|
"Best" = "Best";
|
||||||
|
|
||||||
"Startup" = "Page de démarrage";
|
"Startup" = "Page de démarrage";
|
||||||
"Home" = "Accueil";
|
"Home" = "Accueil";
|
||||||
@@ -205,12 +228,15 @@
|
|||||||
"Warning" = "Avertissement";
|
"Warning" = "Avertissement";
|
||||||
"TabIsHidden" = "L'onglet masqué ne peut pas être sélectionné comme page de démarrage";
|
"TabIsHidden" = "L'onglet masqué ne peut pas être sélectionné comme page de démarrage";
|
||||||
|
|
||||||
"SupportDevelopment" = "Soutenir le développement";
|
"SupportDevelopment" = "Support development";
|
||||||
"SupportDevelopmentDesc" = "Si vous aimez YTLite et souhaitez soutenir son développement, vous pouvez le faire en utilisant l'une des méthodes pratiques ci-dessous.\nMerci❤";
|
"SupportDevelopmentDesc" = "If you like YTLite and would like to support its development, you can do it using any of convenient ways below.\nThanks❤";
|
||||||
|
"Contributors" = "Contributors";
|
||||||
|
"OpenSourceLibs" = "Open Source Libraries";
|
||||||
"Version" = "Version";
|
"Version" = "Version";
|
||||||
"About" = "À propos";
|
"About" = "À propos";
|
||||||
"Credits" = "Crédits";
|
"Credits" = "Crédits";
|
||||||
"Developer" = "Développeur YTLite";
|
"Developer" = "Développeur YTLite";
|
||||||
|
"SpecialThanks" = "Special thanks";
|
||||||
"ChineseSimplified" = "Localisation chinoise (simplifiée)";
|
"ChineseSimplified" = "Localisation chinoise (simplifiée)";
|
||||||
"ChineseTraditional" = "Localisation chinoise (traditionnelle)";
|
"ChineseTraditional" = "Localisation chinoise (traditionnelle)";
|
||||||
"French" = "Localisation française";
|
"French" = "Localisation française";
|
||||||
@@ -218,29 +244,33 @@
|
|||||||
"Japanese" = "Localisation japonaise";
|
"Japanese" = "Localisation japonaise";
|
||||||
"Vietnamese" = "Localisation vietnamienne";
|
"Vietnamese" = "Localisation vietnamienne";
|
||||||
"Advanced" = "Mode avancé";
|
"Advanced" = "Mode avancé";
|
||||||
"AdvancedDesc" = "Mode plus personnalisable";
|
"AdvancedDesc" = "More customizable mode";
|
||||||
"AdvancedModeReminder" = "Voulez-vous activer le mode avancé pour YTLite ?\n\nCe mode offre plus de 50 options supplémentaires pour personnaliser et optimiser votre expérience YouTube. Vous pouvez l'activer/désactiver ultérieurement depuis Paramètres → %@ → %@ → %@.";
|
"AdvancedModeReminder" = "Voulez-vous activer le mode avancé pour YTLite ?\n\nCe mode offre plus de 50 options supplémentaires pour personnaliser et optimiser votre expérience YouTube. Vous pouvez l'activer/désactiver ultérieurement depuis Paramètres → %@ → %@ → %@.";
|
||||||
"ClearCache" = "Effacer le cache";
|
"ClearCache" = "Effacer le cache";
|
||||||
"ResetSettings" = "Réinitialiser les paramètres YTLite";
|
"ResetSettings" = "Réinitialiser les paramètres YTLite";
|
||||||
"ResetMessage" = "Cette option réinitialisera les paramètres YTLite par défaut et fermera YouTube.\n\nÊtes-vous sûr de vouloir continuer ?";
|
"ResetMessage" = "Cette option réinitialisera les paramètres YTLite par défaut et fermera YouTube.\n\nÊtes-vous sûr de vouloir continuer ?";
|
||||||
"ShortsOnlyWarning" = "Êtes-vous sûr de vouloir activer ce mode?\n\nDans ce mode, vous ne pourrez regarder que des vidéos Shorts et vous ne pourrez rien d'autre faire.\n\nVous pouvez désactiver le mode Shorts Only en appuyant longuement avec deux doigts dans le lecteur Shorts.";
|
"ShortsOnlyWarning" = "Êtes-vous sûr de vouloir activer ce mode?\n\nDans ce mode, vous ne pourrez regarder que des vidéos Shorts et vous ne pourrez rien d'autre faire.\n\nVous pouvez désactiver le mode Shorts Only en appuyant longuement avec deux doigts dans le lecteur Shorts.";
|
||||||
"ShortsModeTurnedOff" = "Le mode Shorts uniquement a été désactivé";
|
"ShortsModeTurnedOff" = "Le mode Shorts uniquement a été désactivé";
|
||||||
|
"LibraryAdded" = "The You/Library tab has been restored";
|
||||||
|
"LibraryRemoved" = "The You/Library tab has been removed";
|
||||||
"Yes" = "Oui";
|
"Yes" = "Oui";
|
||||||
"No" = "Non";
|
"No" = "Non";
|
||||||
|
|
||||||
"SelectAction" = "Sélectionner une action";
|
"SelectAction" = "Sélectionner une action";
|
||||||
"CopyTitle" = "Copier le titre";
|
"CopyTitle" = "Copier le titre";
|
||||||
"CopyDescription" = "Copier la description";
|
"CopyDescription" = "Copier la description";
|
||||||
"CopyPostText" = "Copier le texte de la publication";
|
"CopyPostText" = "Copy post text";
|
||||||
"SavePostAsImage" = "Enregistrer la publication en tant qu'image";
|
"SaveCurrentImage" = "Save current image";
|
||||||
"CopyPostAsImage" = "Copier la publication en tant qu'image";
|
"CopyCurrentImage" = "Copy current image";
|
||||||
"CopyCommentText" = "Copier le texte du commentaire";
|
"SavePostAsImage" = "Save post as image";
|
||||||
"SaveCommentAsImage" = "Enregistrer le commentaire en tant qu'image";
|
"CopyPostAsImage" = "Copy post as image";
|
||||||
"CopyCommentAsImage" = "Copier le commentaire en tant qu'image";
|
"CopyCommentText" = "Copy comment text";
|
||||||
"SaveProfilePicture" = "Enregistrer la photo de profil";
|
"SaveCommentAsImage" = "Save comment as image";
|
||||||
"CopyProfilePicture" = "Copier la photo de profil";
|
"CopyCommentAsImage" = "Copy comment as image";
|
||||||
|
"SaveProfilePicture" = "Save profile picture";
|
||||||
|
"CopyProfilePicture" = "Copy profile picture";
|
||||||
"Cancel" = "Annuler";
|
"Cancel" = "Annuler";
|
||||||
"Copied" = "Copié dans le presse-papiers";
|
"Copied" = "Copié dans le presse-papiers";
|
||||||
"Saved" = "Enregistré dans Photos";
|
"Saved" = "Enregistré dans Photos";
|
||||||
"Done" = "Terminé";
|
"Done" = "Terminé";
|
||||||
"Error" = "Erreur";
|
"Error" = "Erreur";
|
||||||
@@ -19,6 +19,8 @@
|
|||||||
"NoSubbarDesc" = "ナビゲーションバーの下にあるサブバー(すべて,音楽,ライブ など)を非表示にします";
|
"NoSubbarDesc" = "ナビゲーションバーの下にあるサブバー(すべて,音楽,ライブ など)を非表示にします";
|
||||||
"NoYTLogo" = "YouTubeロゴを削除";
|
"NoYTLogo" = "YouTubeロゴを削除";
|
||||||
"NoYTLogoDesc" = "ナビゲーションバーのYouTubeロゴを非表示にします";
|
"NoYTLogoDesc" = "ナビゲーションバーのYouTubeロゴを非表示にします";
|
||||||
|
"PremiumYTLogo" = "Set Premium YouTube logo";
|
||||||
|
"PremiumYTLogoDesc" = "Sets Premium YouTube logo in the Navigation bar.";
|
||||||
|
|
||||||
"Overlay" = "オーバーレイ";
|
"Overlay" = "オーバーレイ";
|
||||||
"HideAutoplay" = "自動再生スイッチを非表示";
|
"HideAutoplay" = "自動再生スイッチを非表示";
|
||||||
@@ -39,12 +41,18 @@
|
|||||||
"NoFullscreenActionsDesc" = "フルスクリーンモードでのアクションパネルを無効にします";
|
"NoFullscreenActionsDesc" = "フルスクリーンモードでのアクションパネルを無効にします";
|
||||||
"PersistentProgressBar" = "Persistent progress bar";
|
"PersistentProgressBar" = "Persistent progress bar";
|
||||||
"PersistentProgressBarDesc" = "Always shows progress bar in the player.";
|
"PersistentProgressBarDesc" = "Always shows progress bar in the player.";
|
||||||
|
"StockVolumeHUD" = "Stock volume HUD";
|
||||||
|
"StockVolumeHUDDesc" = "Displays system volume HUD in fullscreen.";
|
||||||
"NoRelatedVids" = "オーバーレイの関連動画を非表示";
|
"NoRelatedVids" = "オーバーレイの関連動画を非表示";
|
||||||
"NoRelatedVidsDesc" = "スワイプアップでオーバーレイに表示される関連動画を非表示にします";
|
"NoRelatedVidsDesc" = "スワイプアップでオーバーレイに表示される関連動画を非表示にします";
|
||||||
"NoPromotionCards" = "有料プロモーションカードを非表示";
|
"NoPromotionCards" = "有料プロモーションカードを非表示";
|
||||||
"NoPromotionCardsDesc" = "プロモーションが含まれている動画の\"有料プロモーションを含む\"カードを非表示にします";
|
"NoPromotionCardsDesc" = "プロモーションが含まれている動画の\"有料プロモーションを含む\"カードを非表示にします";
|
||||||
"NoWatermarks" = "ウォーターマークを非表示";
|
"NoWatermarks" = "ウォーターマークを非表示";
|
||||||
"NoWatermarksDesc" = "プレーヤーからチャンネルのウォーターマークを非表示にします";
|
"NoWatermarksDesc" = "プレーヤーからチャンネルのウォーターマークを非表示にします";
|
||||||
|
"VideoEndTime" = "Show playback end time";
|
||||||
|
"VideoEndTimeDesc" = "Adds video playback end time to the player bar.";
|
||||||
|
"24hrFormat" = "24-hour format";
|
||||||
|
"24hrFormatDesc" = "Shows end time in 24-hour format.";
|
||||||
|
|
||||||
"Player" = "プレーヤー";
|
"Player" = "プレーヤー";
|
||||||
"Miniplayer" = "ミニプレーヤーを有効化";
|
"Miniplayer" = "ミニプレーヤーを有効化";
|
||||||
@@ -65,6 +73,10 @@
|
|||||||
"ExtraSpeedOptionsDesc" = "プレーヤーメニューに追加の再生速度オプションを追加します";
|
"ExtraSpeedOptionsDesc" = "プレーヤーメニューに追加の再生速度オプションを追加します";
|
||||||
"DontSnap2Chapter" = "チャプターへのスナップを無効化";
|
"DontSnap2Chapter" = "チャプターへのスナップを無効化";
|
||||||
"DontSnap2ChapterDesc" = "ダブルタップジェスチャーで次のエピソードへスキップするのを無効にします";
|
"DontSnap2ChapterDesc" = "ダブルタップジェスチャーで次のエピソードへスキップするのを無効にします";
|
||||||
|
"NoTwoFingerSnapToChapter" = "Disable two finger double tap";
|
||||||
|
"NoTwoFingerSnapToChapterDesc" = "Disables two finger double tap snap to chapter gesture.";
|
||||||
|
"PauseOnOverlay" = "Pause on overlay";
|
||||||
|
"PauseOnOverlayDesc" = "Sets playback on pause if overlay appears.";
|
||||||
"RedProgressBar" = "赤いプログレスバー";
|
"RedProgressBar" = "赤いプログレスバー";
|
||||||
"RedProgressBarDesc" = "赤いプログレスバーを復元します";
|
"RedProgressBarDesc" = "赤いプログレスバーを復元します";
|
||||||
"NoPlayerRemixButton" = "Remove remix button";
|
"NoPlayerRemixButton" = "Remove remix button";
|
||||||
@@ -105,6 +117,8 @@
|
|||||||
"Shorts" = "ショート";
|
"Shorts" = "ショート";
|
||||||
"ShortsOnlyMode" = "Shorts Only Mode";
|
"ShortsOnlyMode" = "Shorts Only Mode";
|
||||||
"ShortsOnlyModeDesc" = "Limits YouTube functionality to viewing Shorts only.";
|
"ShortsOnlyModeDesc" = "Limits YouTube functionality to viewing Shorts only.";
|
||||||
|
"AutoSkipShorts" = "Auto-skip Shorts";
|
||||||
|
"AutoSkipShortsDesc" = "Moves to the next video when the current video playback finishes.";
|
||||||
"HideShorts" = "ショート動画を非表示";
|
"HideShorts" = "ショート動画を非表示";
|
||||||
"HideShortsDesc" = "ホーム, おすすめなどからショート動画を非表示にします(視聴履歴には適用されません)";
|
"HideShortsDesc" = "ホーム, おすすめなどからショート動画を非表示にします(視聴履歴には適用されません)";
|
||||||
"ShortsProgress" = "プログレスバーを有効化";
|
"ShortsProgress" = "プログレスバーを有効化";
|
||||||
@@ -159,6 +173,8 @@
|
|||||||
"CommentManagerDesc" = "Allows to copy comment text and save comment as image by long tap.";
|
"CommentManagerDesc" = "Allows to copy comment text and save comment as image by long tap.";
|
||||||
"FixAlbums" = "Fix covers";
|
"FixAlbums" = "Fix covers";
|
||||||
"FixAlbumsDesc" = "Fixes the display of covers for users from Russia.";
|
"FixAlbumsDesc" = "Fixes the display of covers for users from Russia.";
|
||||||
|
"NativeShare" = "Native share sheet";
|
||||||
|
"NativeShareDesc" = "Uses system share sheet to share media";
|
||||||
"RemovePlayNext" = "\"次に再生\"を削除";
|
"RemovePlayNext" = "\"次に再生\"を削除";
|
||||||
"RemovePlayNextDesc" = "メニューから\"次に再生\"オプションを削除します";
|
"RemovePlayNextDesc" = "メニューから\"次に再生\"オプションを削除します";
|
||||||
"RemoveDownloadMenu" = "Remove \"Download\"";
|
"RemoveDownloadMenu" = "Remove \"Download\"";
|
||||||
@@ -190,6 +206,13 @@
|
|||||||
"DisableRTL" = "RTLフォーマットを無効化";
|
"DisableRTL" = "RTLフォーマットを無効化";
|
||||||
"DisableRTLDesc" = "RTLで表示される言語を左から右(LTR)の形式で表示するように強制します";
|
"DisableRTLDesc" = "RTLで表示される言語を左から右(LTR)の形式で表示するように強制します";
|
||||||
|
|
||||||
|
"HoldToSpeed" = "Hold to speed";
|
||||||
|
"Disable" = "Disable";
|
||||||
|
"Disabled" = "Disabled";
|
||||||
|
"PlaybackSpeed" = "Playback Speed";
|
||||||
|
|
||||||
|
"DefaultPlaybackRate" = "Default playback rate";
|
||||||
|
|
||||||
"PlaybackQualityOnWiFi" = "Playback quality on WiFi";
|
"PlaybackQualityOnWiFi" = "Playback quality on WiFi";
|
||||||
"PlaybackQualityOnCellular" = "Playback quality on Cellular";
|
"PlaybackQualityOnCellular" = "Playback quality on Cellular";
|
||||||
"SelectQuality" = "Select Quality";
|
"SelectQuality" = "Select Quality";
|
||||||
@@ -207,10 +230,13 @@
|
|||||||
|
|
||||||
"SupportDevelopment" = "Support development";
|
"SupportDevelopment" = "Support development";
|
||||||
"SupportDevelopmentDesc" = "If you like YTLite and would like to support its development, you can do it using any of convenient ways below.\nThanks❤";
|
"SupportDevelopmentDesc" = "If you like YTLite and would like to support its development, you can do it using any of convenient ways below.\nThanks❤";
|
||||||
|
"Contributors" = "Contributors";
|
||||||
|
"OpenSourceLibs" = "Open Source Libraries";
|
||||||
"Version" = "バージョン";
|
"Version" = "バージョン";
|
||||||
"About" = "About";
|
"About" = "About";
|
||||||
"Credits" = "クレジット";
|
"Credits" = "クレジット";
|
||||||
"Developer" = "YTLiteの開発者";
|
"Developer" = "YTLiteの開発者";
|
||||||
|
"SpecialThanks" = "Special thanks";
|
||||||
"ChineseSimplified" = "中国語(簡体字)翻訳";
|
"ChineseSimplified" = "中国語(簡体字)翻訳";
|
||||||
"ChineseTraditional" = "中国語(繁体字)翻訳";
|
"ChineseTraditional" = "中国語(繁体字)翻訳";
|
||||||
"French" = "フランス語翻訳";
|
"French" = "フランス語翻訳";
|
||||||
@@ -225,6 +251,8 @@
|
|||||||
"ResetMessage" = "このオプションを選択するとYTLiteの設定がデフォルトにリセットされ、アプリが終了します。\n\n続行してもよろしいですか?";
|
"ResetMessage" = "このオプションを選択するとYTLiteの設定がデフォルトにリセットされ、アプリが終了します。\n\n続行してもよろしいですか?";
|
||||||
"ShortsOnlyWarning" = "Are you sure you want to activate this mode?\n\nIn this mode, you will only be able to watch Shorts videos and won't be able to do anything else.\n\nYou can disable Shorts Only Mode by long pressing with two fingers in the Shorts player.";
|
"ShortsOnlyWarning" = "Are you sure you want to activate this mode?\n\nIn this mode, you will only be able to watch Shorts videos and won't be able to do anything else.\n\nYou can disable Shorts Only Mode by long pressing with two fingers in the Shorts player.";
|
||||||
"ShortsModeTurnedOff" = "Shorts Only Mode has been turned off";
|
"ShortsModeTurnedOff" = "Shorts Only Mode has been turned off";
|
||||||
|
"LibraryAdded" = "The You/Library tab has been restored";
|
||||||
|
"LibraryRemoved" = "The You/Library tab has been removed";
|
||||||
"Yes" = "はい";
|
"Yes" = "はい";
|
||||||
"No" = "いいえ";
|
"No" = "いいえ";
|
||||||
|
|
||||||
@@ -232,6 +260,8 @@
|
|||||||
"CopyTitle" = "Copy title";
|
"CopyTitle" = "Copy title";
|
||||||
"CopyDescription" = "Copy description";
|
"CopyDescription" = "Copy description";
|
||||||
"CopyPostText" = "Copy post text";
|
"CopyPostText" = "Copy post text";
|
||||||
|
"SaveCurrentImage" = "Save current image";
|
||||||
|
"CopyCurrentImage" = "Copy current image";
|
||||||
"SavePostAsImage" = "Save post as image";
|
"SavePostAsImage" = "Save post as image";
|
||||||
"CopyPostAsImage" = "Copy post as image";
|
"CopyPostAsImage" = "Copy post as image";
|
||||||
"CopyCommentText" = "Copy comment text";
|
"CopyCommentText" = "Copy comment text";
|
||||||
|
|||||||
@@ -19,6 +19,8 @@
|
|||||||
"NoSubbarDesc" = "Скрывает панель с наклейками (Все, Новое для вас, Сейчас в эфире и т.д.) под панелью навигации.";
|
"NoSubbarDesc" = "Скрывает панель с наклейками (Все, Новое для вас, Сейчас в эфире и т.д.) под панелью навигации.";
|
||||||
"NoYTLogo" = "Скрыть логотип YouTube";
|
"NoYTLogo" = "Скрыть логотип YouTube";
|
||||||
"NoYTLogoDesc" = "Убирает логотип YouTube с панели навигации.";
|
"NoYTLogoDesc" = "Убирает логотип YouTube с панели навигации.";
|
||||||
|
"PremiumYTLogo" = "Отображать Premium логотип";
|
||||||
|
"PremiumYTLogoDesc" = "Отображает логотип Premium в панели навигации.";
|
||||||
|
|
||||||
"Overlay" = "Настройки оверлея";
|
"Overlay" = "Настройки оверлея";
|
||||||
"HideAutoplay" = "Скрыть «Автовоспроизведение»";
|
"HideAutoplay" = "Скрыть «Автовоспроизведение»";
|
||||||
@@ -39,12 +41,18 @@
|
|||||||
"NoFullscreenActionsDesc" = "Отключает панель действий, отображающуюся под прогресс-баром плеера.";
|
"NoFullscreenActionsDesc" = "Отключает панель действий, отображающуюся под прогресс-баром плеера.";
|
||||||
"PersistentProgressBar" = "Всегда отображать прогресс-бар";
|
"PersistentProgressBar" = "Всегда отображать прогресс-бар";
|
||||||
"PersistentProgressBarDesc" = "Всегда отображает прогресс-бар внутри плеера.";
|
"PersistentProgressBarDesc" = "Всегда отображает прогресс-бар внутри плеера.";
|
||||||
|
"StockVolumeHUD" = "Системный уровень громкости";
|
||||||
|
"StockVolumeHUDDesc" = "Отображает системную шкалу громкости в полноэкранном режиме.";
|
||||||
"NoRelatedVids" = "Скрыть рекомендации в оверлее";
|
"NoRelatedVids" = "Скрыть рекомендации в оверлее";
|
||||||
"NoRelatedVidsDesc" = "Скрывает рекомендации, отображаемые по свайпу вверх в плеере.";
|
"NoRelatedVidsDesc" = "Скрывает рекомендации, отображаемые по свайпу вверх в плеере.";
|
||||||
"NoPromotionCards" = "Скрыть сообщение «Есть реклама»";
|
"NoPromotionCards" = "Скрыть сообщение «Есть реклама»";
|
||||||
"NoPromotionCardsDesc" = "Скрывает всплывающее сообщение «Есть реклама» в роликах со спонсорской рекламой.";
|
"NoPromotionCardsDesc" = "Скрывает всплывающее сообщение «Есть реклама» в роликах со спонсорской рекламой.";
|
||||||
"NoWatermarks" = "Скрыть водяные знаки";
|
"NoWatermarks" = "Скрыть водяные знаки";
|
||||||
"NoWatermarksDesc" = "Скрывает значки каналов в плеере.";
|
"NoWatermarksDesc" = "Скрывает значки каналов в плеере.";
|
||||||
|
"VideoEndTime" = "Показывать время окончания";
|
||||||
|
"VideoEndTimeDesc" = "Отображает, в каком часу закончится ролик.";
|
||||||
|
"24hrFormat" = "24-часовой формат";
|
||||||
|
"24hrFormatDesc" = "Отображает время окончания в 24-часовом формате.";
|
||||||
|
|
||||||
"Player" = "Настройки плеера";
|
"Player" = "Настройки плеера";
|
||||||
"Miniplayer" = "Разрешить миниплеер";
|
"Miniplayer" = "Разрешить миниплеер";
|
||||||
@@ -65,6 +73,10 @@
|
|||||||
"ExtraSpeedOptionsDesc" = "Добавляет больше опций скорости воспроизведения в выпадающее меню плеера.";
|
"ExtraSpeedOptionsDesc" = "Добавляет больше опций скорости воспроизведения в выпадающее меню плеера.";
|
||||||
"DontSnap2Chapter" = "Не перематывать эпизоды";
|
"DontSnap2Chapter" = "Не перематывать эпизоды";
|
||||||
"DontSnap2ChapterDesc" = "Отключает жест перемотки к следующему эпизоду двойным нажатием.";
|
"DontSnap2ChapterDesc" = "Отключает жест перемотки к следующему эпизоду двойным нажатием.";
|
||||||
|
"NoTwoFingerSnapToChapter" = "Отключить касание двумя пальцами";
|
||||||
|
"NoTwoFingerSnapToChapterDesc" = "Отключает жест перемотки эпизодов двойным нажатием двумя пальцами.";
|
||||||
|
"PauseOnOverlay" = "Ставить на паузу с оверлеем";
|
||||||
|
"PauseOnOverlayDesc" = "Приостанавливает воспроизведение при появлении кнопок управления плеером.";
|
||||||
"RedProgressBar" = "Красный прогресс-бар";
|
"RedProgressBar" = "Красный прогресс-бар";
|
||||||
"RedProgressBarDesc" = "Возвращает красный прогресс-бар вместо нового, серого цвета.";
|
"RedProgressBarDesc" = "Возвращает красный прогресс-бар вместо нового, серого цвета.";
|
||||||
"NoPlayerRemixButton" = "Убрать кнопку «Ремикс»";
|
"NoPlayerRemixButton" = "Убрать кнопку «Ремикс»";
|
||||||
@@ -100,11 +112,13 @@
|
|||||||
"HideUploadButton" = "Скрыть «Создать» (+)";
|
"HideUploadButton" = "Скрыть «Создать» (+)";
|
||||||
"HideUploadButtonDesc" = "Скрывает кнопку «Создать» с панели вкладок.";
|
"HideUploadButtonDesc" = "Скрывает кнопку «Создать» с панели вкладок.";
|
||||||
"HideLibraryTab" = "Скрыть «Библиотеку»";
|
"HideLibraryTab" = "Скрыть «Библиотеку»";
|
||||||
"HideLibraryTabDesc" = "Скрывает вкладку «Библиотека» с панели вкладок.";
|
"HideLibraryTabDesc" = "Скрывает вкладку «Библиотека» с панели вкладок.\n\nДанную вкладку можно восстановить долгим нажатием по вкладке «Главная»";
|
||||||
|
|
||||||
"Shorts" = "Настройки Shorts";
|
"Shorts" = "Настройки Shorts";
|
||||||
"ShortsOnlyMode" = "Режим Shorts";
|
"ShortsOnlyMode" = "Режим Shorts";
|
||||||
"ShortsOnlyModeDesc" = "Ограничивает функциональность YouTube до отображения видеороликов Shorts";
|
"ShortsOnlyModeDesc" = "Ограничивает функциональность YouTube до отображения видеороликов Shorts";
|
||||||
|
"AutoSkipShorts" = "Автопереход к следующему";
|
||||||
|
"AutoSkipShortsDesc" = "Переключается на следующий Shorts по окончанию воспроизведения.";
|
||||||
"HideShorts" = "Скрыть видеоролики Shorts";
|
"HideShorts" = "Скрыть видеоролики Shorts";
|
||||||
"HideShortsDesc" = "Скрывает видеоролики, помеченные как Shorts с Главного экрана, Рекомендаций и т.д. (Не применяется к истории просмотров)";
|
"HideShortsDesc" = "Скрывает видеоролики, помеченные как Shorts с Главного экрана, Рекомендаций и т.д. (Не применяется к истории просмотров)";
|
||||||
"ShortsProgress" = "Показывать прогресс-бар";
|
"ShortsProgress" = "Показывать прогресс-бар";
|
||||||
@@ -155,10 +169,10 @@
|
|||||||
"PostManagerDesc" = "Позволяет скопировать текст из поста или сохранить пост как фото долгим нажатием по нему.";
|
"PostManagerDesc" = "Позволяет скопировать текст из поста или сохранить пост как фото долгим нажатием по нему.";
|
||||||
"SaveProfilePhoto" = "Сохранять фото профиля";
|
"SaveProfilePhoto" = "Сохранять фото профиля";
|
||||||
"SaveProfilePhotoDesc" = "Сохраняет фото профиля в «Фото» долгим нажатием по нему.";
|
"SaveProfilePhotoDesc" = "Сохраняет фото профиля в «Фото» долгим нажатием по нему.";
|
||||||
"CopyCommentText" = "Копировать текст комментариев";
|
|
||||||
"CopyCommentTextDesc" = "Копирует текст комментариев в буфер обмена долгим нажатием.";
|
|
||||||
"CommentManager" = "Сохранять информацию с комментариев";
|
"CommentManager" = "Сохранять информацию с комментариев";
|
||||||
"CommentManagerDesc" = "Позволяет скопировать текст из комментария или сохранить комментарий как фото долгим нажатием по нему.";
|
"CommentManagerDesc" = "Позволяет скопировать текст из комментария или сохранить комментарий как фото долгим нажатием по нему.";
|
||||||
|
"NativeShare" = "Системное меню «Поделиться»";
|
||||||
|
"NativeShareDesc" = "Выводит системное меню «Поделиться» при отправке контента.";
|
||||||
"FixAlbums" = "Исправить отображение обложек";
|
"FixAlbums" = "Исправить отображение обложек";
|
||||||
"FixAlbumsDesc" = "Исправляет отображение обложек в том случае, если вы из России.";
|
"FixAlbumsDesc" = "Исправляет отображение обложек в том случае, если вы из России.";
|
||||||
"RemovePlayNext" = "Убрать «Добавить в начало очереди»";
|
"RemovePlayNext" = "Убрать «Добавить в начало очереди»";
|
||||||
@@ -192,6 +206,13 @@
|
|||||||
"DisableRTL" = "Запретить формат «справа налево»";
|
"DisableRTL" = "Запретить формат «справа налево»";
|
||||||
"DisableRTLDesc" = "Принудительно отображает текст в формате слева направо для языков, изначально отображающихся в формате справа налево.";
|
"DisableRTLDesc" = "Принудительно отображает текст в формате слева направо для языков, изначально отображающихся в формате справа налево.";
|
||||||
|
|
||||||
|
"HoldToSpeed" = "Ускорение долгим нажатием";
|
||||||
|
"Disable" = "Отключено";
|
||||||
|
"Disabled" = "Отключить";
|
||||||
|
"PlaybackSpeed" = "Скорость воспроизведения";
|
||||||
|
|
||||||
|
"DefaultPlaybackRate" = "Скорость воспроизведения по умолчанию";
|
||||||
|
|
||||||
"PlaybackQualityOnWiFi" = "Качество по WiFi";
|
"PlaybackQualityOnWiFi" = "Качество по WiFi";
|
||||||
"PlaybackQualityOnCellular" = "Качество по мобильной сети";
|
"PlaybackQualityOnCellular" = "Качество по мобильной сети";
|
||||||
"SelectQuality" = "Выберите качество";
|
"SelectQuality" = "Выберите качество";
|
||||||
@@ -209,10 +230,13 @@
|
|||||||
|
|
||||||
"SupportDevelopment" = "Помочь с развитием проекта";
|
"SupportDevelopment" = "Помочь с развитием проекта";
|
||||||
"SupportDevelopmentDesc" = "Если вам понравился YTLite и вы хотели бы поддержать проект, то можете сделать это любым подходящим ниже способом.\nСпасибо❤";
|
"SupportDevelopmentDesc" = "Если вам понравился YTLite и вы хотели бы поддержать проект, то можете сделать это любым подходящим ниже способом.\nСпасибо❤";
|
||||||
|
"Contributors" = "О нас";
|
||||||
|
"OpenSourceLibs" = "Библиотеки с исходным кодом";
|
||||||
"Version" = "Версия";
|
"Version" = "Версия";
|
||||||
"About" = "О твике";
|
"About" = "О твике";
|
||||||
"Credits" = "Авторы";
|
"Credits" = "Авторы";
|
||||||
"Developer" = "Разработчик твика";
|
"Developer" = "Разработчик твика";
|
||||||
|
"SpecialThanks" = "Особая благодарность";
|
||||||
"ChineseSimplified" = "Китайская (упрощенная) локализация";
|
"ChineseSimplified" = "Китайская (упрощенная) локализация";
|
||||||
"ChineseTraditional" = "Китайская (традиционная) локализация";
|
"ChineseTraditional" = "Китайская (традиционная) локализация";
|
||||||
"French" = "Французская локализация";
|
"French" = "Французская локализация";
|
||||||
@@ -227,6 +251,8 @@
|
|||||||
"ResetMessage" = "Данное действие сбросит настройки YTLite к значениям по умолчанию и закроет YouTube.\n\nУверены, что хотите продолжить?";
|
"ResetMessage" = "Данное действие сбросит настройки YTLite к значениям по умолчанию и закроет YouTube.\n\nУверены, что хотите продолжить?";
|
||||||
"ShortsOnlyWarning" = "Вы уверены, что хотите активировать данный режим?\n\nВ данном режиме вы не сможете ничего делать, кроме как смотреть видеоролики Shorts.\n\nРежим Shorts можно будет отключить зажав в плеере двумя пальцами.";
|
"ShortsOnlyWarning" = "Вы уверены, что хотите активировать данный режим?\n\nВ данном режиме вы не сможете ничего делать, кроме как смотреть видеоролики Shorts.\n\nРежим Shorts можно будет отключить зажав в плеере двумя пальцами.";
|
||||||
"ShortsModeTurnedOff" = "Режим Shorts был отключен";
|
"ShortsModeTurnedOff" = "Режим Shorts был отключен";
|
||||||
|
"LibraryAdded" = "Вкладка «Вы»/«Библиотека» восстановлена";
|
||||||
|
"LibraryRemoved" = "Вкладка «Вы»/«Библиотека» удалена";
|
||||||
"Yes" = "Да";
|
"Yes" = "Да";
|
||||||
"No" = "Нет";
|
"No" = "Нет";
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 5.8 KiB |
@@ -19,6 +19,8 @@
|
|||||||
"NoSubbarDesc" = "Ẩn Thanh phụ (Tất cả, Mới đối với bạn, Trực tiếp, v.v.) dưới thanh Điều hướng.";
|
"NoSubbarDesc" = "Ẩn Thanh phụ (Tất cả, Mới đối với bạn, Trực tiếp, v.v.) dưới thanh Điều hướng.";
|
||||||
"NoYTLogo" = "Xóa biểu tượng YouTube";
|
"NoYTLogo" = "Xóa biểu tượng YouTube";
|
||||||
"NoYTLogoDesc" = "Xóa logo YouTube trong thanh Điều hướng.";
|
"NoYTLogoDesc" = "Xóa logo YouTube trong thanh Điều hướng.";
|
||||||
|
"PremiumYTLogo" = "Set Premium YouTube logo";
|
||||||
|
"PremiumYTLogoDesc" = "Sets Premium YouTube logo in the Navigation bar.";
|
||||||
|
|
||||||
"Overlay" = "Lớp phủ";
|
"Overlay" = "Lớp phủ";
|
||||||
"HideAutoplay" = "Ẩn nút Tự động phát";
|
"HideAutoplay" = "Ẩn nút Tự động phát";
|
||||||
@@ -39,12 +41,18 @@
|
|||||||
"NoFullscreenActionsDesc" = "Vô hiệu hóa bảng hành động ở chế độ toàn màn hình.";
|
"NoFullscreenActionsDesc" = "Vô hiệu hóa bảng hành động ở chế độ toàn màn hình.";
|
||||||
"PersistentProgressBar" = "Thanh tiến trình liên tục";
|
"PersistentProgressBar" = "Thanh tiến trình liên tục";
|
||||||
"PersistentProgressBarDesc" = "Luôn hiển thị thanh tiến trình trong trình phát.";
|
"PersistentProgressBarDesc" = "Luôn hiển thị thanh tiến trình trong trình phát.";
|
||||||
|
"StockVolumeHUD" = "Stock volume HUD";
|
||||||
|
"StockVolumeHUDDesc" = "Displays system volume HUD in fullscreen.";
|
||||||
"NoRelatedVids" = "Không có video liên quan trong lớp phủ";
|
"NoRelatedVids" = "Không có video liên quan trong lớp phủ";
|
||||||
"NoRelatedVidsDesc" = "Xóa các video liên quan được hiển thị trong lớp phủ bằng cách vuốt lên.";
|
"NoRelatedVidsDesc" = "Xóa các video liên quan được hiển thị trong lớp phủ bằng cách vuốt lên.";
|
||||||
"NoPromotionCards" = "Ẩn thẻ Quảng cáo trả phí";
|
"NoPromotionCards" = "Ẩn thẻ Quảng cáo trả phí";
|
||||||
"NoPromotionCardsDesc" = "Ẩn thẻ \"Bao gồm quảng cáo trả phí\" trong các video có quảng cáo.";
|
"NoPromotionCardsDesc" = "Ẩn thẻ \"Bao gồm quảng cáo trả phí\" trong các video có quảng cáo.";
|
||||||
"NoWatermarks" = "Ẩn watermark của kênh";
|
"NoWatermarks" = "Ẩn watermark của kênh";
|
||||||
"NoWatermarksDesc" = "Ẩn watermark của kênh trong video. Yêu cầu khởi động lại ứng dụng.";
|
"NoWatermarksDesc" = "Ẩn watermark của kênh trong video. Yêu cầu khởi động lại ứng dụng.";
|
||||||
|
"VideoEndTime" = "Show playback end time";
|
||||||
|
"VideoEndTimeDesc" = "Adds video playback end time to the player bar.";
|
||||||
|
"24hrFormat" = "24-hour format";
|
||||||
|
"24hrFormatDesc" = "Shows end time in 24-hour format.";
|
||||||
|
|
||||||
"Player" = "Trình phát";
|
"Player" = "Trình phát";
|
||||||
"Miniplayer" = "Cho phép sử dụng trình phát thu nhỏ với mọi video";
|
"Miniplayer" = "Cho phép sử dụng trình phát thu nhỏ với mọi video";
|
||||||
@@ -65,14 +73,18 @@
|
|||||||
"ExtraSpeedOptionsDesc" = "Thêm nhiều tùy chọn tốc độ phát video vào menu trình phát.";
|
"ExtraSpeedOptionsDesc" = "Thêm nhiều tùy chọn tốc độ phát video vào menu trình phát.";
|
||||||
"DontSnap2Chapter" = "Tắt tự động chuyển tới chương";
|
"DontSnap2Chapter" = "Tắt tự động chuyển tới chương";
|
||||||
"DontSnap2ChapterDesc" = "Tắt tính năng tự động chuyển tới chương gần nhất khi tua video.";
|
"DontSnap2ChapterDesc" = "Tắt tính năng tự động chuyển tới chương gần nhất khi tua video.";
|
||||||
|
"NoTwoFingerSnapToChapter" = "Disable two finger double tap";
|
||||||
|
"NoTwoFingerSnapToChapterDesc" = "Disables two finger double tap snap to chapter gesture.";
|
||||||
|
"PauseOnOverlay" = "Pause on overlay";
|
||||||
|
"PauseOnOverlayDesc" = "Sets playback on pause if overlay appears.";
|
||||||
"RedProgressBar" = "Thanh tiến trình màu đỏ";
|
"RedProgressBar" = "Thanh tiến trình màu đỏ";
|
||||||
"RedProgressBarDesc" = "Mang lại thanh tiến trình màu đỏ.";
|
"RedProgressBarDesc" = "Mang lại thanh tiến trình màu đỏ.";
|
||||||
"NoPlayerRemixButton" = "Xóa nút phối lại";
|
"NoPlayerRemixButton" = "Remove remix button";
|
||||||
"NoPlayerRemixButtonDesc" = "Xóa nút phối lại bên dưới trình phát.";
|
"NoPlayerRemixButtonDesc" = "Removes remix button under the player.";
|
||||||
"NoPlayerClipButton" = "Xóa nút clip";
|
"NoPlayerClipButton" = "Remove clip button";
|
||||||
"NoPlayerClipButtonDesc" = "Xóa nút clip bên dưới trình phát.";
|
"NoPlayerClipButtonDesc" = "Removes clip button under the player.";
|
||||||
"NoPlayerDownloadButton" = "Xóa nút tải xuống";
|
"NoPlayerDownloadButton" = "Remove download button";
|
||||||
"NoPlayerDownloadButtonDesc" = "Xóa nút tải xuống dưới trình phát.";
|
"NoPlayerDownloadButtonDesc" = "Removes download button under the player.";
|
||||||
"NoHints" = "Tắt gợi ý";
|
"NoHints" = "Tắt gợi ý";
|
||||||
"NoHintsDesc" = "Tắt gợi ý của tác giả xuất hiện ở góc trên bên phải trong khi phát lại.";
|
"NoHintsDesc" = "Tắt gợi ý của tác giả xuất hiện ở góc trên bên phải trong khi phát lại.";
|
||||||
"NoFreeZoom" = "Tắt tính năng chạm để thu phóng";
|
"NoFreeZoom" = "Tắt tính năng chạm để thu phóng";
|
||||||
@@ -105,6 +117,8 @@
|
|||||||
"Shorts" = "Shorts";
|
"Shorts" = "Shorts";
|
||||||
"ShortsOnlyMode" = "Chế độ chỉ dành cho Short";
|
"ShortsOnlyMode" = "Chế độ chỉ dành cho Short";
|
||||||
"ShortsOnlyModeDesc" = "Giới hạn chức năng của YouTube chỉ ở chế độ Short.";
|
"ShortsOnlyModeDesc" = "Giới hạn chức năng của YouTube chỉ ở chế độ Short.";
|
||||||
|
"AutoSkipShorts" = "Auto-skip Shorts";
|
||||||
|
"AutoSkipShortsDesc" = "Moves to the next video when the current video playback finishes.";
|
||||||
"HideShorts" = "Ẩn Shorts";
|
"HideShorts" = "Ẩn Shorts";
|
||||||
"HideShortsDesc" = "Ẩn Shorts khỏi Trang chủ, Được đề xuất, v.v. (Không áp dụng cho Lịch sử xem)";
|
"HideShortsDesc" = "Ẩn Shorts khỏi Trang chủ, Được đề xuất, v.v. (Không áp dụng cho Lịch sử xem)";
|
||||||
"ShortsProgress" = "Bật thanh tiến trình";
|
"ShortsProgress" = "Bật thanh tiến trình";
|
||||||
@@ -159,22 +173,24 @@
|
|||||||
"CommentManagerDesc" = "Cho phép sao chép văn bản bình luận và lưu bình luận dưới dạng hình ảnh bằng cách nhấn giữ.";
|
"CommentManagerDesc" = "Cho phép sao chép văn bản bình luận và lưu bình luận dưới dạng hình ảnh bằng cách nhấn giữ.";
|
||||||
"FixAlbums" = "Sửa Albums";
|
"FixAlbums" = "Sửa Albums";
|
||||||
"FixAlbumsDesc" = "Sửa lỗi hiển thị Albums cho người dùng Nga.";
|
"FixAlbumsDesc" = "Sửa lỗi hiển thị Albums cho người dùng Nga.";
|
||||||
|
"NativeShare" = "Native share sheet";
|
||||||
|
"NativeShareDesc" = "Uses system share sheet to share media";
|
||||||
"RemovePlayNext" = "Xóa \"Phát tiếp theo trong danh sách chờ\"";
|
"RemovePlayNext" = "Xóa \"Phát tiếp theo trong danh sách chờ\"";
|
||||||
"RemovePlayNextDesc" = "Xóa tùy chọn \"Phát tiếp theo trong danh sách chờ\" khỏi menu.";
|
"RemovePlayNextDesc" = "Xóa tùy chọn \"Phát tiếp theo trong danh sách chờ\" khỏi menu.";
|
||||||
"RemoveDownloadMenu" = "Xóa \"Tải video xuống\"";
|
"RemoveDownloadMenu" = "Remove \"Download\"";
|
||||||
"RemoveDownloadMenuDesc" = "Xóa tùy chọn \"Tải video xuống\" khỏi menu.";
|
"RemoveDownloadMenuDesc" = "Removes \"Download\" option from menu.";
|
||||||
"RemoveWatchLaterMenu" = "Xóa \"Lưu vào danh sách Xem sau\"";
|
"RemoveWatchLaterMenu" = "Remove \"Save to Watch Later\"";
|
||||||
"RemoveWatchLaterMenuDesc" = "Xóa tùy chọn \"Lưu vào danh sách Xem sau\" khỏi menu.";
|
"RemoveWatchLaterMenuDesc" = "Removes \"Save to Watch Later\" option from menu.";
|
||||||
"RemoveSaveToPlaylistMenu" = "Xóa \"Lưu vào danh sách phát\"";
|
"RemoveSaveToPlaylistMenu" = "Remove \"Save to playlist\"";
|
||||||
"RemoveSaveToPlaylistMenuDesc" = "Xóa tùy chọn \"Lưu vào danh sách phát\" khỏi menu.";
|
"RemoveSaveToPlaylistMenuDesc" = "Removes \"Save to playlist\" option from menu.";
|
||||||
"RemoveShareMenu" = "Xóa \"Chia sẻ\"";
|
"RemoveShareMenu" = "Remove \"Share\"";
|
||||||
"RemoveShareMenuDesc" = "Xóa tùy chọn \"Chia sẻ\" khỏi menu.";
|
"RemoveShareMenuDesc" = "Removes \"Share\" option from menu.";
|
||||||
"RemoveNotInterestedMenu" = "Xóa \"Không quan tâm\"";
|
"RemoveNotInterestedMenu" = "Remove \"Not interested\"";
|
||||||
"RemoveNotInterestedMenuDesc" = "Xóa tùy chọn \"Không quan tâm\" khỏi menu.";
|
"RemoveNotInterestedMenuDesc" = "Removes \"Not interested\" option from menu.";
|
||||||
"RemoveDontRecommendMenu" = "Xóa \"Không đề xuất kênh này\"";
|
"RemoveDontRecommendMenu" = "Remove \"Don't recommend channel\"";
|
||||||
"RemoveDontRecommendMenuDesc" = "Xóa tùy chọn \"Không đề xuất kênh này\" khỏi menu.";
|
"RemoveDontRecommendMenuDesc" = "Removes \"Don't recommend channel\" option from menu.";
|
||||||
"RemoveReportMenu" = "Xóa \"Báo vi phạm\"";
|
"RemoveReportMenu" = "Remove \"Report\"";
|
||||||
"RemoveReportMenuDesc" = "Xóa tùy chọn \"Báo vi phạm\" khỏi menu.";
|
"RemoveReportMenuDesc" = "Removes \"Report\" option from menu.";
|
||||||
"NoContinueWatching" = "Xóa \"Tiếp tục xem\"";
|
"NoContinueWatching" = "Xóa \"Tiếp tục xem\"";
|
||||||
"NoContinueWatchingDesc" = "Xóa phần \"Tiếp tục xem\" chứa các video chưa xem hết khỏi Trang chủ.";
|
"NoContinueWatchingDesc" = "Xóa phần \"Tiếp tục xem\" chứa các video chưa xem hết khỏi Trang chủ.";
|
||||||
"NoSearchHistory" = "Ẩn lịch sử tìm kiếm";
|
"NoSearchHistory" = "Ẩn lịch sử tìm kiếm";
|
||||||
@@ -190,11 +206,18 @@
|
|||||||
"DisableRTL" = "Tắt định dạng RTL";
|
"DisableRTL" = "Tắt định dạng RTL";
|
||||||
"DisableRTLDesc" = "Hiển thị mạnh mẽ văn bản ở định dạng từ trái sang phải (LTR) cho các ngôn ngữ ban đầu được hiển thị ở định dạng từ phải sang trái (RTL).";
|
"DisableRTLDesc" = "Hiển thị mạnh mẽ văn bản ở định dạng từ trái sang phải (LTR) cho các ngôn ngữ ban đầu được hiển thị ở định dạng từ phải sang trái (RTL).";
|
||||||
|
|
||||||
"PlaybackQualityOnWiFi" = "Chất lượng Video trên mạng Wi-Fi";
|
"HoldToSpeed" = "Hold to speed";
|
||||||
"PlaybackQualityOnCellular" = "Chất lượng Video trên mạng di động";
|
"Disable" = "Disable";
|
||||||
"SelectQuality" = "Chọn chất lượng";
|
"Disabled" = "Disabled";
|
||||||
"Default" = "Mặc định";
|
"PlaybackSpeed" = "Playback Speed";
|
||||||
"Best" = "Tốt nhất";
|
|
||||||
|
"DefaultPlaybackRate" = "Default playback rate";
|
||||||
|
|
||||||
|
"PlaybackQualityOnWiFi" = "Playback quality on WiFi";
|
||||||
|
"PlaybackQualityOnCellular" = "Playback quality on Cellular";
|
||||||
|
"SelectQuality" = "Select Quality";
|
||||||
|
"Default" = "Default";
|
||||||
|
"Best" = "Best";
|
||||||
|
|
||||||
"Startup" = "Trang khởi động";
|
"Startup" = "Trang khởi động";
|
||||||
"Home" = "Trang chủ";
|
"Home" = "Trang chủ";
|
||||||
@@ -205,12 +228,15 @@
|
|||||||
"Warning" = "Cảnh báo";
|
"Warning" = "Cảnh báo";
|
||||||
"TabIsHidden" = "Không thể chọn Tab ẩn làm trang khởi động";
|
"TabIsHidden" = "Không thể chọn Tab ẩn làm trang khởi động";
|
||||||
|
|
||||||
"SupportDevelopment" = "Hỗ trợ phát triển";
|
"SupportDevelopment" = "Support development";
|
||||||
"SupportDevelopmentDesc" = "Nếu bạn thích YTLite và muốn hỗ trợ sự phát triển của nó, bạn có thể thực hiện bằng bất kỳ cách thuận tiện nào dưới đây.\nCảm ơn❤";
|
"SupportDevelopmentDesc" = "If you like YTLite and would like to support its development, you can do it using any of convenient ways below.\nThanks❤";
|
||||||
|
"Contributors" = "Contributors";
|
||||||
|
"OpenSourceLibs" = "Open Source Libraries";
|
||||||
"Version" = "Phiên bản";
|
"Version" = "Phiên bản";
|
||||||
"About" = "Giới thiệu";
|
"About" = "Giới thiệu";
|
||||||
"Credits" = "Credits";
|
"Credits" = "Credits";
|
||||||
"Developer" = "Nhà phát triển YTLite";
|
"Developer" = "Nhà phát triển YTLite";
|
||||||
|
"SpecialThanks" = "Special thanks";
|
||||||
"ChineseSimplified" = "Tiếng Trung (giản thể)";
|
"ChineseSimplified" = "Tiếng Trung (giản thể)";
|
||||||
"ChineseTraditional" = "Tiếng Trung (phồn thể)";
|
"ChineseTraditional" = "Tiếng Trung (phồn thể)";
|
||||||
"French" = "Tiếng Pháp";
|
"French" = "Tiếng Pháp";
|
||||||
@@ -218,13 +244,15 @@
|
|||||||
"Japanese" = "Tiếng Nhật";
|
"Japanese" = "Tiếng Nhật";
|
||||||
"Vietnamese" = "Tiếng Việt";
|
"Vietnamese" = "Tiếng Việt";
|
||||||
"Advanced" = "Chế độ nâng cao";
|
"Advanced" = "Chế độ nâng cao";
|
||||||
"AdvancedDesc" = "Chế độ tùy chỉnh";
|
"AdvancedDesc" = "More customizable mode";
|
||||||
"AdvancedModeReminder" = "Bạn có muốn kích hoạt Chế độ nâng cao cho YTLite không?\n\nChế độ này cung cấp hơn 50 tùy chọn bổ sung để tùy chỉnh và tối ưu hóa trải nghiệm YouTube của bạn. Bạn có thể Bật/Tắt nó sau từ Cài đặt → %@ → %@ → %@.";
|
"AdvancedModeReminder" = "Bạn có muốn kích hoạt Chế độ nâng cao cho YTLite không?\n\nChế độ này cung cấp hơn 50 tùy chọn bổ sung để tùy chỉnh và tối ưu hóa trải nghiệm YouTube của bạn. Bạn có thể Bật/Tắt nó sau từ Cài đặt → %@ → %@ → %@.";
|
||||||
"ClearCache" = "Xóa bộ nhớ đệm";
|
"ClearCache" = "Xóa bộ nhớ đệm";
|
||||||
"ResetSettings" = "Đặt lại cài đặt YTLite";
|
"ResetSettings" = "Đặt lại cài đặt YTLite";
|
||||||
"ResetMessage" = "Tùy chọn này sẽ đặt lại cài đặt YTLite về mặc định và đóng YouTube.\n\nBạn có chắc chắn muốn tiếp tục không?";
|
"ResetMessage" = "Tùy chọn này sẽ đặt lại cài đặt YTLite về mặc định và đóng YouTube.\n\nBạn có chắc chắn muốn tiếp tục không?";
|
||||||
"ShortsOnlyWarning" = "Bạn có chắc chắn muốn kích hoạt chế độ này?\n\nỞ chế độ này, bạn sẽ chỉ có thể xem video Shorts và không thể làm gì khác.\n\nBạn có thể tắt Chế độ chỉ Shorts bằng cách nhấn và giữ bằng hai ngón tay trong trình phát Shorts.";
|
"ShortsOnlyWarning" = "Bạn có chắc chắn muốn kích hoạt chế độ này?\n\nỞ chế độ này, bạn sẽ chỉ có thể xem video Shorts và không thể làm gì khác.\n\nBạn có thể tắt Chế độ chỉ Shorts bằng cách nhấn và giữ bằng hai ngón tay trong trình phát Shorts.";
|
||||||
"ShortsModeTurnedOff" = "Chế độ chỉ dành cho Shorts đã bị tắt";
|
"ShortsModeTurnedOff" = "Chế độ chỉ dành cho Shorts đã bị tắt";
|
||||||
|
"LibraryAdded" = "The You/Library tab has been restored";
|
||||||
|
"LibraryRemoved" = "The You/Library tab has been removed";
|
||||||
"Yes" = "Có";
|
"Yes" = "Có";
|
||||||
"No" = "Không";
|
"No" = "Không";
|
||||||
|
|
||||||
@@ -232,15 +260,17 @@
|
|||||||
"CopyTitle" = "Sao chép tiêu đề";
|
"CopyTitle" = "Sao chép tiêu đề";
|
||||||
"CopyDescription" = "Sao chép mô tả";
|
"CopyDescription" = "Sao chép mô tả";
|
||||||
"CopyPostText" = "Sao chép văn bản bài đăng";
|
"CopyPostText" = "Sao chép văn bản bài đăng";
|
||||||
|
"SaveCurrentImage" = "Save current image";
|
||||||
|
"CopyCurrentImage" = "Copy current image";
|
||||||
"SavePostAsImage" = "Lưu bài đăng dưới dạng hình ảnh";
|
"SavePostAsImage" = "Lưu bài đăng dưới dạng hình ảnh";
|
||||||
"CopyPostAsImage" = "Sao chép bài đăng dưới dạng hình ảnh";
|
"CopyPostAsImage" = "Sao chép bài đăng dưới dạng hình ảnh";
|
||||||
"CopyCommentText" = "Sao chép văn bản bình luận";
|
"CopyCommentText" = "Sao chép văn bản bình luận";
|
||||||
"SaveCommentAsImage" = "Lưu bình luận dưới dạng hình ảnh";
|
"SaveCommentAsImage" = "Lưu bình luận dưới dạng hình ảnh";
|
||||||
"CopyCommentAsImage" = "Sao chép bình luận dưới dạng hình ảnh";
|
"CopyCommentAsImage" = "Sao chép bình luận dưới dạng hình ảnh";
|
||||||
"SaveProfilePicture" = "Lưu ảnh hồ sơ";
|
"SaveProfilePicture" = "Save profile picture";
|
||||||
"CopyProfilePicture" = "Sao chép ảnh hồ sơ";
|
"CopyProfilePicture" = "Copy profile picture";
|
||||||
"Cancel" = "Hủy bỏ";
|
"Cancel" = "Hủy bỏ";
|
||||||
"Copied" = "Sao chép vào clipboard";
|
"Copied" = "Sao chép vào clipboard";
|
||||||
"Saved" = "Đã lưu vào Ảnh";
|
"Saved" = "Đã lưu vào Ảnh";
|
||||||
"Done" = "Xong";
|
"Done" = "Xong";
|
||||||
"Error" = "Lỗi";
|
"Error" = "Lỗi";
|
||||||
+62
-32
@@ -19,6 +19,8 @@
|
|||||||
"NoSubbarDesc" = "隐藏导航栏下的子栏(全部、新内容、实时等)。";
|
"NoSubbarDesc" = "隐藏导航栏下的子栏(全部、新内容、实时等)。";
|
||||||
"NoYTLogo" = "删除 YouTube Logo";
|
"NoYTLogo" = "删除 YouTube Logo";
|
||||||
"NoYTLogoDesc" = "删除导航栏中的 YouTube Logo。";
|
"NoYTLogoDesc" = "删除导航栏中的 YouTube Logo。";
|
||||||
|
"PremiumYTLogo" = "Set Premium YouTube logo";
|
||||||
|
"PremiumYTLogoDesc" = "Sets Premium YouTube logo in the Navigation bar.";
|
||||||
|
|
||||||
"Overlay" = "播放界面";
|
"Overlay" = "播放界面";
|
||||||
"HideAutoplay" = "隐藏自动播放开关";
|
"HideAutoplay" = "隐藏自动播放开关";
|
||||||
@@ -39,12 +41,18 @@
|
|||||||
"NoFullscreenActionsDesc" = "在全屏模式下禁用操作面板。";
|
"NoFullscreenActionsDesc" = "在全屏模式下禁用操作面板。";
|
||||||
"PersistentProgressBar" = "持续进度条";
|
"PersistentProgressBar" = "持续进度条";
|
||||||
"PersistentProgressBarDesc" = "始终在播放器中显示进度条。";
|
"PersistentProgressBarDesc" = "始终在播放器中显示进度条。";
|
||||||
|
"StockVolumeHUD" = "Stock volume HUD";
|
||||||
|
"StockVolumeHUDDesc" = "Displays system volume HUD in fullscreen.";
|
||||||
"NoRelatedVids" = "没有相关视频";
|
"NoRelatedVids" = "没有相关视频";
|
||||||
"NoRelatedVidsDesc" = "通过向上滑动删除播放界面中显示的相关视频。";
|
"NoRelatedVidsDesc" = "通过向上滑动删除播放界面中显示的相关视频。";
|
||||||
"NoPromotionCards" = "隐藏付费";
|
"NoPromotionCards" = "隐藏付费";
|
||||||
"NoPromotionCardsDesc" = "在付费视频中隐藏“付费内容”。";
|
"NoPromotionCardsDesc" = "在付费视频中隐藏“付费内容”。";
|
||||||
"NoWatermarks" = "隐藏水印";
|
"NoWatermarks" = "隐藏水印";
|
||||||
"NoWatermarksDesc" = "隐藏播放器的频道水印。";
|
"NoWatermarksDesc" = "隐藏播放器的频道水印。";
|
||||||
|
"VideoEndTime" = "Show playback end time";
|
||||||
|
"VideoEndTimeDesc" = "Adds video playback end time to the player bar.";
|
||||||
|
"24hrFormat" = "24-hour format";
|
||||||
|
"24hrFormatDesc" = "Shows end time in 24-hour format.";
|
||||||
|
|
||||||
"Player" = "播放器";
|
"Player" = "播放器";
|
||||||
"Miniplayer" = "启用迷你播放器";
|
"Miniplayer" = "启用迷你播放器";
|
||||||
@@ -65,14 +73,18 @@
|
|||||||
"ExtraSpeedOptionsDesc" = "在播放器菜单中添加更多视频播放速度的选项。";
|
"ExtraSpeedOptionsDesc" = "在播放器菜单中添加更多视频播放速度的选项。";
|
||||||
"DontSnap2Chapter" = "禁用双击跳转";
|
"DontSnap2Chapter" = "禁用双击跳转";
|
||||||
"DontSnap2ChapterDesc" = "禁用通过双击手势跳到下一集。";
|
"DontSnap2ChapterDesc" = "禁用通过双击手势跳到下一集。";
|
||||||
|
"NoTwoFingerSnapToChapter" = "Disable two finger double tap";
|
||||||
|
"NoTwoFingerSnapToChapterDesc" = "Disables two finger double tap snap to chapter gesture.";
|
||||||
|
"PauseOnOverlay" = "Pause on overlay";
|
||||||
|
"PauseOnOverlayDesc" = "Sets playback on pause if overlay appears.";
|
||||||
"RedProgressBar" = "红色进度条";
|
"RedProgressBar" = "红色进度条";
|
||||||
"RedProgressBarDesc" = "加回红色进度条。";
|
"RedProgressBarDesc" = "加回红色进度条。";
|
||||||
"NoPlayerRemixButton" = "移除混剪按钮";
|
"NoPlayerRemixButton" = "Remove remix button";
|
||||||
"NoPlayerRemixButtonDesc" = "移除播放器下方的混剪按钮。";
|
"NoPlayerRemixButtonDesc" = "Removes remix button under the player.";
|
||||||
"NoPlayerClipButton" = "移除剪辑按钮";
|
"NoPlayerClipButton" = "Remove clip button";
|
||||||
"NoPlayerClipButtonDesc" = "移除播放器下方的剪辑按钮。";
|
"NoPlayerClipButtonDesc" = "Removes clip button under the player.";
|
||||||
"NoPlayerDownloadButton" = "移除下载按钮";
|
"NoPlayerDownloadButton" = "Remove download button";
|
||||||
"NoPlayerDownloadButtonDesc" = "移除播放器下方的下载按钮。";
|
"NoPlayerDownloadButtonDesc" = "Removes download button under the player.";
|
||||||
"NoHints" = "禁用提示";
|
"NoHints" = "禁用提示";
|
||||||
"NoHintsDesc" = "禁用播放期间出现在右上角的作者提示。";
|
"NoHintsDesc" = "禁用播放期间出现在右上角的作者提示。";
|
||||||
"NoFreeZoom" = "禁用自由缩放手势";
|
"NoFreeZoom" = "禁用自由缩放手势";
|
||||||
@@ -105,6 +117,8 @@
|
|||||||
"Shorts" = "短视频";
|
"Shorts" = "短视频";
|
||||||
"ShortsOnlyMode" = "仅短视频模式";
|
"ShortsOnlyMode" = "仅短视频模式";
|
||||||
"ShortsOnlyModeDesc" = "将 YouTube 功能限制为只能观看短视频。";
|
"ShortsOnlyModeDesc" = "将 YouTube 功能限制为只能观看短视频。";
|
||||||
|
"AutoSkipShorts" = "Auto-skip Shorts";
|
||||||
|
"AutoSkipShortsDesc" = "Moves to the next video when the current video playback finishes.";
|
||||||
"HideShorts" = "隐藏短视频";
|
"HideShorts" = "隐藏短视频";
|
||||||
"HideShortsDesc" = "从首页、推荐等隐藏短视频(不适用于观看历史记录)。";
|
"HideShortsDesc" = "从首页、推荐等隐藏短视频(不适用于观看历史记录)。";
|
||||||
"ShortsProgress" = "启用进度条";
|
"ShortsProgress" = "启用进度条";
|
||||||
@@ -159,22 +173,24 @@
|
|||||||
"CommentManagerDesc" = "允许通过长按复制评论文本并将评论保存为图片。";
|
"CommentManagerDesc" = "允许通过长按复制评论文本并将评论保存为图片。";
|
||||||
"FixAlbums" = "修复封面";
|
"FixAlbums" = "修复封面";
|
||||||
"FixAlbumsDesc" = "修复来自俄罗斯用户的封面显示问题。";
|
"FixAlbumsDesc" = "修复来自俄罗斯用户的封面显示问题。";
|
||||||
|
"NativeShare" = "Native share sheet";
|
||||||
|
"NativeShareDesc" = "Uses system share sheet to share media";
|
||||||
"RemovePlayNext" = "删除“播放队列中的下一个”";
|
"RemovePlayNext" = "删除“播放队列中的下一个”";
|
||||||
"RemovePlayNextDesc" = "从菜单中删除“播放队列中的下一个”选项。";
|
"RemovePlayNextDesc" = "从菜单中删除“播放队列中的下一个”选项。";
|
||||||
"RemoveDownloadMenu" = "删除“下载”";
|
"RemoveDownloadMenu" = "Remove \"Download\"";
|
||||||
"RemoveDownloadMenuDesc" = "从菜单中删除“下载”选项。";
|
"RemoveDownloadMenuDesc" = "Removes \"Download\" option from menu.";
|
||||||
"RemoveWatchLaterMenu" = "删除“保存到稍后观看”";
|
"RemoveWatchLaterMenu" = "Remove \"Save to Watch Later\"";
|
||||||
"RemoveWatchLaterMenuDesc" = "从菜单中删除“保存到稍后观看”选项。";
|
"RemoveWatchLaterMenuDesc" = "Removes \"Save to Watch Later\" option from menu.";
|
||||||
"RemoveSaveToPlaylistMenu" = "删除“保存到播放列表”";
|
"RemoveSaveToPlaylistMenu" = "Remove \"Save to playlist\"";
|
||||||
"RemoveSaveToPlaylistMenuDesc" = "从菜单中删除“保存到播放列表”选项。";
|
"RemoveSaveToPlaylistMenuDesc" = "Removes \"Save to playlist\" option from menu.";
|
||||||
"RemoveShareMenu" = "删除“分享”";
|
"RemoveShareMenu" = "Remove \"Share\"";
|
||||||
"RemoveShareMenuDesc" = "从菜单中删除“分享”选项。";
|
"RemoveShareMenuDesc" = "Removes \"Share\" option from menu.";
|
||||||
"RemoveNotInterestedMenu" = "删除“不感兴趣”";
|
"RemoveNotInterestedMenu" = "Remove \"Not interested\"";
|
||||||
"RemoveNotInterestedMenuDesc" = "从菜单中删除“不感兴趣”选项。";
|
"RemoveNotInterestedMenuDesc" = "Removes \"Not interested\" option from menu.";
|
||||||
"RemoveDontRecommendMenu" = "删除“不推荐此频道”";
|
"RemoveDontRecommendMenu" = "Remove \"Don't recommend channel\"";
|
||||||
"RemoveDontRecommendMenuDesc" = "从菜单中删除“不推荐此频道”选项。";
|
"RemoveDontRecommendMenuDesc" = "Removes \"Don't recommend channel\" option from menu.";
|
||||||
"RemoveReportMenu" = "删除“举报”";
|
"RemoveReportMenu" = "Remove \"Report\"";
|
||||||
"RemoveReportMenuDesc" = "从菜单中删除“举报”选项。";
|
"RemoveReportMenuDesc" = "Removes \"Report\" option from menu.";
|
||||||
"NoContinueWatching" = "删除“继续观看”";
|
"NoContinueWatching" = "删除“继续观看”";
|
||||||
"NoContinueWatchingDesc" = "从首页中删除包含未完成视频的“继续观看”部分。";
|
"NoContinueWatchingDesc" = "从首页中删除包含未完成视频的“继续观看”部分。";
|
||||||
"NoSearchHistory" = "隐藏搜索历史记录";
|
"NoSearchHistory" = "隐藏搜索历史记录";
|
||||||
@@ -188,13 +204,20 @@
|
|||||||
"PlaylistOldMinibar" = "旧播放列表";
|
"PlaylistOldMinibar" = "旧播放列表";
|
||||||
"PlaylistOldMinibarDesc" = "将新的浮动播放列表面板替换为旧的浮动播放列表面板。";
|
"PlaylistOldMinibarDesc" = "将新的浮动播放列表面板替换为旧的浮动播放列表面板。";
|
||||||
"DisableRTL" = "禁用 RTL 格式";
|
"DisableRTL" = "禁用 RTL 格式";
|
||||||
"DisableRTLDesc" = "对于最初以从右到左(RTL)显示的语言,强制以从左到右(LTR)格式显示文本。";
|
"DisableRTLDesc" = "对于最初以从右到左 (RTL) 显示的语言,强制以从左到右 (LTR) 格式显示文本。";
|
||||||
|
|
||||||
"PlaybackQualityOnWiFi" = "WiFi网络播放质量";
|
"HoldToSpeed" = "Hold to speed";
|
||||||
"PlaybackQualityOnCellular" = "蜂窝网络播放质量";
|
"Disable" = "Disable";
|
||||||
"SelectQuality" = "选择质量";
|
"Disabled" = "Disabled";
|
||||||
"Default" = "默认";
|
"PlaybackSpeed" = "Playback Speed";
|
||||||
"Best" = "最好";
|
|
||||||
|
"DefaultPlaybackRate" = "Default playback rate";
|
||||||
|
|
||||||
|
"PlaybackQualityOnWiFi" = "Playback quality on WiFi";
|
||||||
|
"PlaybackQualityOnCellular" = "Playback quality on Cellular";
|
||||||
|
"SelectQuality" = "Select Quality";
|
||||||
|
"Default" = "Default";
|
||||||
|
"Best" = "Best";
|
||||||
|
|
||||||
"Startup" = "启动页";
|
"Startup" = "启动页";
|
||||||
"Home" = "首页";
|
"Home" = "首页";
|
||||||
@@ -205,12 +228,15 @@
|
|||||||
"Warning" = "警告";
|
"Warning" = "警告";
|
||||||
"TabIsHidden" = "无法选择隐藏选项卡作为启动页。";
|
"TabIsHidden" = "无法选择隐藏选项卡作为启动页。";
|
||||||
|
|
||||||
"SupportDevelopment" = "支持开发";
|
"SupportDevelopment" = "Support development";
|
||||||
"SupportDevelopmentDesc" = "如果您喜欢YTLite并愿意支持其开发,可以使用以下任何便捷的方式来赞助。\n感谢❤";
|
"SupportDevelopmentDesc" = "If you like YTLite and would like to support its development, you can do it using any of convenient ways below.\nThanks❤";
|
||||||
|
"Contributors" = "Contributors";
|
||||||
|
"OpenSourceLibs" = "Open Source Libraries";
|
||||||
"Version" = "版本";
|
"Version" = "版本";
|
||||||
"About" = "关于";
|
"About" = "关于";
|
||||||
"Credits" = "信息";
|
"Credits" = "信息";
|
||||||
"Developer" = "YTLite开发者";
|
"Developer" = "YTLite开发者";
|
||||||
|
"SpecialThanks" = "Special thanks";
|
||||||
"ChineseSimplified" = "中文(简体)本地化";
|
"ChineseSimplified" = "中文(简体)本地化";
|
||||||
"ChineseTraditional" = "中文(繁体)本地化";
|
"ChineseTraditional" = "中文(繁体)本地化";
|
||||||
"French" = "法语本地化";
|
"French" = "法语本地化";
|
||||||
@@ -218,13 +244,15 @@
|
|||||||
"Japanese" = "日语本地化";
|
"Japanese" = "日语本地化";
|
||||||
"Vietnamese" = "越南语本地化";
|
"Vietnamese" = "越南语本地化";
|
||||||
"Advanced" = "高级模式";
|
"Advanced" = "高级模式";
|
||||||
"AdvancedDesc" = "更多自定义的功能";
|
"AdvancedDesc" = "More customizable mode";
|
||||||
"AdvancedModeReminder" = "想为YTLite激活高级模式吗?\n\n此模式提供了50多个额外的选项来自定义和优化您的YouTube体验。\n可以稍后从设置中启用/禁用它 → %@ → %@ → %@。";
|
"AdvancedModeReminder" = "想为YTLite激活高级模式吗?\n\n此模式提供了50多个额外的选项来自定义和优化您的YouTube体验。\n可以稍后从设置中启用/禁用它 → %@ → %@ → %@。";
|
||||||
"ClearCache" = "清除缓存";
|
"ClearCache" = "清除缓存";
|
||||||
"ResetSettings" = "重置YTLite设置";
|
"ResetSettings" = "重置YTLite设置";
|
||||||
"ResetMessage" = "此选项会将YTLite设置重置为默认值并关闭YouTube。\n\n确定要继续吗?";
|
"ResetMessage" = "此选项会将YTLite设置重置为默认值并关闭YouTube。\n\n确定要继续吗?";
|
||||||
"ShortsOnlyWarning" = "确定要激活此模式吗?\n\n在此模式下,将只能观看短视频,且无法执行任何其他操作。\n\n可以通过双指长按禁用“仅短视频模式”。";
|
"ShortsOnlyWarning" = "确定要激活此模式吗?\n\n在此模式下,将只能观看短视频,且无法执行任何其他操作。\n\n可以通过双指长按禁用“仅短视频模式”。";
|
||||||
"ShortsModeTurnedOff" = "仅短视频模式已关闭";
|
"ShortsModeTurnedOff" = "仅短视频模式已关闭";
|
||||||
|
"LibraryAdded" = "The You/Library tab has been restored";
|
||||||
|
"LibraryRemoved" = "The You/Library tab has been removed";
|
||||||
"Yes" = "是";
|
"Yes" = "是";
|
||||||
"No" = "不";
|
"No" = "不";
|
||||||
|
|
||||||
@@ -232,15 +260,17 @@
|
|||||||
"CopyTitle" = "复制标题";
|
"CopyTitle" = "复制标题";
|
||||||
"CopyDescription" = "复制描述";
|
"CopyDescription" = "复制描述";
|
||||||
"CopyPostText" = "复制帖子文本";
|
"CopyPostText" = "复制帖子文本";
|
||||||
|
"SaveCurrentImage" = "Save current image";
|
||||||
|
"CopyCurrentImage" = "Copy current image";
|
||||||
"SavePostAsImage" = "帖子另存为图片";
|
"SavePostAsImage" = "帖子另存为图片";
|
||||||
"CopyPostAsImage" = "帖子作为图片复制";
|
"CopyPostAsImage" = "帖子作为图片复制";
|
||||||
"CopyCommentText" = "复制评论文本";
|
"CopyCommentText" = "复制评论文本";
|
||||||
"SaveCommentAsImage" = "评论另存为图片";
|
"SaveCommentAsImage" = "评论另存为图片";
|
||||||
"CopyCommentAsImage" = "评论作为图片复制";
|
"CopyCommentAsImage" = "评论作为图片复制";
|
||||||
"SaveProfilePicture" = "保存个人资料图片";
|
"SaveProfilePicture" = "Save profile picture";
|
||||||
"CopyProfilePicture" = "复制个人资料图片";
|
"CopyProfilePicture" = "Copy profile picture";
|
||||||
"Cancel" = "取消";
|
"Cancel" = "取消";
|
||||||
"Copied" = "已复制到剪贴板";
|
"Copied" = "已复制到剪贴板";
|
||||||
"Saved" = "已保存到照片";
|
"Saved" = "已保存到照片";
|
||||||
"Done" = "完成";
|
"Done" = "完成";
|
||||||
"Error" = "错误";
|
"Error" = "错误";
|
||||||
+63
-35
@@ -19,6 +19,8 @@
|
|||||||
"NoSubbarDesc" = "隱藏導覽列下的子導覽列(全部、讓你耳目一新的影片、直播中...等)";
|
"NoSubbarDesc" = "隱藏導覽列下的子導覽列(全部、讓你耳目一新的影片、直播中...等)";
|
||||||
"NoYTLogo" = "移除YouTube圖示";
|
"NoYTLogo" = "移除YouTube圖示";
|
||||||
"NoYTLogoDesc" = "移除在左上方導覽列的YouTube圖示";
|
"NoYTLogoDesc" = "移除在左上方導覽列的YouTube圖示";
|
||||||
|
"PremiumYTLogo" = "Set Premium YouTube logo";
|
||||||
|
"PremiumYTLogoDesc" = "Sets Premium YouTube logo in the Navigation bar.";
|
||||||
|
|
||||||
"Overlay" = "播放介面";
|
"Overlay" = "播放介面";
|
||||||
"HideAutoplay" = "隱藏自動播放開關";
|
"HideAutoplay" = "隱藏自動播放開關";
|
||||||
@@ -39,12 +41,18 @@
|
|||||||
"NoFullscreenActionsDesc" = "在全螢幕模式下停用操作面板";
|
"NoFullscreenActionsDesc" = "在全螢幕模式下停用操作面板";
|
||||||
"PersistentProgressBar" = "固定進度條";
|
"PersistentProgressBar" = "固定進度條";
|
||||||
"PersistentProgressBarDesc" = "總是在播放器中顯示進度條";
|
"PersistentProgressBarDesc" = "總是在播放器中顯示進度條";
|
||||||
|
"StockVolumeHUD" = "Stock volume HUD";
|
||||||
|
"StockVolumeHUDDesc" = "Displays system volume HUD in fullscreen.";
|
||||||
"NoRelatedVids" = "隱藏相關影片";
|
"NoRelatedVids" = "隱藏相關影片";
|
||||||
"NoRelatedVidsDesc" = "移除全螢幕模式向上滑動時所出現的相關影片";
|
"NoRelatedVidsDesc" = "移除全螢幕模式向上滑動時所出現的相關影片";
|
||||||
"NoPromotionCards" = "隱藏付費推廣";
|
"NoPromotionCards" = "隱藏付費推廣";
|
||||||
"NoPromotionCardsDesc" = "在付費推廣的影片中隱藏「付費推廣」";
|
"NoPromotionCardsDesc" = "在付費推廣的影片中隱藏「付費推廣」";
|
||||||
"NoWatermarks" = "隱藏浮水印";
|
"NoWatermarks" = "隱藏浮水印";
|
||||||
"NoWatermarksDesc" = "在播放器中隱藏頻道浮水印";
|
"NoWatermarksDesc" = "在播放器中隱藏頻道浮水印";
|
||||||
|
"VideoEndTime" = "Show playback end time";
|
||||||
|
"VideoEndTimeDesc" = "Adds video playback end time to the player bar.";
|
||||||
|
"24hrFormat" = "24-hour format";
|
||||||
|
"24hrFormatDesc" = "Shows end time in 24-hour format.";
|
||||||
|
|
||||||
"Player" = "播放器";
|
"Player" = "播放器";
|
||||||
"Miniplayer" = "啟用迷你播放器";
|
"Miniplayer" = "啟用迷你播放器";
|
||||||
@@ -65,14 +73,18 @@
|
|||||||
"ExtraSpeedOptionsDesc" = "在播放速度選單中添加更多選項";
|
"ExtraSpeedOptionsDesc" = "在播放速度選單中添加更多選項";
|
||||||
"DontSnap2Chapter" = "停用跳轉到章節";
|
"DontSnap2Chapter" = "停用跳轉到章節";
|
||||||
"DontSnap2ChapterDesc" = "停用點兩下手勢跳轉到下一集";
|
"DontSnap2ChapterDesc" = "停用點兩下手勢跳轉到下一集";
|
||||||
|
"NoTwoFingerSnapToChapter" = "Disable two finger double tap";
|
||||||
|
"NoTwoFingerSnapToChapterDesc" = "Disables two finger double tap snap to chapter gesture.";
|
||||||
|
"PauseOnOverlay" = "Pause on overlay";
|
||||||
|
"PauseOnOverlayDesc" = "Sets playback on pause if overlay appears.";
|
||||||
"RedProgressBar" = "紅色進度條";
|
"RedProgressBar" = "紅色進度條";
|
||||||
"RedProgressBarDesc" = "恢復紅色的進度條";
|
"RedProgressBarDesc" = "恢復紅色的進度條";
|
||||||
"NoPlayerRemixButton" = "移除Remix按鈕";
|
"NoPlayerRemixButton" = "Remove remix button";
|
||||||
"NoPlayerRemixButtonDesc" = "移除播放器下方的Remix按鈕";
|
"NoPlayerRemixButtonDesc" = "Removes remix button under the player.";
|
||||||
"NoPlayerClipButton" = "移除剪輯片段按鈕";
|
"NoPlayerClipButton" = "Remove clip button";
|
||||||
"NoPlayerClipButtonDesc" = "移除播放器下方的剪輯片段按鈕";
|
"NoPlayerClipButtonDesc" = "Removes clip button under the player.";
|
||||||
"NoPlayerDownloadButton" = "移除下載按鈕";
|
"NoPlayerDownloadButton" = "Remove download button";
|
||||||
"NoPlayerDownloadButtonDesc" = "移除播放器下方的下載按鈕";
|
"NoPlayerDownloadButtonDesc" = "Removes download button under the player.";
|
||||||
"NoHints" = "停用提示";
|
"NoHints" = "停用提示";
|
||||||
"NoHintsDesc" = "在播放過程中出現在右上角的作者提示";
|
"NoHintsDesc" = "在播放過程中出現在右上角的作者提示";
|
||||||
"NoFreeZoom" = "停用自由縮放手勢";
|
"NoFreeZoom" = "停用自由縮放手勢";
|
||||||
@@ -105,6 +117,8 @@
|
|||||||
"Shorts" = "Shorts";
|
"Shorts" = "Shorts";
|
||||||
"ShortsOnlyMode" = "只看Shorts模式";
|
"ShortsOnlyMode" = "只看Shorts模式";
|
||||||
"ShortsOnlyModeDesc" = "限制YouTube功能只能觀看Shorts影片";
|
"ShortsOnlyModeDesc" = "限制YouTube功能只能觀看Shorts影片";
|
||||||
|
"AutoSkipShorts" = "Auto-skip Shorts";
|
||||||
|
"AutoSkipShortsDesc" = "Moves to the next video when the current video playback finishes.";
|
||||||
"HideShorts" = "隱藏Shorts影片";
|
"HideShorts" = "隱藏Shorts影片";
|
||||||
"HideShortsDesc" = "從首頁、推薦...等,隱藏Shorts影片(不適用於觀看紀錄)";
|
"HideShortsDesc" = "從首頁、推薦...等,隱藏Shorts影片(不適用於觀看紀錄)";
|
||||||
"ShortsProgress" = "啟用時間進度條";
|
"ShortsProgress" = "啟用時間進度條";
|
||||||
@@ -159,22 +173,24 @@
|
|||||||
"CommentManagerDesc" = "長按可以複製留言內容或將留言儲存為圖片";
|
"CommentManagerDesc" = "長按可以複製留言內容或將留言儲存為圖片";
|
||||||
"FixAlbums" = "修復封面";
|
"FixAlbums" = "修復封面";
|
||||||
"FixAlbumsDesc" = "為俄羅斯使用者修復封面顯示問題";
|
"FixAlbumsDesc" = "為俄羅斯使用者修復封面顯示問題";
|
||||||
|
"NativeShare" = "Native share sheet";
|
||||||
|
"NativeShareDesc" = "Uses system share sheet to share media";
|
||||||
"RemovePlayNext" = "移除「播放下一個」";
|
"RemovePlayNext" = "移除「播放下一個」";
|
||||||
"RemovePlayNextDesc" = "從選單移除「播放下一個」";
|
"RemovePlayNextDesc" = "從選單移除「播放下一個」";
|
||||||
"RemoveDownloadMenu" = "移除「下載影片」";
|
"RemoveDownloadMenu" = "Remove \"Download\"";
|
||||||
"RemoveDownloadMenuDesc" = "從選單移除「下載影片」選項";
|
"RemoveDownloadMenuDesc" = "Removes \"Download\" option from menu.";
|
||||||
"RemoveWatchLaterMenu" = "移除「儲存至稍後觀看清單」";
|
"RemoveWatchLaterMenu" = "Remove \"Save to Watch Later\"";
|
||||||
"RemoveWatchLaterMenuDesc" = "從選單移除「儲存至稍後觀看清單」選項";
|
"RemoveWatchLaterMenuDesc" = "Removes \"Save to Watch Later\" option from menu.";
|
||||||
"RemoveSaveToPlaylistMenu" = "移除「儲存至播放清單」";
|
"RemoveSaveToPlaylistMenu" = "Remove \"Save to playlist\"";
|
||||||
"RemoveSaveToPlaylistMenuDesc" = "從選單移除「儲存至播放清單」選項";
|
"RemoveSaveToPlaylistMenuDesc" = "Removes \"Save to playlist\" option from menu.";
|
||||||
"RemoveShareMenu" = "移除「分享」";
|
"RemoveShareMenu" = "Remove \"Share\"";
|
||||||
"RemoveShareMenuDesc" = "從選單中移除「分享」選項";
|
"RemoveShareMenuDesc" = "Removes \"Share\" option from menu.";
|
||||||
"RemoveNotInterestedMenu" = "移除「不感興趣」";
|
"RemoveNotInterestedMenu" = "Remove \"Not interested\"";
|
||||||
"RemoveNotInterestedMenuDesc" = "從選單移除「不感興趣」選項";
|
"RemoveNotInterestedMenuDesc" = "Removes \"Not interested\" option from menu.";
|
||||||
"RemoveDontRecommendMenu" = "移除「不要推薦這個頻道」";
|
"RemoveDontRecommendMenu" = "Remove \"Don't recommend channel\"";
|
||||||
"RemoveDontRecommendMenuDesc" = "從選單移除「不要推薦這個頻道」選項";
|
"RemoveDontRecommendMenuDesc" = "Removes \"Don't recommend channel\" option from menu.";
|
||||||
"RemoveReportMenu" = "移除「檢舉」";
|
"RemoveReportMenu" = "Remove \"Report\"";
|
||||||
"RemoveReportMenuDesc" = "從選單移除「檢舉」選項";
|
"RemoveReportMenuDesc" = "Removes \"Report\" option from menu.";
|
||||||
"NoContinueWatching" = "移除「繼續觀看」";
|
"NoContinueWatching" = "移除「繼續觀看」";
|
||||||
"NoContinueWatchingDesc" = "從首頁中移除包含未完成影片的「繼續觀看」部分";
|
"NoContinueWatchingDesc" = "從首頁中移除包含未完成影片的「繼續觀看」部分";
|
||||||
"NoSearchHistory" = "隱藏搜尋記錄";
|
"NoSearchHistory" = "隱藏搜尋記錄";
|
||||||
@@ -190,11 +206,18 @@
|
|||||||
"DisableRTL" = "停用RTL格式";
|
"DisableRTL" = "停用RTL格式";
|
||||||
"DisableRTLDesc" = "強制將初始顯示從右到左(RTL)格式的語言,改為從左到右(LTR)顯示";
|
"DisableRTLDesc" = "強制將初始顯示從右到左(RTL)格式的語言,改為從左到右(LTR)顯示";
|
||||||
|
|
||||||
"PlaybackQualityOnWiFi" = "使用Wi-Fi時的影片畫質";
|
"HoldToSpeed" = "Hold to speed";
|
||||||
"PlaybackQualityOnCellular" = "使用行動網路時的影片畫質";
|
"Disable" = "Disable";
|
||||||
"SelectQuality" = "選擇畫質";
|
"Disabled" = "Disabled";
|
||||||
"Default" = "預設";
|
"PlaybackSpeed" = "Playback Speed";
|
||||||
"Best" = "最佳";
|
|
||||||
|
"DefaultPlaybackRate" = "Default playback rate";
|
||||||
|
|
||||||
|
"PlaybackQualityOnWiFi" = "Playback quality on WiFi";
|
||||||
|
"PlaybackQualityOnCellular" = "Playback quality on Cellular";
|
||||||
|
"SelectQuality" = "Select Quality";
|
||||||
|
"Default" = "Default";
|
||||||
|
"Best" = "Best";
|
||||||
|
|
||||||
"Startup" = "啟動頁面";
|
"Startup" = "啟動頁面";
|
||||||
"Home" = "首頁";
|
"Home" = "首頁";
|
||||||
@@ -205,12 +228,15 @@
|
|||||||
"Warning" = "警告";
|
"Warning" = "警告";
|
||||||
"TabIsHidden" = "無法將隱藏的標籤選為啟動頁面";
|
"TabIsHidden" = "無法將隱藏的標籤選為啟動頁面";
|
||||||
|
|
||||||
"SupportDevelopment" = "支持開發";
|
"SupportDevelopment" = "Support development";
|
||||||
"SupportDevelopmentDesc" = "如果您喜歡 YTLite 並且願意支持開發,可以使用以下任何方便的方式支持。\n感謝❤";
|
"SupportDevelopmentDesc" = "If you like YTLite and would like to support its development, you can do it using any of convenient ways below.\nThanks❤";
|
||||||
|
"Contributors" = "Contributors";
|
||||||
|
"OpenSourceLibs" = "Open Source Libraries";
|
||||||
"Version" = "版本";
|
"Version" = "版本";
|
||||||
"About" = "關於";
|
"About" = "關於";
|
||||||
"Credits" = "貢獻";
|
"Credits" = "貢獻";
|
||||||
"Developer" = "YTLite開發者";
|
"Developer" = "YTLite開發者";
|
||||||
|
"SpecialThanks" = "Special thanks";
|
||||||
"ChineseSimplified" = "簡體中文在地化";
|
"ChineseSimplified" = "簡體中文在地化";
|
||||||
"ChineseTraditional" = "繁體中文在地化";
|
"ChineseTraditional" = "繁體中文在地化";
|
||||||
"French" = "法文在地化";
|
"French" = "法文在地化";
|
||||||
@@ -218,13 +244,15 @@
|
|||||||
"Japanese" = "日本語在地化";
|
"Japanese" = "日本語在地化";
|
||||||
"Vietnamese" = "越南語在地化";
|
"Vietnamese" = "越南語在地化";
|
||||||
"Advanced" = "進階模式";
|
"Advanced" = "進階模式";
|
||||||
"AdvancedDesc" = "更多自訂功能";
|
"AdvancedDesc" = "More customizable mode";
|
||||||
"AdvancedModeReminder" = "您是否想啟用YTLite的進階模式?\n\n這個模式提供了50多個額外的選項,可以自訂義和優化您的YouTube使用體驗。您稍後可以在「設定」中 → %@ → %@ → %@ 啟用或停用它。";
|
"AdvancedModeReminder" = "您是否想啟用YTLite的進階模式?\n\n這個模式提供了50多個額外的選項,可以自訂義和優化您的YouTube使用體驗。您稍後可以在「設定」中 → %@ → %@ → %@ 啟用或停用它。";
|
||||||
"ClearCache" = "清除快取";
|
"ClearCache" = "清除快取";
|
||||||
"ResetSettings" = "重置YTLite設定";
|
"ResetSettings" = "重置YTLite設定";
|
||||||
"ResetMessage" = "這個選項會將YTLite重置為預設值,並關閉Youtube\n\n您確定要繼續嗎?";
|
"ResetMessage" = "這個選項會將YTLite重置為預設值,並關閉Youtube\n\n您確定要繼續嗎?";
|
||||||
"ShortsOnlyWarning" = "您確定要開啟此模式嗎?\n\n在此模式下,您只能觀看Shorts影片,無法進行其它操作。\n\n您可以在Shorts播放器中使用兩指長按來停用只看Shorts模式。";
|
"ShortsOnlyWarning" = "您確定要開啟此模式嗎?\n\n在此模式下,您只能觀看Shorts影片,無法進行其它操作。\n\n您可以在Shorts播放器中使用兩指長按來停用只看Shorts模式。";
|
||||||
"ShortsModeTurnedOff" = "已關閉「只看Shorts模式」";
|
"ShortsModeTurnedOff" = "已關閉「只看Shorts模式」";
|
||||||
|
"LibraryAdded" = "The You/Library tab has been restored";
|
||||||
|
"LibraryRemoved" = "The You/Library tab has been removed";
|
||||||
"Yes" = "是";
|
"Yes" = "是";
|
||||||
"No" = "否";
|
"No" = "否";
|
||||||
|
|
||||||
@@ -232,17 +260,17 @@
|
|||||||
"CopyTitle" = "複製標題";
|
"CopyTitle" = "複製標題";
|
||||||
"CopyDescription" = "複製說明";
|
"CopyDescription" = "複製說明";
|
||||||
"CopyPostText" = "複製貼文內容";
|
"CopyPostText" = "複製貼文內容";
|
||||||
"SavePostAsImage" = "貼文儲存為圖片";
|
"SaveCurrentImage" = "Save current image";
|
||||||
|
"CopyCurrentImage" = "Copy current image";
|
||||||
|
"SavePostAsImage" = "儲存貼文為圖片";
|
||||||
"CopyPostAsImage" = "複製貼文為圖片";
|
"CopyPostAsImage" = "複製貼文為圖片";
|
||||||
"SaveCurrentImage" = "儲存當前圖片";
|
|
||||||
"CopyCurrentImage" = "複製當前圖片";
|
|
||||||
"CopyCommentText" = "複製留言內容";
|
"CopyCommentText" = "複製留言內容";
|
||||||
"SaveCommentAsImage" = "留言儲存為圖片";
|
"SaveCommentAsImage" = "留言儲存為圖片";
|
||||||
"CopyCommentAsImage" = "儲存留言為圖片";
|
"CopyCommentAsImage" = "複製留言為圖片";
|
||||||
"SaveProfilePicture" = "儲存個人檔案照片";
|
"SaveProfilePicture" = "Save profile picture";
|
||||||
"CopyProfilePicture" = "複製個人檔案照片";
|
"CopyProfilePicture" = "Copy profile picture";
|
||||||
"Cancel" = "取消";
|
"Cancel" = "取消";
|
||||||
"Copied" = "已複製到剪貼簿";
|
"Copied" = "已複製到剪貼簿";
|
||||||
"Saved" = "已儲存到照片應用";
|
"Saved" = "已儲存到照片應用";
|
||||||
"Done" = "Done";
|
"Done" = "Done";
|
||||||
"Error" = "發生錯誤";
|
"Error" = "發生錯誤";
|
||||||
Binary file not shown.
Binary file not shown.
Reference in New Issue
Block a user