移除公共房间管理器中的配置更新通知逻辑,新增 RtcManager 的代理更新方法以支持动态代理切换,优化 StageViewManager 的清理逻辑,确保在清理过程中正确处理视图层级和内存管理,同时更新本地化字符串以提升用户体验。
This commit is contained in:
@@ -106,9 +106,6 @@
|
|||||||
|
|
||||||
self.configInfo = model;
|
self.configInfo = model;
|
||||||
|
|
||||||
// 通知公共房间管理器配置已更新
|
|
||||||
[[PublicRoomManager sharedManager] updateConfig];
|
|
||||||
|
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadAfterLoadConfig" object:nil];
|
[[NSNotificationCenter defaultCenter] postNotificationName:@"reloadAfterLoadConfig" object:nil];
|
||||||
|
|
||||||
[self requestFaceTabNewList];
|
[self requestFaceTabNewList];
|
||||||
|
@@ -139,6 +139,10 @@ typedef NS_ENUM(NSInteger, BackMusicPlayState) {
|
|||||||
- (NSInteger)loadUserSound;
|
- (NSInteger)loadUserSound;
|
||||||
|
|
||||||
@property (nonatomic,assign) BOOL broadcast;
|
@property (nonatomic,assign) BOOL broadcast;
|
||||||
|
|
||||||
|
// MARK: 指向实际使用的 stageView
|
||||||
|
- (void)updateDelegate:(id<RtcDelegate> _Nullable)delegate;
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
NS_ASSUME_NONNULL_END
|
NS_ASSUME_NONNULL_END
|
||||||
|
@@ -194,6 +194,10 @@ UIKIT_EXTERN NSString * kRoomBackMusicCaptureVolumeKey;
|
|||||||
_engineDelegate = delegate;
|
_engineDelegate = delegate;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)updateDelegate:(id<RtcDelegate> _Nullable)delegate {
|
||||||
|
_engineDelegate = delegate;
|
||||||
|
}
|
||||||
|
|
||||||
- (id<RtcInterface>)engine {
|
- (id<RtcInterface>)engine {
|
||||||
if (!_engine) {
|
if (!_engine) {
|
||||||
_engine = [[TRTCRtcImpl alloc] initWithDelegate:self];
|
_engine = [[TRTCRtcImpl alloc] initWithDelegate:self];
|
||||||
|
@@ -125,19 +125,11 @@
|
|||||||
#pragma mark - 私有方法
|
#pragma mark - 私有方法
|
||||||
|
|
||||||
- (void)tryEnterPublicRoom {
|
- (void)tryEnterPublicRoom {
|
||||||
NSLog(@"PublicRoomManager: 开始尝试进入公共房间");
|
|
||||||
NSLog(@"PublicRoomManager: 当前状态 - isInitialized: %@, isInPublicRoom: %@, currentPublicRoomId: %@",
|
|
||||||
self.isInitialized ? @"YES" : @"NO",
|
|
||||||
self.isInPublicRoom ? @"YES" : @"NO",
|
|
||||||
self.currentPublicRoomId ?: @"nil");
|
|
||||||
|
|
||||||
if (!self.isInitialized) {
|
if (!self.isInitialized) {
|
||||||
NSLog(@"PublicRoomManager: 管理器未初始化,无法进入公共房间");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!self.userInfo) {
|
if (!self.userInfo) {
|
||||||
NSLog(@"PublicRoomManager: 用户信息缺失,无法进入公共房间");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,29 +138,19 @@
|
|||||||
ClientDataModel *configInfo = [ClientConfig shareConfig].configInfo;
|
ClientDataModel *configInfo = [ClientConfig shareConfig].configInfo;
|
||||||
NSDictionary *publicChatRoomIdMap = configInfo.publicChatRoomIdMap;
|
NSDictionary *publicChatRoomIdMap = configInfo.publicChatRoomIdMap;
|
||||||
|
|
||||||
NSLog(@"PublicRoomManager: 配置信息 - partitionId: %@, configInfo: %@, publicChatRoomIdMap: %@",
|
|
||||||
partitionId ?: @"nil",
|
|
||||||
configInfo ? @"存在" : @"nil",
|
|
||||||
publicChatRoomIdMap ? @"存在" : @"nil");
|
|
||||||
|
|
||||||
if (!publicChatRoomIdMap) {
|
if (!publicChatRoomIdMap) {
|
||||||
NSLog(@"PublicRoomManager: 公共房间配置缺失");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!partitionId) {
|
if (!partitionId) {
|
||||||
NSLog(@"PublicRoomManager: 分区ID缺失");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSNumber *roomId = publicChatRoomIdMap[partitionId];
|
NSNumber *roomId = publicChatRoomIdMap[partitionId];
|
||||||
if (!roomId) {
|
if (!roomId) {
|
||||||
NSLog(@"PublicRoomManager: 未找到分区 %@ 对应的公共房间ID", partitionId);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSLog(@"PublicRoomManager: 尝试进入公共房间,分区ID: %@, 房间ID: %@", partitionId, roomId);
|
|
||||||
|
|
||||||
// 进入公共房间
|
// 进入公共房间
|
||||||
[self enterPublicRoomWithRoomId:roomId.stringValue completion:^(NSError * _Nullable error) {
|
[self enterPublicRoomWithRoomId:roomId.stringValue completion:^(NSError * _Nullable error) {
|
||||||
if (error) {
|
if (error) {
|
||||||
@@ -227,12 +209,10 @@
|
|||||||
@kStrongify(self);
|
@kStrongify(self);
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
if (error) {
|
if (error) {
|
||||||
NSLog(@"PublicRoomManager: 进入公共房间失败: %@", error);
|
|
||||||
if (completion) {
|
if (completion) {
|
||||||
completion(error);
|
completion(error);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
NSLog(@"PublicRoomManager: 进入公共房间成功,房间ID: %@", roomId);
|
|
||||||
self.isInPublicRoom = YES;
|
self.isInPublicRoom = YES;
|
||||||
self.currentPublicRoomId = roomId;
|
self.currentPublicRoomId = roomId;
|
||||||
if (completion) {
|
if (completion) {
|
||||||
@@ -253,20 +233,15 @@
|
|||||||
if (completion) {
|
if (completion) {
|
||||||
completion(error);
|
completion(error);
|
||||||
}
|
}
|
||||||
return;
|
} else if (self.isInPublicRoom) {
|
||||||
}
|
|
||||||
|
|
||||||
if (self.isInPublicRoom) {
|
|
||||||
NSLog(@"PublicRoomManager: 已在公共房间中");
|
|
||||||
if (completion) {
|
if (completion) {
|
||||||
completion(nil);
|
completion(nil);
|
||||||
}
|
}
|
||||||
return;
|
} else {
|
||||||
|
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
||||||
|
[self tryEnterPublicRoom];
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
|
|
||||||
[self tryEnterPublicRoom];
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)exitPublicRoomWithCompletion:(void(^)(NSError * _Nullable error))completion {
|
- (void)exitPublicRoomWithCompletion:(void(^)(NSError * _Nullable error))completion {
|
||||||
@@ -285,9 +260,9 @@
|
|||||||
@kStrongify(self);
|
@kStrongify(self);
|
||||||
dispatch_async(dispatch_get_main_queue(), ^{
|
dispatch_async(dispatch_get_main_queue(), ^{
|
||||||
if (error) {
|
if (error) {
|
||||||
NSLog(@"PublicRoomManager: 退出公共房间失败: %@", error);
|
// NSLog(@"PublicRoomManager: 退出公共房间失败: %@", error);
|
||||||
} else {
|
} else {
|
||||||
NSLog(@"PublicRoomManager: 退出公共房间成功");
|
// NSLog(@"PublicRoomManager: 退出公共房间成功");
|
||||||
self.isInPublicRoom = NO;
|
self.isInPublicRoom = NO;
|
||||||
self.currentPublicRoomId = nil;
|
self.currentPublicRoomId = nil;
|
||||||
}
|
}
|
||||||
@@ -301,69 +276,23 @@
|
|||||||
#pragma mark - 用户信息更新处理
|
#pragma mark - 用户信息更新处理
|
||||||
|
|
||||||
- (void)updateUserInfo:(UserInfoModel *)userInfo {
|
- (void)updateUserInfo:(UserInfoModel *)userInfo {
|
||||||
NSLog(@"PublicRoomManager: 开始更新用户信息");
|
|
||||||
NSLog(@"PublicRoomManager: 用户信息 - uid: %ld, partitionId: %@",
|
|
||||||
userInfo.uid, userInfo.partitionId ?: @"nil");
|
|
||||||
|
|
||||||
if (!userInfo) {
|
if (!userInfo) {
|
||||||
NSLog(@"PublicRoomManager: 用户信息为空,更新失败");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!userInfo.partitionId) {
|
if (!userInfo.partitionId) {
|
||||||
NSLog(@"PublicRoomManager: 用户分区ID缺失,更新失败");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 检查用户是否切换
|
// 检查用户是否切换
|
||||||
if (self.currentUserId && ![self.currentUserId isEqualToString:[NSString stringWithFormat:@"%ld", userInfo.uid]]) {
|
if (self.currentUserId && ![self.currentUserId isEqualToString:[NSString stringWithFormat:@"%ld", userInfo.uid]]) {
|
||||||
NSLog(@"PublicRoomManager: 检测到用户切换,重置管理器");
|
|
||||||
[self reset];
|
[self reset];
|
||||||
}
|
}
|
||||||
|
|
||||||
self.userInfo = userInfo;
|
self.userInfo = userInfo;
|
||||||
self.currentUserId = [NSString stringWithFormat:@"%ld", userInfo.uid];
|
self.currentUserId = [NSString stringWithFormat:@"%ld", userInfo.uid];
|
||||||
if (![self checkConfigPublicRoomID:@(userInfo.uid).stringValue]) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
NSLog(@"PublicRoomManager: 用户信息更新完成 - currentUserId: %@, isInitialized: %@, isInPublicRoom: %@",
|
|
||||||
self.currentUserId,
|
|
||||||
self.isInitialized ? @"YES" : @"NO",
|
|
||||||
self.isInPublicRoom ? @"YES" : @"NO");
|
|
||||||
|
|
||||||
// 注释掉自动进入房间逻辑,改为统一入口控制
|
|
||||||
// 如果已初始化但未在公共房间,尝试进入
|
|
||||||
// if (self.isInitialized && !self.isInPublicRoom) {
|
|
||||||
// NSLog(@"PublicRoomManager: 条件满足,开始尝试进入公共房间");
|
|
||||||
// [self tryEnterPublicRoom];
|
|
||||||
// } else {
|
|
||||||
// NSLog(@"PublicRoomManager: 条件不满足,跳过进入公共房间 - isInitialized: %@, isInPublicRoom: %@",
|
|
||||||
// self.isInitialized ? @"YES" : @"NO",
|
|
||||||
// self.isInPublicRoom ? @"YES" : @"NO");
|
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#pragma mark - 配置更新处理
|
|
||||||
|
|
||||||
- (void)updateConfig {
|
|
||||||
if (!self.isInitialized) {
|
|
||||||
NSLog(@"PublicRoomManager: 未初始化,跳过配置更新");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientDataModel *configInfo = [ClientConfig shareConfig].configInfo;
|
|
||||||
if (!configInfo || !configInfo.publicChatRoomIdMap) {
|
|
||||||
NSLog(@"PublicRoomManager: 配置信息不完整,跳过配置更新");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 注释掉自动进入房间逻辑,改为统一入口控制
|
|
||||||
// 如果未在公共房间,尝试进入
|
|
||||||
// if (!self.isInPublicRoom) {
|
|
||||||
// [self tryEnterPublicRoom];
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma mark - NIMChatRoomManagerDelegate
|
#pragma mark - NIMChatRoomManagerDelegate
|
||||||
#define ConnectionStateStyleString(enum) \
|
#define ConnectionStateStyleString(enum) \
|
||||||
|
@@ -160,7 +160,7 @@
|
|||||||
|
|
||||||
- (void)setupUnderstandButton {
|
- (void)setupUnderstandButton {
|
||||||
self.understandButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
self.understandButton = [UIButton buttonWithType:UIButtonTypeCustom];
|
||||||
[self.understandButton setTitle:@"I understand" forState:UIControlStateNormal];
|
[self.understandButton setTitle:YMLocalizedString(@"PKIDLoginViewController4") forState:UIControlStateNormal];
|
||||||
[self.understandButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
|
[self.understandButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
|
||||||
self.understandButton.titleLabel.font = [UIFont boldSystemFontOfSize:18.0];
|
self.understandButton.titleLabel.font = [UIFont boldSystemFontOfSize:18.0];
|
||||||
self.understandButton.backgroundColor = [UIColor colorWithRed:1.0 green:0.5 blue:0.0 alpha:1.0]; // 橙色
|
self.understandButton.backgroundColor = [UIColor colorWithRed:1.0 green:0.5 blue:0.0 alpha:1.0]; // 橙色
|
||||||
|
@@ -75,10 +75,31 @@
|
|||||||
|
|
||||||
- (void)cleanup {
|
- (void)cleanup {
|
||||||
if (self.currentStageView) {
|
if (self.currentStageView) {
|
||||||
[self.currentStageView removeFromSuperview];
|
NSLog(@"🧹 StageViewManager: 开始清理 stageView | Type: %ld | Class: %@",
|
||||||
|
(long)self.currentRoomType, NSStringFromClass([self.currentStageView class]));
|
||||||
|
|
||||||
|
// 1. 通知 stageView 进行清理操作
|
||||||
|
if ([self.currentStageView respondsToSelector:@selector(exitNIMRoom)]) {
|
||||||
|
[self.currentStageView exitNIMRoom];
|
||||||
|
NSLog(@"🧹 StageViewManager: 已调用 stageView.exitNIMRoom");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 移除所有子视图引用
|
||||||
|
if (self.currentStageView.superview) {
|
||||||
|
[self.currentStageView removeFromSuperview];
|
||||||
|
NSLog(@"🧹 StageViewManager: stageView 已从 superview 移除");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3. 清空所有子视图
|
||||||
|
[self.currentStageView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];
|
||||||
|
|
||||||
|
// 4. 释放 stageView 实例
|
||||||
self.currentStageView = nil;
|
self.currentStageView = nil;
|
||||||
NSLog(@"🧹 StageViewManager: 清理 stageView");
|
NSLog(@"🧹 StageViewManager: stageView 清理完成");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 5. 清空容器引用
|
||||||
|
self.container = nil;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (BOOL)shouldChangeStageViewType:(RoomType)newType {
|
- (BOOL)shouldChangeStageViewType:(RoomType)newType {
|
||||||
@@ -127,7 +148,10 @@
|
|||||||
self.currentStageView = [[TenMicStageView alloc] initWithDelegate:delegate];
|
self.currentStageView = [[TenMicStageView alloc] initWithDelegate:delegate];
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case RoomType_Room: // RoomType_Game
|
case RoomType_Room: { // RoomType_Game
|
||||||
|
self.currentStageView = [[SocialStageView alloc] initWithDelegate:delegate];
|
||||||
|
break;
|
||||||
|
}
|
||||||
default: {
|
default: {
|
||||||
self.currentStageView = [[SocialStageView alloc] initWithDelegate:delegate];
|
self.currentStageView = [[SocialStageView alloc] initWithDelegate:delegate];
|
||||||
break;
|
break;
|
||||||
|
@@ -138,10 +138,10 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
///坑位信息
|
///坑位信息
|
||||||
@property (nonatomic,strong) StageView *stageView;
|
@property (nonatomic,strong) StageView *stageView;
|
||||||
@property (nonatomic,strong) StageViewManager *stageViewManager;
|
@property (nonatomic,strong) StageViewManager *stageViewManager;
|
||||||
@property (nonatomic,strong) TenMicStageView *tenMicStageView;
|
//@property (nonatomic,strong) TenMicStageView *tenMicStageView;
|
||||||
@property (nonatomic,strong) FifteenMicStageView *fifteenMicStageView;
|
//@property (nonatomic,strong) FifteenMicStageView *fifteenMicStageView;
|
||||||
@property (nonatomic,strong) TwentyMicStageView *twentyMicStageView;
|
//@property (nonatomic,strong) TwentyMicStageView *twentyMicStageView;
|
||||||
@property(nonatomic, strong) NineteenMicStageView *nineteenMicStageView;
|
//@property(nonatomic, strong) NineteenMicStageView *nineteenMicStageView;
|
||||||
///公屏
|
///公屏
|
||||||
@property (nonatomic,strong) MsRoomMessageMainView *messageContainerView;
|
@property (nonatomic,strong) MsRoomMessageMainView *messageContainerView;
|
||||||
///快捷发言
|
///快捷发言
|
||||||
@@ -483,7 +483,7 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
// 添加公共房间消息转发通知监听
|
// 添加公共房间消息转发通知监听
|
||||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||||
selector:@selector(handlePublicRoomMessageForward:)
|
selector:@selector(handlePublicRoomMessageForward:)
|
||||||
name:@"MessageFromPublicRoomWithAttachmentNotification"
|
name:kMessageFromPublicRoomWithAttachmentNotification
|
||||||
object:nil];
|
object:nil];
|
||||||
|
|
||||||
// 添加应用生命周期保护
|
// 添加应用生命周期保护
|
||||||
@@ -958,6 +958,7 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
delegate:self];
|
delegate:self];
|
||||||
if (success) {
|
if (success) {
|
||||||
self.stageView = self.stageViewManager.currentStageView;
|
self.stageView = self.stageViewManager.currentStageView;
|
||||||
|
[[RtcManager instance] updateDelegate:self.stageView];
|
||||||
if (self.stageView) {
|
if (self.stageView) {
|
||||||
NSLog(@"🔧 updateStageView: StageViewManager 设置 alpha = 0 (之前 = %.2f)", self.stageView.alpha);
|
NSLog(@"🔧 updateStageView: StageViewManager 设置 alpha = 0 (之前 = %.2f)", self.stageView.alpha);
|
||||||
self.stageView.alpha = 0;
|
self.stageView.alpha = 0;
|
||||||
@@ -1025,8 +1026,11 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
NSLog(@"❌ changeStageViewOnRoomUpdate: updateStageView 失败");
|
NSLog(@"❌ changeStageViewOnRoomUpdate: updateStageView 失败");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
NSLog(@"✅ changeStageViewOnRoomUpdate: updateStageView 成功,当前 alpha = %.2f", self.stageView.alpha);
|
NSLog(@"✅ changeStageViewOnRoomUpdate: updateStageView 成功,当前 alpha = %.2f", self.stageView.alpha);
|
||||||
|
|
||||||
|
// 🔧 新增:检查是否有重复的 StageView 实例
|
||||||
|
[self checkForDuplicateStageViews];
|
||||||
|
|
||||||
// 🔧 新增:发送房间类型变化通知
|
// 🔧 新增:发送房间类型变化通知
|
||||||
[[NSNotificationCenter defaultCenter] postNotificationName:@"RoomTypeChanged"
|
[[NSNotificationCenter defaultCenter] postNotificationName:@"RoomTypeChanged"
|
||||||
@@ -1058,6 +1062,7 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
|
|
||||||
NSLog(@"🔧 changeStageViewOnRoomUpdate: 设置 stageView.alpha = 1 (之前 = %.2f)", self.stageView.alpha);
|
NSLog(@"🔧 changeStageViewOnRoomUpdate: 设置 stageView.alpha = 1 (之前 = %.2f)", self.stageView.alpha);
|
||||||
self.stageView.alpha = 1;
|
self.stageView.alpha = 1;
|
||||||
|
[[RtcManager instance] updateDelegate:(id<RtcDelegate>)self.stageView];
|
||||||
NSLog(@"✅ changeStageViewOnRoomUpdate: stageView.alpha 已设置为 1");
|
NSLog(@"✅ changeStageViewOnRoomUpdate: stageView.alpha 已设置为 1");
|
||||||
|
|
||||||
// 调试:检查最终状态
|
// 调试:检查最终状态
|
||||||
@@ -1144,6 +1149,51 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
}
|
}
|
||||||
|
|
||||||
- (void)changeStageViewOnAnchorRoom {
|
- (void)changeStageViewOnAnchorRoom {
|
||||||
|
// 🔧 内存管理:清理旧的 stageView 实例
|
||||||
|
if (self.stageView && self.stageView.superview && self.stageViewManager.currentStageView != self.stageView) {
|
||||||
|
NSLog(@"🧹 changeStageViewOnAnchorRoom: 清理旧的 stageView 实例");
|
||||||
|
[self.stageView removeFromSuperview];
|
||||||
|
self.stageView = nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用 StageViewManager 来管理个播房间的 stageView 切换
|
||||||
|
if (self.stageViewManager) {
|
||||||
|
NSLog(@"🔧 changeStageViewOnAnchorRoom: 使用 StageViewManager 进行个播房间切换");
|
||||||
|
BOOL success = [self.stageViewManager updateStageViewForRoomType:RoomType_Anchor
|
||||||
|
roomInfo:self.roomInfo
|
||||||
|
container:self.anchorScrollView
|
||||||
|
delegate:self];
|
||||||
|
if (success) {
|
||||||
|
self.stageView = self.stageViewManager.currentStageView;
|
||||||
|
if (self.stageView) {
|
||||||
|
NSLog(@"✅ changeStageViewOnAnchorRoom: StageViewManager 成功切换 stageView: %@", NSStringFromClass([self.stageView class]));
|
||||||
|
|
||||||
|
// 确保 stageView 添加到正确的位置
|
||||||
|
if (!self.stageView.superview) {
|
||||||
|
[self.anchorScrollView insertSubview:self.stageView belowSubview:self.roomHeaderView];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 重新设置约束
|
||||||
|
[self.stageView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||||
|
make.leading.trailing.mas_equalTo(self.anchorScrollView.middleImageView);
|
||||||
|
make.top.mas_equalTo(self.roomHeaderView.mas_bottom);
|
||||||
|
make.height.mas_equalTo(self.stageView.hightForStageView);
|
||||||
|
}];
|
||||||
|
|
||||||
|
// 重新设置其他相关视图的约束
|
||||||
|
[self updateAnchorRoomLayout];
|
||||||
|
[[RtcManager instance] updateDelegate:(id<RtcDelegate>)self.stageView];
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NSLog(@"⚠️ changeStageViewOnAnchorRoom: StageViewManager 切换失败,尝试降级逻辑");
|
||||||
|
}
|
||||||
|
|
||||||
|
// 🔧 新增:检查是否有重复的 StageView 实例
|
||||||
|
[self checkForDuplicateStageViews];
|
||||||
|
|
||||||
|
// 降级逻辑:直接创建 stageView(保持原有逻辑作为兜底)
|
||||||
|
NSLog(@"🔧 changeStageViewOnAnchorRoom: 使用降级逻辑创建 stageView");
|
||||||
if (self.roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode && ![self.stageView isKindOfClass:[AnchorPKStageView class]]) {
|
if (self.roomInfo.roomModeType == RoomModeType_Open_AcrossRoomPK_mode && ![self.stageView isKindOfClass:[AnchorPKStageView class]]) {
|
||||||
[self.stageView removeFromSuperview];
|
[self.stageView removeFromSuperview];
|
||||||
self.stageView = nil;
|
self.stageView = nil;
|
||||||
@@ -1156,19 +1206,25 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
if (!self.stageView.superview) {
|
if (!self.stageView.superview) {
|
||||||
[self.anchorScrollView insertSubview:self.stageView belowSubview:self.roomHeaderView];
|
[self.anchorScrollView insertSubview:self.stageView belowSubview:self.roomHeaderView];
|
||||||
}
|
}
|
||||||
|
|
||||||
[self.stageView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
[self.stageView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||||
make.leading.trailing.mas_equalTo(self.anchorScrollView.middleImageView);
|
make.leading.trailing.mas_equalTo(self.anchorScrollView.middleImageView);
|
||||||
make.top.mas_equalTo(self.roomHeaderView.mas_bottom);
|
make.top.mas_equalTo(self.roomHeaderView.mas_bottom);
|
||||||
make.height.mas_equalTo(self.stageView.hightForStageView);
|
make.height.mas_equalTo(self.stageView.hightForStageView);
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
[self updateAnchorRoomLayout];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 提取个播房间的布局更新逻辑,便于复用
|
||||||
|
- (void)updateAnchorRoomLayout {
|
||||||
[self.messageContainerView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
[self.messageContainerView mas_remakeConstraints:^(MASConstraintMaker *make) {
|
||||||
make.top.mas_equalTo(self.stageView.mas_bottom);
|
make.top.mas_equalTo(self.stageView.mas_bottom);
|
||||||
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).mas_offset(-5);
|
make.bottom.mas_equalTo(self.quickMessageContainerView.mas_top).mas_offset(-5);
|
||||||
make.leading.mas_equalTo(self.anchorScrollView.middleImageView);
|
make.leading.mas_equalTo(self.anchorScrollView.middleImageView);
|
||||||
make.trailing.mas_equalTo(self.sideMenu.mas_leading).offset(-10);
|
make.trailing.mas_equalTo(self.sideMenu.mas_leading).offset(-10);
|
||||||
}];
|
}];
|
||||||
|
|
||||||
CGFloat quickMsgHeight = 30;
|
CGFloat quickMsgHeight = 30;
|
||||||
//记录最后关闭时间
|
//记录最后关闭时间
|
||||||
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
|
||||||
@@ -2096,22 +2152,6 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
|
|
||||||
NSLog(@"[Recv] --- Message Raw Attach Content: %@, %@, %ld", @(message.senderClientType), message.rawAttachContent, (long)message.messageType);
|
NSLog(@"[Recv] --- Message Raw Attach Content: %@, %@, %ld", @(message.senderClientType), message.rawAttachContent, (long)message.messageType);
|
||||||
|
|
||||||
// 全服礼物/游戏飘屏按 TurboModeStateManager 的房间开关控制
|
|
||||||
NSString *currentRoomIdForTurbo = @(self.roomInfo.roomId).stringValue;
|
|
||||||
BOOL containsAllRoomMsg = [message.rawAttachContent containsString:@"\"allRoomMsg\":1"]; // 全服礼物飘屏标记
|
|
||||||
BOOL containsAllGameMsg = [message.rawAttachContent containsString:@"\"allGameMsg\":1"]; // 预留:全服游戏飘屏标记
|
|
||||||
if (containsAllRoomMsg || containsAllGameMsg) {
|
|
||||||
BOOL allowGiftScreen = [[TurboModeStateManager sharedManager] isGlobalGiftScreenEnabledForRoom:currentRoomIdForTurbo];
|
|
||||||
BOOL allowGameScreen = [[TurboModeStateManager sharedManager] isGlobalGameScreenEnabledForRoom:currentRoomIdForTurbo];
|
|
||||||
if ((containsAllRoomMsg && !allowGiftScreen) || (containsAllGameMsg && !allowGameScreen)) {
|
|
||||||
NSLog(@"[Recv] ⛔️ 按 TurboMode 屏蔽全服飘屏 | gift=%@ game=%@ | roomId=%@",
|
|
||||||
allowGiftScreen ? @"ON" : @"OFF",
|
|
||||||
allowGameScreen ? @"ON" : @"OFF",
|
|
||||||
currentRoomIdForTurbo);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (message.messageType == NIMMessageTypeNotification) {
|
if (message.messageType == NIMMessageTypeNotification) {
|
||||||
[self handleNIMNotificationTypeMessage:message];
|
[self handleNIMNotificationTypeMessage:message];
|
||||||
} else if (message.messageType == NIMMessageTypeCustom) {
|
} else if (message.messageType == NIMMessageTypeCustom) {
|
||||||
@@ -2364,19 +2404,19 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
} else if (self.roomInfo.type == RoomType_20Mic) {
|
} else if (self.roomInfo.type == RoomType_20Mic) {
|
||||||
[self __layoutTwentyMicStage];
|
[self __layoutTwentyMicStage];
|
||||||
[self changeStageViewOnRoomUpdate];
|
[self changeStageViewOnRoomUpdate];
|
||||||
[self.twentyMicStageView onRoomUpdate];
|
// [self.twentyMicStageView onRoomUpdate];
|
||||||
} else if (self.roomInfo.type == RoomType_19Mic) {
|
} else if (self.roomInfo.type == RoomType_19Mic) {
|
||||||
[self __layoutNineteenMicStage];
|
[self __layoutNineteenMicStage];
|
||||||
[self changeStageViewOnRoomUpdate];
|
[self changeStageViewOnRoomUpdate];
|
||||||
[self.nineteenMicStageView onRoomUpdate];
|
// [self.nineteenMicStageView onRoomUpdate];
|
||||||
} else if (self.roomInfo.type == RoomType_15Mic) {
|
} else if (self.roomInfo.type == RoomType_15Mic) {
|
||||||
[self __layoutFifteenMicStage];
|
[self __layoutFifteenMicStage];
|
||||||
[self changeStageViewOnRoomUpdate];
|
[self changeStageViewOnRoomUpdate];
|
||||||
[self.fifteenMicStageView onRoomUpdate];
|
// [self.fifteenMicStageView onRoomUpdate];
|
||||||
} else if (self.roomInfo.type == RoomType_10Mic) {
|
} else if (self.roomInfo.type == RoomType_10Mic) {
|
||||||
[self __layoutTenMicStage];
|
[self __layoutTenMicStage];
|
||||||
[self changeStageViewOnRoomUpdate];
|
[self changeStageViewOnRoomUpdate];
|
||||||
[self.tenMicStageView onRoomUpdate];
|
// [self.tenMicStageView onRoomUpdate];
|
||||||
} else {
|
} else {
|
||||||
[self changeStageViewOnRoomUpdate];
|
[self changeStageViewOnRoomUpdate];
|
||||||
}
|
}
|
||||||
@@ -3612,48 +3652,52 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
return _functionView;
|
return _functionView;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (StageView *)stageView {
|
//- (StageView *)stageView {
|
||||||
// 🔧 修改:如果 StageViewManager 已初始化,返回其管理的 stageView
|
// // 🔧 修改:如果 StageViewManager 已初始化,返回其管理的 stageView
|
||||||
if (self.stageViewManager && self.stageViewManager.currentStageView) {
|
// if (self.stageViewManager && self.stageViewManager.currentStageView) {
|
||||||
return self.stageViewManager.currentStageView;
|
// NSLog(@"🔍 stageView getter: 返回 StageViewManager 的 currentStageView | Class: %@",
|
||||||
}
|
// NSStringFromClass([self.stageViewManager.currentStageView class]));
|
||||||
|
// return self.stageViewManager.currentStageView;
|
||||||
// 🔧 降级:只有在 StageViewManager 不可用时才创建默认的 SocialStageView
|
// }
|
||||||
if (!_stageView) {
|
//
|
||||||
_stageView = [[SocialStageView alloc] initWithDelegate:self];
|
// // 🔧 降级:只有在 StageViewManager 不可用时才创建默认的 SocialStageView
|
||||||
_stageView.alpha = 0;
|
// if (!_stageView) {
|
||||||
NSLog(@"⚠️ 使用降级 stageView: SocialStageView");
|
// NSLog(@"🔍 stageView getter: 创建降级 SocialStageView");
|
||||||
}
|
// _stageView = [[SocialStageView alloc] initWithDelegate:self];
|
||||||
return _stageView;
|
// _stageView.alpha = 0;
|
||||||
}
|
// NSLog(@"⚠️ stageView getter: 降级 SocialStageView 创建完成 | Class: %@",
|
||||||
|
// NSStringFromClass([_stageView class]));
|
||||||
|
// }
|
||||||
|
// return _stageView;
|
||||||
|
//}
|
||||||
|
|
||||||
- (TenMicStageView *)tenMicStageView {
|
//- (TenMicStageView *)tenMicStageView {
|
||||||
if (!_tenMicStageView) {
|
// if (!_tenMicStageView) {
|
||||||
_tenMicStageView = [[TenMicStageView alloc] initWithDelegate:self];
|
// _tenMicStageView = [[TenMicStageView alloc] initWithDelegate:self];
|
||||||
}
|
// }
|
||||||
return _tenMicStageView;
|
// return _tenMicStageView;
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
- (NineteenMicStageView *)nineteenMicStageView {
|
//- (NineteenMicStageView *)nineteenMicStageView {
|
||||||
if (!_nineteenMicStageView) {
|
// if (!_nineteenMicStageView) {
|
||||||
_nineteenMicStageView = [[NineteenMicStageView alloc] initWithDelegate:self];
|
// _nineteenMicStageView = [[NineteenMicStageView alloc] initWithDelegate:self];
|
||||||
}
|
// }
|
||||||
return _nineteenMicStageView;
|
// return _nineteenMicStageView;
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
- (TwentyMicStageView *)twentyMicStageView {
|
//- (TwentyMicStageView *)twentyMicStageView {
|
||||||
if (!_twentyMicStageView) {
|
// if (!_twentyMicStageView) {
|
||||||
_twentyMicStageView = [[TwentyMicStageView alloc] initWithDelegate:self];
|
// _twentyMicStageView = [[TwentyMicStageView alloc] initWithDelegate:self];
|
||||||
}
|
// }
|
||||||
return _twentyMicStageView;
|
// return _twentyMicStageView;
|
||||||
}
|
//}
|
||||||
|
//
|
||||||
- (FifteenMicStageView *)fifteenMicStageView {
|
//- (FifteenMicStageView *)fifteenMicStageView {
|
||||||
if (!_fifteenMicStageView) {
|
// if (!_fifteenMicStageView) {
|
||||||
_fifteenMicStageView = [[FifteenMicStageView alloc] initWithDelegate:self];
|
// _fifteenMicStageView = [[FifteenMicStageView alloc] initWithDelegate:self];
|
||||||
}
|
// }
|
||||||
return _fifteenMicStageView;
|
// return _fifteenMicStageView;
|
||||||
}
|
//}
|
||||||
|
|
||||||
- (XPRoomLittleGameContainerView *)littleGameView {
|
- (XPRoomLittleGameContainerView *)littleGameView {
|
||||||
if (!_littleGameView) {
|
if (!_littleGameView) {
|
||||||
@@ -3724,12 +3768,18 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject;
|
NIMNotificationObject *notiMsg = (NIMNotificationObject *)message.messageObject;
|
||||||
if ([notiMsg respondsToSelector:@selector(content)]) {
|
if ([notiMsg respondsToSelector:@selector(content)]) {
|
||||||
NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content;
|
NIMChatroomNotificationContent *content = (NIMChatroomNotificationContent *)notiMsg.content;
|
||||||
|
// 忽略离房事件
|
||||||
if (content.eventType == NIMChatroomEventTypeExit || content.eventType == NIMChatroomEventTypeKicked) {
|
if (content.eventType == NIMChatroomEventTypeExit || content.eventType == NIMChatroomEventTypeKicked) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ([message.rawAttachContent.lowercaseString containsString:@"allroommsg"]) {
|
||||||
|
// 忽略与公聊房的重复事件
|
||||||
|
NSLog(@"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (message.messageType) {
|
switch (message.messageType) {
|
||||||
case NIMMessageTypeNotification:
|
case NIMMessageTypeNotification:
|
||||||
@@ -3779,6 +3829,59 @@ XPCandyTreeInsufficientBalanceViewDelegate>
|
|||||||
NSLog(@" - stageView.class: %@", NSStringFromClass([self.stageView class]));
|
NSLog(@" - stageView.class: %@", NSStringFromClass([self.stageView class]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 检查是否有多余的 StageView 实例
|
||||||
|
- (void)checkForDuplicateStageViews {
|
||||||
|
NSMutableArray<StageView *> *stageViews = [NSMutableArray array];
|
||||||
|
NSMutableArray<StageView *> *duplicateViews = [NSMutableArray array];
|
||||||
|
|
||||||
|
// 收集所有 StageView 实例
|
||||||
|
NSArray *allViews = [self.view subviews];
|
||||||
|
for (UIView *view in allViews) {
|
||||||
|
if ([view isKindOfClass:[StageView class]]) {
|
||||||
|
[stageViews addObject:(StageView *)view];
|
||||||
|
}
|
||||||
|
|
||||||
|
// 递归检查子视图
|
||||||
|
NSArray *subViews = [view subviews];
|
||||||
|
for (UIView *subView in subViews) {
|
||||||
|
if ([subView isKindOfClass:[StageView class]]) {
|
||||||
|
[stageViews addObject:(StageView *)subView];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查重复实例
|
||||||
|
if (stageViews.count > 1) {
|
||||||
|
NSLog(@"⚠️ 检测到多个 StageView 实例 (总计: %lu 个)", (unsigned long)stageViews.count);
|
||||||
|
for (StageView *stageView in stageViews) {
|
||||||
|
NSLog(@" - StageView: %@ | Frame: %@ | Superview: %@",
|
||||||
|
NSStringFromClass([stageView class]),
|
||||||
|
NSStringFromCGRect(stageView.frame),
|
||||||
|
NSStringFromClass([stageView.superview class]));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 找出当前主实例之外的重复实例
|
||||||
|
for (StageView *stageView in stageViews) {
|
||||||
|
if (stageView != self.stageView && stageView.superview) {
|
||||||
|
[duplicateViews addObject:stageView];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (duplicateViews.count > 0) {
|
||||||
|
NSLog(@"⚠️ 发现重复的 StageView 实例,正在清理...");
|
||||||
|
for (StageView *duplicateView in duplicateViews) {
|
||||||
|
NSLog(@"🧹 清理重复的 StageView: %@ | Superview: %@",
|
||||||
|
NSStringFromClass([duplicateView class]),
|
||||||
|
NSStringFromClass([duplicateView.superview class]));
|
||||||
|
[duplicateView removeFromSuperview];
|
||||||
|
}
|
||||||
|
NSLog(@"✅ 重复 StageView 实例清理完成");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
NSLog(@"✅ StageView 实例检查通过:只有 1 个实例");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// 在 StageView 上绘制符合条件的相邻麦位中点矩形
|
/// 在 StageView 上绘制符合条件的相邻麦位中点矩形
|
||||||
- (void)drawSocialStageMidpointRects {
|
- (void)drawSocialStageMidpointRects {
|
||||||
|
@@ -77,7 +77,7 @@
|
|||||||
"XPSessionFindNewGreetListView0" = "Отправлено успешно";
|
"XPSessionFindNewGreetListView0" = "Отправлено успешно";
|
||||||
"XPSessionFindNewGreetListView1" = "Пожалуйста, выберите";
|
"XPSessionFindNewGreetListView1" = "Пожалуйста, выберите";
|
||||||
"XPSessionFindNewGreetListView2" = "Изменить пакет";
|
"XPSessionFindNewGreetListView2" = "Изменить пакет";
|
||||||
"XPSessionFindNewGreetListView3" = "Отправить";
|
"XPSessionFindNewGreetListView3" = "Отпр.";
|
||||||
|
|
||||||
"XPSessionFindNewAlertView0" = "Игнорировать";
|
"XPSessionFindNewAlertView0" = "Игнорировать";
|
||||||
"XPSessionFindNewAlertView1" = "Идти искать";
|
"XPSessionFindNewAlertView1" = "Идти искать";
|
||||||
@@ -157,7 +157,7 @@
|
|||||||
|
|
||||||
"PKIDLoginViewController2" = "Пожалуйста, обратитесь в службу поддержки";
|
"PKIDLoginViewController2" = "Пожалуйста, обратитесь в службу поддержки";
|
||||||
"PKIDLoginViewController3" = "LINE:pekoyuyin";
|
"PKIDLoginViewController3" = "LINE:pekoyuyin";
|
||||||
"PKIDLoginViewController4" = "Я понял";
|
"PKIDLoginViewController4" = "OK";
|
||||||
"MessageLevelUpgradeModel0" = "Поздравляем! Ваш уровень очарования достиг %@";
|
"MessageLevelUpgradeModel0" = "Поздравляем! Ваш уровень очарования достиг %@";
|
||||||
"MessageLevelUpgradeModel1" = "Поздравляем! Ваш уровень достиг %@";
|
"MessageLevelUpgradeModel1" = "Поздравляем! Ваш уровень достиг %@";
|
||||||
|
|
||||||
@@ -292,7 +292,7 @@
|
|||||||
"XPMonentsTooBarView8" = "Блокировать динамику";
|
"XPMonentsTooBarView8" = "Блокировать динамику";
|
||||||
|
|
||||||
"XPMonentPublishSuccessView0" = "На рассмотрении";
|
"XPMonentPublishSuccessView0" = "На рассмотрении";
|
||||||
"XPMonentPublishSuccessView1" = "Фух, получили вашу милую динамику~\nПосле одобрения секретарь поможет вам отправить и уведомит вас";
|
"XPMonentPublishSuccessView1" = "Фух, получили вашу милую динамику~\nПосле одобрения секретарь поможет вам Отпр. и уведомит вас";
|
||||||
|
|
||||||
"XPMonentsInteractiveTableViewCell0" = "Прокомментировал вас";
|
"XPMonentsInteractiveTableViewCell0" = "Прокомментировал вас";
|
||||||
"XPMonentsInteractiveTableViewCell1" = "Пригласить";
|
"XPMonentsInteractiveTableViewCell1" = "Пригласить";
|
||||||
@@ -356,7 +356,7 @@
|
|||||||
|
|
||||||
|
|
||||||
"XPLoginInputView0" = "Получить код подтверждения";
|
"XPLoginInputView0" = "Получить код подтверждения";
|
||||||
"XPLoginInputView1" = "Отправить снова";
|
"XPLoginInputView1" = "Отпр. снова";
|
||||||
|
|
||||||
"XPLoginViewController0" = "Автоматический вход не удался, проверьте состояние мобильной сети";
|
"XPLoginViewController0" = "Автоматический вход не удался, проверьте состояние мобильной сети";
|
||||||
"XPLoginViewController1" = "Автоматический вход";
|
"XPLoginViewController1" = "Автоматический вход";
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
"XPLoginVerifBindPhoneViewController8" = "Код подтверждения отправлен успешно";
|
"XPLoginVerifBindPhoneViewController8" = "Код подтверждения отправлен успешно";
|
||||||
"XPLoginVerifBindPhoneViewController9" = "Подтверждение прошло успешно";
|
"XPLoginVerifBindPhoneViewController9" = "Подтверждение прошло успешно";
|
||||||
"XPLoginVerifBindPhoneViewController10" = "Повторите через %ds";
|
"XPLoginVerifBindPhoneViewController10" = "Повторите через %ds";
|
||||||
"XPLoginVerifBindPhoneViewController11" = "Отправить снова";
|
"XPLoginVerifBindPhoneViewController11" = "Отпр. снова";
|
||||||
"XPLoginVerifBindPhoneViewController12" = "Страна и регион";
|
"XPLoginVerifBindPhoneViewController12" = "Страна и регион";
|
||||||
"XPLoginVerifBindPhoneViewController13" = "Китай";
|
"XPLoginVerifBindPhoneViewController13" = "Китай";
|
||||||
"XPLoginVerifBindPhoneViewController14" = "Привязать";
|
"XPLoginVerifBindPhoneViewController14" = "Привязать";
|
||||||
@@ -483,7 +483,7 @@
|
|||||||
"NSString_Utils2" = "Только что";
|
"NSString_Utils2" = "Только что";
|
||||||
"NSString_Utils3" = "%ld минут назад";
|
"NSString_Utils3" = "%ld минут назад";
|
||||||
"NSString_Utils4" = "%@0K";
|
"NSString_Utils4" = "%@0K";
|
||||||
"QEmotionBoardView0" = "Отправить";
|
"QEmotionBoardView0" = "Отпр.";
|
||||||
"QInputBarView0" = "Удерживайте, чтобы говорить";
|
"QInputBarView0" = "Удерживайте, чтобы говорить";
|
||||||
"QInputBarView1" = "Отпустите, чтобы закончить";
|
"QInputBarView1" = "Отпустите, чтобы закончить";
|
||||||
"QInputBarView2" = "Потяните вверх, чтобы отменить отправку";
|
"QInputBarView2" = "Потяните вверх, чтобы отменить отправку";
|
||||||
@@ -493,7 +493,7 @@
|
|||||||
"QinputPhotoView0" = "Можно выбрать до 9 изображений";
|
"QinputPhotoView0" = "Можно выбрать до 9 изображений";
|
||||||
"QinputPhotoView1" = "Альбом";
|
"QinputPhotoView1" = "Альбом";
|
||||||
"QinputPhotoView2" = "Оригинал";
|
"QinputPhotoView2" = "Оригинал";
|
||||||
"QinputPhotoView3" = "Отправить";
|
"QinputPhotoView3" = "Отпр.";
|
||||||
|
|
||||||
"XPAdvertiseView0" = "Пропустить";
|
"XPAdvertiseView0" = "Пропустить";
|
||||||
"XPAdvertiseView1" = "Пропустить";
|
"XPAdvertiseView1" = "Пропустить";
|
||||||
@@ -696,7 +696,7 @@
|
|||||||
"XPMineCollectPartyRoomViewController2" = "Еще нет сохраненных комнат";
|
"XPMineCollectPartyRoomViewController2" = "Еще нет сохраненных комнат";
|
||||||
|
|
||||||
"XPMinePayPwdInputView0" = "Повторите через %ld";
|
"XPMinePayPwdInputView0" = "Повторите через %ld";
|
||||||
"XPMinePayPwdInputView1" = "Отправить снова";
|
"XPMinePayPwdInputView1" = "Отпр. снова";
|
||||||
"XPMinePayPwdInputView2" = "Установить платежный пароль";
|
"XPMinePayPwdInputView2" = "Установить платежный пароль";
|
||||||
"XPMinePayPwdInputView3" = "Введите платежный пароль еще раз";
|
"XPMinePayPwdInputView3" = "Введите платежный пароль еще раз";
|
||||||
"XPMinePayPwdInputView4" = "Введите код подтверждения";
|
"XPMinePayPwdInputView4" = "Введите код подтверждения";
|
||||||
@@ -709,7 +709,7 @@
|
|||||||
|
|
||||||
"XPMineAccountView0" = "Баланс монет";
|
"XPMineAccountView0" = "Баланс монет";
|
||||||
|
|
||||||
"XPMineVerifIdentityView0" = "Отправить код подтверждения";
|
"XPMineVerifIdentityView0" = "Отпр. код подтверждения";
|
||||||
|
|
||||||
"AnchorLevelTimeView0" = "час(ов)";
|
"AnchorLevelTimeView0" = "час(ов)";
|
||||||
"AnchorLevelTimeView1" = "минут(ы)";
|
"AnchorLevelTimeView1" = "минут(ы)";
|
||||||
@@ -993,7 +993,7 @@
|
|||||||
"XPMineFeedbackViewController2" = "Описание проблемы";
|
"XPMineFeedbackViewController2" = "Описание проблемы";
|
||||||
"XPMineFeedbackViewController3" = "Пожалуйста, подробно опишите проблемы и ситуации, с которыми вы столкнулись. Спасибо за ваши ценные отзывы.";
|
"XPMineFeedbackViewController3" = "Пожалуйста, подробно опишите проблемы и ситуации, с которыми вы столкнулись. Спасибо за ваши ценные отзывы.";
|
||||||
"XPMineFeedbackViewController4" = "Пожалуйста, введите ваши контактные данные";
|
"XPMineFeedbackViewController4" = "Пожалуйста, введите ваши контактные данные";
|
||||||
"XPMineFeedbackViewController5" = "Отправить отзыв";
|
"XPMineFeedbackViewController5" = "Отпр. отзыв";
|
||||||
|
|
||||||
"XPMineAboutUsViewController0" = "О приложении ";
|
"XPMineAboutUsViewController0" = "О приложении ";
|
||||||
"XPMineNotificaViewController0" = "Настройки уведомлений";
|
"XPMineNotificaViewController0" = "Настройки уведомлений";
|
||||||
@@ -1002,7 +1002,7 @@
|
|||||||
"XPMineResetLoginPwdViewController2" = "Код подтверждения отправлен успешно";
|
"XPMineResetLoginPwdViewController2" = "Код подтверждения отправлен успешно";
|
||||||
"XPMineResetLoginPwdViewController3" = "Сброс пароля успешно выполнен, пожалуйста, войдите снова";
|
"XPMineResetLoginPwdViewController3" = "Сброс пароля успешно выполнен, пожалуйста, войдите снова";
|
||||||
"XPMineResetLoginPwdViewController4" = "Повторите через %ds";
|
"XPMineResetLoginPwdViewController4" = "Повторите через %ds";
|
||||||
"XPMineResetLoginPwdViewController5" = "Отправить снова";
|
"XPMineResetLoginPwdViewController5" = "Отпр. снова";
|
||||||
"XPMineResetLoginPwdViewController6" = "Далее";
|
"XPMineResetLoginPwdViewController6" = "Далее";
|
||||||
"XPMineResetLoginPwdViewController7" = "Пожалуйста, введите ваш номер телефона";
|
"XPMineResetLoginPwdViewController7" = "Пожалуйста, введите ваш номер телефона";
|
||||||
"XPMineResetLoginPwdViewController8" = "Пожалуйста, введите код подтверждения, который вы получили";
|
"XPMineResetLoginPwdViewController8" = "Пожалуйста, введите код подтверждения, который вы получили";
|
||||||
@@ -1027,7 +1027,7 @@
|
|||||||
"XPMineVerifIdentityViewController2" = "Код подтверждения отправлен успешно";
|
"XPMineVerifIdentityViewController2" = "Код подтверждения отправлен успешно";
|
||||||
"XPMineVerifIdentityViewController3" = "Проверка прошла успешно";
|
"XPMineVerifIdentityViewController3" = "Проверка прошла успешно";
|
||||||
"XPMineVerifIdentityViewController4" = "Повторите через %ds";
|
"XPMineVerifIdentityViewController4" = "Повторите через %ds";
|
||||||
"XPMineVerifIdentityViewController5" = "Отправить снова";
|
"XPMineVerifIdentityViewController5" = "Отпр. снова";
|
||||||
"XPMineVerifIdentityViewController6" = "Далее";
|
"XPMineVerifIdentityViewController6" = "Далее";
|
||||||
"XPMineVerifIdentityViewController7" = "Пожалуйста, введите ваш номер телефона";
|
"XPMineVerifIdentityViewController7" = "Пожалуйста, введите ваш номер телефона";
|
||||||
"XPMineVerifIdentityViewController8" = "Пожалуйста, введите код подтверждения, который вы получили";
|
"XPMineVerifIdentityViewController8" = "Пожалуйста, введите код подтверждения, который вы получили";
|
||||||
@@ -1258,7 +1258,7 @@
|
|||||||
"XPRoomPKTypeTableViewCell1" = "Командное PK";
|
"XPRoomPKTypeTableViewCell1" = "Командное PK";
|
||||||
|
|
||||||
"XPRoomPKVoteTableViewCell0" = "Тип голосования";
|
"XPRoomPKVoteTableViewCell0" = "Тип голосования";
|
||||||
"XPRoomPKVoteTableViewCell1" = "По стоимости подарков";
|
"XPRoomPKVoteTableViewCell1" = "Стоим. подар.";
|
||||||
"XPRoomPKVoteTableViewCell2" = "По количеству отправителей подарков";
|
"XPRoomPKVoteTableViewCell2" = "По количеству отправителей подарков";
|
||||||
|
|
||||||
"XPRoomPKRecordTableViewCell0" = "Ничья";
|
"XPRoomPKRecordTableViewCell0" = "Ничья";
|
||||||
@@ -1267,7 +1267,7 @@
|
|||||||
"XPRoomPKRecordTableViewCell3" = "Поражение";
|
"XPRoomPKRecordTableViewCell3" = "Поражение";
|
||||||
"XPRoomPKRecordTableViewCell4" = "Поражение";
|
"XPRoomPKRecordTableViewCell4" = "Поражение";
|
||||||
"XPRoomPKRecordTableViewCell5" = "Победа";
|
"XPRoomPKRecordTableViewCell5" = "Победа";
|
||||||
"XPRoomPKRecordTableViewCell6" = "По стоимости подарков";
|
"XPRoomPKRecordTableViewCell6" = "Стоим. подар.";
|
||||||
"XPRoomPKRecordTableViewCell7" = "По количеству отправителей подарков";
|
"XPRoomPKRecordTableViewCell7" = "По количеству отправителей подарков";
|
||||||
|
|
||||||
"XPRoomPKEmptyTableViewCell0" = "Нет данных";
|
"XPRoomPKEmptyTableViewCell0" = "Нет данных";
|
||||||
@@ -1375,7 +1375,7 @@
|
|||||||
"XPUserCardPresenter11" = "Разблокировать";
|
"XPUserCardPresenter11" = "Разблокировать";
|
||||||
"XPUserCardPresenter10" = "Заблокировать микрофон";
|
"XPUserCardPresenter10" = "Заблокировать микрофон";
|
||||||
"XPUserCardPresenter12" = "Очистить значение подарка";
|
"XPUserCardPresenter12" = "Очистить значение подарка";
|
||||||
"XPUserCardPresenter13" = "Отправить подарок";
|
"XPUserCardPresenter13" = "Отпр. подарок";
|
||||||
"XPUserCardPresenter14" = "Личный чат";
|
"XPUserCardPresenter14" = "Личный чат";
|
||||||
"XPUserCardPresenter15" = "Подписаться";
|
"XPUserCardPresenter15" = "Подписаться";
|
||||||
"XPUserCardPresenter16" = "Подписан";
|
"XPUserCardPresenter16" = "Подписан";
|
||||||
@@ -1546,7 +1546,7 @@
|
|||||||
"XPRoomMenuContainerView3" = "Поприветствуйте всех";
|
"XPRoomMenuContainerView3" = "Поприветствуйте всех";
|
||||||
|
|
||||||
"XPRoomSendTextView0" = "Введите сообщение...";
|
"XPRoomSendTextView0" = "Введите сообщение...";
|
||||||
"XPRoomSendTextView1" = "Отправить";
|
"XPRoomSendTextView1" = "Отпр.";
|
||||||
|
|
||||||
"DatingStageView0" = "Вы уже на микрофоне";
|
"DatingStageView0" = "Вы уже на микрофоне";
|
||||||
"DatingStageView1" = "Чтобы выйти на микрофон, вам нужно встать в очередь";
|
"DatingStageView1" = "Чтобы выйти на микрофон, вам нужно встать в очередь";
|
||||||
@@ -1839,14 +1839,14 @@
|
|||||||
|
|
||||||
"XPGiftBarView0" = "Баланс: %@";
|
"XPGiftBarView0" = "Баланс: %@";
|
||||||
"XPGiftBarView1" = "Пополнить";
|
"XPGiftBarView1" = "Пополнить";
|
||||||
"XPGiftBarView2" = "Отправить";
|
"XPGiftBarView2" = "Отпр.";
|
||||||
"XPGiftBarView3" = "Отправка...";
|
"XPGiftBarView3" = "Отправка...";
|
||||||
"XPGiftBarView4" = "Отправить";
|
"XPGiftBarView4" = "Отпр.";
|
||||||
"XPGiftBarView5" = "Пожалуйста, введите количество подарков";
|
"XPGiftBarView5" = "Пожалуйста, введите количество подарков";
|
||||||
|
|
||||||
|
|
||||||
"XPGiftUsersView0" = "Отправить всем";
|
"XPGiftUsersView0" = "Отпр. всем";
|
||||||
"XPGiftUsersView1" = "Отправить всем";
|
"XPGiftUsersView1" = "Отпр. всем";
|
||||||
|
|
||||||
"XPGiftHeadTypeView0" = "Бонус за первый пополнение";
|
"XPGiftHeadTypeView0" = "Бонус за первый пополнение";
|
||||||
"XPGiftHeadTypeView1" = "Бонус за первый пополнение";
|
"XPGiftHeadTypeView1" = "Бонус за первый пополнение";
|
||||||
@@ -1858,8 +1858,8 @@
|
|||||||
"XPGiftLuckyGiftBroadcastCell1" = "Открыл %@, получил ";
|
"XPGiftLuckyGiftBroadcastCell1" = "Открыл %@, получил ";
|
||||||
"XPGiftLuckyGiftBroadcastView0" = "Правила игры";
|
"XPGiftLuckyGiftBroadcastView0" = "Правила игры";
|
||||||
|
|
||||||
"XPSendGiftView0" = "Можно отправить всем только одному человеку";
|
"XPSendGiftView0" = "Можно Отпр. всем только одному человеку";
|
||||||
"XPSendGiftView1" = "Можно отправить всем только одному человеку";
|
"XPSendGiftView1" = "Можно Отпр. всем только одному человеку";
|
||||||
"XPSendGiftView2" = "Пожалуйста, выберите хотя бы одного человека";
|
"XPSendGiftView2" = "Пожалуйста, выберите хотя бы одного человека";
|
||||||
"XPSendGiftView3" = "Успешно отправлен граффити-подарок: %@";
|
"XPSendGiftView3" = "Успешно отправлен граффити-подарок: %@";
|
||||||
"XPSendGiftView4" = "Еще не достигнут уровень VIP, необходимый для отправки %@\nТребуемый уровень VIP: %@";
|
"XPSendGiftView4" = "Еще не достигнут уровень VIP, необходимый для отправки %@\nТребуемый уровень VIP: %@";
|
||||||
@@ -2026,7 +2026,7 @@
|
|||||||
"XPReceiveRedPacketView4" = "Забрано %@/%@";
|
"XPReceiveRedPacketView4" = "Забрано %@/%@";
|
||||||
"XPReceiveRedPacketView5" = "Все взяли, приходите раньше в следующий раз";
|
"XPReceiveRedPacketView5" = "Все взяли, приходите раньше в следующий раз";
|
||||||
"XPReceiveRedPacketView6" = "Открывается через";
|
"XPReceiveRedPacketView6" = "Открывается через";
|
||||||
"XPReceiveRedPacketView7" = "Отправить Данмаки\nХватить красный пакет";
|
"XPReceiveRedPacketView7" = "Отпр. Данмаки\nХватить красный пакет";
|
||||||
"XPReceiveRedPacketView8" = "-ов красный пакет";
|
"XPReceiveRedPacketView8" = "-ов красный пакет";
|
||||||
"XPReceiveRedPacketView9" = "Быстрее приходите, чтобы хватить красный пакет, кто первый тот и забрал!";
|
"XPReceiveRedPacketView9" = "Быстрее приходите, чтобы хватить красный пакет, кто первый тот и забрал!";
|
||||||
"XPReceiveRedPacketView10" = "Подпишитесь на ведущего, чтобы хватить красные пакеты!";
|
"XPReceiveRedPacketView10" = "Подпишитесь на ведущего, чтобы хватить красные пакеты!";
|
||||||
@@ -2034,7 +2034,7 @@
|
|||||||
"XPReceiveRedPacketView12" = "Отправьте Данмаки %@, чтобы хватить красные пакеты!";
|
"XPReceiveRedPacketView12" = "Отправьте Данмаки %@, чтобы хватить красные пакеты!";
|
||||||
"XPReceiveRedPacketView13" = "Подписаться на ведущего\nХватить красный пакет";
|
"XPReceiveRedPacketView13" = "Подписаться на ведущего\nХватить красный пакет";
|
||||||
"XPReceiveRedPacketView14" = "Поделиться комнатой\nХватить красный пакет";
|
"XPReceiveRedPacketView14" = "Поделиться комнатой\nХватить красный пакет";
|
||||||
"XPReceiveRedPacketView15" = "Отправить Данмаки\nХватить красный пакет";
|
"XPReceiveRedPacketView15" = "Отпр. Данмаки\nХватить красный пакет";
|
||||||
"XPReceiveRedPacketView16" = "Не участвую\nв мероприятии";
|
"XPReceiveRedPacketView16" = "Не участвую\nв мероприятии";
|
||||||
"XPReceiveRedPacketView17" = "Условия выполнены, хватайте красные пакеты сейчас";
|
"XPReceiveRedPacketView17" = "Условия выполнены, хватайте красные пакеты сейчас";
|
||||||
"XPReceiveRedPacketView18" = "Не участвуете в мероприятии, не можете хватить этот красный пакет";
|
"XPReceiveRedPacketView18" = "Не участвуете в мероприятии, не можете хватить этот красный пакет";
|
||||||
@@ -2102,18 +2102,18 @@
|
|||||||
"XPRoomLotteryPrizeView16" = "Поздравляем с выигрышем приза!";
|
"XPRoomLotteryPrizeView16" = "Поздравляем с выигрышем приза!";
|
||||||
"XPRoomLotteryPrizeView17" = "Извините, фонд призов пуст!";
|
"XPRoomLotteryPrizeView17" = "Извините, фонд призов пуст!";
|
||||||
|
|
||||||
"XPRoomSendGiftViewController0" = "Отправить %@";
|
"XPRoomSendGiftViewController0" = "Отпр. %@";
|
||||||
"XPRoomSendGiftViewController1" = "Получено %@ от %@";
|
"XPRoomSendGiftViewController1" = "Получено %@ от %@";
|
||||||
"XPRoomSendGiftViewController2" = "Получено %@ от %@";
|
"XPRoomSendGiftViewController2" = "Получено %@ от %@";
|
||||||
"XPRoomSendGiftViewController3" = "Получен красный пакет";
|
"XPRoomSendGiftViewController3" = "Получен красный пакет";
|
||||||
"XPRoomSendGiftViewController4" = "Отправить";
|
"XPRoomSendGiftViewController4" = "Отпр.";
|
||||||
|
|
||||||
"XPRoomMessageView0" = "Комната включена и готова к приему сообщений";
|
"XPRoomMessageView0" = "Комната включена и готова к приему сообщений";
|
||||||
"XPRoomMessageView1" = "Введите текст для отправки";
|
"XPRoomMessageView1" = "Введите текст для отправки";
|
||||||
"XPRoomMessageView2" = "Комната заглушена, невозможно отправить сообщения";
|
"XPRoomMessageView2" = "Комната заглушена, невозможно Отпр. сообщения";
|
||||||
"XPRoomMessageView3" = "Комната заблокирована, невозможно отправить сообщения";
|
"XPRoomMessageView3" = "Комната заблокирована, невозможно Отпр. сообщения";
|
||||||
"XPRoomMessageView4" = "Вам запрещено отправлять сообщения в этой комнате";
|
"XPRoomMessageView4" = "Вам запрещено отправлять сообщения в этой комнате";
|
||||||
"XPRoomMessageView5" = "Вы были заглушены, невозможно отправить сообщения";
|
"XPRoomMessageView5" = "Вы были заглушены, невозможно Отпр. сообщения";
|
||||||
"XPRoomMessageView6" = "Подарков пока не получено";
|
"XPRoomMessageView6" = "Подарков пока не получено";
|
||||||
|
|
||||||
"XPRoomEnterTimeView0" = "Войти в комнату";
|
"XPRoomEnterTimeView0" = "Войти в комнату";
|
||||||
@@ -2123,7 +2123,7 @@
|
|||||||
"XPRoomReceiveGiftView2" = "Получен красный пакет от";
|
"XPRoomReceiveGiftView2" = "Получен красный пакет от";
|
||||||
|
|
||||||
"XPRoomSendRedPacketView0" = "Открыть красный пакет";
|
"XPRoomSendRedPacketView0" = "Открыть красный пакет";
|
||||||
"XPRoomSendRedPacketView1" = "Отправить красный пакет";
|
"XPRoomSendRedPacketView1" = "Отпр. красный пакет";
|
||||||
"XPRoomSendRedPacketView2" = "Примечание к красному пакету";
|
"XPRoomSendRedPacketView2" = "Примечание к красному пакету";
|
||||||
"XPRoomSendRedPacketView3" = "Количество красных пакетов";
|
"XPRoomSendRedPacketView3" = "Количество красных пакетов";
|
||||||
"XPRoomSendRedPacketView4" = "Общее количество алмазов";
|
"XPRoomSendRedPacketView4" = "Общее количество алмазов";
|
||||||
@@ -2277,7 +2277,7 @@
|
|||||||
|
|
||||||
|
|
||||||
"XPLoginInputView0" = "Получить код подтверждения";
|
"XPLoginInputView0" = "Получить код подтверждения";
|
||||||
"XPLoginInputView1" = "Отправить повторно";
|
"XPLoginInputView1" = "Отпр. повторно";
|
||||||
|
|
||||||
"XPLoginViewController0" = "Авторизация одним кликом не удалась. Проверьте состояние мобильной сети";
|
"XPLoginViewController0" = "Авторизация одним кликом не удалась. Проверьте состояние мобильной сети";
|
||||||
"XPLoginViewController1" = "Авторизация одним кликом";
|
"XPLoginViewController1" = "Авторизация одним кликом";
|
||||||
@@ -2417,7 +2417,7 @@
|
|||||||
"XPFeedBackViewController2" = "Введите содержание обратной связи";
|
"XPFeedBackViewController2" = "Введите содержание обратной связи";
|
||||||
"XPFeedBackViewController3" = "Контактная информация";
|
"XPFeedBackViewController3" = "Контактная информация";
|
||||||
"XPFeedBackViewController4" = "Введите вашу контактную информацию";
|
"XPFeedBackViewController4" = "Введите вашу контактную информацию";
|
||||||
"XPFeedBackViewController5" = "Отправить";
|
"XPFeedBackViewController5" = "Отпр.";
|
||||||
"XPFeedBackViewController6" = "Введите тип обратной связи";
|
"XPFeedBackViewController6" = "Введите тип обратной связи";
|
||||||
|
|
||||||
|
|
||||||
@@ -2517,7 +2517,7 @@
|
|||||||
"LoginVerifCodeViewController1" = "Вход выполнен успешно";
|
"LoginVerifCodeViewController1" = "Вход выполнен успешно";
|
||||||
"LoginVerifCodeViewController2" = "Код подтверждения отправлен на";
|
"LoginVerifCodeViewController2" = "Код подтверждения отправлен на";
|
||||||
"LoginVerifCodeViewController3" = "Введите код подтверждения";
|
"LoginVerifCodeViewController3" = "Введите код подтверждения";
|
||||||
"LoginVerifCodeViewController4" = "Отправить код подтверждения повторно";
|
"LoginVerifCodeViewController4" = "Отпр. код подтверждения повторно";
|
||||||
|
|
||||||
"UserPrivacyView0" = "Политика конфиденциальности “%@”";
|
"UserPrivacyView0" = "Политика конфиденциальности “%@”";
|
||||||
"UserPrivacyView1" = "Добро пожаловать в %@. Мы поможем вам понять сбор, использование, хранение и обмен личной информацией с помощью “Политики конфиденциальности” и “Пользовательского соглашения”, особенно соответствие между типами и целями сбора личной информации.\n\nДля обеспечения нормальной работы продукта мы можем собирать от вас некоторую необходимую информацию. Мы можем собирать личные чувствительные данные, такие как контактная информация, и у вас есть право отказаться от предоставления нам этой информации. Мы не будем делиться, предоставлять, передавать или получать вашу личную информацию от третьих лиц без вашего согласия.";
|
"UserPrivacyView1" = "Добро пожаловать в %@. Мы поможем вам понять сбор, использование, хранение и обмен личной информацией с помощью “Политики конфиденциальности” и “Пользовательского соглашения”, особенно соответствие между типами и целями сбора личной информации.\n\nДля обеспечения нормальной работы продукта мы можем собирать от вас некоторую необходимую информацию. Мы можем собирать личные чувствительные данные, такие как контактная информация, и у вас есть право отказаться от предоставления нам этой информации. Мы не будем делиться, предоставлять, передавать или получать вашу личную информацию от третьих лиц без вашего согласия.";
|
||||||
@@ -2561,7 +2561,7 @@
|
|||||||
|
|
||||||
"PKIDLoginViewController11" = "SMS отправлено успешно";
|
"PKIDLoginViewController11" = "SMS отправлено успешно";
|
||||||
"LoginVerifCodeViewController3" = "Код подтверждения";
|
"LoginVerifCodeViewController3" = "Код подтверждения";
|
||||||
"LoginVerifCodeViewController4" = "Отправить повторно";
|
"LoginVerifCodeViewController4" = "Отпр. повторно";
|
||||||
|
|
||||||
"XPLoginViewController11" = "Прежде чем зарегистрироваться и войти в систему, вам нужно согласиться с политикой конфиденциальности и пользовательским соглашением~";
|
"XPLoginViewController11" = "Прежде чем зарегистрироваться и войти в систему, вам нужно согласиться с политикой конфиденциальности и пользовательским соглашением~";
|
||||||
|
|
||||||
@@ -2578,9 +2578,9 @@
|
|||||||
///XPMineGuildListCell
|
///XPMineGuildListCell
|
||||||
"XPMineGuildListCell0" = "Подать заявку на вступление";
|
"XPMineGuildListCell0" = "Подать заявку на вступление";
|
||||||
"XPMineGuildListCell1" = "Заявка подана";
|
"XPMineGuildListCell1" = "Заявка подана";
|
||||||
"XPMineGuildListCell2" = "Нельзя отправить повторную заявку в течение 3 дней";
|
"XPMineGuildListCell2" = "Нельзя Отпр. повторную заявку в течение 3 дней";
|
||||||
"XPMineGuildListCell3" = "ID комнаты: %ld";
|
"XPMineGuildListCell3" = "ID комнаты: %ld";
|
||||||
"XPMineGuildListCell4" = "Нельзя отправить повторную заявку в течение 7 дней";
|
"XPMineGuildListCell4" = "Нельзя Отпр. повторную заявку в течение 7 дней";
|
||||||
"XPMineGuildListCell5" = "На рассмотрении";
|
"XPMineGuildListCell5" = "На рассмотрении";
|
||||||
"XPMineGuildListCell6" = "Приглашено";
|
"XPMineGuildListCell6" = "Приглашено";
|
||||||
|
|
||||||
@@ -3077,7 +3077,7 @@
|
|||||||
"LoginForgetPasswordViewController3" = "%ds до повторной попытки";
|
"LoginForgetPasswordViewController3" = "%ds до повторной попытки";
|
||||||
"LoginForgetPasswordViewController4" = "Повторить отправку";
|
"LoginForgetPasswordViewController4" = "Повторить отправку";
|
||||||
"LoginForgetPasswordViewController5" = "Пожалуйста, введите правильный номер телефона";
|
"LoginForgetPasswordViewController5" = "Пожалуйста, введите правильный номер телефона";
|
||||||
"LoginForgetPasswordViewController6" = "Отправить";
|
"LoginForgetPasswordViewController6" = "Отпр.";
|
||||||
"LoginForgetPasswordViewController7" = "Пожалуйста, введите номер телефона";
|
"LoginForgetPasswordViewController7" = "Пожалуйста, введите номер телефона";
|
||||||
"LoginForgetPasswordViewController8" = "код подтверждения";
|
"LoginForgetPasswordViewController8" = "код подтверждения";
|
||||||
"LoginForgetPasswordViewController9" = "Пожалуйста, введите пароль (6-16 символов)";
|
"LoginForgetPasswordViewController9" = "Пожалуйста, введите пароль (6-16 символов)";
|
||||||
@@ -3149,9 +3149,9 @@
|
|||||||
"XPTreasureFairyFriendView1"="Поиск друзей";
|
"XPTreasureFairyFriendView1"="Поиск друзей";
|
||||||
|
|
||||||
"XPTreasureFairyMessageSendView0"="Отправлено успешно";
|
"XPTreasureFairyMessageSendView0"="Отправлено успешно";
|
||||||
"XPTreasureFairyMessageSendView1"="Вы уверены, что хотите отправить 1 карту феи '%@' для \"%@\"?";
|
"XPTreasureFairyMessageSendView1"="Вы уверены, что хотите Отпр. 1 карту феи '%@' для \"%@\"?";
|
||||||
"XPTreasureFairyMessageSendView2"="Закрыть";
|
"XPTreasureFairyMessageSendView2"="Закрыть";
|
||||||
"XPTreasureFairyMessageSendView3"="Отправить";
|
"XPTreasureFairyMessageSendView3"="Отпр.";
|
||||||
|
|
||||||
"XPTreasureFairyMoreView0"="Пояснение к правилам";
|
"XPTreasureFairyMoreView0"="Пояснение к правилам";
|
||||||
"XPTreasureFairyMoreView1"="Хранитель сокровищ";
|
"XPTreasureFairyMoreView1"="Хранитель сокровищ";
|
||||||
@@ -3169,9 +3169,9 @@
|
|||||||
|
|
||||||
"XPTreasureFairySendView0"="Отправлено успешно";
|
"XPTreasureFairySendView0"="Отправлено успешно";
|
||||||
"XPTreasureFairySendView1"="Отправлен запрос другу";
|
"XPTreasureFairySendView1"="Отправлен запрос другу";
|
||||||
"XPTreasureFairySendView2"="Вы уверены, что хотите отправить 1 карту феи '%@' для \"%@\"?";
|
"XPTreasureFairySendView2"="Вы уверены, что хотите Отпр. 1 карту феи '%@' для \"%@\"?";
|
||||||
"XPTreasureFairySendView3"="Вы уверены, что хотите запросить 1 карту феи '%@' у \"%@\"?";
|
"XPTreasureFairySendView3"="Вы уверены, что хотите запросить 1 карту феи '%@' у \"%@\"?";
|
||||||
"XPTreasureFairySendView4"="Отправить";
|
"XPTreasureFairySendView4"="Отпр.";
|
||||||
"XPTreasureFairySendView5"="Запрос";
|
"XPTreasureFairySendView5"="Запрос";
|
||||||
"XPTreasureFairySendView6"="Закрыть";
|
"XPTreasureFairySendView6"="Закрыть";
|
||||||
|
|
||||||
@@ -3460,7 +3460,7 @@
|
|||||||
"PIRoomPhotoAlbumItemVC2"="Пожалуйста, выберите фотографии комнаты для загрузки";
|
"PIRoomPhotoAlbumItemVC2"="Пожалуйста, выберите фотографии комнаты для загрузки";
|
||||||
"PIRoomPhotoAlbumItemVC3"="Загрузка успешна";
|
"PIRoomPhotoAlbumItemVC3"="Загрузка успешна";
|
||||||
"PIRoomPhotoAlbumItemVC4"="Вы уверены, что хотите удалить эту фотографию?";
|
"PIRoomPhotoAlbumItemVC4"="Вы уверены, что хотите удалить эту фотографию?";
|
||||||
"PIRoomPhotoAlbumItemVC5"="Вы уверены, что хотите отправить эту фотографию на публичный экран?";
|
"PIRoomPhotoAlbumItemVC5"="Вы уверены, что хотите Отпр. эту фотографию на публичный экран?";
|
||||||
///PIRoomPhotoAlbumChoosePhotoCell
|
///PIRoomPhotoAlbumChoosePhotoCell
|
||||||
"PIRoomPhotoAlbumChoosePhotoCell0"="Максимум 6 фотографий за одну загрузку";
|
"PIRoomPhotoAlbumChoosePhotoCell0"="Максимум 6 фотографий за одну загрузку";
|
||||||
///PIRoomPhotoAlbumChoosePhotoTypeView
|
///PIRoomPhotoAlbumChoosePhotoTypeView
|
||||||
@@ -3483,7 +3483,7 @@
|
|||||||
"PIRoomMessageUnlockPhotoAlbumView0"="Подарок для разблокировки фотографии";
|
"PIRoomMessageUnlockPhotoAlbumView0"="Подарок для разблокировки фотографии";
|
||||||
"PIRoomMessageUnlockPhotoAlbumView1"="Разблокировать сейчас";
|
"PIRoomMessageUnlockPhotoAlbumView1"="Разблокировать сейчас";
|
||||||
///PIRoomPhotoAlbumOperateView
|
///PIRoomPhotoAlbumOperateView
|
||||||
"PIRoomPhotoAlbumOperateView0"="Отправить на публичный экран";
|
"PIRoomPhotoAlbumOperateView0"="Отпр. на публичный экран";
|
||||||
"PIRoomPhotoAlbumOperateView1"="Удалить фотографию";
|
"PIRoomPhotoAlbumOperateView1"="Удалить фотографию";
|
||||||
"PIRoomPhotoAlbumOperateView2"="Просмотреть крупное изображение";
|
"PIRoomPhotoAlbumOperateView2"="Просмотреть крупное изображение";
|
||||||
///XPMaskManagerVC
|
///XPMaskManagerVC
|
||||||
@@ -3550,7 +3550,7 @@
|
|||||||
"App_Commont_Week" = "Неделя";
|
"App_Commont_Week" = "Неделя";
|
||||||
"App_Commont_Month" = "Месяц";
|
"App_Commont_Month" = "Месяц";
|
||||||
"App_Commont_Hour" = "Час";
|
"App_Commont_Hour" = "Час";
|
||||||
"App_Commont_Minute" = "Минута";
|
"App_Commont_Minute" = "мин.";
|
||||||
"App_Commont_Day" = "День";
|
"App_Commont_Day" = "День";
|
||||||
"App_Common_To" = "В";
|
"App_Common_To" = "В";
|
||||||
"App_Common_Number" = "Номер";
|
"App_Common_Number" = "Номер";
|
||||||
@@ -3674,10 +3674,10 @@
|
|||||||
"VipCenter_6" = "Истекает: %@";
|
"VipCenter_6" = "Истекает: %@";
|
||||||
"VipCenter_7" = "VIP%ld доступен только по акции";
|
"VipCenter_7" = "VIP%ld доступен только по акции";
|
||||||
|
|
||||||
"Combo_0" = "Отправить";
|
"Combo_0" = "Отпр.";
|
||||||
"Combo_1" = "Все микрофоны";
|
"Combo_1" = "Все микрофоны";
|
||||||
"Combo_2" = "Многопользовательский";
|
"Combo_2" = "Многопользовательский";
|
||||||
"Combo_3" = "Отправить %@";
|
"Combo_3" = "Отпр. %@";
|
||||||
"Combo_4" = "Выиграть";
|
"Combo_4" = "Выиграть";
|
||||||
"Combo_5" = "Монеты";
|
"Combo_5" = "Монеты";
|
||||||
"Combo_6" = "Поздравляем!";
|
"Combo_6" = "Поздравляем!";
|
||||||
@@ -3757,7 +3757,7 @@
|
|||||||
"1.0.18_12" = "Вы уверены, что хотите использовать это изображение в качестве вашего фона?";
|
"1.0.18_12" = "Вы уверены, что хотите использовать это изображение в качестве вашего фона?";
|
||||||
"1.0.18_13" = "Вы уверены, что хотите купить?";
|
"1.0.18_13" = "Вы уверены, что хотите купить?";
|
||||||
"1.0.18_14" = "1000/15Дней";
|
"1.0.18_14" = "1000/15Дней";
|
||||||
"1.0.18_15" = "Отправить";
|
"1.0.18_15" = "Отпр.";
|
||||||
"1.0.18_16" = "Подтвердить";
|
"1.0.18_16" = "Подтвердить";
|
||||||
"1.0.18_17" = "Оригинальный";
|
"1.0.18_17" = "Оригинальный";
|
||||||
"1.0.18_18" = "На рассмотрении";
|
"1.0.18_18" = "На рассмотрении";
|
||||||
@@ -3854,18 +3854,18 @@
|
|||||||
"1.0.37_text_3" = "Выбрать подарок";
|
"1.0.37_text_3" = "Выбрать подарок";
|
||||||
"1.0.37_text_4" = "Числа удачного мешка";
|
"1.0.37_text_4" = "Числа удачного мешка";
|
||||||
"1.0.37_text_5" = "Время ожидания";
|
"1.0.37_text_5" = "Время ожидания";
|
||||||
"1.0.37_text_6" = "Отправить подарочный удачный мешок";
|
"1.0.37_text_6" = "Отпр. подарочный удачный мешок";
|
||||||
"1.0.37_text_7" = "%@Мин";
|
"1.0.37_text_7" = "%@Мин";
|
||||||
"1.0.37_text_8" = "Числа удачного мешка";
|
"1.0.37_text_8" = "Числа удачного мешка";
|
||||||
"1.0.37_text_9" = "Всего потрачено %@ монет";
|
"1.0.37_text_9" = "Всего потрачено %@ монет";
|
||||||
"1.0.37_text_10" = "Подарок";
|
"1.0.37_text_10" = "Подарок";
|
||||||
"1.0.37_text_11" = "Отправить %@ подарков, потратить %@ монет";
|
"1.0.37_text_11" = "Отпр. %@ подарков, потратить %@ монет";
|
||||||
"1.0.37_text_12" = "Изменить ";
|
"1.0.37_text_12" = "Изменить ";
|
||||||
"1.0.37_text_13" = "Время ожидания %@ минут";
|
"1.0.37_text_13" = "Время ожидания %@ минут";
|
||||||
"1.0.37_text_14" = "Полученный удачный мешок";
|
"1.0.37_text_14" = "Полученный удачный мешок";
|
||||||
"1.0.37_text_15" = "Отправленный удачный мешок";
|
"1.0.37_text_15" = "Отправленный удачный мешок";
|
||||||
"1.0.37_text_15.1" = "Отправить подарочный удачный мешок";
|
"1.0.37_text_15.1" = "Отпр. подарочный удачный мешок";
|
||||||
"1.0.37_text_15.2" = "Отправить мешок удачи с монетами";
|
"1.0.37_text_15.2" = "Отпр. мешок удачи с монетами";
|
||||||
"1.0.37_text_17.1" = "Подарочный удачный мешок %@!";
|
"1.0.37_text_17.1" = "Подарочный удачный мешок %@!";
|
||||||
"1.0.37_text_17.2" = "Мешок удачи с монетами %@!";
|
"1.0.37_text_17.2" = "Мешок удачи с монетами %@!";
|
||||||
"1.0.37_text_18" = "Скоро";
|
"1.0.37_text_18" = "Скоро";
|
||||||
@@ -4019,7 +4019,7 @@
|
|||||||
"20.20.62_text_5" = "Пользователь ушел, приглашение не удалось.";
|
"20.20.62_text_5" = "Пользователь ушел, приглашение не удалось.";
|
||||||
"20.20.62_text_6" = "Микрофон занят. Пожалуйста, попробуйте позже.";
|
"20.20.62_text_6" = "Микрофон занят. Пожалуйста, попробуйте позже.";
|
||||||
"20.20.62_text_7" = "У вас нет разрешения приглашать пользователя на микрофон.";
|
"20.20.62_text_7" = "У вас нет разрешения приглашать пользователя на микрофон.";
|
||||||
"20.20.62_text_8" = "Не удалось отправить приглашение. Пожалуйста, проверьте сеть.";
|
"20.20.62_text_8" = "Не удалось Отпр. приглашение. Пожалуйста, проверьте сеть.";
|
||||||
|
|
||||||
|
|
||||||
"20.20.62_text_9" = "Включение/выключение эффектов";
|
"20.20.62_text_9" = "Включение/выключение эффектов";
|
||||||
|
Reference in New Issue
Block a user