diff --git a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoEditViewController.m b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoEditViewController.m index 7d5dda8a..389e4cc2 100644 --- a/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoEditViewController.m +++ b/YuMi/Modules/YMMine/View/MineInfo/XPMineUserInfoEditViewController.m @@ -466,17 +466,27 @@ TZImagePickerControllerDelegate> } } -// 处理视频选择 -- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingVideo:(UIImage *)coverImage sourceAssets:(PHAsset *)asset { +- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingGifImage:(UIImage *)animatedImage sourceAssets:(PHAsset *)asset { @kWeakify(self); dispatch_async(dispatch_get_main_queue(), ^{ @kStrongify(self); [self showLoading]; - [self processVideoAsset:asset]; + [[PHImageManager defaultManager] requestImageDataForAsset:asset + options:nil + resultHandler:^(NSData * _Nullable imageData, NSString * _Nullable dataUTI, UIImageOrientation orientation, NSDictionary * _Nullable info) { + [self.presenter uploadGifAvatar:imageData]; + }]; [picker dismissViewControllerAnimated:YES completion:^{}]; }); } +// 处理视频选择 +- (void)imagePickerController:(TZImagePickerController *)picker didFinishPickingVideo:(UIImage *)coverImage sourceAssets:(PHAsset *)asset { + [self showLoading]; + [self processVideoAsset:asset]; + [picker dismissViewControllerAnimated:YES completion:^{}]; +} + // 处理视频资源 - (void)processVideoAsset:(PHAsset *)asset { @kWeakify(self); @@ -484,10 +494,11 @@ TZImagePickerControllerDelegate> // 检查视频时长(头像视频应该在5秒内) NSTimeInterval duration = asset.duration; if (duration > 5.0) { - dispatch_async(dispatch_get_main_queue(), ^{ + dispatch_async(dispatch_get_main_queue(), + ^{ @kStrongify(self); [self hideHUD]; - [self showErrorToast:YMLocalizedString(@"20.20.51_text_30")]; + [self showErrorToast:[NSString stringWithFormat:YMLocalizedString(@"20.20.51_text_30"), @(5)]]; }); return; } @@ -719,6 +730,14 @@ TZImagePickerControllerDelegate> model.avatarUrl = url; } [self.tableView reloadData]; + if ([url hasSuffix:@"mp4"]) { + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ + [self.presenter getUserInfo]; + }); + [self showSuccessToast:YMLocalizedString(@"XPMineUserInfoEditViewController12")]; + }else { + [self.presenter complectionInfoWithAvatar:url nick:nil birth:nil userDesc:nil]; + } } #pragma mark - XPMineUserInfoEditPickView diff --git a/YuMi/Modules/YMRoom/View/XPRoomViewController.m b/YuMi/Modules/YMRoom/View/XPRoomViewController.m index 92c5168f..eed342aa 100644 --- a/YuMi/Modules/YMRoom/View/XPRoomViewController.m +++ b/YuMi/Modules/YMRoom/View/XPRoomViewController.m @@ -6,6 +6,7 @@ // #import "XPRoomViewController.h" +#include ///Third #import #import @@ -203,6 +204,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> // 🔧 防护机制:房间状态标志位 @property (atomic, assign) BOOL isExitingRoom; // 是否正在退出房间 @property (atomic, assign) BOOL isViewActive; // VC 是否可见/活跃 +@property (atomic, assign) BOOL isMinimizingRoom; // 是否正在最小化到悬浮窗 @property(nonatomic,copy) NSString *myCoins; @property(nonatomic,strong) UIButton *exitGameButton; @@ -312,9 +314,6 @@ XPCandyTreeInsufficientBalanceViewDelegate> NSLog(@"🔄 XPRoomViewController: 开始销毁"); - // 🔧 防护:强制清理 TRTC 连接,防止资源泄漏 - [[RtcManager instance] exitRoom]; - // 🔧 防护:标记房间正在退出,防止后续异步回调 self.isExitingRoom = YES; self.isViewActive = NO; @@ -578,10 +577,12 @@ XPCandyTreeInsufficientBalanceViewDelegate> // 🔧 防护:标记 VC 即将不可见 self.isViewActive = NO; - // 🔧 防护:如果 VC 被移除或 dismiss,强制清理 TRTC + // 🔧 防护:如果 VC 被移除或 dismiss,强制清理 TRTC(最小化时跳过断开) if (self.isMovingFromParentViewController || self.isBeingDismissed) { - [[RtcManager instance] exitRoom]; - self.isExitingRoom = YES; + if (!self.isMinimizingRoom) { + [[RtcManager instance] exitRoom]; + self.isExitingRoom = YES; + } } // 如果连击正在进行,强制重置 @@ -599,11 +600,13 @@ XPCandyTreeInsufficientBalanceViewDelegate> // 🔧 防护:确保标记为不可见 self.isViewActive = NO; - // 🔧 修复:发送房间退出通知,让 BuglyManager 知道用户已退出房间 - [[NSNotificationCenter defaultCenter] postNotificationName:@"RoomDidExit" - object:nil - userInfo:@{@"roomId": self.roomUid ?: @"unknown"}]; - NSLog(@"🎮 房间退出通知已发送 - RoomID: %@", self.roomUid); + // 🔧 修复:发送房间退出通知,让 BuglyManager 知道用户已退出房间(最小化时不发送) + if (!self.isMinimizingRoom) { + [[NSNotificationCenter defaultCenter] postNotificationName:@"RoomDidExit" + object:nil + userInfo:@{@"roomId": self.roomUid ?: @"unknown"}]; + NSLog(@"🎮 房间退出通知已发送 - RoomID: %@", self.roomUid); + } } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; @@ -613,6 +616,8 @@ XPCandyTreeInsufficientBalanceViewDelegate> // 🔧 防护:标记 VC 可见 self.isViewActive = YES; + // 🔧 最小化恢复后复位标志 + self.isMinimizingRoom = NO; // 🔧 修复:发送房间进入通知,让 BuglyManager 知道用户已进入房间 [[NSNotificationCenter defaultCenter] postNotificationName:@"RoomDidEnter" @@ -2205,13 +2210,13 @@ XPCandyTreeInsufficientBalanceViewDelegate> case NIMChatroomEventTypeAddBlack: case NIMChatroomEventTypeKicked: case NIMChatroomEventTypeExit: - onLineNumber -= 1; + onLineNumber = MAX(onLineNumber - 1, 0); // 🔧 新增:若退出用户与CP相关,移除其CP SVGA并重绘 if (content.source && content.source.userId.length > 0) { NSInteger exitUid = content.source.userId.integerValue; if (exitUid > 0) { [self removeCpDataForUids:@[@(exitUid)]]; - // 构造剩余在麦用户列表,触发一次 CP 刷新,等价于补充一次“下麦”的逻辑 + // 构造剩余在麦用户列表,触发一次 CP 刷新,等价于补充一次"下麦"的逻辑 NSMutableDictionary *currentQueue = [self.stageView getMicroQueue]; if (currentQueue) { NSMutableArray *remainingUids = [NSMutableArray array]; @@ -3253,6 +3258,7 @@ XPCandyTreeInsufficientBalanceViewDelegate> } - (void)miniRoom { + self.isMinimizingRoom = YES; if(self.freeModel != nil){ [XPRoomMiniManager shareManager].curState = self.freeModel.curStage; } diff --git a/YuMi/ar.lproj/Localizable.strings b/YuMi/ar.lproj/Localizable.strings index 5485b6c5..a6317e4e 100644 --- a/YuMi/ar.lproj/Localizable.strings +++ b/YuMi/ar.lproj/Localizable.strings @@ -4146,7 +4146,7 @@ ineHeadView12" = "الحمل"; "20.20.51_text_27" = "١ في كل مرة تقوم فيها بتحميل صورة رمزية ديناميكية سيقوم النظام بخصم %@ عملة من حسابك. يرجى التأكد من أن رصيد حسابك كافٍ\n\n٢ عملية المراجعة: بعد اكتمال التحميل، سيدخل النظام تلقائيًا عملية المراجعة. خلال هذه الفترة، يرجى عدم تحميل صورة رمزية جديدة مرة أخرى لتجنب التأثير على تقدم المراجعة.\n\n٣ نتائج المراجعة \n\nتمت المراجعة بنجاح: ستدخل الصورة الرمزية الديناميكية الجديدة حيز التنفيذ على الفور وسيتم عرضها للمستخدمين الآخرين.\n\nفشل المراجعة: سيقوم النظام تلقائيًا برد %@ عملة أنفقتها بعد اكتمال المراجعة. في نفس الوقت، ستتلقى إشعارًا من النظام.\n\n٤ عملية لا رجعة فيها: يرجى ملاحظة أنه بمجرد مراجعة الصورة الرمزية الديناميكية ودخولها حيز التنفيذ، فلن تتمكن من استعادتها إلى الصورة الرمزية السابقة.\n"; "20.20.51_text_28" = "عرض الوقت:%@"; "20.20.51_text_29" = "يجب أن يكون عدد الماس مضاعفات %@"; -"20.20.51_text_30" = "يجب ألا تتجاوز مدة الفيديو 10 ثوانٍ."; +"20.20.51_text_30" = "يجب ألا تتجاوز مدة الفيديو %@ ثوانٍ."; "20.20.56_text_1" = "عدد المباريات الحالي غير كافٍ، فشلت المباراة. إعادة المباراة مرة أخرى؟"; "20.20.56_text_2" = "فشلت المطابقة، تم إرجاع العملات التي استهلكتها إلى محفظتك"; diff --git a/YuMi/en.lproj/Localizable.strings b/YuMi/en.lproj/Localizable.strings index 988eaca7..de9ec714 100644 --- a/YuMi/en.lproj/Localizable.strings +++ b/YuMi/en.lproj/Localizable.strings @@ -3933,7 +3933,7 @@ "20.20.51_text_27" = "1 Each time you upload a dynamic avatar, the system will deduct %@ coins from your account. Please make sure that your account balance is sufficient.\n2 Review process: After the upload is completed, the system will automatically enter the review process. During this period, please do not upload a new avatar again to avoid affecting the review progress.\n3 Review results: \nReview passed: Your new dynamic avatar will take effect immediately and be displayed to other users.\nReview failed: The system will automatically refund the %@ coins you spent after the review is completed. At the same time, you will receive a system notification.\n4 Irreversible operation: Please note that once the dynamic avatar is reviewed and takes effect, you will not be able to restore it to the previous avatar.\n"; "20.20.51_text_28" = "View Time: %@"; "20.20.51_text_29" = "Number of diamonds needs to be multiples of %@"; -"20.20.51_text_30" = "Video duration must not exceed 10 seconds."; +"20.20.51_text_30" = "Video duration must not exceed %@ seconds."; "20.20.56_text_1" = "The current number of matches is not enough, the match failed. Re-match again?"; "20.20.56_text_2" = "Match failed, the coins you consumed has been returned to your wallet"; diff --git a/YuMi/es.lproj/Localizable.strings b/YuMi/es.lproj/Localizable.strings index c7525be5..36ba123e 100644 --- a/YuMi/es.lproj/Localizable.strings +++ b/YuMi/es.lproj/Localizable.strings @@ -3941,7 +3941,7 @@ Revisión fallida: El sistema reembolsará automáticamente las %@ monedas que g "; "20.20.51_text_28" = "Hora de Vista: %@"; "20.20.51_text_29" = "El número de diamantes debe ser múltiplo de 1000"; -"20.20.51_text_30" = "La duración del video no debe exceder los 10 segundos."; +"20.20.51_text_30" = "La duración del video no debe exceder los %@ segundos."; "20.20.56_text_1" = "La cantidad actual de coincidencias no es suficiente, la coincidencia falló. ¿Volver a intentar?"; "20.20.56_text_2" = "Coincidencia fallida, las monedas que consumiste han sido devueltas a tu billetera"; diff --git a/YuMi/pt-BR.lproj/Localizable.strings b/YuMi/pt-BR.lproj/Localizable.strings index 8ded8096..a42da3e2 100644 --- a/YuMi/pt-BR.lproj/Localizable.strings +++ b/YuMi/pt-BR.lproj/Localizable.strings @@ -3229,7 +3229,7 @@ "20.20.51_text_27" = "1 Cada envio de avatar dinâmico deduz %@ moedas. Verifique seu saldo.\n2 Revisão: Após o envio, o sistema entrará em revisão. Não envie novamente para não atrasar.\n3 Resultado: \nAprovado: Seu avatar será exibido.\nReprovado: As moedas serão reembolsadas e você será notificado.\n4 Operação irreversível: Após a aprovação, não é possível reverter."; "20.20.51_text_28" = "Horário da Visita: %@"; "20.20.51_text_29" = "O número de diamantes precisa ser múltiplo de %@"; -"20.20.51_text_30" = "A duração do vídeo não pode exceder 10 segundos."; +"20.20.51_text_30" = "A duração do vídeo não pode exceder %@ segundos."; "20.20.56_text_1" = "Número atual de correspondências insuficiente, falha na correspondência. Tentar novamente?"; "20.20.56_text_2" = "Falha na correspondência, as moedas gastas foram devolvidas à sua carteira."; diff --git a/YuMi/ru.lproj/Localizable.strings b/YuMi/ru.lproj/Localizable.strings index 9a75ccdf..e6ee244a 100644 --- a/YuMi/ru.lproj/Localizable.strings +++ b/YuMi/ru.lproj/Localizable.strings @@ -201,7 +201,7 @@ "MessageCell1" = "Удалить"; "MessageCell2" = "Отозвать"; -"SessionNavView0" = "Подписаться"; +"SessionNavView0" = "Подписки"; "SessionNavView1" = "Уже добавлен в черный список"; "SessionChatLimitView0" = "Только пользователи с уровнем богатства ≥%zd или уровнем очарования ≥%zd могут инициировать чат"; @@ -582,12 +582,12 @@ "XPMineShareViewController0" = "Выберите друзей"; "XPMineShareViewController1" = "Вы уверены, что хотите поделиться с %@?"; -"XPMineShareViewController4" = "Подписаться"; +"XPMineShareViewController4" = "Подписки"; -"XPMineContactViewController3" = "Подписаться"; +"XPMineContactViewController3" = "Подписки"; "XPMineFansViewController0" = "Больше комнат нет"; -"XPMineFansViewController1" = "Мои подписчики"; +"XPMineFansViewController1" = "Мои Фаны"; "XPMineFansViewController2" = "Подписка оформлена успешно"; "XPMineFansViewController3" = "У вас еще нет фанатов"; @@ -730,7 +730,7 @@ "XPMineHeadView2" = "Неверный формат даты!!"; "XPMineHeadView3" = "Неверный формат даты!!!"; "XPMineHeadView4" = "Подписки"; -"XPMineHeadView5" = "Подписчики"; +"XPMineHeadView5" = "Фаны"; "XPMineHeadView6" = "Знак %@"; "XPMineHeadView7" = "На рассмотрении"; "XPMineHeadView8" = "Скопировано успешно"; @@ -770,7 +770,7 @@ "XPMineUserInfoDateView2" = "Готово"; "XPMineUserInfoDateView3" = " лет"; -"XPMineUserInfoDateView4" = "Подписаться"; +"XPMineUserInfoDateView4" = "Подписки"; "XPMineRechageHeadView0" = "Мои монеты"; "XPMineRechargeNavView0" = "Аккаунт"; @@ -783,7 +783,7 @@ "XPMineFriendTableViewCell0" = "Этот человек еще не установил подпись"; "XPMineFansTableViewCell0" = "Этот человек еще не установил подпись"; -"XPMineFansTableViewCell1" = "+Подписаться"; +"XPMineFansTableViewCell1" = "+Подписки"; "XPMineFansTableViewCell2" = "Взаимная подписка"; "XPMineAttentionTableViewCell0" = "Этот человек еще не установил подпись"; @@ -838,7 +838,7 @@ "XPMineUserInfoViewController6" = "Успешно удален из черного списка"; "XPMineUserInfoViewController7" = "Успешно добавлен в черный список"; "XPMineUserInfoViewController8" = "Чат"; -"XPMineUserInfoViewController9" = "Подписаться"; +"XPMineUserInfoViewController9" = "Подписки"; "XPMineUserInfoViewController10" = "Подписан"; "XPMineUserInfoViewController11" = "Профиль"; "XPMineUserInfoViewController12" = "Записи"; @@ -874,7 +874,7 @@ "XPMineSimpleUserInfoViewController7" = "Успешно удален из черного списка"; "XPMineSimpleUserInfoViewController8" = "Успешно добавлен в черный список"; "XPMineSimpleUserInfoViewController9" = "Поговорить с ними"; -"XPMineSimpleUserInfoViewController10" = "Подписаться"; +"XPMineSimpleUserInfoViewController10" = "Подписки"; "XPMineSimpleUserInfoViewController11" = "Подписан"; "XPMineUserInfoDesViewController0" = "Редактировать личное введение"; @@ -1045,7 +1045,7 @@ "XPMineCollectRoomListViewController9" = "Живая комната"; "XPSimpleMineHeaderView0" = "Подписан"; -"XPSimpleMineHeaderView1" = "Подписчики"; +"XPSimpleMineHeaderView1" = "Фаны"; "XPSimpleMineHeaderView2" = "Посетители"; "XPSimpleMineHeaderView3" = "Просмотр"; "XPSimpleMineHeaderView4" = "Мой Кошелёк"; @@ -1377,7 +1377,7 @@ "XPUserCardPresenter12" = "Очистить значение подарка"; "XPUserCardPresenter13" = "Отпр. подарок"; "XPUserCardPresenter14" = "Личный чат"; -"XPUserCardPresenter15" = "Подписаться"; +"XPUserCardPresenter15" = "Подписки"; "XPUserCardPresenter16" = "Подписан"; "XPUserCardPresenter17" = "Исключить"; "XPUserCardPresenter18" = "Назначить администратором"; @@ -1441,8 +1441,8 @@ "XPAnchorAudienceUpMicView2" = "Подтвердить"; "XPRoomAnchorInfoCardView0" = "Подписан"; -"XPRoomAnchorInfoCardView1" = "Нажмите, чтобы подписаться, чтобы не потеряться в следующий раз при прямом эфире~"; -"XPRoomAnchorInfoCardView2" = "Подписаться"; +"XPRoomAnchorInfoCardView1" = "Нажмите, чтобы Подписки, чтобы не потеряться в следующий раз при прямом эфире~"; +"XPRoomAnchorInfoCardView2" = "Подписки"; "XPRoomAnchorRankEnterView0" = "Почасовой"; @@ -1576,7 +1576,7 @@ "StageView26" = "Отключить звук слота"; "StageView27" = "Вытащить их на микрофон как ведущий"; "StageView28" = "Выйти с микрофона и слушать"; -"StageView29" = "Подписаться"; +"StageView29" = "Подписки"; "AnchorStageView1" = "Разблокировать"; "AnchorStageView3" = "Открыть микрофон"; @@ -2032,7 +2032,7 @@ "XPReceiveRedPacketView10" = "Подпишитесь на ведущего, чтобы хватить красные пакеты!"; "XPReceiveRedPacketView11" = "Поделитесь комнатой, чтобы хватить красные пакеты!"; "XPReceiveRedPacketView12" = "Отправьте Данмаки %@, чтобы хватить красные пакеты!"; -"XPReceiveRedPacketView13" = "Подписаться на ведущего\nХватить красный пакет"; +"XPReceiveRedPacketView13" = "Подписки на ведущего\nХватить красный пакет"; "XPReceiveRedPacketView14" = "Поделиться комнатой\nХватить красный пакет"; "XPReceiveRedPacketView15" = "Отпр. Данмаки\nХватить красный пакет"; "XPReceiveRedPacketView16" = "Не участвую\nв мероприятии"; @@ -2076,9 +2076,9 @@ "XPRoomSettingPresenter11" = "Комната заблокирована, введите пароль комнаты"; "XPRoomSettingPresenter12" = "Фон комнаты"; -"XPFollowAnchorDialogView0" = "Подписаться"; +"XPFollowAnchorDialogView0" = "Подписки"; "XPFollowAnchorDialogView1" = "Отписаться"; -"XPFollowAnchorDialogView2" = "Подписаться"; +"XPFollowAnchorDialogView2" = "Подписки"; "XPRoomExpDisplayView0" = "+%@ опыта"; "XPRoomExpDisplayView1" = "Получено опыт %@"; @@ -2140,7 +2140,7 @@ "MessageCell1" = "Удалить"; "MessageCell2" = "Отозвать"; -"SessionNavView0" = "Подписаться"; +"SessionNavView0" = "Подписки"; "SessionNavView1" = "Уже в черном списке"; "SessionChatLimitView0" = "Только пользователи с уровнем благосостояния ≥ %zd или уровнем обаяния ≥ %zd могут начать чат"; @@ -3428,7 +3428,7 @@ "XPSessionMainViewController0" = "Сообщ."; "XPSessionMainViewController1" = "Друзья"; "XPSessionMainViewController2" = "Подп."; -"XPSessionMainViewController3" = "Подписчики"; +"XPSessionMainViewController3" = "Фаны"; ///XPFreeGiftsObtainView "XPFreeGiftsObtainView0"="Понятно"; "XPFreeGiftsObtainView1"="Сегодня смотрели прямой эфир в течение %@, даём вам подарок"; @@ -3735,7 +3735,7 @@ "RoomSetting_1.0.17_0" = "Аватар комнаты"; "VipSettin_1.0.17_0" = "Настройки VIP"; "VipSettin_1.0.17_1" = "Привилегия VIP"; -"VipSettin_1.0.17_2" = "Нельзя подписаться"; +"VipSettin_1.0.17_2" = "Нельзя Подписки"; "VipSettin_1.0.17_3" = "Анти-вход в комнату"; "VipSettin_1.0.17_4" = "Невидимость"; "VipSettin_1.0.17_5" = "Анти-кик"; @@ -3930,7 +3930,7 @@ "20.20.51_text_27" = "1 Каждый раз, когда вы загружаете динамический аватар, система списывает %@ монет с вашего аккаунта. Пожалуйста, убедитесь, что баланс вашего аккаунта достаточен.\n2 Процесс проверки: После завершения загрузки система автоматически переходит в процесс проверки. В это время не загружайте новый аватар, чтобы не повлиять на прогресс проверки.\n3 Результаты проверки:\nПроверка пройдена: Ваш новый динамический аватар вступит в силу немедленно и будет отображаться другим пользователям.\nПроверка не пройдена: После завершения проверки система автоматически вернет вам потраченные %@ монеты. В то же время вы получите системное уведомление.\n4 Нереверсивная операция: Пожалуйста, обратите внимание, что после проверки и вступления в силу динамический аватар вы не сможете восстановить предыдущий аватар.\n"; "20.20.51_text_28" = "Время просмотра: %@"; "20.20.51_text_29" = "Количество алмазов должно быть кратно 1000"; -"20.20.51_text_30" = "Продолжительность видео не должна превышать 10 сек.."; +"20.20.51_text_30" = "Продолжительность видео не должна превышать %@ сек.."; "20.20.56_text_1" = "Текущее количество матчей недостаточно, матч не удался. Сыграть снова?"; "20.20.56_text_2" = "Матч не удался, потраченные вами монеты возвращены в Кошелёк"; @@ -3953,14 +3953,14 @@ "20.20.56_text_19" = "Отклонено"; "20.20.56_text_20" = "Другая сторона отклоняет ваше приглашение изменить отношения."; -"20.20.59_text_1" = "Центр событий"; +"20.20.59_text_1" = "Центр ивентов"; "20.20.59_text_2" = "Официально"; -"20.20.59_text_3" = "Площадь событий"; -"20.20.59_text_4" = "Мои события"; -"20.20.59_text_5" = " Подписаться"; +"20.20.59_text_3" = "Площадь"; +"20.20.59_text_4" = "Мои ивенты"; +"20.20.59_text_5" = " Подписки"; "20.20.59_text_6" = " Отписаться"; "20.20.59_text_7" = " Принять участие"; -"20.20.59_text_8" = "Создать событие"; +"20.20.59_text_8" = "Создать ивент"; "20.20.59_text_9" = "Название события"; "20.20.59_text_10" = "Баннер события(Лучший размер:690*236) "; "20.20.59_text_11" = "Загрузить баннер на главную страницу(Стоимость %@)"; @@ -3978,7 +3978,7 @@ "20.20.59_text_23" = "Отображаются только данные за последние 30 дней "; "20.20.59_text_24" = "Событие начинается"; "20.20.59_text_25" = "Событие закончилось"; -"20.20.59_text_26" = "Ваше событие скоро начнется! Ваши фанаты и подписчики были уведомлены!"; +"20.20.59_text_26" = "Ваше событие скоро начнется! Ваши фанаты и Фаны были уведомлены!"; "20.20.59_text_27" = "Событие, на которое вы подписались, скоро начнется — нажмите, чтобы присоединиться сейчас!!!"; "20.20.59_text_28.1" = "Вы уверены, что хотите удалить свое событие?"; "20.20.59_text_28.2" = "После удаления событие невозможно начать!\nПожалуйста, будьте осторожны!!!\nСобытие будет удалено с площади.\nПотраченные на баннер монеты не будут возвращены!\n"; diff --git a/YuMi/tr.lproj/Localizable.strings b/YuMi/tr.lproj/Localizable.strings index c5b9de1a..060dde71 100644 --- a/YuMi/tr.lproj/Localizable.strings +++ b/YuMi/tr.lproj/Localizable.strings @@ -3727,7 +3727,7 @@ "20.20.51_text_27" = "1 Her dinamik avatar yüklediğinizde, sistem hesabınızdan %@ jeton düşecektir. Lütfen hesap bakiyenizin yeterli olduğundan emin olun.\n2 İnceleme süreci: Yükleme tamamlandıktan sonra, sistem otomatik olarak inceleme sürecine girecektir. Bu süre zarfında, inceleme ilerlemesini etkilememek için lütfen tekrar yeni bir avatar yüklemeyin.\n3 İnceleme sonuçları: \nİnceleme geçti: Yeni dinamik avatarınız hemen yürürlüğe girecek ve diğer kullanıcılara gösterilecektir.\nİnceleme başarısız oldu: Sistem, inceleme tamamlandıktan sonra harcadığınız %@ jetonu otomatik olarak iade edecektir. Aynı zamanda, bir sistem bildirimi alacaksınız.\n4 Geri alınamaz işlem: Lütfen dinamik avatar incelendikten ve yürürlüğe girdikten sonra, onu önceki avatarınıza geri yükleyemeyeceğinizi unutmayın.\n"; "20.20.51_text_28" = "Görüntüleme Süresi: %@"; "20.20.51_text_29" = "Elmas sayısının %@ katları olması gerekir"; -"20.20.51_text_30" = "Video süresi 10 saniyeyi geçemez."; +"20.20.51_text_30" = "Video süresi %@ saniyeyi geçemez."; "20.20.56_text_1" = "Mevcut eşleşme sayısı yeterli değil, eşleşme başarısız oldu. Tekrar eşleşelim mi?"; "20.20.56_text_2" = "Eşleşme başarısız oldu, harcadığınız jetonlar cüzdanınıza iade edildi"; diff --git a/YuMi/uz-UZ.lproj/Localizable.strings b/YuMi/uz-UZ.lproj/Localizable.strings index cc5b050a..a30f7242 100644 --- a/YuMi/uz-UZ.lproj/Localizable.strings +++ b/YuMi/uz-UZ.lproj/Localizable.strings @@ -3901,7 +3901,7 @@ Tasdiqlangandan so'ng, sekretar sizga uni chop etishda yordam beradi va sizni xa "20.20.51_text_27" = "1 Har safar dinamik avatar yuklanganda, tizim hisobingizdan %@ tanga ayirib oladi. Iltimos, hisobingizning balansi etarli ekanligiga ishonch hosil qiling.\n2 Tekshirish jarayoni: Yuklash tugagandan so'ng, tizim avtomatik ravishda tekshirish jarayoniga kiradi. Bu vaqt ichida, qayta tekshirish jarayoniga ta'sir qilmaslik uchun, yangi avatarni yana yuklamang.\n3 Tekshirish natijalari: \nTekshiruv muvaffaqiyatli: Yangi dinamik avatariz darhol kuchga kiradi va boshqa foydalanuvchilarga ko'rsatiladi.\nTekshiruv muvaffaqiyatsiz: Tekshiruv tugagandan so'ng, tizim sarflangan %@ tangalarni avtomatik ravishda qaytaradi. Shu bilan birga, siz tizim xabarnomasini olasiz.\n4 Qaytarilmaydigan operatsiya: E'tibor bering, dinamik avatar tekshirib olingan va kuchga kiritilganidan keyin, uni oldingi avatarga qaytarib bo'lmaydi.\n"; "20.20.51_text_28" = "Ko'rish vaqti: %@"; "20.20.51_text_29" = "Almazlar soni 1000 ning multiplei bo'lishi kerak"; -"20.20.51_text_30" = "Video davomiyligi 10 soniyadan oshmasligi kerak."; +"20.20.51_text_30" = "Video davomiyligi %@ soniyadan oshmasligi kerak."; "20.20.56_text_1" = "Joriy mosliklar soni etarli emas, moslik muvaffaqiyatsiz tugadi. Qayta moslashasizmi?"; "20.20.56_text_2" = "Moslik muvaffaqiyatsiz tugadi, sarflangan tangalar hamyoningizga qaytarildi"; diff --git a/YuMi/zh-Hant.lproj/Localizable.strings b/YuMi/zh-Hant.lproj/Localizable.strings index 99a65b67..144e72c5 100644 --- a/YuMi/zh-Hant.lproj/Localizable.strings +++ b/YuMi/zh-Hant.lproj/Localizable.strings @@ -3597,7 +3597,7 @@ "20.20.51_text_27" = "1 每次上傳動態頭像,系統都會從您的帳戶中扣除%@金幣。請確保您的帳戶餘額充足。\n2 審核流程:上傳完成後,系統自動進入審核流程。在此期間,請勿再次上傳新頭像,以免影響審核進度。\n3 審核結果: \n審核通過:您的新動態頭像將立即生效並顯示給其他使用者。\n審核失敗:審核完成後系統將自動退還您花費的%@金幣。同時,您也會收到系統通知。\n4 不可逆操作:請注意,動態頭像一旦審核並生效,將無法恢復為先前的頭像。\n"; "20.20.51_text_28" = "访客時間:%@"; "20.20.51_text_29" = "鑽石數量需要是 %@ 的倍數"; -"20.20.51_text_30" = "視頻時長不能超過 10 秒"; +"20.20.51_text_30" = "視頻時長不能超過 %@ 秒"; "20.20.56_text_1" = "目前的匹配次數不足,匹配失敗。再次匹配?"; "20.20.56_text_2" = "匹配失敗,您消耗的硬幣已返回您的錢包";