From d8ca00cdb1784f371839091f7d4f8c57910a3aae Mon Sep 17 00:00:00 2001 From: BandarHelal <31299470+BandarHL@users.noreply.github.com> Date: Sat, 10 Feb 2024 20:59:54 +0300 Subject: [PATCH] update 4.3 --- BHTManager.h | 3 +- BHTManager.m | 9 +- SettingsViewController.m | 59 +++++++++-- TWHeaders.h | 33 ++++++ Tweak.x | 96 +++++++++++++++--- build.sh | 14 +++ control | 2 +- .../BHT/BHTwitter.bundle/Info.plist | Bin 534 -> 534 bytes .../ar.lproj/Localizable.strings | 5 + .../en.lproj/Localizable.strings | 5 + .../ja.lproj/Localizable.strings | 96 +++++++++++------- 11 files changed, 254 insertions(+), 68 deletions(-) diff --git a/BHTManager.h b/BHTManager.h index 22c3a21..dced020 100644 --- a/BHTManager.h +++ b/BHTManager.h @@ -38,7 +38,6 @@ + (BOOL)FLEX; + (BOOL)autoHighestLoad; + (BOOL)disableSensitiveTweetWarnings; -+ (BOOL)TwitterCircle; + (BOOL)showScrollIndicator; + (BOOL)CopyProfileInfo; + (BOOL)tweetToImage; @@ -52,9 +51,9 @@ + (BOOL)stripTrackingParams; + (BOOL)alwaysFollowingPage; + (BOOL)stopHidingTabBar; -+ (BOOL)advancedSearch; + (BOOL)changeBackground; + (bool)backgroundImage; + (BOOL)hideBookmarkButton; ++ (BOOL)customVoice; @end diff --git a/BHTManager.m b/BHTManager.m index ce58dfb..c59ff63 100644 --- a/BHTManager.m +++ b/BHTManager.m @@ -199,9 +199,6 @@ + (BOOL)autoHighestLoad { + (BOOL)disableSensitiveTweetWarnings { return [[NSUserDefaults standardUserDefaults] boolForKey:@"disableSensitiveTweetWarnings"]; } -+ (BOOL)TwitterCircle { - return [[NSUserDefaults standardUserDefaults] boolForKey:@"TrustedFriends"]; -} + (BOOL)showScrollIndicator { return [[NSUserDefaults standardUserDefaults] boolForKey:@"showScollIndicator"]; } @@ -241,9 +238,6 @@ + (BOOL)alwaysFollowingPage { + (BOOL)stopHidingTabBar { return [[NSUserDefaults standardUserDefaults] boolForKey:@"no_tab_bar_hiding"]; } -+ (BOOL)advancedSearch { - return [[NSUserDefaults standardUserDefaults] boolForKey:@"advanced_search"]; -} + (BOOL)changeBackground { return [[NSUserDefaults standardUserDefaults] boolForKey:@"change_msg_background"]; } @@ -253,6 +247,9 @@ + (bool)backgroundImage { + (BOOL)hideBookmarkButton { return [[NSUserDefaults standardUserDefaults] boolForKey:@"hide_bookmark_button"]; } ++ (BOOL)customVoice { + return [[NSUserDefaults standardUserDefaults] boolForKey:@"custom_voice_upload"]; +} + (UIViewController *)BHTSettingsWithAccount:(TFNTwitterAccount *)twAccount { SettingsViewController *pref = [[SettingsViewController alloc] initWithTwitterAccount:twAccount]; [pref.navigationItem setTitleView:[objc_getClass("TFNTitleView") titleViewWithTitle:@"BHTwitter" subtitle:twAccount.displayUsername]]; diff --git a/SettingsViewController.m b/SettingsViewController.m index 4c560e3..3d904c7 100644 --- a/SettingsViewController.m +++ b/SettingsViewController.m @@ -145,6 +145,8 @@ - (NSArray *)specifiers { PSSpecifier *hideAds = [self newSwitchCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"HIDE_ADS_OPTION_TITLE"] detailTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"HIDE_ADS_OPTION_DETAIL_TITLE"] key:@"hide_promoted" defaultValue:true changeAction:nil]; + PSSpecifier *customVoice = [self newSwitchCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"UPLOAD_CUSTOM_VOICE_OPTION_TITLE"] detailTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"UPLOAD_CUSTOM_VOICE_OPTION_DETAIL_TITLE"] key:@"custom_voice_upload" defaultValue:true changeAction:nil]; + PSSpecifier *hideTopics = [self newSwitchCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"HIDE_TOPICS_OPTION_TITLE"] detailTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"HIDE_TOPICS_OPTION_DETAIL_TITLE"] key:@"hide_topics" defaultValue:false changeAction:nil]; PSSpecifier *hideWhoToFollow = [self newSwitchCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"HIDE_WHO_FOLLOW_OPTION"] detailTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"HIDE_WHO_FOLLOW_OPTION_DETAIL_TITLE"] key:@"hide_who_to_follow" defaultValue:false changeAction:nil]; @@ -168,9 +170,7 @@ - (NSArray *)specifiers { PSSpecifier *autoHighestLoad = [self newSwitchCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"AUTO_HIGHEST_LOAD_OPTION_TITLE"] detailTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"AUTO_HIGHEST_LOAD_OPTION_DETAIL_TITLE"] key:@"autoHighestLoad" defaultValue:true changeAction:nil]; PSSpecifier *disableSensitiveTweetWarnings = [self newSwitchCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"DISABLE_SENSITIVE_TWEET_WARNINGS_OPTION_TITLE"] detailTitle:nil key:@"disableSensitiveTweetWarnings" defaultValue:true changeAction:nil]; - - PSSpecifier *trustedFriends = [self newSwitchCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"TRUSTED_FRIENSS_OPTION_TITLE"] detailTitle:nil key:@"TrustedFriends" defaultValue:true changeAction:nil]; - + PSSpecifier *copyProfileInfo = [self newSwitchCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"COPY_PROFILE_INFO_OPTION_TITLE"] detailTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"COPY_PROFILE_INFO_OPTION_DETAIL_TITLE"] key:@"CopyProfileInfo" defaultValue:false changeAction:nil]; PSSpecifier *tweetToImage = [self newSwitchCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"TWEET_TO_IMAGE_OPTION_TITLE"] detailTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"TWEET_TO_IMAGE_OPTION_DETAIL_TITLE"] key:@"TweetToImage" defaultValue:false changeAction:nil]; @@ -182,8 +182,8 @@ - (NSArray *)specifiers { PSSpecifier *alwaysOpenSafari = [self newSwitchCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"ALWAYS_OPEN_SAFARI_OPTION_TITLE"] detailTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"ALWAYS_OPEN_SAFARI_OPTION_DETAIL_TITLE"] key:@"openInBrowser" defaultValue:false changeAction:nil]; PSSpecifier *stripTrackingParams = [self newSwitchCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"STRIP_URL_TRACKING_PARAMETERS_TITLE"] detailTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"STRIP_URL_TRACKING_PARAMETERS_DETAIL_TITLE"] key:@"strip_tracking_params" defaultValue:false changeAction:nil]; - - PSSpecifier *advancedSearch = [self newSwitchCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"ADVANCED_SEARCH_TITLE"] detailTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"ADVANCED_SEARCH_DETAIL_TITLE"] key:@"advanced_search" defaultValue:false changeAction:nil]; + + PSSpecifier *urlHost = [self newButtonCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"SELECT_URL_HOST_AFTER_COPY_OPTION_TITLE"] detailTitle:[[NSUserDefaults standardUserDefaults] objectForKey:@"tweet_url_host"] dynamicRule:@"strip_tracking_params, ==, 0" action:@selector(showURLHostSelectionViewController:)]; // Twitter bule section PSSpecifier *undoTweet = [self newSwitchCellWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"UNDO_TWEET_OPTION_TITLE"] detailTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"UNDO_TWEET_OPTION_DETAIL_TITLE"] key:@"undo_tweet" defaultValue:false changeAction:nil]; @@ -232,6 +232,7 @@ - (NSArray *)specifiers { mainSection, // 0 download, hideAds, + customVoice, hideTopics, hideWhoToFollow, hideTopicsToFollow, @@ -251,8 +252,7 @@ - (NSArray *)specifiers { disableRTL, alwaysOpenSafari, stripTrackingParams, - trustedFriends, - advancedSearch, + urlHost, twitterBlueSection, // 1 undoTweet, @@ -493,6 +493,51 @@ - (void)showBHAppIconViewController:(PSSpecifier *)specifier { } [self.navigationController pushViewController:appIconVC animated:true]; } +- (void)showURLHostSelectionViewController:(PSSpecifier *)specifier { + UITableViewCell *specifierCell = [specifier propertyForKey:PSTableCellKey]; + PSSpecifier *selectionSpecifier = [self specifierForID:@"Select URL host"]; + + UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"BHTwitter" message:@"plaese select what host you prefre" preferredStyle:UIAlertControllerStyleActionSheet]; + + if (alert.popoverPresentationController != nil) { + CGFloat midX = CGRectGetMidX(specifierCell.frame); + CGFloat midY = CGRectGetMidY(specifierCell.frame); + + alert.popoverPresentationController.sourceRect = CGRectMake(midX, midY, 0, 0); + alert.popoverPresentationController.sourceView = specifierCell; + } + + UIAlertAction *xHostAction = [UIAlertAction actionWithTitle:@"x.com" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [[NSUserDefaults standardUserDefaults] setObject:@"x.com" forKey:@"tweet_url_host"]; + [selectionSpecifier setProperty:@"x.com" forKey:@"subtitle"]; + [self reloadSpecifiers]; + }]; + UIAlertAction *twitterHostAction = [UIAlertAction actionWithTitle:@"twitter.com" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [[NSUserDefaults standardUserDefaults] setObject:@"twitter.com" forKey:@"tweet_url_host"]; + [selectionSpecifier setProperty:@"twitter.com" forKey:@"subtitle"]; + [self reloadSpecifiers]; + }]; + UIAlertAction *fxHostAction = [UIAlertAction actionWithTitle:@"fxtwitter.com" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [[NSUserDefaults standardUserDefaults] setObject:@"fxtwitter.com" forKey:@"tweet_url_host"]; + [selectionSpecifier setProperty:@"fxtwitter.com" forKey:@"subtitle"]; + [self reloadSpecifiers]; + }]; + UIAlertAction *vxHostAction = [UIAlertAction actionWithTitle:@"vxtwitter.com" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { + [[NSUserDefaults standardUserDefaults] setObject:@"vxtwitter.com" forKey:@"tweet_url_host"]; + [selectionSpecifier setProperty:@"vxtwitter.com" forKey:@"subtitle"]; + [self reloadSpecifiers]; + }]; + + UIAlertAction *cancel = [UIAlertAction actionWithTitle:[[BHTBundle sharedBundle] localizedStringForKey:@"CANCEL_BUTTON_TITLE"] style:UIAlertActionStyleCancel handler:nil]; + + [alert addAction:xHostAction]; + [alert addAction:twitterHostAction]; + [alert addAction:fxHostAction]; + [alert addAction:vxHostAction]; + [alert addAction:cancel]; + + [self presentViewController:alert animated:true completion:nil]; +} - (void)showCustomBackgroundViewViewController:(PSSpecifier *)specifier { UITableViewCell *specifierCell = [specifier propertyForKey:PSTableCellKey]; diff --git a/TWHeaders.h b/TWHeaders.h index b83ee4f..2390469 100644 --- a/TWHeaders.h +++ b/TWHeaders.h @@ -8,6 +8,8 @@ #import #import #import +#import +#import #import #import #import "BHDownload/BHDownload.h" @@ -34,6 +36,37 @@ static NSString *_lastCopiedURL; @property(retain, nonatomic) UIWindow *window; @end + +@interface TTMAssetVideoFile: NSObject +@property (nonatomic, copy, readonly) NSString *filePath; +@property (nonatomic, assign, readonly) CGFloat duration; + +@end + +@interface TTMAssetVoiceRecording: TTMAssetVideoFile +@property (nonatomic, strong, readwrite) NSNumber *totalDurationMillis; +@end + +@interface T1MediaAttachmentsViewCell: UICollectionViewCell +@property (nonatomic, strong, readwrite) id attachment; +@property (nonatomic, strong) UIButton *uploadButton; +@end + +@interface T1MediaAttachmentsViewCell () +@end + +@interface TCRVoiceRecordingViewController: UIViewController +@property (nonatomic, assign, readwrite) CGFloat clipDuration; +- (void)_tcr_pauseRecording; +- (void)_tcr_endRecording; +@end + +@interface TCRVoiceRecordingView: UIView +@property (nonatomic, strong) NSTimer *recordingTimer; +@property (nonatomic, assign) CGFloat desiredRecordingDuration; +@property (nonatomic, weak, readwrite) id delegate; +@end + @interface NSParagraphStyle () + (NSWritingDirection)_defaultWritingDirection; @end diff --git a/Tweak.x b/Tweak.x index ce9776f..9215773 100644 --- a/Tweak.x +++ b/Tweak.x @@ -43,8 +43,8 @@ static void batchSwizzlingOnClass(Class cls, NSArray*origSelectors, I %hook T1AppDelegate - (_Bool)application:(UIApplication *)application didFinishLaunchingWithOptions:(id)arg2 { %orig; - if (![[NSUserDefaults standardUserDefaults] objectForKey:@"FirstRun"]) { - [[NSUserDefaults standardUserDefaults] setValue:@"1strun" forKey:@"FirstRun"]; + if (![[NSUserDefaults standardUserDefaults] objectForKey:@"FirstRun_4.3"]) { + [[NSUserDefaults standardUserDefaults] setValue:@"1strun" forKey:@"FirstRun_4.3"]; [[NSUserDefaults standardUserDefaults] setBool:true forKey:@"dw_v"]; [[NSUserDefaults standardUserDefaults] setBool:true forKey:@"hide_promoted"]; [[NSUserDefaults standardUserDefaults] setBool:true forKey:@"voice"]; @@ -52,6 +52,7 @@ static void batchSwizzlingOnClass(Class cls, NSArray*origSelectors, I [[NSUserDefaults standardUserDefaults] setBool:true forKey:@"TrustedFriends"]; [[NSUserDefaults standardUserDefaults] setBool:true forKey:@"disableSensitiveTweetWarnings"]; [[NSUserDefaults standardUserDefaults] setBool:true forKey:@"disable_immersive_player"]; + [[NSUserDefaults standardUserDefaults] setBool:true forKey:@"custom_voice_upload"]; } [BHTManager cleanCache]; if ([BHTManager FLEX]) { @@ -490,6 +491,77 @@ static void batchSwizzlingOnClass(Class cls, NSArray*origSelectors, I } %end +// upload custom voice +%hook T1MediaAttachmentsViewCell +%property (nonatomic, strong) UIButton *uploadButton; +- (void)updateCellElements { + %orig; + + if ([BHTManager customVoice]) { + TFNButton *removeButton = [self valueForKey:@"_removeButton"]; + + if ([self.attachment isKindOfClass:%c(TTMAssetVoiceRecording)]) { + if (self.uploadButton == nil) { + self.uploadButton = [UIButton buttonWithType:UIButtonTypeCustom]; + UIImageSymbolConfiguration *smallConfig = [UIImageSymbolConfiguration configurationWithScale:UIImageSymbolScaleSmall]; + UIImage *arrowUpImage = [UIImage systemImageNamed:@"arrow.up" withConfiguration:smallConfig]; + [self.uploadButton setImage:arrowUpImage forState:UIControlStateNormal]; + [self.uploadButton addTarget:self action:@selector(handleUploadButton:) forControlEvents:UIControlEventTouchUpInside]; + [self.uploadButton setTintColor:UIColor.labelColor]; + [self.uploadButton setBackgroundColor:[UIColor blackColor]]; + [self.uploadButton.layer setCornerRadius:29/2]; + [self.uploadButton setTranslatesAutoresizingMaskIntoConstraints:false]; + + if (self.uploadButton.superview == nil) { + [self addSubview:self.uploadButton]; + [NSLayoutConstraint activateConstraints:@[ + [self.uploadButton.trailingAnchor constraintEqualToAnchor:removeButton.leadingAnchor constant:-10], + [self.uploadButton.topAnchor constraintEqualToAnchor:removeButton.topAnchor], + [self.uploadButton.widthAnchor constraintEqualToConstant:29], + [self.uploadButton.heightAnchor constraintEqualToConstant:29], + ]]; + } + } + } + } +} +%new - (void)handleUploadButton:(UIButton *)sender { + UIImagePickerController *videoPicker = [[UIImagePickerController alloc] init]; + videoPicker.mediaTypes = @[(NSString*)kUTTypeMovie]; + videoPicker.delegate = self; + + [topMostController() presentViewController:videoPicker animated:YES completion:nil]; +} +%new - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { + NSURL *videoURL = info[UIImagePickerControllerMediaURL]; + TTMAssetVoiceRecording *attachment = self.attachment; + NSURL *recorder_url = [NSURL fileURLWithPath:attachment.filePath]; + + if (recorder_url != nil) { + NSFileManager *fileManager = [NSFileManager defaultManager]; + + NSError *error = nil; + if ([fileManager fileExistsAtPath:[recorder_url path]]) { + [fileManager removeItemAtURL:recorder_url error:&error]; + if (error) { + NSLog(@"[BHTwitter] Error removing existing file: %@", error); + } + } + + [fileManager copyItemAtURL:videoURL toURL:recorder_url error:&error]; + if (error) { + NSLog(@"[BHTwitter] Error copying file: %@", error); + } + } + + [picker dismissViewControllerAnimated:true completion:nil]; +} +%new - (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker { + [picker dismissViewControllerAnimated:true completion:nil]; +} +%end + + // MARK: Color theme %hook TFNPagingViewController - (void)viewDidAppear:(_Bool)animated { @@ -737,7 +809,7 @@ static void batchSwizzlingOnClass(Class cls, NSArray*origSelectors, I } %end -// MARK: Voice, TwitterCircle, SensitiveTweetWarnings, autoHighestLoad, VideoZoom, VODCaptions, disableSpacesBar feature +// MARK: Voice, SensitiveTweetWarnings, autoHighestLoad, VideoZoom, VODCaptions, disableSpacesBar feature %hook TPSTwitterFeatureSwitches // Twitter save all the features and keys in side JSON file in bundle of application fs_embedded_defaults_production.json, and use it in TFNTwitterAccount class but with DM voice maybe developers forget to add boolean variable in the class, so i had to change it from the file. // also, you can find every key for every feature i used in this tweak, i can remove all the codes below and find every key for it but I'm lazy to do that, :) @@ -750,10 +822,6 @@ static void batchSwizzlingOnClass(Class cls, NSArray*origSelectors, I return true; } - if ([BHTManager advancedSearch] && [key isEqualToString:@"search_features_advanced_search_enabled"]) { - return true; - } - return %orig; } %end @@ -825,12 +893,6 @@ static void batchSwizzlingOnClass(Class cls, NSArray*origSelectors, I } %end -%hook T1TrustedFriendsFeatureSwitches -+ (_Bool)isTrustedFriendsTweetCreationEnabled:(id)arg1 { - return [BHTManager TwitterCircle] ? true : %orig; -} -%end - %hook TFNTwitterAccount - (_Bool)isEditProfileUsernameEnabled { return true; @@ -838,9 +900,6 @@ static void batchSwizzlingOnClass(Class cls, NSArray*origSelectors, I - (_Bool)isEditTweetConsumptionEnabled { return true; } -- (_Bool)isTrustedFriendsAPIEnabled { - return [BHTManager TwitterCircle] ? true : %orig; -} - (_Bool)isSensitiveTweetWarningsComposeEnabled { return [BHTManager disableSensitiveTweetWarnings] ? false : %orig; } @@ -1230,6 +1289,11 @@ static void batchSwizzlingOnClass(Class cls, NSArray*origSelectors, I } } cleanedURL.queryItems = safeParams; + + if ([[NSUserDefaults standardUserDefaults] objectForKey:@"tweet_url_host"]) { + NSString *selectedHost = [[NSUserDefaults standardUserDefaults] objectForKey:@"tweet_url_host"]; + cleanedURL.host = selectedHost; + } UIPasteboard.generalPasteboard.URL = cleanedURL.URL; } } diff --git a/build.sh b/build.sh index 8412700..d23f830 100755 --- a/build.sh +++ b/build.sh @@ -15,6 +15,13 @@ do rm -rf .theos make SIDELOADED=1 + if [ $? -eq 0 ]; then + echo -e '\033[1m\033[32mMake command succeeded.\033[0m' + else + echo -e '\033[1m\033[31mMake command failed.\033[0m' + exit 1 + fi + if [ -e ./packages/com.atebits.Tweetie2.ipa ]; then echo -e '\033[1m\033[32mDownloading libcephei SDK.\033[0m' @@ -51,6 +58,13 @@ do rm -rf .theos make + if [ $? -eq 0 ]; then + echo -e '\033[1m\033[32mMake command succeeded.\033[0m' + else + echo -e '\033[1m\033[31mMake command failed.\033[0m' + exit 1 + fi + if [ -e ./packages/com.atebits.Tweetie2.ipa ]; then echo -e '\033[1m\033[32mDownloading libcephei SDK.\033[0m' diff --git a/control b/control index b8d51a6..0dc91c4 100644 --- a/control +++ b/control @@ -1,6 +1,6 @@ Package: com.bandarhl.bhtwitter Name: BHTwitter -Version: 4.2 +Version: 4.3 Architecture: iphoneos-arm Description: Awesome tweak for Twitter Maintainer: Bandar Alruwaili diff --git a/layout/Library/Application Support/BHT/BHTwitter.bundle/Info.plist b/layout/Library/Application Support/BHT/BHTwitter.bundle/Info.plist index c4d1ed071869a61755dca9f2cca410384b98c269..c9f763c6c3eb1c5d883c685e8bd530ddc62594ed 100644 GIT binary patch delta 13 UcmbQnGL2=!bVf$w$uk)103Q7WTL1t6 delta 13 UcmbQnGL2=!bVf#_$uk)103P@RS^xk5 diff --git a/layout/Library/Application Support/BHT/BHTwitter.bundle/ar.lproj/Localizable.strings b/layout/Library/Application Support/BHT/BHTwitter.bundle/ar.lproj/Localizable.strings index 9c65e11..7f3d9c8 100644 --- a/layout/Library/Application Support/BHT/BHTwitter.bundle/ar.lproj/Localizable.strings +++ b/layout/Library/Application Support/BHT/BHTwitter.bundle/ar.lproj/Localizable.strings @@ -186,3 +186,8 @@ "APP_ICON_HEADER_TITLE" = "إختر الأيقونة التي تُريدها وبإمكانك تغييرها في أي وقت"; "FFMPEG_DOWNLOAD_OPTION_TITLE" = "التحميل بإستخدام FFmpeg"; + +"SELECT_URL_HOST_AFTER_COPY_OPTION_TITLE" = "أختر رابط الموقع للتغريدة بعد النسخ"; + +"UPLOAD_CUSTOM_VOICE_OPTION_TITLE" = "رفع صوت مخصص"; +"UPLOAD_CUSTOM_VOICE_OPTION_DETAIL_TITLE" = "رفع فيديو مخصص بعد تسجيل المقطع الصوتي بالتغريدة"; diff --git a/layout/Library/Application Support/BHT/BHTwitter.bundle/en.lproj/Localizable.strings b/layout/Library/Application Support/BHT/BHTwitter.bundle/en.lproj/Localizable.strings index a57c88f..f727990 100644 --- a/layout/Library/Application Support/BHT/BHTwitter.bundle/en.lproj/Localizable.strings +++ b/layout/Library/Application Support/BHT/BHTwitter.bundle/en.lproj/Localizable.strings @@ -186,3 +186,8 @@ "APP_ICON_HEADER_TITLE" = "Choose a custom app icon for your device’s home screen. Change it any time."; "FFMPEG_DOWNLOAD_OPTION_TITLE" = "Download using FFmpeg"; + +"SELECT_URL_HOST_AFTER_COPY_OPTION_TITLE" = "Select URL host of tweet after copy"; + +"UPLOAD_CUSTOM_VOICE_OPTION_TITLE" = "Upload custom voice"; +"UPLOAD_CUSTOM_VOICE_OPTION_DETAIL_TITLE" = "Upload custom video after recording a voice in the post"; diff --git a/layout/Library/Application Support/BHT/BHTwitter.bundle/ja.lproj/Localizable.strings b/layout/Library/Application Support/BHT/BHTwitter.bundle/ja.lproj/Localizable.strings index 27af054..d05e002 100644 --- a/layout/Library/Application Support/BHT/BHTwitter.bundle/ja.lproj/Localizable.strings +++ b/layout/Library/Application Support/BHT/BHTwitter.bundle/ja.lproj/Localizable.strings @@ -6,9 +6,9 @@ "BHTWITTER_SETTINGS_TITLE" = "設定"; "BHTWITTER_SETTINGS_DETAIL" = "BHTwitter 環境設定"; -"DOWNLOAD_MENU_TITLE" = "\n画質を選んでください"; -"CUSTOM_FONTS_MENU_TITLE" = "\nカスタムフォントを選んでください"; -"CUSTOM_FONTS_TUT_ALERT_MESSAGE" = "インストール済みのカスタムフォントが見つかりませんでした。 \nAppStoreでiFontをインストールしてカスタムフォントをインストールした後、再試行してください。"; +"DOWNLOAD_MENU_TITLE" = "\nダウンロードしたい動画の画質を選択してください"; +"CUSTOM_FONTS_MENU_TITLE" = "\nカスタムフォントを選択してください"; +"CUSTOM_FONTS_TUT_ALERT_MESSAGE" = "インストール済みのカスタムフォントが見つかりませんでした。 \nカスタムフォントのインストール方法 \nAppStoreからiFontをインストールし、フォントを検索またはインポートしてインストールしてください。そうするとここにカスタムフォントが表示されます。"; "OK_BUTTON_TITLE" = "OK"; "YES_BUTTON_TITLE" = "はい"; @@ -17,6 +17,7 @@ "CANCEL_BUTTON_TITLE" = "キャンセル"; "PROGRESS_DOWNLOADING_STATUS_TITLE" = "ダウンロード中..."; +"FETCHING_PROGRESS_TITLE" = "メディア情報を取得中"; "CUSTOM_FONTS_NAVIGATION_BUTTON_TITLE" = "カスタム フォント"; "CUSTOM_FONTS_NAVIGATION_TITLE" = "フォントを選択"; @@ -32,7 +33,7 @@ "MAIN_SECTION_HEADER_TITLE" = "BHTwitter 環境設定"; "DOWNLOAD_VIDEOS_OPTION_TITLE" = "動画のダウンロード"; -"DOWNLOAD_VIDEOS_OPTION_DETAIL_TITLE" = "動画をダウンロードできます。\nダウンロードボタンがツイートに追加されます。"; +"DOWNLOAD_VIDEOS_OPTION_DETAIL_TITLE" = "動画をダウンロードできます。\nダウンロードボタンがポスト内や動画タブバーに追加されます。"; "DIRECT_SAVE_OPTION_TITLE" = "ダイレクトセーブ"; "DIRECT_SAVE_OPTION_DETAIL_TITLE" = "ダウンロードした後、動画を直接保存します。"; @@ -41,72 +42,72 @@ "HIDE_ADS_OPTION_DETAIL_TITLE" = "全ての広告を削除します。"; "HIDE_TOPICS_OPTION_TITLE" = "トピックを消す"; -"HIDE_TOPICS_OPTION_DETAIL_TITLE" = "タイムラインから全てのトピックツイートを削除します。"; +"HIDE_TOPICS_OPTION_DETAIL_TITLE" = "タイムラインから全てのトピックを削除します。"; "HIDE_WHO_FOLLOW_OPTION" = "おすすめアカウントを消す"; "HIDE_WHO_FOLLOW_OPTION_DETAIL_TITLE" = "プロフィールの「おすすめアカウント」を削除します。"; -"HIDE_TOPICS_TO_FOLLOW_OPTION" = "トピックをフォローするセクションを消す"; -"HIDE_TOPICS_TO_FOLLOW_OPTION_DETAIL_TITLE" = "プロフィールのトピックをフォローするセクションを削除します。"; +"HIDE_TOPICS_TO_FOLLOW_OPTION" = "トピックをフォローするを消す"; +"HIDE_TOPICS_TO_FOLLOW_OPTION_DETAIL_TITLE" = "プロフィールの「トピックをフォローする」を削除します。"; -"DISABLE_VIDEO_LAYER_CAPTIONS_OPTION_TITLE" = "ビデオレイヤーのキャプションを無効化"; +"DISABLE_VIDEO_LAYER_CAPTIONS_OPTION_TITLE" = "動画の字幕を無効にする"; "VOICE_OPTION_TITLE" = "音声機能の有効化"; "VOICE_OPTION_DETAIL_TITLE" = "音声ツイートを有効にします。"; "VIDEO_ZOOM_OPTION_TITLE" = "動画ズーム機能の有効化"; -"VIDEO_ZOOM_OPTION_DETAIL_TITLE" = "ダブルタップで動画の中心にズームします。"; +"VIDEO_ZOOM_OPTION_DETAIL_TITLE" = "動画の中心部をダブルタップすることでズームイン/アウトできます。"; "NO_HISTORY_OPTION_TITLE" = "検索履歴を残さない"; -"NO_HISTORY_OPTION_DETAIL_TITLE" = "Twitterが検索履歴を記録するのをストップします。"; +"NO_HISTORY_OPTION_DETAIL_TITLE" = "Twitterが検索履歴を記録しないようにします。"; "BIO_TRANSALTE_OPTION_TITLE" = "プロフィールを翻訳"; -"BIO_TRANSALTE_OPTION_DETAIL_TITLE" = "プロフィールを翻訳するボタンを追加します。"; +"BIO_TRANSALTE_OPTION_DETAIL_TITLE" = "プロフィールに翻訳ボタンを追加します。"; "LIKE_CONFIRM_OPTION_TITLE" = "いいねの確認"; -"LIKE_CONFIRM_OPTION_DETAIL_TITLE" = "いいねボタンを押した時、\n確認の通知が表示されます。"; +"LIKE_CONFIRM_OPTION_DETAIL_TITLE" = "「いいね」を押す際に確認の通知が表示されます。"; -"TWEET_CONFIRM_OPTION_TITLE" = "ツイートの確認"; -"TWEET_CONFIRM_OPTION_DETAIL_TITLE" = "ツイートボタンを押した時、\n確認の通知が表示されます。"; +"TWEET_CONFIRM_OPTION_TITLE" = "ポストの確認"; +"TWEET_CONFIRM_OPTION_DETAIL_TITLE" = "ポストする際に確認の通知が表示されます。"; "FOLLOW_CONFIRM_OPTION_TITLE" = "フォローの確認"; -"FOLLOW_CONFIRM_OPTION_DETAIL_TITLE" = "フォローボタンを押した時、\n確認の通知が表示されます。"; +"FOLLOW_CONFIRM_OPTION_DETAIL_TITLE" = "フォローする際に、確認の通知が表示されます。"; -"PADLOCK_OPTION_TITLE" = "起動時のパスワード"; -"PADLOCK_OPTION_DETAIL_TITLE" = "Twitterをパスワードでロックします。"; +"PADLOCK_OPTION_TITLE" = "パスコードロック"; +"PADLOCK_OPTION_DETAIL_TITLE" = "パスコードでロックします。"; "DN_MODULAR_SEARCH_OPTION_TITLE" = "DMモジュラー検索を有効にする"; -"DN_MODULAR_SEARCH_OPTION_DETAIL_TITLE" = "DM検索の新しいUIを有効にします。"; +"DN_MODULAR_SEARCH_OPTION_DETAIL_TITLE" = "DM検索の新しいUIを有効化します。"; -"AUTO_HIGHEST_LOAD_OPTION_TITLE" = "自動で画像を最高画質で読み込む"; -"AUTO_HIGHEST_LOAD_OPTION_DETAIL_TITLE" = "投稿または読み込みの際、\n可能な限り良い画質にします。"; +"AUTO_HIGHEST_LOAD_OPTION_TITLE" = "画像を最高画質で自動読み込み"; +"AUTO_HIGHEST_LOAD_OPTION_DETAIL_TITLE" = "投稿または読み込みの際、可能な限り良い画質にします。"; "DISABLE_SENSITIVE_TWEET_WARNINGS_OPTION_TITLE" = "センシティブな画像の警告を無効化"; "TRUSTED_FRIENSS_OPTION_TITLE" = "Twitterサークルを有効化"; -"COPY_PROFILE_INFO_OPTION_TITLE" = "プロフィールコピーの有効化"; -"COPY_PROFILE_INFO_OPTION_DETAIL_TITLE" = "プロフィールをコピーするボタンの追加"; +"COPY_PROFILE_INFO_OPTION_TITLE" = "プロフィール情報のコピーを有効化"; +"COPY_PROFILE_INFO_OPTION_DETAIL_TITLE" = "プロフィールにボタンを追加して、必要な情報をコピーできるようにします。"; -"TWEET_TO_IMAGE_OPTION_TITLE" = "ツイートを画像で保存"; +"TWEET_TO_IMAGE_OPTION_TITLE" = "ツイートを画像として保存"; "TWEET_TO_IMAGE_OPTION_DETAIL_TITLE" = "共有ボタンを長押しすることで画像として保存できます。"; -"HIDE_SPACE_OPTION_TITLE" = "スペースバーを消す"; +"HIDE_SPACE_OPTION_TITLE" = "スペースバーを非表示"; "DISABLE_RTL_OPTION_TITLE" = "RTLの無効化"; -"DISABLE_RTL_OPTION_DETAIL_TITLE" = "右向きの言語を左向きで表示します。\n設定を適応させるにはTwitterを再起動してください。"; +"DISABLE_RTL_OPTION_DETAIL_TITLE" = "RTL言語をLTRで表示します。\n設定を適応させるにはアプリを再起動してください。"; "ALWAYS_OPEN_SAFARI_OPTION_TITLE" = "常にSafariで開く"; -"ALWAYS_OPEN_SAFARI_OPTION_DETAIL_TITLE" = "URLをSafari、もしくはデフォルトのブラウザで開きます。"; +"ALWAYS_OPEN_SAFARI_OPTION_DETAIL_TITLE" = "URLをSafariまたはデフォルトのブラウザで開きます。"; "STRIP_URL_TRACKING_PARAMETERS_TITLE" = "URLからトラッキングを取り除く"; -"STRIP_URL_TRACKING_PARAMETERS_DETAIL_TITLE" = "ツイートURLのコピー時にトラッキングパラメータを除去します。"; +"STRIP_URL_TRACKING_PARAMETERS_DETAIL_TITLE" = "URLのコピー時にトラッキングパラメータを除去します。"; "TWITTER_BLUE_SECTION_HEADER_TITLE" = "Twitter blueの機能"; "UNDO_TWEET_OPTION_TITLE" = "ツイートの取り消し"; "UNDO_TWEET_OPTION_DETAIL_TITLE" = "ツイートした後、そのツイートを取り消せます。"; "READER_MODE_OPTION_TITLE" = "リーダーモード"; -"READER_MODE_OPTION_DETAIL_TITLE" = "リーダーモードを有効にします。"; +"READER_MODE_OPTION_DETAIL_TITLE" = "リーダーモードを有効化します。"; "THEME_OPTION_TITLE" = "テーマ"; "THEME_OPTION_DETAIL_TITLE" = "Twitterのテーマカラーを変更できます。"; @@ -128,31 +129,34 @@ "CUSTOM_TAB_BAR_OPTION_5" = "通知"; "CUSTOM_TAB_BAR_OPTION_6" = "メッセージ"; -"TWITTER_BLUE_SECTION_FOOTER_TITLE" = "変更を適用させるにはTwitterを再起動する必要があります。"; +"TWITTER_BLUE_SECTION_FOOTER_TITLE" = "変更を適用させるにはアプリを再起動する必要があります。"; "LAYOUT_CUS_SECTION_HEADER_TITLE" = "レイアウトのカスタム"; "ORIG_TWEET_STYLE_OPTION_TITLE" = "エッジツイートスタイルの無効化"; -"ORIG_TWEET_STYLE_OPTION_DETAIL_TITLE" = "Twitterオリジナルのスタイル"; +"ORIG_TWEET_STYLE_OPTION_DETAIL_TITLE" = "Twitterオリジナルのスタイルを使用するように強制します。"; "HIDE_VIEW_COUNT_OPTION_TITLE" = "表示回数を隠す"; -"HIDE_VIEW_COUNT_OPTION_DETAIL_TITLE" = "ツイートから表示回数を削除します。"; +"HIDE_VIEW_COUNT_OPTION_DETAIL_TITLE" = "表示回数を非表示にします。"; + +"HIDE_MARKBOOK_BUTTON_OPTION_TITLE" = "ブックマークボタンを非表示"; +"HIDE_MARKBOOK_BUTTON_OPTION_DETAIL_TITLE" = "ツイートからブックマークボタンを非表示にする"; "FORCE_TWEET_FULL_FRAME_TITLE" = "Twitterで画像を全体表示するように強制する"; "DISABLE_IMMERSIVE_PLAYER_TITLE" = "イマーシブプレーヤーを無効化"; -"DISABLE_IMMERSIVE_PLAYER_DETAIL_TITLE" = "Twitterの新しい動画プレーヤーを無効にします。 (イマーシブプレーヤー)"; +"DISABLE_IMMERSIVE_PLAYER_DETAIL_TITLE" = "Twitterの新しい動画プレーヤーを無効にします。(イマーシブプレーヤー)"; -"SHOW_SCOLL_INDICATOR_OPTION_TITLE" = "スクロールバーを表示します。"; +"SHOW_SCOLL_INDICATOR_OPTION_TITLE" = "スクロールバーを表示する"; -"ALWAYS_FOLLOWING_PAGE_OPTION_TITLE" = "常にフォロー中からスタートする"; -"ALWAYS_FOLLOWING_PAGE_OPTION_DETAIL_TITLE" = "ユーザーがアプリを起動したときに、タイムラインの次のセクションを常に使用するようにします。"; +"ALWAYS_FOLLOWING_PAGE_OPTION_TITLE" = "常に「フォロー中」から開始"; +"ALWAYS_FOLLOWING_PAGE_OPTION_DETAIL_TITLE" = "ユーザーがアプリを起動したときに、タイムラインの「フォロー中」から始まるように強制します。"; "FONT_OPTION_TITLE" = "カスタムフォントの有効化"; "FONT_OPTION_DETAIL_TITLE" = "Twitterのフォントを変更できるようにします。"; "REQULAR_FONTS_PICKER_OPTION_TITLE" = "フォント"; "BOLD_FONTS_PICKER_OPTION_TITLE" = "太字のフォント"; -"LAYOUT_CUS_SECTION_FOOTER_TITLE" = "変更を適用させるにはTwitterを再起動する必要があります。"; +"LAYOUT_CUS_SECTION_FOOTER_TITLE" = "変更を適用させるにはアプリを再起動する必要があります。"; "DEBUG_SECTION_HEADER_TITLE" = "デバッグ"; "FLEX_OPTION_TITLE" = "FLEXの有効化"; @@ -162,3 +166,23 @@ "LEGAL_BUTTON_TITLE" = "謝辞"; "DEVELOPER_SECTION_HEADER_TITLE" = "開発者"; + +"ADVANCED_SEARCH_TITLE" = "高度な検索"; +"ADVANCED_SEARCH_DETAIL_TITLE" = "高度な検索を有効化します"; + +"STOP_HIDING_TAB_BAR_TITLE" = "タブバーの非表示を停止"; +"STOP_HIDING_TAB_BAR_DETAIL_TITLE" = "スクロール時にTwitterがタブバーを非表示にしないようにします。"; + +"CUSTOM_DIRECT_BACKGROUND_VIEW_TITLE" = "会話の背景を設定"; +"CUSTOM_DIRECT_BACKGROUND_VIEW_DETAIL_TITLE" = "ダイレクトメッセージの会話背景に画像または色を設定します。"; + +"CUSTOM_DIRECT_BACKGROUND_ALERT_OPTION_1" = "画像を背景に設定"; +"CUSTOM_DIRECT_BACKGROUND_ALERT_OPTION_2" = "色を背景に設定"; +"CUSTOM_DIRECT_BACKGROUND_ALERT_OPTION_3" = "デフォルトにリセット"; + +"APP_ICON_TITLE" = "アプリアイコン"; +"APP_ICON_DETAIL_TITLE" = "アプリアイコンを選択してください。いつでも変更できます。(JailbreakおよびTrollStoreユーザーのみ利用可能)"; +"APP_ICON_NAV_TITLE" = "アプリアイコン"; +"APP_ICON_HEADER_TITLE" = "アプリアイコンを選択してください。いつでも変更できます。"; + +"FFMPEG_DOWNLOAD_OPTION_TITLE" = "FFmpegを使用してダウンロード";