v2.6.2
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.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
@@ -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),
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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."]) {
|
UIResponder *responder = self.nextResponder;
|
||||||
URLString = [URLString stringByReplacingOccurrencesOfString:@"https://yt3." withString:@"https://yt4."];
|
while (responder && ![responder isKindOfClass:[UIViewController class]]) responder = responder.nextResponder;
|
||||||
}
|
|
||||||
|
|
||||||
NSURL *downloadURL = nil;
|
if (imageURL) downloadImageFromURL(responder, imageURL);
|
||||||
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;
|
|
||||||
while (responder && ![responder isKindOfClass:[UIViewController class]]) responder = responder.nextResponder;
|
|
||||||
|
|
||||||
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) {
|
|
||||||
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,8 +206,11 @@
|
|||||||
"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" = "已保存到照片";
|
||||||
"Done" = "完成";
|
"Done" = "完成";
|
||||||
"Error" = "错误";
|
"Error" = "错误";
|
||||||
@@ -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.
Reference in New Issue
Block a user