更新 LoginViewController 和 XPRoomViewController,调整布局约束和新增 CP 逻辑处理,优化数据解析和错误处理。为 MicMidpointRectManager 增加有效配对逻辑,确保中点矩形绘制的准确性。同时,更新多语言支持,补充缺失的翻译字符串,提升用户体验和代码可维护性。
This commit is contained in:
@@ -137,7 +137,7 @@ typedef NS_ENUM(NSUInteger, LoginType) {
|
||||
make.centerX.mas_equalTo(self.view);
|
||||
make.bottom.mas_equalTo(self.view).offset(-44);
|
||||
make.width.mas_lessThanOrEqualTo(self.view).offset(-32);
|
||||
make.height.mas_equalTo(60);
|
||||
// make.height.mas_equalTo(60);
|
||||
}];
|
||||
|
||||
[self.agreeButton mas_makeConstraints:^(MASConstraintMaker *make) {
|
||||
@@ -358,6 +358,7 @@ typedef NS_ENUM(NSUInteger, LoginType) {
|
||||
_policyLabel = [[YYLabel alloc] init];
|
||||
_policyLabel.font = kFontRegular(12);
|
||||
_policyLabel.numberOfLines = 0;
|
||||
_policyLabel.preferredMaxLayoutWidth = KScreenWidth-40;
|
||||
|
||||
NSMutableAttributedString *attString = [[NSMutableAttributedString alloc] initWithString:YMLocalizedString(@"XPLoginViewController6")];
|
||||
if ([[UIScreen mainScreen] bounds].size.width < 450 && (isMSPT() || isMSTR())) {
|
||||
|
@@ -127,6 +127,7 @@
|
||||
NSString * roomId = [NSString stringWithFormat:@"%ld", self.hostDelegate.getRoomInfo.uid];
|
||||
// NSLog(@"用户ID:%@,房间ID:%@, 游戏ID:%lld, code:%@", userId, roomId, self.currentmgId, self.code);
|
||||
|
||||
// TODO: 补充多语言
|
||||
NSString *language = @"en-US";
|
||||
if (isMSZH()) {
|
||||
language = @"zh-TW";
|
||||
|
@@ -92,7 +92,7 @@
|
||||
@"rightUid": @(rightUid)
|
||||
};
|
||||
|
||||
if (cpList.count < 2) {
|
||||
if (cpList.count == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -615,49 +615,55 @@
|
||||
return;
|
||||
}
|
||||
|
||||
// 遍历所有相邻的麦位对
|
||||
for (NSInteger i = 0; i < micCount - 1; i++) {
|
||||
NSInteger firstIndex = i;
|
||||
NSInteger secondIndex = i + 1;
|
||||
// 依据 stageView 类型获取有效的配对集合
|
||||
NSArray<NSArray<NSNumber *> *> *validPairs = nil;
|
||||
if ([stageView isKindOfClass:NSClassFromString(@"SocialStageView")]) {
|
||||
validPairs = @[@[@1,@2], @[@2,@3], @[@3,@4], @[@5,@6], @[@6,@7], @[@7,@8]];
|
||||
} else if ([stageView isKindOfClass:NSClassFromString(@"TenMicStageView")]) {
|
||||
validPairs = @[@[@0,@1], @[@1,@2], @[@2,@3], @[@3,@4], @[@5,@6], @[@6,@7], @[@7,@8], @[@8,@9]];
|
||||
} else if ([stageView isKindOfClass:NSClassFromString(@"FifteenMicStageView")]) {
|
||||
validPairs = @[@[@0,@1], @[@1,@2], @[@2,@3], @[@3,@4], @[@5,@6], @[@6,@7], @[@7,@8], @[@8,@9], @[@10,@11], @[@11,@12], @[@12,@13], @[@13,@14]];
|
||||
} else if ([stageView isKindOfClass:NSClassFromString(@"NineteenMicStageView")]) {
|
||||
validPairs = @[@[@0,@1], @[@1,@2], @[@2,@3], @[@3,@4], @[@5,@6], @[@8,@9], @[@10,@11], @[@12,@13], @[@14,@15], @[@15,@16], @[@16,@17], @[@17,@18]];
|
||||
} else if ([stageView isKindOfClass:NSClassFromString(@"TwentyMicStageView")]) {
|
||||
validPairs = @[@[@0,@1], @[@1,@2], @[@2,@3], @[@3,@4], @[@5,@6], @[@6,@7], @[@7,@8], @[@8,@9], @[@10,@11], @[@11,@12], @[@12,@13], @[@13,@14], @[@15,@16], @[@16,@17], @[@17,@18], @[@18,@19]];
|
||||
} else if ([stageView isKindOfClass:NSClassFromString(@"AnchorStageView")]) {
|
||||
validPairs = @[@[@1,@2], @[@2,@3]];
|
||||
} else if ([stageView isKindOfClass:NSClassFromString(@"DatingStageView")]) {
|
||||
validPairs = @[@[@1,@2], @[@3,@4], @[@5,@6], @[@7,@8]];
|
||||
} else if ([stageView isKindOfClass:NSClassFromString(@"LittleGameStageView")]
|
||||
|| [stageView isKindOfClass:NSClassFromString(@"LittleGameScrollStageView")]) {
|
||||
NSMutableArray *pairs = [NSMutableArray array];
|
||||
for (NSInteger i = 0; i < micCount - 1; i++) { [pairs addObject:@[@(i), @(i+1)]]; }
|
||||
validPairs = pairs;
|
||||
} else if ([stageView isKindOfClass:NSClassFromString(@"AnchorPKStageView")]) {
|
||||
validPairs = @[@[@0,@1]];
|
||||
} else {
|
||||
NSMutableArray *pairs = [NSMutableArray array];
|
||||
for (NSInteger i = 0; i < micCount - 1; i++) { [pairs addObject:@[@(i), @(i+1)]]; }
|
||||
validPairs = pairs;
|
||||
}
|
||||
|
||||
// 遍历所有有效配对
|
||||
for (NSArray<NSNumber *> *pair in validPairs) {
|
||||
NSInteger firstIndex = pair[0].integerValue;
|
||||
NSInteger secondIndex = pair[1].integerValue;
|
||||
|
||||
// 权威几何:从 stageView 获取中点矩形
|
||||
CGRect rect = CGRectZero;
|
||||
if ([stageView respondsToSelector:@selector(rectForMidpointBetweenMicAtIndex:andIndex:)]) {
|
||||
rect = (CGRect)[stageView rectForMidpointBetweenMicAtIndex:firstIndex andIndex:secondIndex];
|
||||
}
|
||||
if (CGRectIsEmpty(rect)) { continue; }
|
||||
|
||||
// 获取两个麦位的视图
|
||||
UIView<MicroViewProtocol> *firstView = [stageView findMicroViewByIndex:firstIndex];
|
||||
UIView<MicroViewProtocol> *secondView = [stageView findMicroViewByIndex:secondIndex];
|
||||
if (!firstView || !secondView) { continue; }
|
||||
|
||||
if (!firstView || !secondView) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 获取两个麦位的用户信息
|
||||
UserInfoModel *firstUser = [firstView getUser];
|
||||
UserInfoModel *secondUser = [secondView getUser];
|
||||
if (!firstUser || !secondUser || firstUser.uid <= 0 || secondUser.uid <= 0) { continue; }
|
||||
|
||||
if (!firstUser || !secondUser || firstUser.uid <= 0 || secondUser.uid <= 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// 计算中点矩形的位置和大小
|
||||
CGRect firstFrame = firstView.frame;
|
||||
CGRect secondFrame = secondView.frame;
|
||||
|
||||
CGFloat midX = (firstFrame.origin.x + firstFrame.size.width + secondFrame.origin.x) / 2.0;
|
||||
CGFloat midY = (firstFrame.origin.y + secondFrame.origin.y) / 2.0;
|
||||
CGFloat width = kGetScaleWidth(75);
|
||||
CGFloat height = width;
|
||||
|
||||
CGRect rect = CGRectMake(midX - width/2, midY - height/4, width, height);
|
||||
|
||||
// 创建关系视图
|
||||
UIView *micRelationshipView = [[UIView alloc] initWithFrame:rect];
|
||||
micRelationshipView.backgroundColor = [UIColor clearColor];
|
||||
micRelationshipView.userInteractionEnabled = NO;
|
||||
micRelationshipView.tag = 56002;
|
||||
|
||||
// 添加关系视图到容器
|
||||
[self.containerView addSubview:micRelationshipView];
|
||||
[self.midpointRects addObject:micRelationshipView];
|
||||
|
||||
// 添加关系并播放SVGA
|
||||
NSString *micPairText = [NSString stringWithFormat:@"%ld-%ld", (long)firstIndex, (long)secondIndex];
|
||||
[self addRelationshipAtFrame:rect
|
||||
micPairText:micPairText
|
||||
|
@@ -1779,6 +1779,7 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
||||
}
|
||||
[self dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
|
||||
-(void)getOnlineCount{
|
||||
@kWeakify(self);
|
||||
[Api requestRoomOnlineUserList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
|
||||
@@ -2154,6 +2155,29 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
||||
case NIMChatroomEventTypeKicked:
|
||||
case NIMChatroomEventTypeExit:
|
||||
onLineNumber -= 1;
|
||||
// 🔧 新增:若退出用户与CP相关,移除其CP SVGA并重绘
|
||||
if (content.source && content.source.userId.length > 0) {
|
||||
NSInteger exitUid = content.source.userId.integerValue;
|
||||
if (exitUid > 0) {
|
||||
[self removeCpDataForUids:@[@(exitUid)]];
|
||||
// 构造剩余在麦用户列表,触发一次 CP 刷新,等价于补充一次“下麦”的逻辑
|
||||
NSMutableDictionary<NSString *,MicroQueueModel *> *currentQueue = [self.stageView getMicroQueue];
|
||||
if (currentQueue) {
|
||||
NSMutableArray<NSString *> *remainingUids = [NSMutableArray array];
|
||||
for (NSString *positionKey in currentQueue.allKeys) {
|
||||
MicroQueueModel *micModel = currentQueue[positionKey];
|
||||
NSInteger uid = micModel.userInfo.uid;
|
||||
if (uid > 0 && uid != exitUid) {
|
||||
[remainingUids addObject:[NSString stringWithFormat:@"%ld", (long)uid]];
|
||||
}
|
||||
}
|
||||
if (remainingUids.count > 0) {
|
||||
[self.presenter micCpListByUidList:remainingUids];
|
||||
}
|
||||
}
|
||||
[self drawSocialStageMidpointRects];
|
||||
}
|
||||
}
|
||||
break;
|
||||
case NIMChatroomEventTypeQueueChange: // 麦序上下麦
|
||||
{
|
||||
@@ -2652,26 +2676,49 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
||||
return;
|
||||
}
|
||||
|
||||
NSDictionary *jsonDic = (NSDictionary *)attachment.data;
|
||||
NSString *jsonString = [jsonDic objectForKey:@"data"];
|
||||
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
|
||||
|
||||
NSError *error = nil;
|
||||
NSArray *dataArray = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];
|
||||
if (error) {
|
||||
NSLog(@"❌ 麦位关系CP消息:JSON解析失败 - %@", error.localizedDescription);
|
||||
return;
|
||||
// 兼容多种数据结构:
|
||||
// 1) attachment.data 为 NSDictionary,包含 key "data",其值可能为 NSString(JSON) 或 NSArray
|
||||
// 2) attachment.data 直接为 NSArray
|
||||
// 3) attachment.data 直接为 NSString(JSON)
|
||||
NSArray *dataArray = nil;
|
||||
id raw = attachment.data;
|
||||
if ([raw isKindOfClass:[NSDictionary class]]) {
|
||||
id inner = [(NSDictionary *)raw objectForKey:@"data"];
|
||||
if ([inner isKindOfClass:[NSArray class]]) {
|
||||
dataArray = (NSArray *)inner;
|
||||
} else if ([inner isKindOfClass:[NSString class]]) {
|
||||
NSData *jsonData = [(NSString *)inner dataUsingEncoding:NSUTF8StringEncoding];
|
||||
if (jsonData) {
|
||||
NSError *err = nil;
|
||||
id parsed = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&err];
|
||||
if (!err && [parsed isKindOfClass:[NSArray class]]) {
|
||||
dataArray = (NSArray *)parsed;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if ([raw isKindOfClass:[NSArray class]]) {
|
||||
dataArray = (NSArray *)raw;
|
||||
} else if ([raw isKindOfClass:[NSString class]]) {
|
||||
NSData *jsonData = [(NSString *)raw dataUsingEncoding:NSUTF8StringEncoding];
|
||||
if (jsonData) {
|
||||
NSError *err = nil;
|
||||
id parsed = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&err];
|
||||
if (!err && [parsed isKindOfClass:[NSArray class]]) {
|
||||
dataArray = (NSArray *)parsed;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (![dataArray isKindOfClass:[NSArray class]]) {
|
||||
NSLog(@"⚠️ 麦位关系CP消息:消息格式错误,跳过处理");
|
||||
NSLog(@"⚠️ 麦位关系CP消息:未能解析为数组,跳过处理");
|
||||
return;
|
||||
}
|
||||
|
||||
// 解析CP数据
|
||||
NSMutableArray<MicCpInfoModel *> *cpList = [NSMutableArray array];
|
||||
for (NSDictionary *cpDict in dataArray) {
|
||||
if ([cpDict isKindOfClass:[NSDictionary class]]) {
|
||||
for (id item in dataArray) {
|
||||
if ([item isKindOfClass:[NSDictionary class]]) {
|
||||
NSDictionary *cpDict = (NSDictionary *)item;
|
||||
MicCpInfoModel *cpInfo = [[MicCpInfoModel alloc] init];
|
||||
cpInfo.uid = [cpDict[@"uid"] integerValue];
|
||||
cpInfo.loverUid = [cpDict[@"loverUid"] integerValue];
|
||||
@@ -2685,14 +2732,24 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
||||
// 更新当前CP列表
|
||||
self.currentCpList = cpList.copy;
|
||||
|
||||
// 使用 MicMidpointRectManager 处理麦位关系CP消息
|
||||
// 使用 MicMidpointRectManager 更新缓存并重绘
|
||||
MicMidpointRectManager *manager = (MicMidpointRectManager *)[self.stageView performSelector:@selector(midpointRectManager)];
|
||||
if (manager) {
|
||||
[manager handleMicRelationshipCPMessage:cpList];
|
||||
NSInteger micCount = [self getMicCountForRoomType:self.roomInfo.type];
|
||||
[manager updateCpListCacheAndRedraw:cpList
|
||||
stageView:self.stageView
|
||||
micCount:micCount
|
||||
roomType:self.roomInfo.type];
|
||||
} else {
|
||||
// 退化:仅更新本地并重绘
|
||||
[self drawSocialStageMidpointRects];
|
||||
}
|
||||
|
||||
// 刷新CP SVGA显示
|
||||
[self drawSocialStageMidpointRects];
|
||||
// 🔧 补强:为了确保不遗漏其他CP(例如 a-b 与 b-c 同时存在),在接收10011后再拉一次当前麦上的完整CP
|
||||
NSMutableDictionary<NSString *,MicroQueueModel *> *currentQueue = [self.stageView getMicroQueue];
|
||||
if (currentQueue) {
|
||||
[self callMicCpListByUidListWithQueue:currentQueue];
|
||||
}
|
||||
|
||||
NSLog(@"🔧 麦位关系CP消息处理完成");
|
||||
}
|
||||
|
@@ -340,7 +340,14 @@ NSString * const kJPClose = @"newTppClose";
|
||||
lang = @"ar-EG";
|
||||
} else if (isMSPT()) {
|
||||
lang = @"pt-BR";
|
||||
} else if (isMSES()) {
|
||||
lang = @"pt-BR";
|
||||
} else if (isMSRU()) {
|
||||
lang = @"pt-BR";
|
||||
} else if (isMSUZ()) {
|
||||
lang = @"pt-BR";
|
||||
}
|
||||
// TODO: 补充多语言
|
||||
url = [url stringByAppendingFormat:@"%@lang=%@", mark, lang];
|
||||
return url;
|
||||
}
|
||||
|
@@ -2285,7 +2285,7 @@
|
||||
"XPLoginViewController3" = "Согласитесь по умолчанию и авторизуйте %@ для доступа к текущему номеру телефона";
|
||||
"XPLoginViewController4" = "Вход выполнен успешно";
|
||||
"XPLoginViewController5" = "Вход по номеру телефона";
|
||||
"XPLoginViewController6" = "Согласиться с Условиями обслуживания и Политикой конфиденциальности";
|
||||
"XPLoginViewController6" = "Согласиться с Условия обслуживания и Политика конфиденциальности";
|
||||
"XPLoginViewController7" = "Условия обслуживания";
|
||||
"XPLoginViewController8" = " и ";
|
||||
"XPLoginViewController9" = "Политика конфиденциальности";
|
||||
|
@@ -808,6 +808,197 @@
|
||||
"XPMineDataClanTableViewCell5" = "Hali hech qanday guildga a'zo emas";
|
||||
"XPMineDataClanTableViewCell6" = "Profil";
|
||||
"XPMineDataClanTableViewCell7" = "Burjalar:";
|
||||
// TODO: 漏的翻译 start
|
||||
"XPMineDataClanTableViewCell8" = "Birthday:";
|
||||
"XPMineDataClanTableViewCell9" = "Room:";
|
||||
"XPMineDataClanTableViewCell10" = "Guild:";
|
||||
"XPMineDataClanTableViewCell11" = "This user has not joined any room yet";
|
||||
"XPMineDataClanTableViewCell12" = "Not joined any room yet";
|
||||
"XPMineDataClanTableViewCell13" = "Region:";
|
||||
"XPMineDataClanTableViewCell14" = "More";
|
||||
|
||||
"XPMineUserInfoGiftWallViewController0" = "Gifts";
|
||||
"XPMineUserInfoGiftWallViewController1" = "Normal gifts";
|
||||
"XPMineUserInfoGiftWallViewController2" = "Lucky gifts";
|
||||
"XPMineUserInfoGiftWallViewController3" = "No photos yet";
|
||||
"XPMineUserInfoGiftWallViewController4" = "No gifts yet";
|
||||
|
||||
"XPMineUserInfoTableViewCell1" = "I am a default signature";
|
||||
"XPMineUserInfoTableViewCell2" = "Live";
|
||||
|
||||
|
||||
"XPMineVisitorEmptyTableViewCell0" = "No data";
|
||||
|
||||
"XPMineVisitorTableViewCell0" = "User nickname";
|
||||
|
||||
"XPMineRechargeTableViewCell0" = "Coins";
|
||||
|
||||
"XPMineUserInfoViewController0" = "Report";
|
||||
"XPMineUserInfoViewController1" = "Block User";
|
||||
"XPMineUserInfoViewController2" = "Remove from Blacklist";
|
||||
"XPMineUserInfoViewController3" = "By removing from blacklist, you will receive messages from this user as usual";
|
||||
"XPMineUserInfoViewController4" = "Add to Blacklist";
|
||||
"XPMineUserInfoViewController5" = "By adding to blacklist, you will no longer receive messages from this user";
|
||||
"XPMineUserInfoViewController6" = "Removed from blacklist successfully";
|
||||
"XPMineUserInfoViewController7" = "Added to blacklist successfully";
|
||||
"XPMineUserInfoViewController8" = "Chat";
|
||||
"XPMineUserInfoViewController9" = "Follow";
|
||||
"XPMineUserInfoViewController10" = "Following";
|
||||
"XPMineUserInfoViewController11" = "Profile";
|
||||
"XPMineUserInfoViewController12" = "Posts";
|
||||
"XPMineUserInfoViewController13" = "Gift Wall";
|
||||
|
||||
"XPMineUserInfoAlbumViewController0" = "My Albums";
|
||||
"XPMineUserInfoAlbumViewController1" = "Upload from Camera";
|
||||
"XPMineUserInfoAlbumViewController3" = "Camera access restricted. Tap OK to go to system settings";
|
||||
"XPMineUserInfoAlbumViewController5" = "Photo library access restricted. Tap OK to go to system settings";
|
||||
"XPMineUserInfoAlbumViewController6" = "Local Album";
|
||||
"XPMineUserInfoAlbumViewController8" = "Photo library access restricted. Tap OK to go to system settings";
|
||||
"XPMineUserInfoAlbumViewController10" = "Photo library access restricted. Tap OK to go to system settings";
|
||||
"XPMineUserInfoAlbumViewController11" = "You can only upload up to 8 photos";
|
||||
"XPMineUserInfoAlbumViewController12" = "Deletion is irreversible";
|
||||
"XPMineUserInfoAlbumViewController13" = "Do you want to delete?";
|
||||
"XPMineUserInfoAlbumViewController14" = "Photo under review, will be uploaded automatically after approval";
|
||||
"XPMineUserInfoAlbumViewController15" = "Deleted successfully";
|
||||
"XPMineUserInfoAlbumViewController16" = "Edit";
|
||||
"XPMineUserInfoAlbumViewController17" = "Done";
|
||||
|
||||
"XPMineUserDataViewController0" = "Application submitted, waiting for admin approval";
|
||||
"XPMineUserDataViewController1" = "Posts";
|
||||
"XPMineUserDataViewController2" = "Default posts cannot be liked";
|
||||
"XPMineUserDataViewController3" = "Default posts cannot be commented";
|
||||
|
||||
"XPMineSimpleUserInfoViewController0" = "Report";
|
||||
"XPMineSimpleUserInfoViewController1" = "We have received your request and will process it as soon as possible";
|
||||
"XPMineSimpleUserInfoViewController2" = "Block";
|
||||
"XPMineSimpleUserInfoViewController3" = "Remove from Blacklist";
|
||||
"XPMineSimpleUserInfoViewController4" = "By removing from blacklist, you will receive messages from this user as usual";
|
||||
"XPMineSimpleUserInfoViewController5" = "Add to Blacklist";
|
||||
"XPMineSimpleUserInfoViewController6" = "By adding to blacklist, you will no longer receive messages from this user";
|
||||
"XPMineSimpleUserInfoViewController7" = "Removed from blacklist successfully";
|
||||
"XPMineSimpleUserInfoViewController8" = "Added to blacklist successfully";
|
||||
"XPMineSimpleUserInfoViewController9" = "Chat with them";
|
||||
"XPMineSimpleUserInfoViewController10" = "Follow";
|
||||
"XPMineSimpleUserInfoViewController11" = "Following";
|
||||
|
||||
"XPMineUserInfoDesViewController0" = "Edit Personal Introduction";
|
||||
"XPMineUserInfoDesViewController1" = "Maximum %ld characters";
|
||||
"XPMineUserInfoDesViewController2" = "Write a self-introduction to let others know more about you~";
|
||||
"XPMineUserInfoDesViewController3" = "Done";
|
||||
|
||||
"XPMineUserInfoEditViewController0" = "Edit Profile";
|
||||
"XPMineUserInfoEditViewController1" = "Upload from Camera";
|
||||
"XPMineUserInfoEditViewController2" = "Camera unavailable";
|
||||
"XPMineUserInfoEditViewController3" = "Camera access restricted. Tap OK to go to system settings";
|
||||
"XPMineUserInfoEditViewController4" = "Camera unavailable";
|
||||
"XPMineUserInfoEditViewController5" = "Photo library access restricted. Tap OK to go to system settings";
|
||||
"XPMineUserInfoEditViewController6" = "Local Album";
|
||||
"XPMineUserInfoEditViewController7" = "Photo library access restricted. Tap OK to go to system settings";
|
||||
"XPMineUserInfoEditViewController8" = "Photo library access restricted. Tap OK to go to system settings";
|
||||
"XPMineUserInfoEditViewController9" = "Profile under review";
|
||||
"XPMineUserInfoEditViewController10" = "Profile under review, will be applied automatically after approval";
|
||||
"XPMineUserInfoEditViewController11" = "Updated successfully";
|
||||
"XPMineUserInfoEditViewController12" = "Avatar has been submitted for review, it will be automatically applied upon approval";
|
||||
"XPMineUserInfoEditViewController13" = "Update successful";
|
||||
|
||||
|
||||
"XPMineUserInfoNickViewController0" = "Edit Nickname";
|
||||
"XPMineUserInfoNickViewController1" = "Maximum character limit reached";
|
||||
"XPMineUserInfoNickViewController2" = "Maximum character limit reached";
|
||||
"XPMineUserInfoNickViewController3" = "Done";
|
||||
|
||||
"XPMineUserInfoGiftWallViewController0" = "Gifts";
|
||||
|
||||
|
||||
"XPMineVisitorViewController0" = "No more visitor records";
|
||||
"XPMineVisitorViewController1" = "Visitor records";
|
||||
"XPMineVisitorViewController2" = "No visitor records yet";
|
||||
|
||||
"XPMineViewController0" = "To create a safer online environment and protect your and others' property security, please complete real-name authentication first.";
|
||||
|
||||
"XPMineViewController2" = "Real-name Authentication";
|
||||
|
||||
"XPSimpleMineViewController0" = "You don't have any guild yet";
|
||||
"XPSimpleMineViewController1" = "My Guild";
|
||||
"XPSimpleMineViewController2" = "Personalize";
|
||||
"XPSimpleMineViewController3" = "Fan Clubs";
|
||||
"XPSimpleMineViewController4" = "Teen Mode";
|
||||
"XPSimpleMineViewController5" = "Feedback";
|
||||
"XPSimpleMineViewController6" = "Settings";
|
||||
|
||||
"XPIAPRechargeHeaderView0" = "My Coins";
|
||||
|
||||
"XPIAPRechargeViewController0" = "Purchase Failed";
|
||||
"XPIAPRechargeViewController1" = "Unknown error occurred, please try again";
|
||||
"XPIAPRechargeViewController2" = "Confirm Recharge";
|
||||
"XPIAPRechargeViewController3" = "《User Recharge Agreement》";
|
||||
"XPIAPRechargeViewController4" = "I have read and agree";
|
||||
"XPIAPRechargeViewController5" = "For any questions, please contact customer service, MoliStar ID";
|
||||
"XPIAPRechargeViewController6" = "My Account";
|
||||
"XPIAPRechargeViewController7" = "Reminder";
|
||||
"XPIAPRechargeViewController8" = "Recharge failed. Please contact customer service for assistance.";
|
||||
"XPIAPRechargeViewController9" = "Contact Customer Service";
|
||||
"XPIAPRechargeViewController10" = "Recharge failed. Currently only devices running iOS 15 and above can recharge. Please upgrade your system and try again.";
|
||||
"XPIAPRechargeViewController11" = "Please select the number of Coins to be recharged";
|
||||
|
||||
|
||||
"XPMineRechargeViewController0" = "Purchase Failed";
|
||||
"XPMineRechargeViewController1" = "Unknown error occurred, please try again";
|
||||
"XPMineRechargeViewController2" = "《User Recharge Agreement";
|
||||
"XPMineRechargeViewController3" = "I have read and agree";
|
||||
|
||||
"XPMinePayPwdViewController0" = "Set Payment Password";
|
||||
"XPMinePayPwdViewController1" = "Failed to get phone number";
|
||||
"XPMinePayPwdViewController2" = "Verification code sent successfully";
|
||||
"XPMinePayPwdViewController3" = "Payment password set successfully";
|
||||
"XPMinePayPwdViewController4" = "Payment password must be 6-digit number";
|
||||
"XPMinePayPwdViewController5" = "Payment password must be numeric";
|
||||
"XPMinePayPwdViewController6" = "Passwords entered do not match";
|
||||
"XPMinePayPwdViewController7" = "Enter verification code";
|
||||
|
||||
"XPMinePayPwdViewController9" = "Verification code sent to your bound phone %@****%@";
|
||||
"XPMinePayPwdViewController10" = "Enter payment password";
|
||||
"XPMinePayPwdViewController11" = "Confirm payment password";
|
||||
|
||||
"XPMineBlackListViewController0" = "Blacklist";
|
||||
"XPMineBlackListViewController1" = "Remove";
|
||||
|
||||
"XPMineResetPayPwdViewController0" = "Reset Payment Password";
|
||||
"XPMineResetPayPwdViewController1" = "Payment password reset successfully";
|
||||
"XPMineResetPayPwdViewController2" = "Passwords entered do not match";
|
||||
"XPMineResetPayPwdViewController3" = "Enter payment password";
|
||||
"XPMineResetPayPwdViewController4" = "Confirm payment password";
|
||||
|
||||
|
||||
"XPMineSettingViewController0" = "Settings";
|
||||
"XPMineSettingViewController1" = "Please bind your phone number first";
|
||||
"XPMineSettingViewController2" = "Clear Cache";
|
||||
"XPMineSettingViewController3" = "Do you want to clear cache?";
|
||||
"XPMineSettingViewController4" = "Cache cleared";
|
||||
"XPMineSettingViewController5" = "Currently updated to the latest version";
|
||||
"XPMineSettingViewController6" = "Currently updated to the latest version";
|
||||
"XPMineSettingViewController7" = "Log out of current account";
|
||||
"XPMineSettingViewController8" = "Log out";
|
||||
"XPMineSettingViewController9" = "Set Login Password";
|
||||
"XPMineSettingViewController10" = "To facilitate your next login, please set a login password first";
|
||||
|
||||
"XPMineModifPayPwdViewController0" = "Modify Payment Password";
|
||||
"XPMineModifPayPwdViewController1" = "Payment password modified successfully";
|
||||
"XPMineModifPayPwdViewController2" = "Passwords entered do not match";
|
||||
"XPMineModifPayPwdViewController3" = "New payment password must be numeric";
|
||||
"XPMineModifPayPwdViewController4" = "Enter current payment password";
|
||||
"XPMineModifPayPwdViewController5" = "Enter payment password";
|
||||
"XPMineModifPayPwdViewController6" = "Confirm payment password";
|
||||
|
||||
"XPMineModifPayPwdViewController8" = "Forgot Password";
|
||||
|
||||
"XPMineFeedbackViewController0" = "Feedback";
|
||||
"XPMineFeedbackViewController1" = "Thank you for your valuable feedback, let's work together to create a better";
|
||||
"XPMineFeedbackViewController2" = "Problem Description";
|
||||
"XPMineFeedbackViewController3" = "Please describe in detail the problems and situations you encountered. Thank you for your valuable feedback.";
|
||||
"XPMineFeedbackViewController4" = "Please enter your contact information";
|
||||
"XPMineFeedbackViewController5" = "Submit Feedback";
|
||||
// TODO: 漏的翻译 end
|
||||
|
||||
"XPMineAboutUsViewController0" = "Haqida";
|
||||
"XPMineNotificaViewController0" = "Bildirishnoma sozlamalari";
|
||||
@@ -2099,7 +2290,7 @@ Tasdiqlangandan so'ng, sekretar sizga uni chop etishda yordam beradi va sizni xa
|
||||
"XPLoginViewController3" = "Standartga rozi bo'ling va %@ ga joriy telefon raqamiga kirishga ruxsat bering";
|
||||
"XPLoginViewController4" = "Login successful";
|
||||
"XPLoginViewController5" = "Phone Number Login";
|
||||
"XPLoginViewController6" = "Foydalanuvchi xizmatlari shartlari va maxfiylik siyosatiga rozilik berish";
|
||||
"XPLoginViewController6" = "Foydalanuvchi xizmatlari shartlari va Maxfiylik siyosati rozilik berish";
|
||||
"XPLoginViewController7" = "Foydalanuvchi xizmatlari shartlari";
|
||||
"XPLoginViewController8" = " va ";
|
||||
"XPLoginViewController9" = "Maxfiylik siyosati";
|
||||
|
Reference in New Issue
Block a user