This commit is contained in:
dayanch96
2024-02-21 05:08:56 +03:00
parent f96d397f3b
commit f7d567bf5d
14 changed files with 159 additions and 65 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ endif
DEBUG=0 DEBUG=0
FINALPACKAGE=1 FINALPACKAGE=1
ARCHS = arm64 ARCHS = arm64
PACKAGE_VERSION = 2.6.1 PACKAGE_VERSION = 2.6.2
TARGET := iphone:clang:latest:13.0 TARGET := iphone:clang:latest:13.0
include $(THEOS)/makefiles/common.mk include $(THEOS)/makefiles/common.mk
+1 -1
View File
@@ -284,7 +284,7 @@ static YTSettingsSectionItem *createSwitchItem(NSString *title, NSString *titleD
selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) { selectBlock:^BOOL (YTSettingsCell *cell, NSUInteger arg1) {
NSArray <YTSettingsSectionItem *> *rows = @[ NSArray <YTSettingsSectionItem *> *rows = @[
createSwitchItem(LOC(@"CopyVideoInfo"), LOC(@"CopyVideoInfoDesc"), @"copyVideoInfo", &kCopyVideoInfo, selfObject), createSwitchItem(LOC(@"CopyVideoInfo"), LOC(@"CopyVideoInfoDesc"), @"copyVideoInfo", &kCopyVideoInfo, selfObject),
createSwitchItem(LOC(@"CopyPostText"), LOC(@"CopyPostTextDesc"), @"copyPostText", &kCopyPostText, selfObject), createSwitchItem(LOC(@"PostManager"), LOC(@"PostManagerDesc"), @"postManager", &kPostManager, selfObject),
createSwitchItem(LOC(@"SavePostImage"), LOC(@"SavePostImageDesc"), @"savePostImage", &kSavePostImage, selfObject), createSwitchItem(LOC(@"SavePostImage"), LOC(@"SavePostImageDesc"), @"savePostImage", &kSavePostImage, selfObject),
createSwitchItem(LOC(@"SaveProfilePhoto"), LOC(@"SaveProfilePhotoDesc"), @"saveProfilePhoto", &kSaveProfilePhoto, selfObject), createSwitchItem(LOC(@"SaveProfilePhoto"), LOC(@"SaveProfilePhotoDesc"), @"saveProfilePhoto", &kSaveProfilePhoto, selfObject),
createSwitchItem(LOC(@"CopyCommentText"), LOC(@"CopyCommentTextDesc"), @"copyCommentText", &kCopyCommentText, selfObject), createSwitchItem(LOC(@"CopyCommentText"), LOC(@"CopyCommentTextDesc"), @"copyCommentText", &kCopyCommentText, selfObject),
+8 -2
View File
@@ -111,7 +111,7 @@ BOOL kRemoveSubscriptions;
BOOL kRemoveUploads; BOOL kRemoveUploads;
BOOL kRemoveLibrary; BOOL kRemoveLibrary;
BOOL kCopyVideoInfo; BOOL kCopyVideoInfo;
BOOL kCopyPostText; BOOL kPostManager;
BOOL kSavePostImage; BOOL kSavePostImage;
BOOL kSaveProfilePhoto; BOOL kSaveProfilePhoto;
BOOL kCopyCommentText; BOOL kCopyCommentText;
@@ -289,14 +289,20 @@ int kPivotIndex;
@end @end
@interface ASDisplayNode : NSObject @interface ASDisplayNode : NSObject
@property (nonatomic, assign, readonly) UIViewController *closestViewController;
@property (atomic, assign, readonly) ASNodeAncestryEnumerator *supernodes; @property (atomic, assign, readonly) ASNodeAncestryEnumerator *supernodes;
@property (atomic, copy, readwrite) NSArray *yogaChildren; @property (atomic, copy, readwrite) NSArray *yogaChildren;
@property (atomic) CALayer *layer;
@end @end
@interface ELMContainerNode : ASDisplayNode @interface ELMContainerNode : ASDisplayNode
@property (nonatomic, strong, readwrite) NSString *copiedComment; @property (nonatomic, strong, readwrite) NSString *copiedComment;
@end @end
@interface ELMExpandableTextNode : ASDisplayNode
@property (atomic, assign, readonly) ASDisplayNode *currentTextNode;
@end
@interface ASNetworkImageNode : ASDisplayNode @interface ASNetworkImageNode : ASDisplayNode
@property (atomic, copy, readwrite) NSURL *URL; @property (atomic, copy, readwrite) NSURL *URL;
@end @end
@@ -307,7 +313,7 @@ int kPivotIndex;
@interface _ASDisplayView : UIView @interface _ASDisplayView : UIView
@property (nonatomic, strong, readwrite) ASDisplayNode *keepalive_node; @property (nonatomic, strong, readwrite) ASDisplayNode *keepalive_node;
- (void)copyText:(UILongPressGestureRecognizer *)sender; - (void)postManager:(UILongPressGestureRecognizer *)sender;
- (void)saveImage:(UILongPressGestureRecognizer *)sender; - (void)saveImage:(UILongPressGestureRecognizer *)sender;
- (void)savePFP:(UILongPressGestureRecognizer *)sender; - (void)savePFP:(UILongPressGestureRecognizer *)sender;
- (void)copyComment:(UILongPressGestureRecognizer *)sender; - (void)copyComment:(UILongPressGestureRecognizer *)sender;
+105 -41
View File
@@ -645,9 +645,8 @@ static BOOL isOverlayShown = YES;
- (void)didLoad { - (void)didLoad {
%orig; %orig;
ASTextNode *textNode = (ASTextNode *)self;
if (kCopyCommentText && [[self valueForKey:@"_accessibilityIdentifier"] isEqualToString:@"id.comment.content.label"]) { if (kCopyCommentText && [[self valueForKey:@"_accessibilityIdentifier"] isEqualToString:@"id.comment.content.label"]) {
ASTextNode *textNode = (ASTextNode *)self;
NSString *comment = textNode.attributedText.string; NSString *comment = textNode.attributedText.string;
NSMutableArray *allObjects = self.supernodes.allObjects; NSMutableArray *allObjects = self.supernodes.allObjects;
@@ -658,15 +657,77 @@ static BOOL isOverlayShown = YES;
} }
} }
} }
if (kPostManager && [self isKindOfClass:NSClassFromString(@"ELMExpandableTextNode")]) {
ELMExpandableTextNode *expandableTextNode = (ELMExpandableTextNode *)self;
ASTextNode *textNode = (ASTextNode *)expandableTextNode.currentTextNode;
NSString *text = textNode.attributedText.string;
NSMutableArray *allObjects = self.supernodes.allObjects;
for (ELMContainerNode *containerNode in allObjects) {
if ([containerNode.description containsString:@"id.ui.backstage.original_post"] && text) {
containerNode.copiedComment = text;
break;
}
}
}
} }
%end %end
static void downloadImageFromURL(UIResponder *responder, NSURL *URL) {
NSString *URLString = URL.absoluteString;
if (kFixAlbums && [URLString hasPrefix:@"https://yt3."]) {
URLString = [URLString stringByReplacingOccurrencesOfString:@"https://yt3." withString:@"https://yt4."];
}
NSURL *downloadURL = nil;
if ([URLString containsString:@"c-fcrop"]) {
NSRange croppedURL = [URLString rangeOfString:@"c-fcrop"];
if (croppedURL.location != NSNotFound) {
NSString *newURL = [URLString stringByReplacingOccurrencesOfString:[URLString substringFromIndex:croppedURL.location] withString:@"nd-v1"];
downloadURL = [NSURL URLWithString:newURL];
}
} else {
downloadURL = URL;
}
NSURLSession *session = [NSURLSession sharedSession];
[[session dataTaskWithURL:downloadURL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (data) {
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetCreationRequest *request = [PHAssetCreationRequest creationRequestForAsset];
[request addResourceWithType:PHAssetResourceTypePhoto data:data options:nil];
} completionHandler:^(BOOL success, NSError *error) {
[[%c(YTToastResponderEvent) eventWithMessage:success ? LOC(@"Saved") : [NSString stringWithFormat:LOC(@"%@: %@"), LOC(@"Error"), error.localizedDescription] firstResponder:responder] send];
}];
} else {
[[%c(YTToastResponderEvent) eventWithMessage:[NSString stringWithFormat:LOC(@"%@: %@"), LOC(@"Error"), error.localizedDescription] firstResponder:responder] send];
}
}] resume];
}
static void genImageFromLayer(CALayer *layer, UIColor *backgroundColor, void (^completionHandler)(UIImage *)) {
UIGraphicsBeginImageContextWithOptions(layer.frame.size, NO, 0.0);
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetFillColorWithColor(context, backgroundColor.CGColor);
CGContextFillRect(context, CGRectMake(0, 0, layer.frame.size.width, layer.frame.size.height));
[layer renderInContext:context];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
if (completionHandler) {
completionHandler(image);
}
}
%hook _ASDisplayView %hook _ASDisplayView
- (void)setKeepalive_node:(id)arg1 { - (void)setKeepalive_node:(id)arg1 {
%orig; %orig;
NSArray *gesturesInfo = @[ NSArray *gesturesInfo = @[
@{@"selector": @"copyText:", @"text": @"ELMExpandableTextNode-View", @"key": @(kCopyPostText)}, @{@"selector": @"postManager:", @"text": @"id.ui.backstage.original_post", @"key": @(kPostManager)},
@{@"selector": @"saveImage:", @"text": @"YTImageZoomNode-View", @"key": @(kSavePostImage)}, @{@"selector": @"saveImage:", @"text": @"YTImageZoomNode-View", @"key": @(kSavePostImage)},
@{@"selector": @"savePFP:", @"text": @"ELMImageNode-View", @"key": @(kSaveProfilePhoto)}, @{@"selector": @"savePFP:", @"text": @"ELMImageNode-View", @"key": @(kSaveProfilePhoto)},
@{@"selector": @"copyComment:", @"text": @"id.ui.comment_cell", @"key": @(kCopyCommentText)} @{@"selector": @"copyComment:", @"text": @"id.ui.comment_cell", @"key": @(kCopyCommentText)}
@@ -713,13 +774,46 @@ static BOOL isOverlayShown = YES;
} }
%new %new
- (void)copyText:(UILongPressGestureRecognizer *)sender { - (void)postManager:(UILongPressGestureRecognizer *)sender {
if (sender.state == UIGestureRecognizerStateBegan) { if (sender.state == UIGestureRecognizerStateBegan) {
[UIPasteboard generalPasteboard].string = self.accessibilityLabel; ELMContainerNode *nodeForLayer = (ELMContainerNode *)self.keepalive_node.yogaChildren[0];
ELMContainerNode *containerNode = (ELMContainerNode *)self.keepalive_node;
NSString *text = containerNode.copiedComment;
CALayer *layer = nodeForLayer.layer;
UIColor *backgroundColor = containerNode.closestViewController.view.backgroundColor;
UIResponder *responder = self.nextResponder; UIAlertController *alertController = [UIAlertController alertControllerWithTitle:LOC(@"SelectAction") message:nil preferredStyle:UIAlertControllerStyleActionSheet];
while (responder && ![responder isKindOfClass:[UIViewController class]]) responder = responder.nextResponder; alertController.view.tintColor = [UIColor labelColor];
if (responder) [[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:responder] send];
[alertController addAction:[UIAlertAction actionWithTitle:LOC(@"CopyPostText") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
if (text) {
[UIPasteboard generalPasteboard].string = text;
[[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:containerNode.closestViewController] send];
}
}]];
[alertController addAction:[UIAlertAction actionWithTitle:LOC(@"SavePostAsImage") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
genImageFromLayer(layer, backgroundColor, ^(UIImage *image) {
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetCreationRequest *request = [PHAssetCreationRequest creationRequestForAssetFromImage:image];
request.creationDate = [NSDate date];
} completionHandler:^(BOOL success, NSError *error) {
NSString *message = success ? LOC(@"Saved") : [NSString stringWithFormat:LOC(@"%@: %@"), LOC(@"Error"), error.localizedDescription];
[[%c(YTToastResponderEvent) eventWithMessage:message firstResponder:containerNode.closestViewController] send];
}];
});
}]];
[alertController addAction:[UIAlertAction actionWithTitle:LOC(@"CopyPostAsImage") style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
genImageFromLayer(layer, backgroundColor, ^(UIImage *image) {
[UIPasteboard generalPasteboard].image = image;
[[%c(YTToastResponderEvent) eventWithMessage:LOC(@"Copied") firstResponder:containerNode.closestViewController] send];
});
}]];
[alertController addAction:[UIAlertAction actionWithTitle:LOC(@"Cancel") style:UIAlertActionStyleCancel handler:nil]];
[containerNode.closestViewController presentViewController:alertController animated:YES completion:nil];
} }
} }
@@ -729,41 +823,11 @@ static BOOL isOverlayShown = YES;
ASNetworkImageNode *imageNode = (ASNetworkImageNode *)self.keepalive_node; ASNetworkImageNode *imageNode = (ASNetworkImageNode *)self.keepalive_node;
NSURL *imageURL = imageNode.URL; NSURL *imageURL = imageNode.URL;
if (imageURL) {
NSString *URLString = imageURL.absoluteString;
if (kFixAlbums && [URLString hasPrefix:@"https://yt3."]) {
URLString = [URLString stringByReplacingOccurrencesOfString:@"https://yt3." withString:@"https://yt4."];
}
NSURL *downloadURL = nil;
if ([URLString containsString:@"c-fcrop"]) {
NSRange croppedURL = [URLString rangeOfString:@"c-fcrop"];
if (croppedURL.location != NSNotFound) {
NSString *newURL = [URLString stringByReplacingOccurrencesOfString:[URLString substringFromIndex:croppedURL.location] withString:@"nd-v1"];
downloadURL = [NSURL URLWithString:newURL];
}
} else {
downloadURL = imageURL;
}
UIResponder *responder = self.nextResponder; UIResponder *responder = self.nextResponder;
while (responder && ![responder isKindOfClass:[UIViewController class]]) responder = responder.nextResponder; while (responder && ![responder isKindOfClass:[UIViewController class]]) responder = responder.nextResponder;
NSURLSession *session = [NSURLSession sharedSession]; if (imageURL) downloadImageFromURL(responder, imageURL);
[[session dataTaskWithURL:downloadURL completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (data) {
[[PHPhotoLibrary sharedPhotoLibrary] performChanges:^{
PHAssetCreationRequest *request = [PHAssetCreationRequest creationRequestForAsset];
[request addResourceWithType:PHAssetResourceTypePhoto data:data options:nil];
} completionHandler:^(BOOL success, NSError *error) {
if (responder) [[%c(YTToastResponderEvent) eventWithMessage:success ? LOC(@"Saved") : [NSString stringWithFormat:LOC(@"%@: %@"), LOC(@"Error"), error.localizedDescription] firstResponder:responder] send];
}];
} else {
if (responder) [[%c(YTToastResponderEvent) eventWithMessage:[NSString stringWithFormat:LOC(@"%@: %@"), LOC(@"Error"), error.localizedDescription] firstResponder:responder] send];
}
}] resume];
}
} }
} }
@@ -1067,7 +1131,7 @@ static void reloadPrefs() {
kRemoveUploads = (prefs[@"removeUploads"] != nil) ? [prefs[@"removeUploads"] boolValue] : YES; kRemoveUploads = (prefs[@"removeUploads"] != nil) ? [prefs[@"removeUploads"] boolValue] : YES;
kRemoveLibrary = [prefs[@"removeLibrary"] boolValue] ?: NO; kRemoveLibrary = [prefs[@"removeLibrary"] boolValue] ?: NO;
kCopyVideoInfo = [prefs[@"copyVideoInfo"] boolValue] ?: NO; kCopyVideoInfo = [prefs[@"copyVideoInfo"] boolValue] ?: NO;
kCopyPostText = [prefs[@"copyPostText"] boolValue] ?: NO; kPostManager = [prefs[@"postManager"] boolValue] ?: NO;
kSavePostImage = [prefs[@"savePostImage"] boolValue] ?: NO; kSavePostImage = [prefs[@"savePostImage"] boolValue] ?: NO;
kSaveProfilePhoto = [prefs[@"savePostImage"] boolValue] ?: NO; kSaveProfilePhoto = [prefs[@"savePostImage"] boolValue] ?: NO;
kCopyCommentText = [prefs[@"copyCommentText"] boolValue] ?: NO; kCopyCommentText = [prefs[@"copyCommentText"] boolValue] ?: NO;
@@ -1153,7 +1217,7 @@ static void reloadPrefs() {
@"removeUploads" : @(kRemoveUploads), @"removeUploads" : @(kRemoveUploads),
@"removeLibrary" : @(kRemoveLibrary), @"removeLibrary" : @(kRemoveLibrary),
@"copyVideoInfo" : @(kCopyVideoInfo), @"copyVideoInfo" : @(kCopyVideoInfo),
@"copyPostText" : @(kCopyPostText), @"postManager" : @(kPostManager),
@"savePostImage" : @(kSavePostImage), @"savePostImage" : @(kSavePostImage),
@"saveProfilePhoto" : @(kSaveProfilePhoto), @"saveProfilePhoto" : @(kSaveProfilePhoto),
@"copyCommentText" : @(kCopyCommentText), @"copyCommentText" : @(kCopyCommentText),
@@ -145,8 +145,8 @@
"Other" = "Other"; "Other" = "Other";
"CopyVideoInfo" = "Copy video information"; "CopyVideoInfo" = "Copy video information";
"CopyVideoInfoDesc" = "Adds button to copy video title and description into Video Description panel."; "CopyVideoInfoDesc" = "Adds button to copy video title and description into Video Description panel.";
"CopyPostText" = "Copy community posts text"; "PostManager" = "Save post information";
"CopyPostTextDesc" = "Copies community posts text to the clipboard by long tap."; "PostManagerDesc" = "Allows to copy post text and save post as image by long tap.";
"SavePostImage" = "Save image from community posts"; "SavePostImage" = "Save image from community posts";
"SavePostImageDesc" = "Saves community post image to the Photos app by long tap."; "SavePostImageDesc" = "Saves community post image to the Photos app by long tap.";
"SaveProfilePhoto" = "Save profile picture"; "SaveProfilePhoto" = "Save profile picture";
@@ -206,6 +206,9 @@
"SelectAction" = "Select action"; "SelectAction" = "Select action";
"CopyTitle" = "Copy title"; "CopyTitle" = "Copy title";
"CopyDescription" = "Copy description"; "CopyDescription" = "Copy description";
"CopyPostText" = "Copy post text";
"SavePostAsImage" = "Save post as image";
"CopyPostAsImage" = "Copy post as image";
"Cancel" = "Cancel"; "Cancel" = "Cancel";
"Copied" = "Copied to clipboard"; "Copied" = "Copied to clipboard";
"Saved" = "Saved to Photos"; "Saved" = "Saved to Photos";
@@ -145,8 +145,8 @@
"Other" = "Otro"; "Other" = "Otro";
"CopyVideoInfo" = "Copy video information"; "CopyVideoInfo" = "Copy video information";
"CopyVideoInfoDesc" = "Adds button to copy video title and description into Video Description panel."; "CopyVideoInfoDesc" = "Adds button to copy video title and description into Video Description panel.";
"CopyPostText" = "Copia el texto de las publicaciones de la comunidad"; "PostManager" = "Save post information";
"CopyPostTextDesc" = "Copia el texto de los posts de la comunidad al portapapeles mediante pulsación larga"; "PostManagerDesc" = "Allows to copy post text and save post as image by long tap.";
"SavePostImage" = "Guardar imagen de las entradas de la comunidad"; "SavePostImage" = "Guardar imagen de las entradas de la comunidad";
"SavePostImageDesc" = "Guarda la imagen de las publicaciones de la comunidad en la aplicación Fotos con un toque prolongado"; "SavePostImageDesc" = "Guarda la imagen de las publicaciones de la comunidad en la aplicación Fotos con un toque prolongado";
"SaveProfilePhoto" = "Guardar foto de perfil"; "SaveProfilePhoto" = "Guardar foto de perfil";
@@ -206,6 +206,9 @@
"SelectAction" = "Select action"; "SelectAction" = "Select action";
"CopyTitle" = "Copy title"; "CopyTitle" = "Copy title";
"CopyDescription" = "Copy description"; "CopyDescription" = "Copy description";
"CopyPostText" = "Copy post text";
"SavePostAsImage" = "Save post as image";
"CopyPostAsImage" = "Copy post as image";
"Cancel" = "Cancel"; "Cancel" = "Cancel";
"Copied" = "Copiado al portapapeles"; "Copied" = "Copiado al portapapeles";
"Done" = "Done"; "Done" = "Done";
@@ -145,8 +145,8 @@
"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.";
"CopyPostText" = "Copier le texte des publications de la communauté"; "PostManager" = "Save post information";
"CopyPostTextDesc" = "Copie le texte des publications de la communauté dans le presse-papiers en appuyant longuement."; "PostManagerDesc" = "Allows to copy post text and save post as image by long tap.";
"SavePostImage" = "Enregistrer l'image des publications de la communauté"; "SavePostImage" = "Enregistrer l'image des publications de la communauté";
"SavePostImageDesc" = "Enregistre l'image des publications de la communauté dans l'application Photos en appuyant longuement."; "SavePostImageDesc" = "Enregistre l'image des publications de la communauté dans l'application Photos en appuyant longuement.";
"SaveProfilePhoto" = "Enregistrer la photo de profil"; "SaveProfilePhoto" = "Enregistrer la photo de profil";
@@ -206,6 +206,9 @@
"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" = "Copy post text";
"SavePostAsImage" = "Save post as image";
"CopyPostAsImage" = "Copy post as image";
"Cancel" = "Annuler"; "Cancel" = "Annuler";
"Copied" = "Copié dans le presse-papiers"; "Copied" = "Copié dans le presse-papiers";
"Saved" = "Enregistré dans Photos"; "Saved" = "Enregistré dans Photos";
@@ -145,8 +145,8 @@
"Other" = "その他"; "Other" = "その他";
"CopyVideoInfo" = "Copy video information"; "CopyVideoInfo" = "Copy video information";
"CopyVideoInfoDesc" = "Adds button to copy video title and description into Video Description panel."; "CopyVideoInfoDesc" = "Adds button to copy video title and description into Video Description panel.";
"CopyPostText" = "Copy community posts text"; "PostManager" = "Save post information";
"CopyPostTextDesc" = "Copies community posts text to the clipboard by long tap."; "PostManagerDesc" = "Allows to copy post text and save post as image by long tap.";
"SavePostImage" = "Save community posts image"; "SavePostImage" = "Save community posts image";
"SavePostImageDesc" = "Saves community posts image to the Photos app by long tap."; "SavePostImageDesc" = "Saves community posts image to the Photos app by long tap.";
"SaveProfilePhoto" = "Save profile picture"; "SaveProfilePhoto" = "Save profile picture";
@@ -206,6 +206,9 @@
"SelectAction" = "Select action"; "SelectAction" = "Select action";
"CopyTitle" = "Copy title"; "CopyTitle" = "Copy title";
"CopyDescription" = "Copy description"; "CopyDescription" = "Copy description";
"CopyPostText" = "Copy post text";
"SavePostAsImage" = "Save post as image";
"CopyPostAsImage" = "Copy post as image";
"Cancel" = "Cancel"; "Cancel" = "Cancel";
"Copied" = "Copied to clipboard"; "Copied" = "Copied to clipboard";
"Saved" = "Saved to Photos"; "Saved" = "Saved to Photos";
@@ -145,8 +145,8 @@
"Other" = "Другие настройки"; "Other" = "Другие настройки";
"CopyVideoInfo" = "Копировать информацию о видео"; "CopyVideoInfo" = "Копировать информацию о видео";
"CopyVideoInfoDesc" = "Добавляет кнопку для копирования названия и описания видео в панель описания видео."; "CopyVideoInfoDesc" = "Добавляет кнопку для копирования названия и описания видео в панель описания видео.";
"CopyPostText" = "Копировать текст постов"; "PostManager" = "Сохранять информацию с постов";
"CopyPostTextDesc" = "Копирует текст постов в буфер обмена долгим нажатием."; "PostManagerDesc" = "Позволяет скопировать текст из поста или сохранить пост как фото долгим нажатием по нему.";
"SavePostImage" = "Сохранять изображения постов"; "SavePostImage" = "Сохранять изображения постов";
"SavePostImageDesc" = "Сохраняет изображения постов в «Фото» долгим нажатием по ним."; "SavePostImageDesc" = "Сохраняет изображения постов в «Фото» долгим нажатием по ним.";
"SaveProfilePhoto" = "Сохранять фото профиля"; "SaveProfilePhoto" = "Сохранять фото профиля";
@@ -206,6 +206,9 @@
"SelectAction" = "Выберите действие"; "SelectAction" = "Выберите действие";
"CopyTitle" = "Скопировать название"; "CopyTitle" = "Скопировать название";
"CopyDescription" = "Скопировать описание"; "CopyDescription" = "Скопировать описание";
"CopyPostText" = "Копировать текст поста";
"SavePostAsImage" = "Сохранить пост как фото";
"CopyPostAsImage" = "Скопировать пост как фото";
"Cancel" = "Отмена"; "Cancel" = "Отмена";
"Copied" = "Скопировано в буфер обмена"; "Copied" = "Скопировано в буфер обмена";
"Saved" = "Сохранено в Фото"; "Saved" = "Сохранено в Фото";
@@ -145,8 +145,8 @@
"Other" = "Khác"; "Other" = "Khác";
"CopyVideoInfo" = "Sao chép thông tin video"; "CopyVideoInfo" = "Sao chép thông tin video";
"CopyVideoInfoDesc" = "Thêm nút để sao chép tiêu đề và mô tả video vào bảng Mô tả Video."; "CopyVideoInfoDesc" = "Thêm nút để sao chép tiêu đề và mô tả video vào bảng Mô tả Video.";
"CopyPostText" = "Sao chép văn bản bài đăng trên cộng đồng"; "PostManager" = "Save post information";
"CopyPostTextDesc" = "Sao chép văn bản bài đăng của cộng đồng vào bảng tạm bằng cách nhấn giữ."; "PostManagerDesc" = "Allows to copy post text and save post as image by long tap.";
"SavePostImage" = "Lưu hình ảnh từ bài đăng trên cộng đồng"; "SavePostImage" = "Lưu hình ảnh từ bài đăng trên cộng đồng";
"SavePostImageDesc" = "Lưu hình ảnh bài đăng của cộng đồng vào ứng dụng Ảnh bằng cách nhấn giữ."; "SavePostImageDesc" = "Lưu hình ảnh bài đăng của cộng đồng vào ứng dụng Ảnh bằng cách nhấn giữ.";
"SaveProfilePhoto" = "Lưu ảnh hồ sơ"; "SaveProfilePhoto" = "Lưu ảnh hồ sơ";
@@ -206,6 +206,9 @@
"SelectAction" = "Chọn hành động"; "SelectAction" = "Chọn hành động";
"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" = "Copy post text";
"SavePostAsImage" = "Save post as image";
"CopyPostAsImage" = "Copy post as image";
"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";
@@ -145,8 +145,8 @@
"Other" = "其他"; "Other" = "其他";
"CopyVideoInfo" = "复制视频信息"; "CopyVideoInfo" = "复制视频信息";
"CopyVideoInfoDesc" = "添加按钮从“视频说明”面板中复制视频的标题和描述。"; "CopyVideoInfoDesc" = "添加按钮从“视频说明”面板中复制视频的标题和描述。";
"CopyPostText" = "复制社区帖子文本"; "PostManager" = "Save post information";
"CopyPostTextDesc" = "长按社区帖子文本复制到剪贴板。"; "PostManagerDesc" = "Allows to copy post text and save post as image by long tap.";
"SavePostImage" = "保存社区帖子图片"; "SavePostImage" = "保存社区帖子图片";
"SavePostImageDesc" = "长按社区帖子图片保存到照片应用程序。"; "SavePostImageDesc" = "长按社区帖子图片保存到照片应用程序。";
"SaveProfilePhoto" = "保存个人资料图片"; "SaveProfilePhoto" = "保存个人资料图片";
@@ -192,7 +192,7 @@
"French" = "法语本地化"; "French" = "法语本地化";
"Spanish" = "西班牙语本地化"; "Spanish" = "西班牙语本地化";
"Japanese" = "日语本地化"; "Japanese" = "日语本地化";
"Vietnamese" = "Vietnamese localization"; "Vietnamese" = "越南语本地化";
"Advanced" = "高级模式"; "Advanced" = "高级模式";
"AdvancedModeReminder" = "想为YTLite激活高级模式吗?\n\n此模式提供了50多个额外的选项来自定义和优化您的YouTube体验。\n可以稍后从设置中启用/禁用它 → %@ → %@ → %@。"; "AdvancedModeReminder" = "想为YTLite激活高级模式吗?\n\n此模式提供了50多个额外的选项来自定义和优化您的YouTube体验。\n可以稍后从设置中启用/禁用它 → %@ → %@ → %@。";
"ClearCache" = "清除缓存"; "ClearCache" = "清除缓存";
@@ -206,6 +206,9 @@
"SelectAction" = "选择操作"; "SelectAction" = "选择操作";
"CopyTitle" = "复制标题"; "CopyTitle" = "复制标题";
"CopyDescription" = "复制描述"; "CopyDescription" = "复制描述";
"CopyPostText" = "Copy post text";
"SavePostAsImage" = "Save post as image";
"CopyPostAsImage" = "Copy post as image";
"Cancel" = "取消"; "Cancel" = "取消";
"Copied" = "已复制到剪贴板"; "Copied" = "已复制到剪贴板";
"Saved" = "已保存到照片"; "Saved" = "已保存到照片";
@@ -145,8 +145,8 @@
"Other" = "其它"; "Other" = "其它";
"CopyVideoInfo" = "複製影片資訊"; "CopyVideoInfo" = "複製影片資訊";
"CopyVideoInfoDesc" = "新增按鈕將影片標題和說明,複製到影片說明欄"; "CopyVideoInfoDesc" = "新增按鈕將影片標題和說明,複製到影片說明欄";
"CopyPostText" = "複製社群貼文文字"; "PostManager" = "Save post information";
"CopyPostTextDesc" = "長按社群貼文文字複製到剪貼簿"; "PostManagerDesc" = "Allows to copy post text and save post as image by long tap.";
"SavePostImage" = "儲存社群貼文圖片"; "SavePostImage" = "儲存社群貼文圖片";
"SavePostImageDesc" = "長按社群貼文圖片儲存到照片應用"; "SavePostImageDesc" = "長按社群貼文圖片儲存到照片應用";
"SaveProfilePhoto" = "儲存個人檔案照片"; "SaveProfilePhoto" = "儲存個人檔案照片";
@@ -206,6 +206,9 @@
"SelectAction" = "選擇動作"; "SelectAction" = "選擇動作";
"CopyTitle" = "複製標題"; "CopyTitle" = "複製標題";
"CopyDescription" = "複製說明"; "CopyDescription" = "複製說明";
"CopyPostText" = "Copy post text";
"SavePostAsImage" = "Save post as image";
"CopyPostAsImage" = "Copy post as image";
"Cancel" = "取消"; "Cancel" = "取消";
"Copied" = "已複製到剪貼簿"; "Copied" = "已複製到剪貼簿";
"Saved" = "已儲存到照片應用"; "Saved" = "已儲存到照片應用";
Binary file not shown.
Binary file not shown.