更新 XPMineUserInfoEditViewController 以支持 GIF 图像上传,修改视频时长检查逻辑,确保错误提示信息动态化,同时更新本地化字符串以反映视频时长的变化。
This commit is contained in:
@@ -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
|
||||
|
@@ -6,6 +6,7 @@
|
||||
//
|
||||
|
||||
#import "XPRoomViewController.h"
|
||||
#include <Foundation/NSObjCRuntime.h>
|
||||
///Third
|
||||
#import <Masonry/Masonry.h>
|
||||
#import <NIMSDK/NIMSDK.h>
|
||||
@@ -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<NSString *,MicroQueueModel *> *currentQueue = [self.stageView getMicroQueue];
|
||||
if (currentQueue) {
|
||||
NSMutableArray<NSString *> *remainingUids = [NSMutableArray array];
|
||||
@@ -3253,6 +3258,7 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
||||
}
|
||||
|
||||
- (void)miniRoom {
|
||||
self.isMinimizingRoom = YES;
|
||||
if(self.freeModel != nil){
|
||||
[XPRoomMiniManager shareManager].curState = self.freeModel.curStage;
|
||||
}
|
||||
|
@@ -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" = "فشلت المطابقة، تم إرجاع العملات التي استهلكتها إلى محفظتك";
|
||||
|
@@ -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";
|
||||
|
@@ -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";
|
||||
|
@@ -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.";
|
||||
|
@@ -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";
|
||||
|
@@ -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";
|
||||
|
@@ -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";
|
||||
|
@@ -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" = "匹配失敗,您消耗的硬幣已返回您的錢包";
|
||||
|
Reference in New Issue
Block a user